diff --git a/Buildings/Air/Systems/SingleZone/VAV/Examples/Guideline36.mo b/Buildings/Air/Systems/SingleZone/VAV/Examples/Guideline36.mo index 53411df621c..43a0722876f 100644 --- a/Buildings/Air/Systems/SingleZone/VAV/Examples/Guideline36.mo +++ b/Buildings/Air/Systems/SingleZone/VAV/Examples/Guideline36.mo @@ -11,7 +11,6 @@ model Guideline36 Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Controller con( eneStd=Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1, venStd=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1, - final VAreBreZon_flow=0.0144, final VPopBreZon_flow=0.0075, ecoHigLimCon=Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb, 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 4ee76a191d5..9301a748473 100644 --- a/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/BaseClasses/ZoneWithAHUG36.mo +++ b/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/BaseClasses/ZoneWithAHUG36.mo @@ -48,7 +48,6 @@ block ZoneWithAHUG36 Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Controller con( eneStd=Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1, venStd=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1, - VAreBreZon_flow=0.4989, VPopBreZon_flow=0.2075, ecoHigLimCon=Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb, @@ -229,12 +228,12 @@ equation preserveAspectRatio=false, extent={{-160,-160},{160,160}})), Documentation(info="

-This base class contains a controller based on Guideline36 +This base class contains a controller based on Guideline36 Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Controller, a single-zone VAV system -Buildings.Air.Systems.SingleZone.VAV.ChillerDXHeatingEconomizer, +Buildings.Air.Systems.SingleZone.VAV.ChillerDXHeatingEconomizer, and a single-zone floor building Buildings.ThermalZones.Detailed.Validation.BaseClasses.SingleZoneFloor. diff --git a/Buildings/Applications/DataCenters/ChillerCooled/Examples/BaseClasses/PartialDataCenter.mo b/Buildings/Applications/DataCenters/ChillerCooled/Examples/BaseClasses/PartialDataCenter.mo index a40a96bec26..a06f2cd1fed 100644 --- a/Buildings/Applications/DataCenters/ChillerCooled/Examples/BaseClasses/PartialDataCenter.mo +++ b/Buildings/Applications/DataCenters/ChillerCooled/Examples/BaseClasses/PartialDataCenter.mo @@ -171,18 +171,15 @@ partial model PartialDataCenter annotation (Placement(transformation(extent={{10,-10},{-10,10}}, rotation=90, origin={-50,-150}))); - Buildings.Examples.ChillerPlant.BaseClasses.SimplifiedRoom roo( + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.SimplifiedRoom roo( redeclare replaceable package Medium = MediumA, rooLen=50, rooWid=30, rooHei=3, m_flow_nominal=mAir_flow_nominal, QRoo_flow=500000, - nPorts=2) - "Room model" - annotation (Placement(transformation( - extent={{10,-10},{-10,10}}, - origin={4,-180}))); + nPorts=2) "Room model" annotation (Placement(transformation(extent={{10,-10}, + {-10,10}}, origin={4,-180}))); Buildings.Fluid.Actuators.Valves.TwoWayLinear val[numChi]( redeclare each package Medium = MediumW, each m_flow_nominal=m1_flow_chi_nominal, diff --git a/Buildings/Applications/DataCenters/DXCooled/Examples/DXCooledAirsideEconomizer.mo b/Buildings/Applications/DataCenters/DXCooled/Examples/DXCooledAirsideEconomizer.mo index f08fad4918e..1708fd2a64d 100644 --- a/Buildings/Applications/DataCenters/DXCooled/Examples/DXCooledAirsideEconomizer.mo +++ b/Buildings/Applications/DataCenters/DXCooled/Examples/DXCooledAirsideEconomizer.mo @@ -39,7 +39,7 @@ model DXCooledAirsideEconomizer parameter Real minSpeFan = 0.2 "Minimum fan speed ratio required by variable speed fans"; - Buildings.Examples.ChillerPlant.BaseClasses.SimplifiedRoom roo( + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.SimplifiedRoom roo( redeclare package Medium = Medium, rooLen=50, rooHei=3, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Controller.mo index 4e76e161a66..59f758489f6 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Controller.mo @@ -698,21 +698,21 @@ outdoor air requirements. Different sequence will be enabled depending on the designes minimum outdoor air and economizer function, which include

  1. -separate minimum outdoor air damper, with airflow measurement. +separate minimum outdoor air damper, with airflow measurement. See Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Economizers.Subsequences.Limits.SeparateWithAFMS for a description.
  2. -separate minimum outdoor air damper, with differential pressure measurement. +separate minimum outdoor air damper, with differential pressure measurement. See Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Economizers.Subsequences.Limits.SeparateWithDP for a description.
  3. -single common minimum outdoor air and economizer damper. +single common minimum outdoor air and economizer damper. See Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Economizers.Subsequences.Limits.Common @@ -738,14 +738,14 @@ that were computed in the above blocks. Different sequence will be enabled depen on the types of building pressure control system, which include
    1. -relief damper or relief fan control. +relief damper or relief fan control. See Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Economizers.Subsequences.Modulations.Reliefs for a description.
    2. -return fan control with airflow tracking, or with direct building pressure control. +return fan control with airflow tracking, or with direct building pressure control. See Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Economizers.Subsequences.Modulations.ReturnFan 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 abd5795f0f0..d72b74445ee 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 @@ -383,7 +383,7 @@ annotation ( Documentation(info="

      This sequence outputs the system reset requests for multiple zone air handling unit. The -implementation is according to the Section 5.16.16 of ASHRAE Guideline 36, May 2020. +implementation is according to the Section 5.16.16 of ASHRAE Guideline 36, May 2020.

      Chilled water reset request yChiWatResReq

        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 849271ea396..4a0ecf167b6 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Controller.mo @@ -1264,8 +1264,7 @@ equation annotation (Dialog(enable=have_frePro), defaultComponentName="conVAV", Icon(coordinateSystem(preserveAspectRatio=false, extent={{-200,-400},{200,400}}), - graphics={ - Rectangle( + graphics={Rectangle( extent={{-200,-400},{200,400}}, lineColor={0,0,127}, fillColor={255,255,255}, 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 3e34e531573..0dde82a7654 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 @@ -380,7 +380,7 @@ annotation ( Documentation(info="

        This sequence outputs the system reset requests for single zone air handling unit. The -implementation is according to the Section 5.18.15 of ASHRAE Guideline 36, May 2020. +implementation is according to the Section 5.18.15 of ASHRAE Guideline 36, May 2020.

        chilled water reset request yChiWatResReq

          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 f46e55cb116..d26815a3a85 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 @@ -4,7 +4,6 @@ model Controller "Validation of the top-level controller" final eneStd=Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1, final venStd=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1, - final ecoHigLimCon=Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb, final ashCliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_1A, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/Generic/TrimAndRespond.mo b/Buildings/Controls/OBC/ASHRAE/G36/Generic/TrimAndRespond.mo index 028439a4fb4..c78c667afdb 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/Generic/TrimAndRespond.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/Generic/TrimAndRespond.mo @@ -392,7 +392,7 @@ on request number"), textString="Optional hold of the loop output")}), Documentation(info="

          -This block implements the trim and respond logic according to Section 5.1.14.3 +This block implements the trim and respond logic according to Section 5.1.14.3 and 5.1.14.4 of ASHRAE Guideline 36, May 2020.

          @@ -441,25 +441,25 @@ In other words, every time step samplePeriod:

          Optionally, if the parameter have_hol is set to true, an additional input signal uHol allows for holding the trim and respond loop output -at a fixed value for the longer of the time the input uHol remains true +at a fixed value for the longer of the time the input uHol remains true and the duration specified by the parameter dtHol. When uHol switches back to false, the hold is released and resetting continues from the previously held value (without reinitializing to iniSet -or going through a delay time of delTim). +or going through a delay time of delTim).

          This is typically used in control sequences to freeze the reset logic during the plant staging process. Consider for example the following specification:
          \"When a plant stage change is initiated, the reset logic shall be disabled and value -fixed at its last value for the longer of 15 minutes and the time it takes +fixed at its last value for the longer of 15 minutes and the time it takes for the plant to successfully stage.\"
          -Using this block with have_hol=true and dtHol=15*60 +Using this block with have_hol=true and dtHol=15*60 yields the following sequence of events.

          • 0:00 - Stage change is initiated. T&R loop output is at 50 %.
          • -
          • 0:12 - Stage change is completed. T&R loop output remains at 50 % +
          • 0:12 - Stage change is completed. T&R loop output remains at 50 % since < 15 minutes have elapsed.
          • 0:15 - T&R is released and continues resetting from 50 %.
          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 5215c198bc9..c77c92da34a 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Dampers.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Dampers.mo @@ -447,7 +447,7 @@ implementation is according to Section 5.5.5 and 5.5.7 of ASHRAE Guideline 36 (G

          1. -When the zone state (uZonSta) is cooling, the cooling-loop output +When the zone state (uZonSta) is cooling, the cooling-loop output (uCoo) shall be mapped to the active airflow setpoint from the minimum (VActMin_flow) to the cooling maximum airflow setpoints (VActCooMax_flow). 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 bbb5919a9a5..be1afd7f12e 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/SystemRequests.mo @@ -615,7 +615,7 @@ annotation (

            This sequence outputs the system reset requests for parallel fan-powered terminal unit with constant-voume fan. The implementation is according to the Section 5.7.8 -of ASHRAE Guideline 36, May 2020. +of ASHRAE Guideline 36, May 2020.

            Cooling SAT reset requests yZonTemResReq

              diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Controller.mo index d5ce40a5312..34224cdecb2 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Controller.mo @@ -998,16 +998,16 @@ airflow sensor calibration alarm yFloSenAla and the terminal fan st

              The subsequence is implementd according to Section 5.3.4. The measured zone temperature TZon, zone setpoints temperatures THeaSet and -TCooSet are inputs to the instance of class +TCooSet are inputs to the instance of class Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ZoneStates to generate the -heating and cooling control loop signal. +heating and cooling control loop signal.

              b. Active airflow setpoint calculation

              This sequence sets the active cooling maximum and minimum airflow according to Section 5.8.4. Depending on operation modes uOpeMod, it sets the -airflow rate limits. +airflow rate limits. See Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences.ActiveAirFlow.

              @@ -1029,7 +1029,7 @@ According to Section 5.8.8, this sequence outputs the system reset requests, i.e cooling supply air temperature reset requests yZonTemResReq, static pressure reset requests yZonPreResReq, hot water reset requests yHeaValResReq, and the hot water plant reset requests -yHotWatPlaReq. +yHotWatPlaReq. See Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences.SystemRequests.

              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 25e5c006016..7df004da2bf 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/DamperValves.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/DamperValves.mo @@ -958,7 +958,7 @@ Fan control
            1. When the zone stats is cooling (uCoo > 0), in occupied mode only, the parallel fan starts when primary airflow (VPri_flow) drops below the -the minimum outdoor airflow setpoint VOAMin_flow +the minimum outdoor airflow setpoint VOAMin_flow (if using California Title 24, it should be the zone absolute minimum outdoor airflow rate) minus half of the minium fan rate minRat and shuts off when primary airflow rises above the @@ -967,7 +967,7 @@ set point is equal to the minimum outdoor airflow rate minus the current primary airflow set point VPri_flow_Set.
            2. -When the zone state is Deadband (uCoo=0 and uHea=0), +When the zone state is Deadband (uCoo=0 and uHea=0), the parallel fan starts when primary airflow (VPri_flow) is below the minimum outdoor airflow VOAMin_flow (or if using California Title 24, the zone absolute minimum outdoor airflow rate). The fan flow rate setpoint 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 ebccfc61eb5..5abc184edd7 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/SystemRequests.mo @@ -604,7 +604,7 @@ annotation (

              This sequence outputs the system reset requests for parallel fan-powered terminal unit with variable-voume fan. The implementation is according to the Section 5.8.8 -of ASHRAE Guideline 36, May 2020. +of ASHRAE Guideline 36, May 2020.

              Cooling SAT reset requests yZonTemResReq

                diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Controller.mo index 7345b37899a..081d1a826f9 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Controller.mo @@ -883,16 +883,16 @@ airflow sensor calibration alarm yFloSenAla.

                The subsequence is implementd according to Section 5.3.4. The measured zone temperature TZon, zone setpoints temperatures THeaSet and -TCooSet are inputs to the instance of class +TCooSet are inputs to the instance of class Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ZoneStates to generate the -heating and cooling control loop signal. +heating and cooling control loop signal.

                b. Active airflow setpoint calculation

                This sequence sets the active maximum and minimum airflow according to Section 5.6.4. Depending on operation modes uOpeMod, it sets the -airflow rate limits for cooling and heating supply. +airflow rate limits for cooling and heating supply. See Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.Reheat.Subsequences.ActiveAirFlow.

                @@ -913,7 +913,7 @@ According to Section 5.6.8, this sequence outputs the system reset requests, i.e cooling supply air temperature reset requests yZonTemResReq, static pressure reset requests yZonPreResReq, hot water reset requests yHeaValResReq, and the hot water plant reset requests -yHotWatPlaReq. +yHotWatPlaReq. See Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.Reheat.Subsequences.SystemRequests.

                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 e31d4e1257a..272e03600cf 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/SystemRequests.mo @@ -605,7 +605,7 @@ annotation ( Documentation(info="

                This sequence outputs the system reset requests for terminal unit with reheat. The -implementation is according to the Section 5.6.8 of ASHRAE Guideline 36, May 2020. +implementation is according to the Section 5.6.8 of ASHRAE Guideline 36, May 2020.

                Cooling SAT reset requests yZonTemResReq

                  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 d01e1b0090a..2b23aa0d787 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/SystemRequests.mo @@ -582,7 +582,7 @@ annotation (

                  This sequence outputs the system reset requests for series fan-powered terminal unit with constant-voume fan. The implementation is according to the Section 5.9.8 -of ASHRAE Guideline 36, May 2020. +of ASHRAE Guideline 36, May 2020.

                  Cooling SAT reset requests yZonTemResReq

                    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 e28e4e5ba17..774f9104739 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/SystemRequests.mo @@ -603,7 +603,7 @@ annotation (

                    This sequence outputs the system reset requests for series fan-powered terminal unit with variable-voume fan. The implementation is according to the Section 5.10.8 -of ASHRAE Guideline 36, May 2020. +of ASHRAE Guideline 36, May 2020.

                    Cooling SAT reset requests yZonTemResReq

                      diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/GroupStatus.mo b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/GroupStatus.mo index 369e216cc49..c261e5a1ee0 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/GroupStatus.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/GroupStatus.mo @@ -704,7 +704,7 @@ heating setpoint, u1EndSetBac: if the zone could end the setback mode,
                    1. -u1HigUnoCoo: if the zone temperature is higher than its unoccupied +u1HigUnoCoo: if the zone temperature is higher than its unoccupied cooling setpoint,
                    2. diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/OperationMode.mo b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/OperationMode.mo index 96af1286bc6..2517aefbe4b 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/OperationMode.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/OperationMode.mo @@ -846,7 +846,7 @@ Warm-up mode shall start based on the zone with the longest calculated warm-up time maxWarUpTim requirement, but no earlier than 3 hours (preWarCooTim) before the start of the scheduled occupied period, and shall end at the scheduled occupied start time. Zones where the window switch -indicates that a window is open shall be ignored. Note that for each zone, +indicates that a window is open shall be ignored. Note that for each zone, the optimal warm-up time shall be obtained from an Optimal Start sequences, computed in a separate block. The figure below shows the sequence.

                      diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Controller.mo new file mode 100644 index 00000000000..30d49ef5e8d --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Controller.mo @@ -0,0 +1,2717 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant; +block Controller "Chiller plant controller" + + parameter Boolean closeCoupledPlant=false + "True: the plant is close coupled, i.e. the pipe length from the chillers to cooling towers does not exceed approximately 100 feet" + annotation (Dialog(tab="General")); + + // ---- General: Chiller configuration ---- + + parameter Integer nChi=2 + "Total number of chillers" + annotation(Dialog(tab="General", group="Chillers configuration")); + + parameter Boolean have_parChi=true + "Flag: true means that the plant has parallel chillers" + annotation(Dialog(tab="General", group="Chillers configuration")); + + parameter Boolean have_ponyChiller=false + "True: have pony chiller" + annotation (Dialog(tab="General", group="Chillers configuration")); + + parameter Boolean need_reduceChillerDemand=false + "True: need limit chiller demand when chiller staging" + annotation (Dialog(tab="General", group="Chillers configuration")); + + parameter Real desCap(unit="W")=1e6 + "Plant design capacity" + annotation (Dialog(tab="General", group="Chillers configuration")); + + parameter Integer chiTyp[nChi]={ + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.variableSpeedCentrifugal} + "Chiller type" + annotation (Dialog(tab="General", group="Chillers configuration")); + + parameter Real chiDesCap[nChi](unit=fill("W", nChi)) + "Design chiller capacities vector" + annotation (Dialog(tab="General", group="Chillers configuration")); + + parameter Real chiMinCap[nChi](unit=fill("W", nChi)) + "Chiller minimum cycling loads vector" + annotation (Dialog(tab="General", group="Chillers configuration")); + + parameter Real TChiWatSupMin[nChi]( + unit=fill("K", nChi), + displayUnit=fill("degC",nChi))={278.15,278.15} + "Minimum chilled water supply temperature" + annotation (Dialog(tab="General", group="Chillers configuration")); + + parameter Real minChiLif( + unit="K", + displayUnit="K")=10 + "Minimum allowable lift at minimum load for chiller" + annotation(Dialog(tab="General", group="Chillers configuration", enable=not have_heaPreConSig)); + + parameter Boolean have_heaPreConSig=false + "True: if there is head pressure control signal from chiller controller" + annotation(Dialog(tab="General", group="Chillers configuration")); + + parameter Boolean anyVsdCen = false + "True: the plant contains at least one variable speed centrifugal chiller" + annotation (Dialog(tab="General", group="Chillers configuration")); + + // ---- General: Waterside economizer ---- + + parameter Boolean have_WSE=false + "True if the plant has waterside economizer. When the plant has waterside economizer, the condenser water pump speed must be variable" + annotation (Dialog(tab="General", group="Waterside economizer")); + + parameter Real heaExcAppDes( + unit="K", + displayUnit="K")=2 + "Design heat exchanger approach" + annotation(Evaluate=true, Dialog(tab="General", group="Waterside economizer", enable=have_WSE)); + + parameter Boolean have_byPasValCon=false + "True: chilled water flow through economizer is controlled using heat exchanger bypass valve" + annotation (Dialog(group="Waterside economizer", enable=have_WSE)); + + // ----- General: Chilled water pump --- + + parameter Integer nChiWatPum = 2 + "Total number of chilled water pumps" + annotation (Dialog(tab="General", group="Chilled water pump")); + + parameter Boolean have_heaChiWatPum=true + "Flag of headered chilled water pumps design: true=headered, false=dedicated" + annotation (Dialog(tab="General", group="Chilled water pump")); + + parameter Boolean have_locSenChiWatPum=false + "True: there is local differential pressure sensor hardwired to the plant controller" + annotation (Dialog(tab="General", group="Chilled water pump")); + + parameter Integer nSenChiWatPum=2 + "Total number of remote differential pressure sensors" + annotation (Dialog(tab="General", group="Chilled water pump")); + + // ---- General: Condenser water pump ---- + + parameter Integer nConWatPum=2 + "Total number of condenser water pumps" + annotation (Dialog(tab="General", group="Condenser water pump")); + + parameter Boolean have_fixSpeConWatPum = false + "True: the plant has fixed speed condenser water pumps. When the plant has waterside economizer, it must be false" + annotation(Dialog(tab="General", group="Condenser water pump", enable=not have_WSE)); + + parameter Real fixConWatPumSpe = 0.9 + "Fixed speed of the constant speed condenser water pump" + annotation(Dialog(tab="General", group="Condenser water pump", enable=not have_WSE and have_fixSpeConWatPum)); + + parameter Boolean have_heaConWatPum=true + "True: headered condenser water pumps" + annotation (Dialog(tab="General", group="Condenser water pump")); + + // ---- General: Chiller staging settings ---- + + parameter Integer nSta = 2 + "Number of chiller stages, neither zero stage nor the stages with enabled waterside economizer is included" + annotation (Dialog(tab="General", group="Staging configuration")); + + parameter Integer totSta=6 + "Total number of plant stages, including stage zero and the stages with a WSE, if applicable" + annotation (Dialog(tab="General", group="Staging configuration")); + + parameter Integer staMat[nSta, nChi] = {{1,0},{1,1}} + "Staging matrix with chiller stage as row index and chiller as column index" + annotation (Dialog(tab="General", group="Staging configuration")); + + parameter Real desChiNum[nSta+1]={0,1,2} + "Design number of chiller that should be ON at each chiller stage, including the zero stage" + annotation (Dialog(tab="General", group="Staging configuration", enable=have_fixSpeConWatPum)); + + parameter Real staVec[totSta]={0,0.5,1,1.5,2,2.5} + "Plant stage vector, element value like x.5 means chiller stage x plus WSE" + annotation (Dialog(tab="General", group="Staging configuration")); + + parameter Real desConWatPumSpe[totSta]( + max=fill(1, totSta), + min=fill(0, totSta))={0,0.5,0.75,0.6,0.75,0.9} + "Design condenser water pump speed setpoints, according to current chiller stage and WSE status" + annotation (Dialog(tab="General", group="Staging configuration")); + + parameter Real desConWatPumNum[totSta]={0,1,1,2,2,2} + "Design number of condenser water pumps that should be ON, according to current chiller stage and WSE status" + annotation (Dialog(tab="General", group="Staging configuration")); + + parameter Real towCelOnSet[totSta]={0,2,2,4,4,4} + "Design number of tower fan cells that should be ON, according to current chiller stage and WSE status" + annotation(Dialog(tab="General", group="Staging configuration")); + + // ---- General: Cooling tower ---- + + parameter Integer nTowCel=4 + "Total number of cooling tower cells" + annotation (Dialog(tab="General", group="Cooling tower")); + + parameter Real cooTowAppDes( + unit="K", + displayUnit="K")=2 + "Design cooling tower approach" + annotation(Evaluate=true, Dialog(tab="General", group="Cooling tower")); + + // ---- Plant enable ---- + + parameter Real schTab[4,2] = [0,1; 6*3600,1; 19*3600,1; 24*3600,1] + "Plant enabling schedule allowing operators to lock out the plant during off-hour" + annotation(Dialog(tab="Plant enable")); + + parameter Real TChiLocOut( + unit="K", + displayUnit="degC")=277.5 + "Outdoor air lockout temperature below which the chiller plant should be disabled" + annotation(Dialog(tab="Plant enable")); + + parameter Real plaThrTim(unit="s")=900 + "Threshold time to check status of chiller plant" + annotation(Dialog(tab="Plant enable")); + + parameter Real reqThrTim(unit="s")=180 + "Threshold time to check current chiller plant request" + annotation(Dialog(tab="Plant enable")); + + parameter Integer ignReq = 0 + "Ignorable chiller plant requests" + annotation(Dialog(tab="Plant enable")); + + parameter Real iniPumDel(unit="s")=5 + "Time to delay pump operation when the plant is just initiated" + annotation(Dialog(tab="Plant enable")); + + // ---- Waterside economizer ---- + + parameter Real holdPeriod(unit="s")=1200 + "WSE minimum on or off time" + annotation(Evaluate=true, Dialog(tab="Waterside economizer", group="Enable parameters", enable=have_WSE)); + + parameter Real delDis(unit="s")=120 + "Delay disable time period" + annotation(Evaluate=true, Dialog(tab="Waterside economizer", group="Enable parameters", enable=have_WSE)); + + parameter Real TOffsetEna(unit="K")=2 + "Temperature offset between the chilled water return upstream of WSE and the predicted WSE output" + annotation(Evaluate=true, Dialog(tab="Waterside economizer", group="Enable parameters", enable=have_WSE)); + + parameter Real TOffsetDis(unit="K")=1 + "Temperature offset between the chilled water return upstream and downstream WSE" + annotation(Evaluate=true, Dialog(tab="Waterside economizer", group="Enable parameters", enable=have_WSE)); + + parameter Real TOutWetDes( + unit="K", + displayUnit="degC")=288.15 + "Design outdoor air wet bulb temperature" + annotation(Evaluate=true, Dialog(tab="Waterside economizer", group="Design parameters", enable=have_WSE)); + + parameter Real VHeaExcDes_flow(unit="m3/s")=0.015 + "Desing heat exchanger chilled water volume flow rate" + annotation(Evaluate=true, Dialog(tab="Waterside economizer", group="Design parameters", enable=have_WSE)); + + parameter Real step=0.02 "Tuning step" + annotation(Evaluate=true, Dialog(tab="Waterside economizer", group="Tuning", enable=have_WSE)); + + parameter Real wseOnTimDec(unit="s")=3600 + "Economizer enable time needed to allow decrease of the tuning parameter" + annotation(Evaluate=true, Dialog(tab="Waterside economizer", group="Tuning", enable=have_WSE)); + + parameter Real wseOnTimInc(unit="s")=1800 + "Economizer enable time needed to allow increase of the tuning parameter" + annotation(Evaluate=true, Dialog(tab="Waterside economizer", group="Tuning", enable=have_WSE)); + + parameter Real dpDes=6000 + "Design pressure difference across the chilled water side economizer" + annotation (Dialog(tab="Waterside economizer", group="Valve or pump control", + enable=have_WSE and have_byPasValCon)); + + parameter Buildings.Controls.OBC.CDL.Types.SimpleController ecoValCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(tab="Waterside economizer",group="Valve or pump control", + enable=have_WSE and have_byPasValCon)); + + parameter Real kEcoVal=0.1 "Gain of controller" + annotation (Dialog(tab="Waterside economizer",group="Valve or pump control", + enable=have_WSE and have_byPasValCon)); + + parameter Real TiEcoVal=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="Waterside economizer", group="Valve or pump control", + enable=have_WSE and have_byPasValCon + and (ecoValCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PI + or ecoValCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + + parameter Real TdEcoVal=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Waterside economizer",group="Valve or pump control", + enable=have_WSE and have_byPasValCon + and (ecoValCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PD + or ecoValCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + + parameter Real minEcoSpe=0.1 + "Minimum economizer chilled water pump speed" + annotation (Dialog(tab="Waterside economizer",group="Valve or pump control", + enable=have_WSE and not have_byPasValCon)); + + parameter Real desEcoSpe=0.9 + "Design economizer pump speed" + annotation (Dialog(tab="Waterside economizer",group="Valve or pump control", + enable=have_WSE and not have_byPasValCon)); + + // ---- Head pressure ---- + + parameter Real minConWatPumSpe(unit="1")=0.1 + "Minimum condenser water pump speed" + annotation(Dialog(enable= not ((not have_WSE) and have_fixSpeConWatPum), tab="Head pressure", group="Limits")); + + parameter Real minHeaPreValPos(unit="1")=0.1 + "Minimum head pressure control valve position" + annotation(Dialog(enable= (not ((not have_WSE) and (not have_fixSpeConWatPum))), tab="Head pressure", group="Limits")); + + parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeHeaPre= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation(Dialog(tab="Head pressure", group="Loop signal", enable=not have_heaPreConSig)); + + parameter Real kHeaPreCon=0.1 + "Gain of controller" + annotation(Dialog(tab="Head pressure", group="Loop signal", enable=not have_heaPreConSig)); + + parameter Real TiHeaPreCon(unit="s")=10 + "Time constant of integrator block" + annotation(Dialog(tab="Head pressure", group="Loop signal", enable=not have_heaPreConSig)); + + // ---- Minimum flow bypass ---- + + parameter Real byPasSetTim(unit="s")=300 + "Time constant for resetting minimum bypass flow" + annotation(Dialog(tab="Minimum flow bypass", group="Time parameters")); + + parameter Real minFloSet[nChi](unit=fill("m3/s", nChi))={0.0089,0.0089} + "Minimum chilled water flow through each chiller" + annotation(Dialog(tab="Minimum flow bypass", group="Flow limits")); + + parameter Real maxFloSet[nChi](unit=fill("m3/s", nChi))={0.025,0.025} + "Maximum chilled water flow through each chiller" + annotation(Dialog(tab="Minimum flow bypass", group="Flow limits")); + + parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeMinFloByp= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(tab="Minimum flow bypass", group="Controller")); + + parameter Real kMinFloBypCon=0.1 + "Gain of controller" + annotation (Dialog(tab="Minimum flow bypass", group="Controller")); + + parameter Real TiMinFloBypCon(unit="s")=10 + "Time constant of integrator block" + annotation (Dialog(tab="Minimum flow bypass", + group="Controller", enable=controllerTypeMinFloByp==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + controllerTypeMinFloByp==Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + + parameter Real TdMinFloBypCon(unit="s")=0 + "Time constant of derivative block" + annotation (Dialog(tab="Minimum flow bypass", + group="Controller", enable=controllerTypeMinFloByp==Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + controllerTypeMinFloByp==Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + + parameter Real yMaxFloBypCon(unit="1")=1 + "Upper limit of output" + annotation (Dialog(tab="Minimum flow bypass", group="Controller")); + + parameter Real yMinFloBypCon(unit="1")=0.1 + "Lower limit of output" + annotation (Dialog(tab="Minimum flow bypass", group="Controller")); + + // ---- Chilled water pumps ---- + + parameter Real minChiWatPumSpe(unit="1")=0.1 + "Minimum pump speed" + annotation (Dialog(tab="Chilled water pumps", group="Speed controller")); + + parameter Real maxChiWatPumSpe(unit="1")=1 + "Maximum pump speed" + annotation (Dialog(tab="Chilled water pumps", group="Speed controller")); + + parameter Integer nPum_nominal( + max=nChiWatPum, + min=1)=nChiWatPum + "Total number of pumps that operate at design conditions" + annotation (Dialog(tab="Chilled water pumps", group="Nominal conditions")); + + parameter Real VChiWat_flow_nominal(unit="m3/s")=0.5 + "Total plant design chilled water flow rate" + annotation (Dialog(tab="Chilled water pumps", group="Nominal conditions")); + + parameter Real maxLocDp(unit="Pa")=15*6894.75 + "Maximum chilled water loop local differential pressure setpoint" + annotation (Dialog(tab="Chilled water pumps", group="Pump speed control when there is local DP sensor", enable=have_locSenChiWatPum)); + + parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeChiWatPum= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(tab="Chilled water pumps", group="Speed controller")); + + parameter Real kChiWatPum=0.1 "Gain of controller" + annotation (Dialog(tab="Chilled water pumps", group="Speed controller")); + + parameter Real TiChiWatPum(unit="s")=10 + "Time constant of integrator block" + annotation (Dialog(tab="Chilled water pumps", group="Speed controller")); + + parameter Real TdChiWatPum(unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Chilled water pumps", group="Speed controller", + enable=controllerTypeChiWatPum == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + controllerTypeChiWatPum == Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + + // ---- Plant reset ---- + + parameter Real holTim(unit="s")=900 + "Time to fix plant reset value" + annotation(Dialog(tab="Plant Reset")); + + parameter Real iniSet(unit="1")=0 + "Initial setpoint" + annotation (Dialog(tab="Plant Reset", group="Trim and respond")); + + parameter Real minSet(unit="1")=0 + "Minimum plant reset value" + annotation (Dialog(tab="Plant Reset", group="Trim and respond")); + + parameter Real maxSet(unit="1")=1 + "Maximum plant reset value" + annotation (Dialog(tab="Plant Reset", group="Trim and respond")); + + parameter Real delTim(unit="s")=900 + "Delay time after which trim and respond is activated" + annotation (Dialog(tab="Plant Reset", group="Trim and respond")); + + parameter Real samplePeriod(unit="s")=300 + "Sample period time" + annotation (Dialog(tab="Plant Reset", group="Trim and respond")); + + parameter Integer numIgnReq = 2 + "Number of ignored requests" + annotation (Dialog(tab="Plant Reset", group="Trim and respond")); + + parameter Real triAmo = -0.02 "Trim amount" + annotation (Dialog(tab="Plant Reset", group="Trim and respond")); + + parameter Real resAmo = 0.03 + "Respond amount (must be opposite in to triAmo)" + annotation (Dialog(tab="Plant Reset", group="Trim and respond")); + + parameter Real maxRes = 0.07 + "Maximum response per time interval (same sign as resAmo)" + annotation (Dialog(tab="Plant Reset", group="Trim and respond")); + + parameter Real dpChiWatPumMin( + unit="Pa", + displayUnit="Pa")=34473.8 + "Minimum chilled water pump differential static pressure, default 5 psi" + annotation (Dialog(tab="Plant Reset", group="Chilled water supply")); + + parameter Real dpChiWatPumMax[nSenChiWatPum]( + unit=fill("Pa", nSenChiWatPum), + displayUnit=fill("Pa",nSenChiWatPum)) + "Maximum chilled water pump differential static pressure, the array size equals to the number of remote pressure sensor" + annotation (Dialog(tab="Plant Reset", group="Chilled water supply")); + + parameter Real TChiWatSupMax( + unit="K", + displayUnit="degC")=288.706 + "Maximum chilled water supply temperature, default 60 degF" + annotation (Dialog(tab="Plant Reset", group="Chilled water supply")); + + parameter Real halSet = 0.5 + "Half plant reset value" + annotation (Dialog(tab="Plant Reset", group="Chilled water supply")); + + // ---- Staging setpoints ---- + + parameter Real avePer(unit="s")=300 + "Time period for the capacity requirement rolling average" + annotation (Dialog(tab="Staging", group="Hold and delay")); + + parameter Real delayStaCha(unit="s")=900 + "Hold period for each stage change" + annotation (Dialog(tab="Staging", group="Hold and delay")); + + parameter Real parLoaRatDelay(unit="s")=900 + "Enable delay for operating and staging part load ratio condition" + annotation (Dialog(tab="Staging", group="Hold and delay")); + + parameter Real faiSafTruDelay(unit="s")=900 + "Enable delay for failsafe condition" + annotation (Dialog(tab="Staging", group="Hold and delay")); + + parameter Real effConTruDelay(unit="s")=900 + "Enable delay for efficiency condition" + annotation (Dialog(tab="Staging", group="Hold and delay")); + + parameter Real shortTDelay(unit="s")=600 + "Short enable delay for staging from zero to first available stage up" + annotation(Evaluate=true, Dialog(enable=have_WSE, tab="Staging", group="Hold and delay")); + + parameter Real longTDelay(unit="s")=1200 + "Long enable delay for staging from zero to first available stage up" + annotation(Evaluate=true, Dialog(enable=have_WSE, tab="Staging", group="Hold and delay")); + + parameter Real posDisMult(unit="1")=0.8 + "Positive displacement chiller type staging multiplier" + annotation (Dialog(tab="Staging", group="Staging part load ratio")); + + parameter Real conSpeCenMult(unit="1")=0.9 + "Constant speed centrifugal chiller type staging multiplier" + annotation (Dialog(tab="Staging", group="Staging part load ratio")); + + parameter Real anyOutOfScoMult(unit="1")=0.9 + "Outside of G36 recommended staging order chiller type SPLR multiplier" + annotation(Evaluate=true, __cdl(ValueInReference=False), Dialog(tab="Staging", group="Staging part load ratio")); + + parameter Real varSpeStaMin(unit="1")=0.45 + "Minimum stage up or down part load ratio for variable speed centrifugal stage types" + annotation(Evaluate=true, Dialog(enable=anyVsdCen, tab="Staging", group="Staging part load ratio")); + + parameter Real varSpeStaMax(unit="1")=0.9 + "Maximum stage up or down part load ratio for variable speed centrifugal stage types" + annotation(Evaluate=true, Dialog(enable=anyVsdCen, tab="Staging", group="Staging part load ratio")); + + parameter Real smallTDif(unit="K")=1 + "Offset between the chilled water supply temperature and its setpoint for the long condition" + annotation(Evaluate=true, Dialog(enable=have_WSE, tab="Staging", group="Value comparison")); + + parameter Real largeTDif(unit="K")=2 + "Offset between the chilled water supply temperature and its setpoint for the short condition" + annotation(Evaluate=true, Dialog(enable=have_WSE, tab="Staging", group="Value comparison")); + + parameter Real faiSafTDif(unit="K")=1 + "Offset between the chilled water supply temperature and its setpoint for the failsafe condition" + annotation (Dialog(tab="Staging", group="Value comparison")); + + parameter Real dpDif( + unit="Pa", + displayUnit="Pa")=2*6895 + "Offset between the chilled water pump diferential static pressure and its setpoint" + annotation (Dialog(tab="Staging", group="Value comparison")); + + parameter Real TDif(unit="K")=1 + "Offset between the chilled water supply temperature and its setpoint for staging down to WSE only" + annotation (Dialog(tab="Staging", group="Value comparison")); + + parameter Real faiSafDpDif( + unit="Pa", + displayUnit="Pa")=2*6895 + "Offset between the chilled water differential pressure and its setpoint" + annotation (Dialog(tab="Staging", group="Value comparison")); + + parameter Real effConSigDif( + max=1, + min=0)=0.05 + "Signal hysteresis deadband" + annotation (Dialog(tab="Staging", group="Value comparison")); + + // ---- Staging up and down process ---- + + parameter Real chiDemRedFac(unit="1")=0.75 + "Demand reducing factor of current operating chillers" + annotation (Dialog(tab="Staging", group="Up and down process", enable=need_reduceChillerDemand)); + + parameter Real holChiDemTim(unit="s")=300 + "Maximum time to wait for the actual demand less than percentage of current load" + annotation (Dialog(tab="Staging", group="Up and down process", enable=need_reduceChillerDemand)); + + parameter Real aftByPasSetTim(unit="s")=60 + "Time to allow loop to stabilize after resetting minimum chilled water flow setpoint" + annotation (Dialog(tab="Staging", group="Up and down process")); + + parameter Real waiTim(unit="s")=30 + "Waiting time after enabling next head pressure control" + annotation (Dialog(tab="Staging", group="Up and down process")); + + parameter Real chaChiWatIsoTim(unit="s")=300 + "Time to slowly change isolation valve, should be determined in the field" + annotation (Dialog(tab="Staging", group="Up and down process")); + + parameter Real proOnTim(unit="s")=300 + "Threshold time to check after newly enabled chiller being operated" + annotation (Dialog(tab="Staging", group="Up and down process", enable=have_ponyChiller)); + + parameter Real thrTimEnb(unit="s")=10 + "Threshold time to enable head pressure control after condenser water pump being reset" + annotation (Dialog(tab="Staging", group="Up and down process")); + + // ---- Cooling tower: fan speed ---- + + parameter Real fanSpeMin(unit="1")=0.1 + "Minimum tower fan speed" + annotation (Dialog(tab="Cooling Towers", group="Fan speed")); + + parameter Real fanSpeMax(unit="1")=1 + "Maximum tower fan speed" + annotation (Dialog(tab="Cooling Towers", group="Fan speed")); + + parameter Buildings.Controls.OBC.CDL.Types.SimpleController intOpeCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Controller in the mode when WSE and chillers are enabled" + annotation (Dialog(tab="Cooling Towers", group="Fan speed controller with WSE enabled", + enable=have_WSE)); + + parameter Real kIntOpeTowFan=0.1 "Gain of controller" + annotation (Dialog(tab="Cooling Towers", group="Fan speed controller with WSE enabled", + enable=have_WSE)); + + parameter Real TiIntOpeTowFan(unit="s")=10 + "Time constant of integrator block" + annotation (Dialog(tab="Cooling Towers", group="Fan speed controller with WSE enabled", + enable=have_WSE and (intOpeCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + intOpeCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + + parameter Real TdIntOpeTowFan(unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Cooling Towers", group="Fan speed controller with WSE enabled", + enable=have_WSE and (intOpeCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + intOpeCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + + parameter Buildings.Controls.OBC.CDL.Types.SimpleController chiWatConTowFan= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Controller in the mode when only WSE is enabled" + annotation (Dialog(tab="Cooling Towers", group="Fan speed controller with WSE enabled", enable=have_WSE)); + + parameter Real kWSETowFan=0.1 "Gain of controller" + annotation (Dialog(tab="Cooling Towers", group="Fan speed controller with WSE enabled", enable=have_WSE)); + + parameter Real TiWSETowFan(unit="s")=10 + "Time constant of integrator block" + annotation (Dialog(tab="Cooling Towers", group="Fan speed controller with WSE enabled", + enable=have_WSE and (chiWatConTowFan==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + chiWatConTowFan==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + + parameter Real TdWSETowFan(unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Cooling Towers", group="Fan speed controller with WSE enabled", + enable=have_WSE and (chiWatConTowFan==Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + chiWatConTowFan==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + + // Fan speed control: controlling condenser return water temperature when WSE is not enabled + parameter Real LIFT_min[nChi](unit=fill("K", nChi))={12,12} + "Minimum LIFT of each chiller" + annotation (Evaluate=true, Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control")); + + parameter Real TConWatSup_nominal[nChi]( + unit=fill("K", nChi), + displayUnit=fill("degC",nChi))={293.15,293.15} + "Condenser water supply temperature (condenser entering) of each chiller" + annotation (Evaluate=true, Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control")); + + parameter Real TConWatRet_nominal[nChi]( + unit=fill("K", nChi), + displayUnit=fill("degC",nChi))={303.15,303.15} + "Condenser water return temperature (condenser leaving) of each chiller" + annotation (Evaluate=true, Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control")); + + parameter Buildings.Controls.OBC.CDL.Types.SimpleController couPlaCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of coupled plant controller" + annotation (Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control", + enable=closeCoupledPlant)); + + parameter Real kCouPla=1 "Gain of controller" + annotation (Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control", + enable=closeCoupledPlant)); + + parameter Real TiCouPla(unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control", + enable=closeCoupledPlant and (couPlaCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + couPlaCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + + parameter Real TdCouPla(unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control", + enable=closeCoupledPlant and (couPlaCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + couPlaCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + + parameter Real yCouPlaMax(unit="1")=1 + "Upper limit of output" + annotation (Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control", + enable=closeCoupledPlant)); + + parameter Real yCouPlaMin(unit="1")=0 + "Lower limit of output" + annotation (Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control", + enable=closeCoupledPlant)); + + parameter Real samplePeriodConTDiff(unit="s")=30 + "Period of sampling condenser water supply and return temperature difference" + annotation (Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control", + enable=not closeCoupledPlant)); + + parameter Buildings.Controls.OBC.CDL.Types.SimpleController supWatCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Condenser supply water temperature controller for less coupled plant" + annotation (Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control", + enable=not closeCoupledPlant)); + + parameter Real kSupCon=0.1 "Gain of controller" + annotation (Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control", + enable=not closeCoupledPlant)); + + parameter Real TiSupCon(unit="s")=10 + "Time constant of integrator block" + annotation (Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control", + enable=not closeCoupledPlant and (supWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + supWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + + parameter Real TdSupCon(unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control", + enable=not closeCoupledPlant and (supWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + supWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + + parameter Real ySupConMax=1 "Upper limit of output" + annotation (Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control", + enable=not closeCoupledPlant)); + + parameter Real ySupConMin=0 "Lower limit of output" + annotation (Dialog(tab="Cooling Towers", group="Fan speed: Return temperature control", + enable=not closeCoupledPlant)); + + parameter Real iniPlaTim(unit="s")=600 + "Time to hold return temperature at initial setpoint after plant being enabled" + annotation (Dialog(tab="Cooling Towers", group="Advanced")); + + parameter Real ramTim(unit="s")=180 + "Time to ramp return water temperature from initial value to setpoint" + annotation (Dialog(tab="Cooling Towers", group="Advanced")); + + parameter Real cheMinFanSpe(unit="s")=300 + "Threshold time for checking duration when tower fan equals to the minimum tower fan speed" + annotation (Dialog(tab="Cooling Towers", group="Advanced")); + + parameter Real cheMaxTowSpe(unit="s")=300 + "Threshold time for checking duration when any enabled chiller maximum cooling speed equals to the minimum tower fan speed" + annotation (Dialog(tab="Cooling Towers", group="Advanced")); + + parameter Real cheTowOff(unit="s")=60 + "Threshold time for checking duration when there is no enabled tower fan" + annotation (Dialog(tab="Cooling Towers", group="Advanced")); + + // ---- Cooling tower: staging ---- + parameter Real chaTowCelIsoTim(unit="s")=300 + "Time to slowly change isolation valve" + annotation (Dialog(tab="Cooling Towers", group="Enable isolation valve")); + + // ---- Cooling tower: Water level control ---- + parameter Real watLevMin(unit="1")=0.7 + "Minimum cooling tower water level recommended by manufacturer" + annotation (Dialog(tab="Cooling Towers", group="Makeup water")); + + parameter Real watLevMax(unit="1")=1 + "Maximum cooling tower water level recommended by manufacturer" + annotation (Dialog(tab="Cooling Towers", group="Makeup water")); + + // ---- Advanced ---- + parameter Real locDt(unit="K")=1 + "Offset temperature for lockout chiller" + annotation(Evaluate=true, Dialog(tab="Advanced", group="Plant enable")); + + parameter Real hysDt( + unit="K", + displayUnit="K")=1 + "Deadband temperature used in hysteresis block" + annotation(Evaluate=true, Dialog(tab="Advanced", group="Waterside economizer")); + + parameter Real dpDifHys( + unit="Pa", + displayUnit="Pa")=0.5*6895 + "Pressure difference hysteresis deadband" + annotation (Dialog(tab="Advanced", group="Staging")); + + parameter Real relFloDif=0.05 + "Relative error to the setpoint for checking if it has achieved flow rate setpoint" + annotation (Dialog(tab="Advanced", group="Staging")); + + parameter Real speChe=0.005 + "Lower threshold value to check fan or pump speed" + annotation (Dialog(tab="Advanced", group="Cooling towers")); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatReq[nChi] + "Chilled water request for each chiller" + annotation (Placement(transformation(extent={{-940,620},{-900,660}}), + iconTransformation(extent={{-140,340},{-100,380}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uConWatReq[nChi] + "Condenser water request for each chiller" + annotation (Placement(transformation(extent={{-940,590},{-900,630}}), + iconTransformation(extent={{-140,320},{-100,360}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum[nChiWatPum] + "Chilled water pump status" + annotation(Placement(transformation(extent={{-940,554},{-900,594}}), + iconTransformation(extent={{-140,300},{-100,340}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat_local( + final quantity="PressureDifference", + final displayUnit="Pa") if have_locSenChiWatPum + "Chilled water differential static pressure from local sensor" + annotation (Placement(transformation(extent={{-940,490},{-900,530}}), + iconTransformation(extent={{-140,240},{-100,280}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat_remote[nSenChiWatPum]( + final unit=fill("Pa", nSenChiWatPum), + final quantity=fill("PressureDifference", nSenChiWatPum)) + "Chilled water differential static pressure from remote sensor" + annotation(Placement(transformation(extent={{-940,450},{-900,490}}), + iconTransformation(extent={{-140,220},{-100,260}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( + final quantity="VolumeFlowRate", + final unit="m3/s") + "Measured chilled water volume flow rate" + annotation(Placement(transformation(extent={{-940,420},{-900,460}}), + iconTransformation(extent={{-140,200},{-100,240}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Vector of chiller proven on status: true=ON" + annotation(Placement(transformation(extent={{-940,380},{-900,420}}), + iconTransformation(extent={{-140,180},{-100,220}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TOutWet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") if have_WSE + "Outdoor air wet bulb temperature" + annotation(Placement(transformation(extent={{-940,340},{-900,380}}), + iconTransformation(extent={{-140,140},{-100,180}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatRetDow( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") if have_WSE + "Chiller water return temperature downstream of the WSE" + annotation(Placement(transformation(extent={{-940,300},{-900,340}}), + iconTransformation(extent={{-140,120},{-100,160}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatRet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chiller water return temperature upstream of the WSE" + annotation(Placement(transformation(extent={{-940,260},{-900,300}}), + iconTransformation(extent={{-140,100},{-100,140}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatRet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Measured condenser water return temperature (condenser leaving)" + annotation(Placement(transformation(extent={{-940,220},{-900,260}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Measured chilled water supply temperature" + annotation(Placement(transformation(extent={{-940,190},{-900,230}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uHeaPreCon[nChi] if have_heaPreConSig + "Chiller head pressure control loop signal from chiller controller" + annotation (Placement(transformation(extent={{-940,160},{-900,200}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiLoa[nChi]( + final quantity=fill("ElectricCurrent",nChi), + final unit=fill("A", nChi)) if need_reduceChillerDemand + "Current chiller load, in amperage" + annotation(Placement(transformation(extent={{-940,120},{-900,160}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat( + final unit="Pa", + final quantity="PressureDifference") + if have_WSE and have_byPasValCon + "Differential static pressure across economizer in the chilled water side" + annotation (Placement(transformation(extent={{-940,90},{-900,130}}), + iconTransformation(extent={{-140,-30},{-100,10}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiAva[nChi] + "Chiller availability status vector" + annotation(Placement(transformation(extent={{-940,60},{-900,100}}), + iconTransformation(extent={{-140,-50},{-100,-10}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEcoPum + if have_WSE and not have_byPasValCon + "True: economizer heat exchanger pump is proven on" + annotation (Placement(transformation(extent={{-940,30},{-900,70}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TEntHex( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + if have_WSE and not have_byPasValCon + "Chilled water temperature entering economizer heat exchanger" + annotation (Placement(transformation(extent={{-940,0},{-900,40}}), + iconTransformation(extent={{-140,-90},{-100,-50}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiHeaCon[nChi] + "Chillers head pressure control status" + annotation (Placement(transformation(extent={{-940,-100},{-900,-60}}), + iconTransformation(extent={{-140,-120},{-100,-80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiWatIsoVal[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Chilled water isolation valve position" + annotation(Placement(transformation(extent={{-940,-248},{-900,-208}}), + iconTransformation(extent={{-140,-140},{-100,-100}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput TChiWatSupResReq + "Chilled water supply temperature setpoint reset request" + annotation (Placement(transformation(extent={{-940,-320},{-900,-280}}), + iconTransformation(extent={{-140,-160},{-100,-120}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput chiPlaReq + "Number of chiller plant cooling requests" + annotation (Placement(transformation(extent={{-940,-360},{-900,-320}}), + iconTransformation(extent={{-140,-180},{-100,-140}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpe[nConWatPum]( + final min=fill(0, nConWatPum), + final max=fill(1, nConWatPum), + final unit=fill("1", nConWatPum)) "Current condenser water pump speed" + annotation(Placement(transformation(extent={{-940,-400},{-900,-360}}), + iconTransformation(extent={{-140,-220},{-100,-180}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uConWatPum[nConWatPum] + "Condenser water pump status" + annotation (Placement(transformation(extent={{-940,-430},{-900,-390}}), + iconTransformation(extent={{-140,-240},{-100,-200}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Outdoor air dry bulb temperature" + annotation (Placement(transformation(extent={{-940,-540},{-900,-500}}), + iconTransformation(extent={{-140,-260},{-100,-220}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiCooLoa[nChi]( + final quantity=fill("HeatFlowRate",nChi), + final unit=fill("W", nChi)) if have_WSE + "Current chiller cooling load" + annotation (Placement(transformation(extent={{-940,-580},{-900,-540}}), + iconTransformation(extent={{-140,-280},{-100,-240}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uFanSpe( + final quantity="1", + final min=0, + final max=1) "Tower fan speed" + annotation (Placement(transformation(extent={{-940,-608},{-900,-568}}), + iconTransformation(extent={{-140,-320},{-100,-280}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatSup( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") if not closeCoupledPlant + "Condenser water supply temperature (condenser entering)" + annotation(Placement(transformation(extent={{-940,-680},{-900,-640}}), + iconTransformation(extent={{-140,-340},{-100,-300}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uIsoVal[nTowCel]( + final min=fill(0, nTowCel), + final max=fill(1, nTowCel), + final unit=fill("1", nTowCel)) + "Vector of tower cells isolation valve position" + annotation(Placement(transformation(extent={{-940,-728},{-900,-688}}), + iconTransformation(extent={{-140,-360},{-100,-320}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput watLev + "Measured water level" + annotation (Placement(transformation(extent={{-940,-760},{-900,-720}}), + iconTransformation(extent={{-140,-380},{-100,-340}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uTowSta[nTowCel] + "Vector of tower cell proven on status: true=running tower cell" + annotation(Placement(transformation(extent={{-940,-800},{-900,-760}}), + iconTransformation(extent={{-140,-400},{-100,-360}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yEcoConWatIsoVal if have_WSE + "Economizer condensing water isolation valve position" + annotation (Placement(transformation(extent={{920,760},{960,800}}), + iconTransformation(extent={{100,370},{140,410}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yWseRetVal( + final min=0, + final max=1, + final unit="1") if have_byPasValCon and have_WSE + "WSE in-line CHW return line valve position" + annotation (Placement(transformation(extent={{920,730},{960,770}}), + iconTransformation(extent={{100,338},{140,378}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yWsePumOn + if have_WSE and not have_byPasValCon + "Heat exchanger pump command on" + annotation (Placement(transformation(extent={{920,700},{960,740}}), + iconTransformation(extent={{100,310},{140,350}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yWsePumSpe( + final min=0, + final unit="1", + final max=1) if have_WSE and not have_byPasValCon + "Heat exchanger pump speed setpoint" + annotation (Placement(transformation(extent={{920,670},{960,710}}), + iconTransformation(extent={{100,290},{140,330}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TChiWatSupSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{920,630},{960,670}}), + iconTransformation(extent={{100,260},{140,300}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChiWatPum[nChiWatPum] + if have_heaChiWatPum + "Chilled water pump status setpoint" + annotation(Placement(transformation(extent={{920,500},{960,540}}), + iconTransformation(extent={{100,230},{140,270}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiPumSpe[nChiWatPum]( + final min=fill(0,nChiWatPum), + final max=fill(1,nChiWatPum), + final unit=fill("1",nChiWatPum)) "Chilled water pump speed setpoint" + annotation (Placement(transformation(extent={{920,460},{960,500}}), + iconTransformation(extent={{100,200},{140,240}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiDem[nChi]( + final quantity=fill("ElectricCurrent",nChi), + final unit=fill("A", nChi)) if need_reduceChillerDemand + "Chiller demand setpoint to set through BACnet or similar " + annotation(Placement(transformation(extent={{920,400},{960,440}}), + iconTransformation(extent={{100,170},{140,210}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChi[nChi] + "Chiller commanded setpoint" + annotation(Placement(transformation(extent={{920,330},{960,370}}), + iconTransformation(extent={{100,140},{140,180}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1ConWatIsoVal[nChi] + "Chiller condenser water isolation valve commanded setpoint" annotation ( + Placement(transformation(extent={{920,260},{960,300}}), + iconTransformation(extent={{100,110},{140,150}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yConWatIsoVal[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) "Condenser water isolation valve position" + annotation (Placement(transformation(extent={{920,220},{960,260}}), + iconTransformation(extent={{100,70},{140,110}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yConWatPumSpe[nConWatPum]( + final unit=fill("1", nChi), + final min=fill(0, nChi), + final max=fill(1, nChi)) + "Condenser water pump speed setpoint" + annotation (Placement(transformation(extent={{920,130},{960,170}}), + iconTransformation(extent={{100,40},{140,80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatMinFloSet( + final quantity="VolumeFlowRate", + final unit="m3/s", + final min=0) "Chilled water minimum flow setpoint" + annotation (Placement(transformation(extent={{920,100},{960,140}}), + iconTransformation(extent={{100,12},{140,52}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yConWatPum[nConWatPum] + "Status setpoint of condenser water pump" + annotation (Placement(transformation(extent={{920,70},{960,110}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatIsoVal[nChi]( + final unit=fill("1", nChi), + final min=fill(0, nChi), + final max=fill(1, nChi)) + "Chiller isolation valve position setpoints" + annotation (Placement(transformation(extent={{920,-20},{960,20}}), + iconTransformation(extent={{100,-90},{140,-50}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yReaChiDemLim + if need_reduceChillerDemand + "Release chiller demand limit, normally true" + annotation (Placement(transformation(extent={{920,-230},{960,-190}}), + iconTransformation(extent={{100,-60},{140,-20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yMinValPosSet( + final min=0, + final max=1, + final unit="1") "Chilled water minimum flow bypass valve position setpoint" + annotation (Placement(transformation(extent={{920,-340},{960,-300}}), + iconTransformation(extent={{100,-120},{140,-80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yTowCelIsoVal[nTowCel]( + final min=fill(0, nTowCel), + final max=fill(1, nTowCel), + final unit=fill("1", nTowCel)) + "Cooling tower cells isolation valve position" + annotation (Placement(transformation(extent={{920,-640},{960,-600}}), + iconTransformation(extent={{100,-200},{140,-160}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yTowCel[nTowCel] + "Vector of tower cells status setpoint" + annotation(Placement(transformation(extent={{920,-680},{960,-640}}), + iconTransformation(extent={{100,-230},{140,-190}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yTowFanSpe[nTowCel]( + final min=fill(0, nTowCel), + final max=fill(1, nTowCel), + final unit=fill("1", nTowCel)) + "Fan speed setpoint of each cooling tower cell" + annotation (Placement(transformation(extent={{920,-720},{960,-680}}), + iconTransformation(extent={{100,-260},{140,-220}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yMakUp + "Makeup water valve On-Off status" + annotation(Placement(transformation(extent={{920,-780},{960,-740}}), + iconTransformation(extent={{100,-290},{140,-250}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Controller wseSta( + final have_byPasValCon=have_byPasValCon, + final nSta=nSta, + final holdPeriod=holdPeriod, + final delDis=delDis, + final TOffsetEna=TOffsetEna, + final TOffsetDis=TOffsetDis, + final heaExcAppDes=heaExcAppDes, + final cooTowAppDes=cooTowAppDes, + final TOutWetDes=TOutWetDes, + final VHeaExcDes_flow=VHeaExcDes_flow, + final hysDt=hysDt, + final step=step, + final wseOnTimDec=wseOnTimDec, + final wseOnTimInc=wseOnTimInc, + final dpDes=dpDes, + final valCon=ecoValCon, + final k=kEcoVal, + final Ti=TiEcoVal, + final Td=TdEcoVal, + final minSpe=minEcoSpe, + final desSpe=desEcoSpe) if have_WSE + "Waterside economizer (WSE) enable/disable status" + annotation(Placement(transformation(extent={{-700,300},{-660,340}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Enable plaEna( + final schTab=schTab, + final TChiLocOut=TChiLocOut, + final plaThrTim=plaThrTim, + final reqThrTim=reqThrTim, + final ignReq=ignReq, + final locDt=locDt) "Sequence to enable and disable plant" + annotation (Placement(transformation(extent={{-700,-540},{-660,-500}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Controller + heaPreCon[nChi]( + final have_fixSpeConWatPum=fill(have_fixSpeConWatPum, nChi), + final have_heaPreConSig=fill(have_heaPreConSig, nChi), + final have_WSE=fill(have_WSE, nChi), + final minTowSpe=fill(fanSpeMin, nChi), + final minConWatPumSpe=fill(minConWatPumSpe, nChi), + final minHeaPreValPos=fill(minHeaPreValPos, nChi), + final controllerType=fill(controllerTypeHeaPre, nChi), + final minChiLif=fill(minChiLif, nChi), + final k=fill(kHeaPreCon, nChi), + final Ti=fill(TiHeaPreCon, nChi)) "Chiller head pressure controller" + annotation (Placement(transformation(extent={{-520,180},{-480,220}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.Controller minBypValCon( + final nChi=nChi, + final minFloSet=minFloSet, + final controllerType=controllerTypeMinFloByp, + final k=kMinFloBypCon, + final Ti=TiMinFloBypCon, + final Td=TdMinFloBypCon, + final yMax=yMaxFloBypCon, + final yMin=yMinFloBypCon) + "Controller for chilled water minimum flow bypass valve" + annotation (Placement(transformation(extent={{-680,-160},{-640,-120}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Controller chiWatPumCon( + final have_heaPum=have_heaChiWatPum, + final have_locSen=have_locSenChiWatPum, + final have_WSE=have_WSE, + final nChi=nChi, + final nPum=nChiWatPum, + final nSen=nSenChiWatPum, + final minPumSpe=minChiWatPumSpe, + final maxPumSpe=maxChiWatPumSpe, + final nPum_nominal=nPum_nominal, + final VChiWat_flow_nominal=VChiWat_flow_nominal, + final maxLocDp=maxLocDp, + final controllerType=controllerTypeChiWatPum, + final k=kChiWatPum, + final Ti=TiChiWatPum, + final Td=TdChiWatPum) + "Sequences to control chilled water pumps in primary-only plant system" + annotation(Placement(transformation(extent={{440,480},{500,540}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.ChilledWaterPlantReset chiWatPlaRes( + final nPum=nChiWatPum, + final holTim=holTim, + final iniSet=iniSet, + final minSet=minSet, + final maxSet=maxSet, + final delTim=delTim, + final samplePeriod=samplePeriod, + final numIgnReq=numIgnReq, + final triAmo=triAmo, + final resAmo=resAmo, + final maxRes=maxRes) + "Sequences to generate chilled water plant reset" + annotation(Placement(transformation(extent={{-700,-320},{-660,-280}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.ChilledWaterSupply chiWatSupSet( + final nRemDpSen=nSenChiWatPum, + final dpChiWatPumMin=dpChiWatPumMin, + final dpChiWatPumMax=dpChiWatPumMax, + final TChiWatSupMin=TChiWatSupMin_Lowest, + final TChiWatSupMax=TChiWatSupMax, + final minSet=minSet, + final maxSet=maxSet, + final halSet=halSet) + "Sequences to generate setpoints of chilled water supply temperature and the pump differential static pressure" + annotation(Placement(transformation(extent={{-520,420},{-480,460}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.SetpointController staSetCon( + final have_WSE=have_WSE, + final have_serChi=have_serChi, + final have_locSen=have_locSenChiWatPum, + final nRemSen=nSenChiWatPum, + final anyVsdCen=anyVsdCen, + final nChi=nChi, + final chiDesCap=chiDesCap, + final chiMinCap=chiMinCap, + final chiTyp=chiTyp, + final nSta=nSta, + final staMat=staMat, + final avePer=avePer, + final delayStaCha=delayStaCha, + final parLoaRatDelay=parLoaRatDelay, + final faiSafTruDelay=faiSafTruDelay, + final effConTruDelay=effConTruDelay, + final shortTDelay=shortTDelay, + final longTDelay=longTDelay, + final posDisMult=posDisMult, + final conSpeCenMult=conSpeCenMult, + final anyOutOfScoMult=anyOutOfScoMult, + final varSpeStaMin=varSpeStaMin, + final varSpeStaMax=varSpeStaMax, + final smallTDif=smallTDif, + final largeTDif=largeTDif, + final faiSafTDif=faiSafTDif, + final dpDif=dpDif, + final TDif=TDif, + final TDifHys=hysDt, + final faiSafDpDif=faiSafDpDif, + final dpDifHys=dpDifHys, + final effConSigDif=effConSigDif) + "Calculates the chiller stage status setpoint signal" + annotation(Placement(transformation(extent={{-260,-68},{-180,100}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Controller towCon( + final nChi=nChi, + final totSta=totSta, + final nTowCel=nTowCel, + final nConWatPum=nConWatPum, + final closeCoupledPlant=closeCoupledPlant, + final have_WSE=have_WSE, + final desCap=desCap, + final fanSpeMin=fanSpeMin, + final fanSpeMax=fanSpeMax, + final chiMinCap=chiMinCap, + final intOpeCon=intOpeCon, + final kIntOpe=kIntOpeTowFan, + final TiIntOpe=TiIntOpeTowFan, + final TdIntOpe=TdIntOpeTowFan, + final chiWatCon=chiWatConTowFan, + final kWSE=kWSETowFan, + final TiWSE=TiWSETowFan, + final TdWSE=TdWSETowFan, + final LIFT_min=LIFT_min, + final TConWatSup_nominal=TConWatSup_nominal, + final TConWatRet_nominal=TConWatRet_nominal, + final TChiWatSupMin=TChiWatSupMin, + final couPlaCon=couPlaCon, + final kCouPla=kCouPla, + final TiCouPla=TiCouPla, + final TdCouPla=TdCouPla, + final yCouPlaMax=yCouPlaMax, + final yCouPlaMin=yCouPlaMin, + final samplePeriod=samplePeriodConTDiff, + final supWatCon=supWatCon, + final kSupCon=kSupCon, + final TiSupCon=TiSupCon, + final TdSupCon=TdSupCon, + final ySupConMax=ySupConMax, + final ySupConMin=ySupConMin, + final speChe=speChe, + final iniPlaTim=iniPlaTim, + final ramTim=ramTim, + final cheMinFanSpe=cheMinFanSpe, + final cheMaxTowSpe=cheMaxTowSpe, + final cheTowOff=cheTowOff, + final staVec=staVec, + final towCelOnSet=towCelOnSet, + final chaTowCelIsoTim=chaTowCelIsoTim, + final watLevMin=watLevMin, + final watLevMax=watLevMax) + "Cooling tower controller" + annotation(Placement(transformation(extent={{-260,-720},{-180,-560}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Down dowProCon( + final nChi=nChi, + final nConWatPum=nConWatPum, + final totSta=totSta, + final nChiSta=nSta + 1, + final have_WSE=have_WSE, + final have_ponyChiller=have_ponyChiller, + final have_parChi=have_parChi, + final have_heaConWatPum=have_heaConWatPum, + final have_fixSpeConWatPum=have_fixSpeConWatPum, + final need_reduceChillerDemand=need_reduceChillerDemand, + final chiDemRedFac=chiDemRedFac, + final holChiDemTim=holChiDemTim, + final waiTim=waiTim, + final proOnTim=proOnTim, + final chaChiWatIsoTim=chaChiWatIsoTim, + final staVec=staVec, + final desConWatPumSpe=desConWatPumSpe, + final desConWatPumNum=desConWatPumNum, + final byPasSetTim=byPasSetTim, + final minFloSet=minFloSet, + final maxFloSet=maxFloSet, + final aftByPasSetTim=aftByPasSetTim, + final pumSpeChe=speChe, + final relFloDif=relFloDif, + final desChiNum=desChiNum) + "Staging down process controller" + annotation(Placement(transformation(extent={{180,-300},{260,-140}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Up upProCon( + final nChi=nChi, + final nConWatPum=nConWatPum, + final totSta=totSta, + final nChiSta=nSta + 1, + final have_WSE=have_WSE, + final have_ponyChiller=have_ponyChiller, + final have_parChi=have_parChi, + final have_heaConWatPum=have_heaConWatPum, + final have_fixSpeConWatPum=have_fixSpeConWatPum, + final need_reduceChillerDemand=need_reduceChillerDemand, + final chiDemRedFac=chiDemRedFac, + final holChiDemTim=holChiDemTim, + final byPasSetTim=byPasSetTim, + final minFloSet=minFloSet, + final maxFloSet=maxFloSet, + final aftByPasSetTim=aftByPasSetTim, + final staVec=staVec, + final desConWatPumSpe=desConWatPumSpe, + final desConWatPumNum=desConWatPumNum, + final thrTimEnb=thrTimEnb, + final waiTim=waiTim, + final chaChiWatIsoTim=chaChiWatIsoTim, + final proOnTim=proOnTim, + final pumSpeChe=speChe, + final relFloDif=relFloDif, + final desChiNum=desChiNum) + "Staging up process controller" + annotation(Placement(transformation(extent={{180,280},{260,440}}))); + + Buildings.Controls.OBC.CDL.Reals.MultiMax mulMax( + final nin=nTowCel) if have_WSE + "All input values are the same" + annotation(Placement(transformation(extent={{-60,-590},{-40,-570}}))); + + Buildings.Controls.OBC.CDL.Logical.Or chaProUpDown + "Either in staging up or in staging down process" + annotation(Placement(transformation(extent={{380,-90},{400,-70}}))); + + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg + "Check if stage change is finished" + annotation(Placement(transformation(extent={{480,-90},{500,-70}}))); + + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr( + final nin=nChiWatPum) + "Check if there is any chilled water pump is enabled" + annotation(Placement(transformation(extent={{-740,-134},{-720,-114}}))); + + Buildings.Controls.OBC.CDL.Reals.MultiMax conWatPumSpe( + final nin=nConWatPum) + if not have_fixSpeConWatPum + "Running condenser water pump speed" + annotation (Placement(transformation(extent={{-660,-390},{-640,-370}}))); + + Buildings.Controls.OBC.CDL.Logical.Or staCooTow + "Tower stage change status: true=stage cooling tower" + annotation (Placement(transformation(extent={{480,-130},{500,-110}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=nChi) if have_WSE + "Waterside economizer status" + annotation (Placement(transformation(extent={{-620,240},{-600,260}}))); + + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator conWatRetTem( + final nout=nChi) + if not have_heaPreConSig + "Condenser water return temperature" + annotation (Placement(transformation(extent={{-680,230},{-660,250}}))); + + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator chiWatSupTem( + final nout=nChi) + if not have_heaPreConSig + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-680,194},{-660,214}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch desConWatPumSpeSwi + if not have_fixSpeConWatPum + "Design condenser water pump speed" + annotation (Placement(transformation(extent={{480,190},{500,210}}))); + + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator desConPumSpe( + final nout=nChi) if not have_fixSpeConWatPum + "Replicate design condenser water pump speed" + annotation (Placement(transformation(extent={{540,190},{560,210}}))); + + Buildings.Controls.OBC.CDL.Reals.MultiMax mulMax1( + final nin=nChi) + if not have_fixSpeConWatPum + "Condenser water pump speed" + annotation (Placement(transformation(extent={{-460,150},{-440,170}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch chiMinFloSet + "Chiller water minimum flow setpoint" + annotation (Placement(transformation(extent={{480,110},{500,130}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator uChiSwi( + final nout=nChi) + "In chiller stage up process" + annotation (Placement(transformation(extent={{460,340},{480,360}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch uChiStaPro[nChi] + "Chiller head pressure control status" + annotation (Placement(transformation(extent={{640,340},{660,360}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre preConPumLeaSta + "Lead condenser water pump status from previous step" + annotation (Placement(transformation(extent={{480,-260},{500,-240}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo equRot + if have_heaChiWatPum + "Rotates two pumps or groups of pumps" + annotation (Placement(transformation(extent={{260,570},{280,590}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1[nChiWatPum]( + final k={1,2}) if have_heaChiWatPum + "Two pumps or groups of pumps only" + annotation (Placement(transformation(extent={{320,600},{340,620}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt2[nChiWatPum]( + final k={2,1}) if have_heaChiWatPum + "Two pumps or groups of pumps only" + annotation (Placement(transformation(extent={{320,550},{340,570}}))); + + Buildings.Controls.OBC.CDL.Integers.Switch intSwi[2] if have_heaChiWatPum + "Two devices or groups of devices" + annotation (Placement(transformation(extent={{380,570},{400,590}}))); + + Buildings.Controls.OBC.CDL.Logical.Latch chiStaUp + "In chiller stage up process" + annotation (Placement(transformation(extent={{380,310},{400,330}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre2 "Stage cooling tower" + annotation (Placement(transformation(extent={{100,-450},{120,-430}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[nChiWatPum] if have_heaChiWatPum + "Convert boolean to integer" + annotation (Placement(transformation(extent={{580,550},{600,570}}))); + + Buildings.Controls.OBC.CDL.Integers.MultiSum totChiPum( + final nin=nChiWatPum) if have_heaChiWatPum + "Total enabled chilled water pump" + annotation (Placement(transformation(extent={{620,550},{640,570}}))); + + Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr( + final t=1) + "Check if more than one pump is enabled, if yes, then it means lag pump is enabled" + annotation (Placement(transformation(extent={{580,590},{600,610}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch chiHeaCon[nChi] + "Chiller head control enabling status" + annotation (Placement(transformation(extent={{520,270},{540,290}}))); + + Buildings.Controls.OBC.CDL.Integers.Switch conWatPumNum + "Total number of enablded condenser water pump" + annotation (Placement(transformation(extent={{440,50},{460,70}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo equRot1 if have_heaChiWatPum + "Rotates two pumps or groups of pumps" + annotation (Placement(transformation(extent={{540,50},{560,70}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch conPumLeaSta + "Pick the condenser water pump lead status" + annotation (Placement(transformation(extent={{440,-260},{460,-240}}))); + + Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr1( + final t=1) + "Check if more than one pump is enabled, if yes, then it means lag pump is enabled" + annotation (Placement(transformation(extent={{480,50},{500,70}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch chiIsoVal[nChi] + "Chiller isolation valve position setpoint" + annotation (Placement(transformation(extent={{540,-10},{560,10}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch chiDem[nChi] + if need_reduceChillerDemand + "Chiller demand" + annotation (Placement(transformation(extent={{640,410},{660,430}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch relDem if need_reduceChillerDemand + "Release chiller demand limit" + annotation (Placement(transformation(extent={{480,-220},{500,-200}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre preChaPro + "Stage changing process status from previous step" + annotation (Placement(transformation(extent={{440,-90},{460,-70}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre leaChiPumPre + "Lead chilled water pump status previous value" + annotation (Placement(transformation(extent={{520,590},{540,610}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre leaChiWatPum[nChiWatPum] + "Chilled water pump status previous value" + annotation (Placement(transformation(extent={{540,550},{560,570}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( + final k=fixConWatPumSpe) + if have_fixSpeConWatPum "Speed of constant speed condenser water pump" + annotation (Placement(transformation(extent={{540,90},{560,110}}))); + + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator chiWatPumSpe( + final nout=nChiWatPum) + "Chilled water pump speed" + annotation (Placement(transformation(extent={{580,450},{600,470}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChiWatPum] + "Boolean to real" + annotation (Placement(transformation(extent={{580,490},{600,510}}))); + + Buildings.Controls.OBC.CDL.Reals.Multiply pro[nChiWatPum] + "Chilled water pump speed setpoint" + annotation (Placement(transformation(extent={{640,470},{660,490}}))); + + Buildings.Controls.OBC.CDL.Reals.Multiply pro1[nChiWatPum] + "Condenser water pump speed setpoint" + annotation (Placement(transformation(extent={{660,140},{680,160}}))); + + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator conWatPumSpe1( + final nout=nConWatPum) "Condenser water pump speed" + annotation (Placement(transformation(extent={{590,140},{610,160}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1[nConWatPum] + "Boolean to real" + annotation (Placement(transformation(extent={{580,56},{600,76}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea3[nChi] + "Boolean to real" + annotation (Placement(transformation(extent={{580,250},{600,270}}))); + + Buildings.Controls.OBC.CDL.Reals.Multiply pro4[nChi] + "Head pressure control valve position" + annotation (Placement(transformation(extent={{660,230},{680,250}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant fulOpeVal[nChi]( + final k=fill(1, nChi)) + if not have_WSE and not have_fixSpeConWatPum + "Full open head pressure control valve" + annotation (Placement(transformation(extent={{240,180},{260,200}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.EnableDevices enaDev( + final nSta=nSta, + final nChiWatPum=nChiWatPum, + final nConWatPum=nConWatPum, + final iniPumDel=iniPumDel) + "Enable devices when plant is enabled" + annotation (Placement(transformation(extent={{-540,-440},{-520,-420}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch leaChiPum "Lead chilled water pump" + annotation (Placement(transformation(extent={{200,582},{220,602}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.DisableChillers disChi( + final have_WSE=have_WSE, + final nChi=nChi, + final nChiWatPum=nChiWatPum, + final nConWatPum=nConWatPum, + final nTowCel=nTowCel) "Disable devices when plant is disabled" + annotation (Placement(transformation(extent={{740,-480},{760,-460}}))); + + Buildings.Controls.OBC.CDL.Logical.And celCom[nTowCel] + "False: disable tower cell" + annotation (Placement(transformation(extent={{840,-670},{860,-650}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi[nTowCel] + "Tower cell isolation valve position setpoint" + annotation (Placement(transformation(extent={{880,-630},{900,-610}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1[nTowCel]( + final k=fill(0, nTowCel)) + "Constant zero" + annotation (Placement(transformation(extent={{700,-590},{720,-570}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi1[nTowCel] + "Tower cell fan speed setpoint" + annotation (Placement(transformation(extent={{880,-710},{900,-690}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.IdentifyStage ideSta( + final nSta=nSta, + final nChi=nChi, + final staMat=staMat) "Identify stage index" + annotation (Placement(transformation(extent={{-520,120},{-500,140}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booScaRep3( + final nout=nTowCel) + "Replicate boolean input" + annotation (Placement(transformation(extent={{780,-590},{800,-570}}))); + +protected + final parameter Boolean have_serChi = not have_parChi + "true = series chillers plant; false = parallel chillers plant" + annotation (Dialog(tab="General", group="Chillers configuration")); + + final parameter Real TChiWatSupMin_Lowest( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=min(TChiWatSupMin) + "Minimum chilled water supply temperature. This is the lowest minimum chilled water supply temperature of chillers in the plant"; + +equation + connect(staSetCon.uPla, plaEna.yPla) annotation(Line(points={{-268,72},{-580,72}, + {-580,-520},{-658,-520}}, color={255,0,255})); + connect(TChiWatRetDow, wseSta.TChiWatRetDow) annotation(Line(points={{-920,320}, + {-840,320},{-840,332},{-704,332}}, color={0,0,127})); + connect(chiWatSupSet.TChiWatSupSet, staSetCon.TChiWatSupSet) annotation(Line( + points={{-476,428},{-380,428},{-380,48},{-268,48}}, color={0,0,127})); + connect(TChiWatSup, staSetCon.TChiWatSup) annotation(Line(points={{-920,210},{ + -840,210},{-840,40},{-268,40}}, color={0,0,127})); + connect(VChiWat_flow, minBypValCon.VChiWat_flow) annotation(Line(points={{-920, + 440},{-880,440},{-880,-140},{-684,-140}}, color={0,0,127})); + connect(TChiWatRet, staSetCon.TChiWatRet) annotation(Line(points={{-920,280},{ + -860,280},{-860,-48},{-268,-48}}, color={0,0,127})); + connect(staSetCon.TWsePre, wseSta.TWsePre) annotation(Line(points={{-268,-56}, + {-420,-56},{-420,338},{-656,338}}, color={0,0,127})); + connect(VChiWat_flow, staSetCon.VChiWat_flow) annotation(Line(points={{-920,440}, + {-880,440},{-880,-64},{-268,-64}}, color={0,0,127})); + connect(TChiWatSupResReq, chiWatPlaRes.TChiWatSupResReq) + annotation (Line(points={{-920,-300},{-704,-300}}, color={255,127,0})); + connect(chiWatPlaRes.yChiWatPlaRes, chiWatSupSet.uChiWatPlaRes) annotation ( + Line(points={{-656,-300},{-540,-300},{-540,440},{-524,440}}, color={0,0,127})); + connect(wseSta.y, staSetCon.uWseSta) annotation(Line(points={{-656,326},{-630, + 326},{-630,96},{-268,96}}, color={255,0,255})); + connect(wseSta.y, towCon.uWse) annotation(Line(points={{-656,326},{-630,326},{ + -630,-580},{-268,-580}}, color={255,0,255})); + connect(plaEna.yPla, towCon.uPla) annotation(Line(points={{-658,-520},{-580,-520}, + {-580,-636},{-268,-636}}, color={255,0,255})); + connect(TOutWet, staSetCon.TOutWet) annotation(Line(points={{-920,360},{-870,360}, + {-870,-20},{-268,-20}}, color={0,0,127})); + connect(mulMax.y, staSetCon.uTowFanSpeMax) annotation(Line(points={{-38,-580}, + {0,-580},{0,-360},{-780,-360},{-780,-36},{-268,-36}}, + color={0,0,127})); + connect(staSetCon.ySta, upProCon.uStaSet) annotation(Line(points={{-172,-24},{ + -140,-24},{-140,436},{172,436}}, color={255,127,0})); + connect(staSetCon.ySta, dowProCon.uStaSet) annotation(Line(points={{-172,-24}, + {-140,-24},{-140,-144},{172,-144}}, color={255,127,0})); + connect(staSetCon.yChiSet, upProCon.uChiSet) annotation(Line(points={{-172,4}, + {-130,4},{-130,424},{172,424}}, color={255,0,255})); + connect(staSetCon.yChiSet, dowProCon.uChiSet) annotation(Line(points={{-172,4}, + {-130,4},{-130,-152},{172,-152}}, color={255,0,255})); + connect(uChiLoa, upProCon.uChiLoa) annotation(Line(points={{-920,140},{-830,140}, + {-830,408},{172,408}}, color={0,0,127})); + connect(upProCon.yStaPro, chaProUpDown.u1) annotation(Line(points={{268,436},{ + 330,436},{330,-80},{378,-80}}, color={255,0,255})); + connect(dowProCon.yStaPro, chaProUpDown.u2) annotation(Line(points={{268,-144}, + {340,-144},{340,-88},{378,-88}}, color={255,0,255})); + connect(uChi, dowProCon.uChi) annotation(Line(points={{-920,400},{-800,400},{-800, + -184},{172,-184}}, color={255,0,255})); + connect(mulMax.y, wseSta.uTowFanSpeMax) annotation(Line(points={{-38,-580},{0, + -580},{0,-360},{-780,-360},{-780,324},{-704,324}}, color={0,0,127})); + connect(towCon.yMakUp, yMakUp) annotation(Line(points={{-172,-708},{-140,-708}, + {-140,-760},{940,-760}}, color={255,0,255})); + connect(uChiWatPum, chiWatPlaRes.uChiWatPum) annotation(Line(points={{-920,574}, + {-790,574},{-790,-288},{-704,-288}}, + color={255,0,255})); + connect(mulOr.y, minBypValCon.uChiWatPum) annotation(Line(points={{-718,-124}, + {-684,-124}}, color={255,0,255})); + connect(uChiWatPum, mulOr.u) annotation(Line(points={{-920,574},{-790,574},{-790, + -124},{-742,-124}}, color={255,0,255})); + connect(staSetCon.yOpeParLoaRatMin, dowProCon.yOpeParLoaRatMin) annotation ( + Line(points={{-172,-52.8},{-120,-52.8},{-120,-168},{172,-168}}, color= + {0,0,127})); + connect(uChi, upProCon.uChi) annotation(Line(points={{-920,400},{172,400}}, + color={255,0,255})); + connect(wseSta.y, upProCon.uWSE) annotation(Line(points={{-656,326},{-630,326}, + {-630,344},{172,344}}, color={255,0,255})); + connect(wseSta.y, dowProCon.uWSE) annotation(Line(points={{-656,326},{-630,326}, + {-630,-272},{172,-272}}, color={255,0,255})); + connect(dowProCon.VChiWat_flow, VChiWat_flow) annotation(Line(points={{172,-192}, + {-880,-192},{-880,440},{-920,440}},color={0,0,127})); + connect(VChiWat_flow, chiWatPumCon.VChiWat_flow) annotation(Line(points={{-920, + 440},{-880,440},{-880,495},{434,495}},color={0,0,127})); + connect(dpChiWat_remote, chiWatPumCon.dpChiWat_remote) annotation(Line( + points={{-920,470},{-770,470},{-770,483},{434,483}}, color={0,0,127})); + connect(TChiWatSup, towCon.TChiWatSup) annotation(Line(points={{-920,210},{-840, + 210},{-840,-596},{-268,-596}}, color={0,0,127})); + connect(chiWatSupSet.TChiWatSupSet, towCon.TChiWatSupSet) annotation(Line( + points={{-476,428},{-380,428},{-380,-604},{-268,-604}},color={0,0,127})); + connect(dowProCon.uChiLoa, uChiLoa) annotation(Line(points={{172,-176},{-830, + -176},{-830,140},{-920,140}}, + color={0,0,127})); + connect(dowProCon.uChiWatIsoVal, uChiWatIsoVal) annotation(Line(points={{172,-228}, + {-920,-228}}, color={0,0,127})); + connect(uChiWatIsoVal, upProCon.uChiWatIsoVal) annotation(Line(points={{-920,-228}, + {110,-228},{110,292},{172,292}}, color={0,0,127})); + connect(chiWatSupSet.dpChiWatPumSet, chiWatPumCon.dpChiWatSet_remote) + annotation (Line(points={{-476,452},{-370,452},{-370,477},{434,477}}, color= + {0,0,127})); + connect(uChiAva, staSetCon.uChiAva) annotation(Line(points={{-920,80},{-268,80}}, + color={255,0,255})); + connect(minBypValCon.yValPos, yMinValPosSet) annotation (Line(points={{-636,-140}, + {-480,-140},{-480,-320},{940,-320}}, color={0,0,127})); + connect(staSetCon.ySta, towCon.uChiStaSet) annotation(Line(points={{-172,-24}, + {-140,-24},{-140,-120},{-330,-120},{-330,-684},{-268,-684}}, + color={255,127,0})); + connect(TConWatSup, towCon.TConWatSup) annotation(Line(points={{-920,-660},{-268, + -660}}, color={0,0,127})); + connect(TConWatRet, towCon.TConWatRet) annotation(Line(points={{-920,240},{-850, + 240},{-850,-644},{-268,-644}}, color={0,0,127})); + connect(watLev, towCon.watLev) annotation (Line(points={{-920,-740},{-300,-740}, + {-300,-716},{-268,-716}}, color={0,0,127})); + connect(towCon.uIsoVal, uIsoVal) annotation(Line(points={{-268,-708},{-920,-708}}, + color={0,0,127})); + connect(uTowSta, towCon.uTowSta) annotation (Line(points={{-920,-780},{-440,-780}, + {-440,-628},{-268,-628}}, color={255,0,255})); + connect(uConWatPumSpe, conWatPumSpe.u) annotation (Line(points={{-920,-380},{-662, + -380}}, color={0,0,127})); + connect(uConWatPumSpe, towCon.uConWatPumSpe) annotation (Line(points={{-920,-380}, + {-820,-380},{-820,-652},{-268,-652}}, color={0,0,127})); + connect(conWatPumSpe.y, dowProCon.uConWatPumSpe) annotation (Line(points={{-638, + -380},{130,-380},{130,-288},{172,-288}}, color={0,0,127})); + connect(conWatPumSpe.y, upProCon.uConWatPumSpe) annotation (Line(points={{-638, + -380},{130,-380},{130,328},{172,328}}, color={0,0,127})); + connect(wseSta.yTunPar, staSetCon.uTunPar) annotation (Line(points={{-656,332}, + {-640,332},{-640,-28},{-268,-28}}, color={0,0,127})); + connect(TChiWatRet, wseSta.TChiWatRet) annotation (Line(points={{-920,280},{-860, + 280},{-860,336},{-704,336}}, color={0,0,127})); + connect(upProCon.yTowStaUp, staCooTow.u1) annotation (Line(points={{268,388},{ + 310,388},{310,-120},{478,-120}}, color={255,0,255})); + connect(dowProCon.yTowStaDow, staCooTow.u2) annotation (Line(points={{268,-220}, + {380,-220},{380,-128},{478,-128}}, color={255,0,255})); + connect(TOut, plaEna.TOut) annotation (Line(points={{-920,-520},{-860,-520},{-860, + -528.4},{-704,-528.4}}, color={0,0,127})); + connect(towCon.uFanSpe, uFanSpe) + annotation (Line(points={{-268,-588},{-920,-588}}, color={0,0,127})); + connect(upProCon.uConWatReq, uConWatReq) annotation (Line(points={{172,352},{ + 80,352},{80,610},{-920,610}}, + color={255,0,255})); + connect(upProCon.uChiWatReq, uChiWatReq) annotation (Line(points={{172,284},{ + 90,284},{90,640},{-920,640}}, + color={255,0,255})); + connect(uChiWatReq, dowProCon.uChiWatReq) annotation (Line(points={{-920,640}, + {90,640},{90,-240},{172,-240}}, color={255,0,255})); + connect(uConWatReq, dowProCon.uConWatReq) annotation (Line(points={{-920,610}, + {80,610},{80,-248},{172,-248}}, color={255,0,255})); + connect(VChiWat_flow, upProCon.VChiWat_flow) annotation (Line(points={{-920,440}, + {-880,440},{-880,390.4},{172,390.4}}, color={0,0,127})); + connect(wseSta.y, booRep.u) annotation (Line(points={{-656,326},{-630,326},{-630, + 250},{-622,250}}, color={255,0,255})); + connect(booRep.y, heaPreCon.uWSE) annotation (Line(points={{-598,250},{-560, + 250},{-560,188},{-524,188}}, + color={255,0,255})); + connect(TConWatRet, conWatRetTem.u) annotation (Line(points={{-920,240},{-682, + 240}}, color={0,0,127})); + connect(conWatRetTem.y, heaPreCon.TConWatRet) annotation (Line(points={{-658,240}, + {-650,240},{-650,212},{-524,212}}, color={0,0,127})); + connect(TChiWatSup, chiWatSupTem.u) annotation (Line(points={{-920,210},{-840, + 210},{-840,204},{-682,204}}, color={0,0,127})); + connect(chiWatSupTem.y, heaPreCon.TChiWatSup) annotation (Line(points={{-658,204}, + {-524,204}}, color={0,0,127})); + connect(upProCon.yDesConWatPumSpe, desConWatPumSpeSwi.u1) annotation (Line( + points={{268,356},{360,356},{360,208},{478,208}}, color={0,0,127})); + connect(dowProCon.yDesConWatPumSpe, desConWatPumSpeSwi.u3) annotation (Line( + points={{268,-264},{360,-264},{360,192},{478,192}}, color={0,0,127})); + connect(desConPumSpe.y, heaPreCon.desConWatPumSpe) annotation (Line(points={{ + 562,200},{580,200},{580,240},{-532,240},{-532,196},{-524,196}}, color + ={0,0,127})); + connect(heaPreCon.uHeaPreCon, uHeaPreCon) annotation (Line(points={{-524,180}, + {-920,180}}, color={0,0,127})); + connect(heaPreCon.yMaxTowSpeSet, towCon.uMaxTowSpeSet) annotation (Line( + points={{-476,212},{-360,212},{-360,-620},{-268,-620}}, color={0,0,127})); + connect(heaPreCon.yConWatPumSpeSet, mulMax1.u) annotation (Line(points={{-476, + 188},{-470,188},{-470,160},{-462,160}}, color={0,0,127})); + connect(mulMax1.y, dowProCon.uConWatPumSpeSet) annotation (Line(points={{-438, + 160},{-400,160},{-400,-280},{172,-280}}, color={0,0,127})); + connect(mulMax1.y, upProCon.uConWatPumSpeSet) annotation (Line(points={{-438,160}, + {-400,160},{-400,336},{172,336}}, color={0,0,127})); + connect(upProCon.yChiWatMinFloSet, chiMinFloSet.u1) annotation (Line(points={{268,404}, + {350,404},{350,128},{478,128}}, color={0,0,127})); + connect(dowProCon.yChiWatMinFloSet, chiMinFloSet.u3) annotation (Line(points={{268, + -284},{350,-284},{350,112},{478,112}}, color={0,0,127})); + connect(chiMinFloSet.y, minBypValCon.VChiWatSet_flow) annotation (Line(points={{502,120}, + {640,120},{640,-100},{-700,-100},{-700,-156},{-684,-156}}, + color={0,0,127})); + connect(uChiSwi.y, uChiStaPro.u2) + annotation (Line(points={{482,350},{638,350}}, color={255,0,255})); + connect(upProCon.yChi, uChiStaPro.u1) annotation (Line(points={{268,292},{300, + 292},{300,380},{620,380},{620,358},{638,358}}, color={255,0,255})); + connect(dowProCon.yChi, uChiStaPro.u3) annotation (Line(points={{268,-172},{620, + -172},{620,342},{638,342}}, color={255,0,255})); + connect(staSetCon.yCapReq, towCon.reqPlaCap) annotation (Line(points={{-172,-64}, + {-160,-64},{-160,-500},{-370,-500},{-370,-612},{-268,-612}}, color= + {0,0,127})); + connect(equRot.yDevRol, intSwi.u2) annotation (Line(points={{282,574},{310,574}, + {310,580},{378,580}}, color={255,0,255})); + connect(conInt1.y, intSwi.u1) annotation (Line(points={{342,610},{360,610},{360, + 588},{378,588}}, color={255,127,0})); + connect(conInt2.y, intSwi.u3) annotation (Line(points={{342,560},{360,560},{360, + 572},{378,572}}, color={255,127,0})); + connect(intSwi.y, chiWatPumCon.uPumLeaLag) annotation (Line(points={{402,580}, + {420,580},{420,543},{434,543}}, color={255,127,0})); + connect(uChiWatPum, equRot.uDevSta) annotation (Line(points={{-920,574},{258,574}}, + color={255,0,255})); + connect(chiStaUp.y, chiMinFloSet.u2) annotation (Line(points={{402,320},{420,320}, + {420,120},{478,120}}, color={255,0,255})); + connect(upProCon.yStaPro, chiStaUp.u) annotation (Line(points={{268,436},{330, + 436},{330,320},{378,320}}, color={255,0,255})); + connect(dowProCon.yStaPro, chiStaUp.clr) annotation (Line(points={{268,-144},{ + 340,-144},{340,314},{378,314}}, color={255,0,255})); + connect(VChiWat_flow, wseSta.VChiWat_flow) annotation (Line(points={{-920,440}, + {-880,440},{-880,328},{-704,328}}, color={0,0,127})); + connect(TOutWet, wseSta.TOutWet) annotation (Line(points={{-920,360},{-870,360}, + {-870,340},{-704,340}}, color={0,0,127})); + connect(pre2.y, towCon.uTowStaCha) annotation (Line(points={{122,-440},{180, + -440},{180,-512},{-320,-512},{-320,-692},{-268,-692}}, color={255,0,255})); + connect(staCooTow.y, pre2.u) annotation (Line(points={{502,-120},{590,-120},{ + 590,-400},{80,-400},{80,-440},{98,-440}}, color={255,0,255})); + connect(towCon.ySpeSet, mulMax.u) annotation (Line(points={{-172,-684},{-100, + -684},{-100,-580},{-62,-580}}, color={0,0,127})); + connect(booToInt.y, totChiPum.u) + annotation (Line(points={{602,560},{618,560}}, color={255,127,0})); + connect(chiStaUp.y, desConWatPumSpeSwi.u2) annotation (Line(points={{402,320}, + {420,320},{420,200},{478,200}}, color={255,0,255})); + connect(chiStaUp.y, uChiSwi.u) annotation (Line(points={{402,320},{420,320},{420, + 350},{458,350}}, color={255,0,255})); + connect(upProCon.yChiHeaCon, chiHeaCon.u1) annotation (Line(points={{268,324}, + {320,324},{320,288},{518,288}}, color={255,0,255})); + connect(uChiSwi.y, chiHeaCon.u2) annotation (Line(points={{482,350},{510,350}, + {510,280},{518,280}}, color={255,0,255})); + connect(dowProCon.yChiHeaCon, chiHeaCon.u3) annotation (Line(points={{268,-232}, + {320,-232},{320,272},{518,272}}, color={255,0,255})); + connect(chiStaUp.y, conWatPumNum.u2) annotation (Line(points={{402,320},{420,320}, + {420,60},{438,60}}, color={255,0,255})); + connect(upProCon.yConWatPumNum, conWatPumNum.u1) annotation (Line(points={{268,340}, + {370,340},{370,68},{438,68}}, color={255,127,0})); + connect(dowProCon.yConWatPumNum, conWatPumNum.u3) annotation (Line(points={{268, + -272},{370,-272},{370,52},{438,52}}, color={255,127,0})); + connect(chiStaUp.y, conPumLeaSta.u2) annotation (Line(points={{402,320},{420,320}, + {420,-250},{438,-250}}, color={255,0,255})); + connect(dowProCon.yLeaPum, conPumLeaSta.u3) annotation (Line(points={{268,-248}, + {380,-248},{380,-258},{438,-258}}, color={255,0,255})); + connect(upProCon.yLeaPum, conPumLeaSta.u1) annotation (Line(points={{268,372}, + {290,372},{290,-242},{438,-242}}, color={255,0,255})); + connect(conPumLeaSta.y, preConPumLeaSta.u) + annotation (Line(points={{462,-250},{478,-250}}, color={255,0,255})); + connect(conWatPumNum.y, intGreThr1.u) + annotation (Line(points={{462,60},{478,60}}, color={255,127,0})); + connect(intGreThr1.y, equRot1.uLagStaSet) + annotation (Line(points={{502,60},{538,60}}, color={255,0,255})); + connect(preConPumLeaSta.y, equRot1.uLeaStaSet) annotation (Line(points={{502,-250}, + {520,-250},{520,66},{538,66}}, color={255,0,255})); + connect(uConWatPum, equRot1.uDevSta) annotation (Line(points={{-920,-410},{530, + -410},{530,54},{538,54}}, color={255,0,255})); + connect(equRot1.yDevStaSet, yConWatPum) + annotation (Line(points={{562,66},{570,66},{570,90},{940,90}}, color={255,0,255})); + connect(chiMinFloSet.y, yChiWatMinFloSet) + annotation (Line(points={{502,120},{940,120}}, color={0,0,127})); + connect(uChiSwi.y, chiIsoVal.u2) annotation (Line(points={{482,350},{510,350}, + {510,0},{538,0}}, color={255,0,255})); + connect(upProCon.yChiWatIsoVal, chiIsoVal.u1) annotation (Line(points={{268,304}, + {280,304},{280,8},{538,8}}, color={0,0,127})); + connect(dowProCon.yChiWatIsoVal, chiIsoVal.u3) annotation (Line(points={{268,-204}, + {280,-204},{280,-8},{538,-8}}, color={0,0,127})); + connect(uChiCooLoa, towCon.chiLoa) annotation (Line(points={{-920,-560},{-594, + -560},{-594,-564},{-268,-564}}, color={0,0,127})); + connect(uChiSwi.y, chiDem.u2) annotation (Line(points={{482,350},{510,350},{510, + 420},{638,420}}, color={255,0,255})); + connect(upProCon.yChiDem, chiDem.u1) annotation (Line(points={{268,420},{430,420}, + {430,428},{638,428}}, color={0,0,127})); + connect(dowProCon.yChiDem, chiDem.u3) annotation (Line(points={{268,-160},{430, + -160},{430,412},{638,412}}, color={0,0,127})); + connect(chiDem.y, yChiDem) + annotation (Line(points={{662,420},{940,420}}, color={0,0,127})); + connect(uConWatPum, upProCon.uConWatPum) annotation (Line(points={{-920,-410}, + {140,-410},{140,308},{172,308}}, color={255,0,255})); + connect(uConWatPum, dowProCon.uConWatPum) annotation (Line(points={{-920,-410}, + {140,-410},{140,-296},{172,-296}}, color={255,0,255})); + connect(desConWatPumSpeSwi.y, desConPumSpe.u) + annotation (Line(points={{502,200},{538,200}}, color={0,0,127})); + connect(dowProCon.yReaDemLim, relDem.u3) annotation (Line(points={{268,-188},{ + 390,-188},{390,-218},{478,-218}}, color={255,0,255})); + connect(upProCon.yStaPro, relDem.u1) annotation (Line(points={{268,436},{330,436}, + {330,-202},{478,-202}}, color={255,0,255})); + connect(chiStaUp.y, relDem.u2) annotation (Line(points={{402,320},{420,320},{420, + -210},{478,-210}}, color={255,0,255})); + connect(relDem.y, yReaChiDemLim) + annotation (Line(points={{502,-210},{940,-210}}, color={255,0,255})); + connect(dpChiWat_local, chiWatPumCon.dpChiWat_local) annotation (Line(points={{-920, + 510},{-820,510},{-820,489},{434,489}}, color={0,0,127})); + connect(dpChiWat_local, staSetCon.dpChiWatPum_local) annotation (Line(points={{-920, + 510},{-820,510},{-820,4},{-268,4}}, color={0,0,127})); + connect(chiWatPumCon.dpChiWatPumSet_local, staSetCon.dpChiWatPumSet_local) + annotation (Line(points={{506,483},{520,483},{520,460},{-350,460},{-350,12}, + {-268,12}}, color={0,0,127})); + connect(chiWatSupSet.dpChiWatPumSet, staSetCon.dpChiWatPumSet_remote) + annotation (Line(points={{-476,452},{-370,452},{-370,-4},{-268,-4}}, color={ + 0,0,127})); + connect(dpChiWat_remote, staSetCon.dpChiWatPum_remote) annotation (Line( + points={{-920,470},{-770,470},{-770,-12},{-268,-12}}, color={0,0,127})); + connect(falEdg.u, preChaPro.y) + annotation (Line(points={{478,-80},{462,-80}}, color={255,0,255})); + connect(chaProUpDown.y, preChaPro.u) + annotation (Line(points={{402,-80},{438,-80}}, color={255,0,255})); + connect(preChaPro.y, chiWatPlaRes.chaPro) annotation (Line(points={{462,-80},{ + 470,-80},{470,-330},{-720,-330},{-720,-312},{-704,-312}}, color={255,0, + 255})); + connect(preChaPro.y, staSetCon.chaPro) annotation (Line(points={{462,-80},{470, + -80},{470,-330},{-320,-330},{-320,88},{-268,88}}, color={255,0,255})); + connect(leaChiWatPum.y, booToInt.u) + annotation (Line(points={{562,560},{578,560}}, color={255,0,255})); + connect(chiWatPumCon.yChiWatPum, leaChiWatPum.u) annotation (Line(points={{506,510}, + {530,510},{530,560},{538,560}}, color={255,0,255})); + connect(totChiPum.y, intGreThr.u) annotation (Line(points={{642,560},{650,560}, + {650,580},{570,580},{570,600},{578,600}}, color={255,127,0})); + connect(intGreThr.y, equRot.uLagStaSet) annotation (Line(points={{602,600},{610, + 600},{610,640},{240,640},{240,580},{258,580}}, color={255,0,255})); + connect(chiWatPumCon.yLea, leaChiPumPre.u) annotation (Line(points={{506,534}, + {510,534},{510,600},{518,600}}, color={255,0,255})); + connect(uChiHeaCon, dowProCon.uChiHeaCon) annotation (Line(points={{-920,-80}, + {150,-80},{150,-216},{172,-216}}, color={255,0,255})); + connect(uChiHeaCon, upProCon.uChiHeaCon) annotation (Line(points={{-920,-80},{ + 150,-80},{150,300},{172,300}}, color={255,0,255})); + connect(chiHeaCon.y, y1ConWatIsoVal) + annotation (Line(points={{542,280},{940,280}}, color={255,0,255})); + connect(chiWatPumCon.yChiWatPum, booToRea.u) annotation (Line(points={{506,510}, + {540,510},{540,500},{578,500}}, color={255,0,255})); + connect(chiWatPumCon.yPumSpe, chiWatPumSpe.u) annotation (Line(points={{506,492}, + {540,492},{540,460},{578,460}}, color={0,0,127})); + connect(chiWatPumCon.yChiWatPum, yChiWatPum) annotation (Line(points={{506,510}, + {530,510},{530,520},{940,520}}, color={255,0,255})); + connect(booToRea.y, pro.u1) annotation (Line(points={{602,500},{620,500},{620, + 486},{638,486}}, color={0,0,127})); + connect(chiWatPumSpe.y, pro.u2) annotation (Line(points={{602,460},{620,460},{ + 620,474},{638,474}}, color={0,0,127})); + connect(desConWatPumSpeSwi.y, conWatPumSpe1.u) annotation (Line(points={{502,200}, + {520,200},{520,150},{588,150}}, color={0,0,127})); + connect(equRot1.yDevStaSet, booToRea1.u) + annotation (Line(points={{562,66},{578,66}}, color={255,0,255})); + connect(booToRea1.y, pro1.u2) annotation (Line(points={{602,66},{650,66},{650, + 144},{658,144}}, color={0,0,127})); + connect(con.y, conWatPumSpe1.u) annotation (Line(points={{562,100},{570,100},{ + 570,150},{588,150}}, color={0,0,127})); + connect(conWatPumSpe1.y, pro1.u1) annotation (Line(points={{612,150},{640,150}, + {640,156},{658,156}}, color={0,0,127})); + connect(chiHeaCon.y, booToRea3.u) annotation (Line(points={{542,280},{560,280}, + {560,260},{578,260}}, color={255,0,255})); + connect(booToRea3.y, pro4.u1) annotation (Line(points={{602,260},{640,260},{640, + 246},{658,246}}, color={0,0,127})); + connect(heaPreCon.yHeaPreConVal, pro4.u2) annotation (Line(points={{-476,200}, + {-160,200},{-160,234},{658,234}}, color={0,0,127})); + connect(fulOpeVal.y, pro4.u2) annotation (Line(points={{262,190},{272,190},{272, + 234},{658,234}}, color={0,0,127})); + connect(chiWatSupSet.TChiWatSupSet, TChiWatSupSet) annotation (Line(points={{-476, + 428},{-380,428},{-380,650},{940,650}}, color={0,0,127})); + connect(plaEna.chiPlaReq, chiPlaReq) annotation (Line(points={{-704,-512},{-860, + -512},{-860,-340},{-920,-340}}, color={255,127,0})); + connect(uChi, towCon.uChi) annotation (Line(points={{-920,400},{-800,400},{-800, + -572},{-268,-572}}, color={255,0,255})); + connect(staSetCon.yIni, wseSta.uIni) annotation (Line(points={{-172,-16},{-150, + -16},{-150,272},{-750,272},{-750,316},{-704,316}}, color={255,127,0})); + connect(plaEna.yPla, wseSta.uPla) annotation (Line(points={{-658,-520},{-580,-520}, + {-580,72},{-760,72},{-760,320},{-704,320}}, color={255,0,255})); + connect(dpChiWat, wseSta.dpChiWat) annotation (Line(points={{-920,110},{-730,110}, + {-730,308},{-704,308}}, color={0,0,127})); + connect(uEcoPum, wseSta.uPum) annotation (Line(points={{-920,50},{-720,50},{-720, + 304},{-704,304}}, color={255,0,255})); + connect(TEntHex, wseSta.TEntHex) annotation (Line(points={{-920,20},{-710,20}, + {-710,300},{-704,300}}, color={0,0,127})); + connect(plaEna.yPla, enaDev.uPla) annotation (Line(points={{-658,-520},{-580,-520}, + {-580,-422},{-542,-422}}, color={255,0,255})); + connect(staSetCon.yIni, enaDev.uIni) annotation (Line(points={{-172,-16},{-150, + -16},{-150,-370},{-570,-370},{-570,-426},{-542,-426}}, color={255,127,0})); + connect(staSetCon.ySta, enaDev.uChiSta) annotation (Line(points={{-172,-24},{-140, + -24},{-140,-144},{-560,-144},{-560,-430},{-542,-430}},color={255,127,0})); + connect(uConWatPum, enaDev.uConWatPum) annotation (Line(points={{-920,-410},{-590, + -410},{-590,-438},{-542,-438}}, color={255,0,255})); + connect(uChiWatPum, enaDev.uChiWatPum) annotation (Line(points={{-920,574},{-790, + 574},{-790,-434},{-542,-434}}, color={255,0,255})); + connect(equRot.yDevStaSet, chiWatPumCon.uChiWatPum) annotation (Line(points={{282,586}, + {300,586},{300,531},{434,531}}, color={255,0,255})); + connect(plaEna.yPla, chiWatPumCon.uPla) annotation (Line(points={{-658,-520}, + {-580,-520},{-580,537},{434,537}},color={255,0,255})); + connect(leaChiPum.y, equRot.uLeaStaSet) annotation (Line(points={{222,592},{234, + 592},{234,586},{258,586}}, color={255,0,255})); + connect(leaChiPumPre.y, leaChiPum.u3) annotation (Line(points={{542,600},{550, + 600},{550,630},{190,630},{190,584},{198,584}}, color={255,0,255})); + connect(enaDev.yEnaPlaPro, leaChiPum.u2) annotation (Line(points={{-518,-421}, + {-410,-421},{-410,592},{198,592}}, color={255,0,255})); + connect(enaDev.yLeaPriChiPum, leaChiPum.u1) annotation (Line(points={{-518,-430}, + {-390,-430},{-390,600},{198,600}}, color={255,0,255})); + connect(enaDev.yLeaConPum, upProCon.uEnaPlaConPum) annotation (Line(points={{-518, + -433},{-110,-433},{-110,364},{172,364}}, color={255,0,255})); + connect(enaDev.yConWatIsoVal, upProCon.uEnaPlaConIso) annotation (Line(points={{-518, + -426},{70,-426},{70,320},{172,320}}, color={255,0,255})); + connect(enaDev.yLeaTowCel, towCon.uEnaPla) annotation (Line(points={{-518,-436}, + {-400,-436},{-400,-668},{-268,-668}}, color={255,0,255})); + connect(wseSta.yConWatIsoVal, yEcoConWatIsoVal) annotation (Line(points={{-656, + 320},{-620,320},{-620,780},{940,780}}, color={0,0,127})); + connect(wseSta.yRetVal,yWseRetVal) annotation (Line(points={{-656,313.6},{-610, + 313.6},{-610,750},{940,750}}, color={0,0,127})); + connect(wseSta.yPumOn, yWsePumOn) annotation (Line(points={{-656,308},{-600,308}, + {-600,720},{940,720}}, color={255,0,255})); + connect(wseSta.yPumSpe, yWsePumSpe) annotation (Line(points={{-656,302},{-590, + 302},{-590,690},{940,690}}, color={0,0,127})); + connect(uChiStaPro.y, disChi.uChi) annotation (Line(points={{662,350},{710, + 350},{710,-461},{738,-461}}, color={255,0,255})); + connect(chiIsoVal.y, disChi.uChiWatIsoVal) annotation (Line(points={{562,0},{ + 660,0},{660,-465},{738,-465}}, color={0,0,127})); + connect(uChiWatReq, disChi.uChiWatReq) annotation (Line(points={{-920,640},{ + -810,640},{-810,-463},{738,-463}}, color={255,0,255})); + connect(disChi.yChiWatIsoVal, yChiWatIsoVal) annotation (Line(points={{762,-465}, + {810,-465},{810,0},{940,0}}, color={0,0,127})); + connect(uChiWatPum, disChi.uConWatReq) annotation (Line(points={{-920,574},{ + -790,574},{-790,-468},{738,-468}}, color={255,0,255})); + connect(pro4.y, disChi.uConWatIsoVal) annotation (Line(points={{682,240},{700, + 240},{700,-471},{738,-471}}, color={0,0,127})); + connect(disChi.yConWatIsoVal,yConWatIsoVal) annotation (Line(points={{762,-468}, + {820,-468},{820,240},{940,240}}, color={0,0,127})); + connect(disChi.yChiWatPumSpe, yChiPumSpe) annotation (Line(points={{762,-472}, + {830,-472},{830,480},{940,480}}, color={0,0,127})); + connect(pro.y, disChi.uChiWatPumSpe) annotation (Line(points={{662,480},{720, + 480},{720,-473},{738,-473}}, color={0,0,127})); + connect(pro1.y, disChi.uConWatPumSpe) annotation (Line(points={{682,150},{730, + 150},{730,-475},{738,-475}}, color={0,0,127})); + connect(disChi.yConWatPumSpe, yConWatPumSpe) annotation (Line(points={{762,-475}, + {840,-475},{840,150},{940,150}}, color={0,0,127})); + connect(towCon.yTowSta, celCom.u1) + annotation (Line(points={{-172,-660},{838,-660}}, color={255,0,255})); + connect(celCom.y, yTowCel) + annotation (Line(points={{862,-660},{940,-660}}, color={255,0,255})); + connect(swi.y, yTowCelIsoVal) + annotation (Line(points={{902,-620},{940,-620}}, color={0,0,127})); + connect(towCon.yIsoVal, swi.u1) annotation (Line(points={{-172,-620},{720,-620}, + {720,-612},{878,-612}}, color={0,0,127})); + connect(con1.y, swi.u3) annotation (Line(points={{722,-580},{740,-580},{740,-628}, + {878,-628}}, color={0,0,127})); + connect(swi1.y, yTowFanSpe) + annotation (Line(points={{902,-700},{940,-700}}, color={0,0,127})); + connect(con1.y, swi1.u3) annotation (Line(points={{722,-580},{740,-580},{740,-708}, + {878,-708}}, color={0,0,127})); + connect(towCon.ySpeSet, swi1.u1) annotation (Line(points={{-172,-684},{-100,-684}, + {-100,-692},{878,-692}}, color={0,0,127})); + connect(uChi, ideSta.uChi) annotation (Line(points={{-920,400},{-800,400},{-800, + 130},{-522,130}}, color={255,0,255})); + connect(ideSta.ySta, staSetCon.uSta) annotation (Line(points={{-498,130},{-340, + 130},{-340,60},{-268,60}}, color={255,127,0})); + connect(ideSta.ySta, towCon.uChiSta) annotation (Line(points={{-498,130},{-340, + 130},{-340,-676},{-268,-676}}, color={255,127,0})); + connect(ideSta.ySta, dowProCon.uChiSta) annotation (Line(points={{-498,130},{-340, + 130},{-340,-204},{172,-204}}, color={255,127,0})); + connect(ideSta.ySta, upProCon.uChiSta) annotation (Line(points={{-498,130},{-340, + 130},{-340,372},{172,372}}, color={255,127,0})); + connect(staSetCon.ySta, wseSta.uChiSta) annotation (Line(points={{-172,-24},{-140, + -24},{-140,280},{-740,280},{-740,312},{-704,312}}, color={255,127,0})); + connect(chaProUpDown.y, disChi.chaPro) annotation (Line(points={{402,-80},{ + 410,-80},{410,-477},{738,-477}}, color={255,0,255})); + connect(uChiStaPro.y, yChi) + annotation (Line(points={{662,350},{940,350}}, color={255,0,255})); + connect(disChi.yTowCel, booScaRep3.u) annotation (Line(points={{762,-479},{ + 770,-479},{770,-580},{778,-580}}, color={255,0,255})); + connect(booScaRep3.y, celCom.u2) annotation (Line(points={{802,-580},{820, + -580},{820,-668},{838,-668}}, color={255,0,255})); + connect(booScaRep3.y, swi.u2) annotation (Line(points={{802,-580},{820,-580}, + {820,-620},{878,-620}}, color={255,0,255})); + connect(booScaRep3.y, swi1.u2) annotation (Line(points={{802,-580},{820,-580}, + {820,-700},{878,-700}}, color={255,0,255})); + connect(chiHeaCon.y, heaPreCon.uChiHeaCon) annotation (Line(points={{542,280}, + {560,280},{560,260},{-550,260},{-550,220},{-524,220}}, color={255,0, + 255})); + connect(uChiWatIsoVal, chiWatPumCon.uChiWatIsoVal) annotation (Line(points={{-920, + -228},{110,-228},{110,501},{434,501}}, color={0,0,127})); + connect(wseSta.y, disChi.uWSE) annotation (Line(points={{-656,326},{-630,326}, + {-630,-479},{738,-479}}, color={255,0,255})); + connect(wseSta.y, chiWatPumCon.uWse) annotation (Line(points={{-656,326},{ + -630,326},{-630,507},{434,507}}, color={255,0,255})); + connect(staSetCon.yChiSet, upProCon.uChiConIsoVal) annotation (Line(points={{ + -172,4},{-130,4},{-130,380},{172,380}}, color={255,0,255})); + connect(staSetCon.yChiSet, dowProCon.uChiConIsoVal) annotation (Line(points={ + {-172,4},{-130,4},{-130,-260},{172,-260}}, color={255,0,255})); +annotation ( + defaultComponentName="chiPlaCon", + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-400},{100,400}}), + graphics={ + Rectangle( + extent={{-100,-400},{100,400}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-100,440},{100,400}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-50,160},{50,-162}}, + lineColor={28,108,200}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Polygon( + points={{-50,160},{16,4},{-50,-162},{-50,160}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Text( + extent={{-98,366},{-58,354}}, + textColor={255,0,255}, + textString="uChiWatReq"), + Text( + extent={{-100,326},{-56,316}}, + textColor={255,0,255}, + textString="uChiWatPum"), + Text( + extent={{-98,346},{-56,334}}, + textColor={255,0,255}, + textString="uConWatReq"), + Text( + extent={{-98,248},{-50,234}}, + textColor={0,0,127}, + textString="dpChiWat_remote"), + Text( + extent={{-100,228},{-58,216}}, + textColor={0,0,127}, + textString="VChiWat_flow"), + Text( + extent={{-98,206},{-80,194}}, + textColor={255,0,255}, + textString="uChi"), + Text( + extent={{-100,166},{-68,156}}, + textColor={0,0,127}, + textString="TOutWet", + visible=have_WSE), + Text( + extent={{-98,148},{-50,134}}, + textColor={0,0,125}, + textString="TChiWatRetDow", + visible=have_WSE), + Text( + extent={{-100,126},{-60,116}}, + textColor={0,0,127}, + textString="TChiWatRet"), + Text( + extent={{-100,108},{-60,92}}, + textColor={0,0,127}, + textString="TConWatRet"), + Text( + extent={{-98,86},{-58,74}}, + textColor={0,0,127}, + textString="TChiWatSup"), + Text( + extent={{-98,58},{-60,44}}, + textColor={0,0,127}, + textString="uHeaPreCon", + visible=have_heaPreConSig), + Text( + extent={{-98,26},{-66,14}}, + textColor={0,0,127}, + textString="uChiLoa", + visible=need_reduceChillerDemand), + Text( + extent={{-100,-24},{-64,-36}}, + textColor={255,0,255}, + textString="uChiAva"), + Text( + extent={{-98,-112},{-50,-126}}, + textColor={0,0,127}, + textString="uChiWatIsoVal"), + Text( + extent={{-98,-132},{-50,-146}}, + textColor={255,127,0}, + textString="TChiWatSupResReq"), + Text( + extent={{-98,-192},{-50,-206}}, + textColor={0,0,127}, + textString="uConWatPumSpe"), + Text( + extent={{-98,-212},{-50,-226}}, + textColor={255,0,255}, + textString="uConWatPum"), + Text( + extent={{-98,-232},{-78,-246}}, + textColor={0,0,127}, + textString="TOut"), + Text( + extent={{-98,-252},{-50,-266}}, + textColor={0,0,127}, + textString="uChiCooLoa", + visible=have_WSE), + Text( + extent={{-96,-294},{-64,-306}}, + textColor={0,0,127}, + textString="uFanSpe"), + Text( + extent={{-98,-314},{-50,-328}}, + textColor={0,0,127}, + textString="TConWatSup", + visible=not closeCoupledPlant), + Text( + extent={{-100,-334},{-68,-346}}, + textColor={0,0,127}, + textString="uIsoVal"), + Text( + extent={{-98,-352},{-68,-364}}, + textColor={0,0,127}, + textString="watLev"), + Text( + extent={{-98,-372},{-62,-386}}, + textColor={255,0,255}, + textString="uTowSta"), + Text( + extent={{50,258},{98,244}}, + textColor={255,0,255}, + textString="yChiWatPum", + visible=have_heaChiWatPum), + Text( + extent={{76,168},{98,154}}, + textColor={255,0,255}, + textString="yChi"), + Text( + extent={{52,8},{100,-6}}, + textColor={255,0,255}, + textString="yConWatPum"), + Text( + extent={{62,-202},{98,-216}}, + textColor={255,0,255}, + textString="yTowCel"), + Text( + extent={{64,-264},{98,-278}}, + textColor={255,0,255}, + textString="yMakUp"), + Text( + extent={{52,228},{100,214}}, + textColor={0,0,127}, + textString="yChiPumSpe"), + Text( + extent={{52,198},{100,184}}, + textColor={0,0,127}, + textString="yChiDem", + visible=need_reduceChillerDemand), + Text( + extent={{52,98},{100,84}}, + textColor={0,0,127}, + textString="yHeaPreConVal"), + Text( + extent={{52,68},{100,54}}, + textColor={0,0,127}, + textString="yConWatPumSpe"), + Text( + extent={{52,40},{100,26}}, + textColor={0,0,127}, + textString="yChiWatMinFloSet"), + Text( + extent={{52,-62},{100,-76}}, + textColor={0,0,127}, + textString="yChiWatIsoVal"), + Text( + extent={{52,-92},{100,-106}}, + textColor={0,0,127}, + textString="yMinValPosSet"), + Text( + extent={{52,-172},{100,-186}}, + textColor={0,0,127}, + textString="yTowCelIsoVal"), + Text( + extent={{52,-232},{100,-246}}, + textColor={0,0,127}, + textString="yTwoFanSpe"), + Text( + extent={{52,-30},{100,-44}}, + textColor={255,0,255}, + textString="yReaChiDemLim", + visible=need_reduceChillerDemand), + Text( + extent={{-98,268},{-50,254}}, + textColor={0,0,127}, + visible=have_locSenChiWatPum, + textString="dpChiWat_local"), + Text( + extent={{-98,-94},{-54,-108}}, + textColor={255,0,255}, + textString="uChiHeaCon"), + Text( + extent={{50,136},{98,122}}, + textColor={255,0,255}, + visible=have_heaChiWatPum, + textString="yHeaPreConValSta"), + Text( + extent={{48,290},{96,276}}, + textColor={0,0,125}, + textString="TChiWatSupSet"), + Text( + extent={{-98,-154},{-70,-164}}, + textColor={255,127,0}, + textString="chiPlaReq"), + Text( + extent={{-98,-64},{-62,-78}}, + textColor={0,0,127}, + textString="TEntHex", + visible=have_WSE and not have_byPasValCon), + Text( + extent={{-98,-2},{-50,-16}}, + textColor={0,0,127}, + textString="dpChiWat", + visible=have_WSE and have_byPasValCon), + Text( + extent={{-98,-44},{-62,-56}}, + textColor={255,0,255}, + textString="uEcoPum", + visible=have_WSE and not have_byPasValCon), + Text( + extent={{34,398},{94,384}}, + textColor={0,0,125}, + textString="yEcoConWatIsoVal", + visible=have_WSE), + Text( + extent={{46,368},{94,354}}, + textColor={0,0,125}, + textString="yWseRetVal", + visible=have_byPasValCon and have_WSE), + Text( + extent={{46,318},{94,304}}, + textColor={0,0,125}, + textString="yWsePumSpe", + visible=have_WSE and not have_byPasValCon), + Text( + extent={{48,338},{96,324}}, + textColor={255,0,255}, + visible=have_WSE and not have_byPasValCon, + textString="yWsePumOn")}), + Diagram(coordinateSystem(extent={{-900,-800},{920,800}}), graphics={Text( + extent={{-574,-594},{-490,-614}}, + textColor={28,108,200}, + textString="might need a pre block")}), +Documentation(info=" +

                      +This is chiller plant control sequence implemented according to ASHRAE Guideline 36-2021. +It is composed by the subsequences in this pacakge. The applicability of some sequences +are listed in the table below. The yes means that the sequence is appliable to +the system type. +

                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      SubsequencesPrimary
                      only
                      Primary
                      Secondary
                      Parallel
                      chillers
                      Series
                      chillers
                      Headed
                      CHWP
                      Dedicated
                      CHWP
                      Headed
                      CWP
                      Dedicated
                      CWP
                      VarSpe
                      CWP
                      ConSpe
                      CWP
                      Water
                      cooled
                      Air
                      cooled
                      With
                      WSE
                      Plant
                      reset
                      yesyesyesnot
                      implemented
                      yesyesyesyesyesyesyesyesyes + + Chilled water plant reset
                      + and + + Chilled water supply +
                      Waterside
                      economizers
                      yesyesyesyesyesyesyesyesyesyesyesyesyes + + Economizer controller +
                      Head pressure
                      control
                      yesyesyesyesyesyesyesyesyesyesyesnot
                      applicable
                      yes + + Head pressure controller +
                      Minimum
                      flow
                      yesnot
                      specified
                      yesyesyesyesyesyesyesyesyesyesyes + + Bypass valve controller
                      + and + + Bypass flow setpoint +
                      Primary chilled
                      water pumps
                      yesnot
                      implemented
                      yesnot
                      implemented
                      yesyesyesyesyesyesyesyesyes + + Chilled water pump controller +
                      Condenser water
                      pumps
                      yesyesyesnot
                      specified
                      yesyesyesyesyesyesyesnot
                      applicable
                      yes + + Condenser water pump controller +
                      Chillers
                      staging
                      yesnot
                      implemented
                      yesnot
                      implemented
                      yesnot
                      implemented
                      yesnot
                      implemented
                      yesyesyesyesyes + + Staging up
                      + and + + Staging down +
                      Cooling
                      towers
                      yesyesyesyesyesyesyesyesyesyesyesyesyes + + Tower controller +
                      + + +

                      1. Plant reset

                      +

                      +In Guideline36-2021, the sequences for following types of plant have been specified. +However, they have not yet been implemented in this library. +

                      +
                        +
                      • +Primary-only sytem serving a single large load, e.g. large AHU, +
                      • +
                      • +Primary-secondary systems where there are any coil pumps, +
                      • +
                      • +Plants with series chillers. +
                      • +
                      + +

                      2. Head pressure control

                      +

                      +If there is head pressure control signal from chiller, the sequence is not needed. +In Guideline36-2021, it assumes: +

                      +
                        +
                      • +the plants with fixed speed condenser water pump do not have waterside economizer. +
                      • +
                      • +If the plants have variable speed condenser water pumps and have waterside economizer, +the condenser water pumps are headered. +
                      • +
                      + +

                      3. Minimum chilled water flow

                      +

                      +In Guideline36-2021, the sequences for following types of plant have not been specified. +

                      +
                        +
                      • +Plants with primary-secondary systems +
                      • +
                      + +

                      4. Primary chilled water (CHW) pump control

                      +

                      +In Guideline36-2021, the sequences for following types of plant have been specified. +However, they have not yet been implemented in this library. +

                      +
                        +
                      • +Plants with series chiller, section 5.20.6.4 and 5.20.6.5. +
                      • +
                      • +Primary-secondary plants and primary-only plants where primary pump speed is not +controlled to maintain differential pressure, section 5.20.6.13 and 5.20.6.14. +
                      • +
                      • +Primary-only plants and primary-secondary plants with variable speed primary pumps +that are intended to operate at a fixed speed, section 5.20.6.15. +
                      • +
                      • +Variable primary-variable secondary plants with primary and secondary loop flow +meters, section 5.20.6.16. +
                      • +
                      • +Variable primary-variable secondary plants with a flow meter in the decoupler, +section 5.20.6.17. +
                      • +
                      • +Variable primary-variable secondary plants without flow meters from which to +deduce decoupler flow, section 5.20.6.18. +
                      • +
                      + +

                      5. Secondary chilled water pumps control

                      +

                      +In Guideline36-2021, the secondary chilled water pumps control have been specified. +However, they have not yet been implemented in this library, section 5.20.7. +

                      + +

                      6. Condenser water (CW) pumps control

                      +

                      +In Guideline36-2021, the sequences for following types of plant have not been specified. +

                      +
                        +
                      • +Plants with series chiller +
                      • +
                      + +

                      7. Chiller staging control

                      +

                      +In Guideline36-2021, the sequences for following types of plant have been specified. +However, they have not yet been implemented in this library. +

                      +
                        +
                      • +Water-cooled primary-only parallel chiller plants with headered CHW pumps +and dedicated CW pumps, section 5.20.4.18 and 5.20.4.19. +
                      • +
                      • +Water-cooled primary-only parallel chiller plants with dedicated CHW pumps +and headered CW pumps or air-cooled primary-only parallel chilled plants +with dedicated chilled water pumps, section 5.20.4.20 and 5.20.4.21. +
                      • +
                      • +Water-cooled primary-only parallel chiller plants with dedicated CHW pumps +and dedicated CW pumps, section 5.20.4.22 and 5.20.4.23. +
                      • +
                      • +Water-cooled primary-secondary parallel chiller plants with headered primary CHW +pumps and headered CW pumps or air-cooled primary-secondary parallel plants with +headered CHW pumps, section 5.20.4.24 and 5.20.4.25. +
                      • +
                      • +Water-cooled primary-secondary parallel chiller plants with headered primary CHW +pumps and dedicated CW pumps, section 5.20.4.26 and 5.20.4.27. +
                      • +
                      • +Water-cooled primary-secondary parallel chiller plants with dedicated primary CHW +pumps and headered CW pumps or air-cooled primary-secondary parallel chiller plants +with dedicated primary CHW pumps, section 5.20.4.28 and 5.20.4.29. +
                      • +
                      • +Water-cooled primary-secondary parallel chiller plants with dedicated primary CHW +pumps and dedicated CW pumps, section 5.20.4.30 and 5.20.4.31. +
                      • +
                      • +Water-cooled primary-only series chiller plants with headered CW pumps or air-cooled +primary-only series chiller plants, section 5.20.4.32 and 5.20.4.33. +
                      • +
                      • +Water-cooled primary-only series chiller plants with dedicated CW pumps, section +5.20.4.34 and 5.20.4.35. +
                      • +
                      + +

                      8. Cooling tower control

                      +

                      +In current implementation, the tower sequence assumes that the cells are enabled in +the order as it is labelled, meaning that it enabled the cells as cell 1, 2, 3, +etc. Note from the Guideline36-2021, +

                      +
                        +
                      • +The tower control sequence is applicable for plants with dynamic load profile, +i.e. those for which PLR may change by more than approximately 25% in any hour, +for controlling condenser water return temperature. +
                      • +
                      • +It is not applicable for the plants where 2-position tower bypass control valves +are needed to prevent tower freezing. +
                      • +
                      +

                      +In Guideline36-2021, the sequences for following types of plant have been specified. +However, they have not yet been implemented in this library. +

                      +
                        +
                      • +Plants with cooling tower fan speed control, for control condenser water supply +temperature, section 5.20.12.2.b. +
                      • +
                      + +

                      9. Equipment rotation

                      +

                      +The sequence Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo +rotates equipment, +such as chillers or pumps, in order to ensure equal wear and tear. It is applicable +for two identical devices or device groups. +

                      +", revisions=" +
                        +
                      • +August 30, 2021, by Jianjun Hu:
                        +Cleaned implementation and added documentation. +
                      • +
                      • +May 30, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Controller.mo new file mode 100644 index 00000000000..de044561a69 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Controller.mo @@ -0,0 +1,590 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers; +block Controller "Waterside economizer (WSE) enable/disable status" + + parameter Boolean have_byPasValCon=true + "True: chilled water flow through economizer is controlled using heat exchanger bypass valve"; + + parameter Integer nSta = 3 + "Number of chiller stages"; + + parameter Real holdPeriod( + final unit="s", + final quantity="Time")=1200 + "WSE minimum on or off time" + annotation(Dialog(group="Enable parameters")); + + parameter Real delDis( + final unit="s", + final quantity="Time")=120 + "Delay disable time period" + annotation(Dialog(group="Enable parameters")); + + parameter Real TOffsetEna( + final unit="K", + final quantity="TemperatureDifference")=2 + "Temperature offset between the chilled water return upstream of WSE and the predicted WSE output" + annotation(Dialog(group="Enable parameters")); + + parameter Real TOffsetDis( + final unit="K", + final quantity="TemperatureDifference")=1 + "Temperature offset between the chilled water return upstream and downstream WSE" + annotation(Dialog(group="Enable parameters")); + + parameter Real heaExcAppDes( + final unit="K", + final quantity="TemperatureDifference")=2 + "Design heat exchanger approach" + annotation(Dialog(group="Design parameters")); + + parameter Real cooTowAppDes( + final unit="K", + final quantity="TemperatureDifference")=2 + "Design cooling tower approach" + annotation(Dialog(group="Design parameters")); + + parameter Real TOutWetDes( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=288.15 + "Design outdoor air wet bulb temperature" + annotation(Dialog(group="Design parameters")); + + parameter Real hysDt( + final unit="K", + final quantity="TemperatureDifference")=1 + "Deadband temperature used in hysteresis block" + annotation (Evaluate=true, Dialog(tab="Advanced", group="Hysteresis")); + + parameter Real VHeaExcDes_flow( + final unit="m3/s", + final quantity="VolumeFlowRate", + displayUnit="m3/s")=0.015 + "Design heat exchanger chilled water volume flow rate" + annotation(Dialog(group="Design parameters")); + + parameter Real step( + final unit="1")=0.02 + "Incremental step used to reduce or increase the water-side economizer tuning parameter" + annotation (Evaluate=true, Dialog(tab="Advanced", group="Tuning")); + + parameter Real wseOnTimDec( + final unit="s", + final quantity="Time", + displayUnit="h") = 3600 + "Economizer enable time needed to allow decrease of the tuning parameter" + annotation (Evaluate=true,Dialog(tab="Advanced", group="Tuning")); + + parameter Real wseOnTimInc( + final unit="s", + final quantity="Time", + displayUnit="h") = 1800 + "Economizer enable time needed to allow increase of the tuning parameter" + annotation (Evaluate=true,Dialog(tab="Advanced", group="Tuning")); + + parameter Real dpDes( + final unit="Pa", + final quantity="PresureDifference")=6000 + "Design pressure difference across the chilled water side economizer" + annotation (Dialog(group="Valve or pump control", enable=have_byPasValCon)); + parameter CDL.Types.SimpleController valCon=Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(group="Valve or pump control", enable=have_byPasValCon)); + parameter Real k=0.1 + "Gain of controller" + annotation (Dialog(group="Valve or pump control", enable=have_byPasValCon)); + parameter Real Ti(unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(group="Valve or pump control", + enable=(valCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PI + or valCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID) + and have_byPasValCon)); + parameter Real Td(unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(group="Valve or pump control", + enable=(valCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PD + or valCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID) + and have_byPasValCon)); + parameter Real minSpe( + final min=0, + final max=1)=0.1 + "Minimum pump speed" + annotation (Dialog(group="Valve or pump control", enable=not have_byPasValCon)); + parameter Real desSpe( + final min=0, + final max=1)=0.9 + "Design pump speed" + annotation (Dialog(group="Valve or pump control", enable=not have_byPasValCon)); + + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TOutWet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Outdoor air wet bulb temperature" + annotation (Placement(transformation(extent={{-220,190},{-180,230}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatRet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chilled water return temperature upstream of the WSE" + annotation (Placement(transformation(extent={{-220,150},{-180,190}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatRetDow( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chilled water return temperature downstream of the WSE" + annotation (Placement(transformation(extent={{-220,110},{-180,150}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uTowFanSpeMax( + final min=0, + final max=1, + final unit="1") + "Maximum cooling tower fan speed" + annotation (Placement(transformation(extent={{-220,0},{-180,40}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( + final quantity="VolumeFlowRate", + final unit="m3/s") + "Measured chilled water volume flow rate" + annotation (Placement(transformation(extent={{-220,50},{-180,90}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enable signal" + annotation (Placement(transformation(extent={{-220,-40},{-180,0}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uIni( + final min=0, + final max=nSta) "Initial chiller stage (at plant enable)" + annotation (Placement(transformation(extent={{-220,-70},{-180,-30}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiSta( + final min=0, + final max=nSta) + "Current chiller stage" + annotation (Placement(transformation(extent={{-220,-128},{-180,-88}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat( + final unit="Pa", + final quantity="PressureDifference") if have_byPasValCon + "Differential static pressure across economizer in the chilled water side" + annotation (Placement(transformation(extent={{-220,-160},{-180,-120}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPum + if not have_byPasValCon "True: heat exchanger pump is proven on" + annotation (Placement(transformation(extent={{-220,-200},{-180,-160}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TEntHex( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") if not have_byPasValCon + "Chilled water temperature entering heat exchanger" + annotation (Placement(transformation(extent={{-220,-230},{-180,-190}}), + iconTransformation(extent={{-140,-120},{-100,-80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TWsePre( + final quantity="ThermodynamicTemperature", + displayUnit="degC", + final unit="K") + "Predicted waterside economizer outlet temperature" + annotation (Placement(transformation(extent={{180,110},{220,150}}), + iconTransformation(extent={{100,70},{140,110}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yTunPar + "Tuning parameter" + annotation (Placement(transformation(extent={{180,20},{220,60}}), + iconTransformation(extent={{100,40},{140,80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y + "WSE enable/disable status" + annotation (Placement(transformation(extent={{180,-40},{220,0}}), + iconTransformation(extent={{100,10},{140,50}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yConWatIsoVal( + final min=0, + final max=1, + final unit="1") "Economizer condensing water isolation valve position" + annotation (Placement(transformation(extent={{180,-120},{220,-80}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetVal( + final min=0, + final max=1, + final unit="1") if have_byPasValCon + "WSE in-line CHW return line valve position" + annotation (Placement(transformation(extent={{180,-166},{220,-126}}), + iconTransformation(extent={{100,-52},{140,-12}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yPumOn + if not have_byPasValCon "Heat exchanger pump command on" + annotation (Placement(transformation(extent={{180,-200},{220,-160}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yPumSpe( + final min=0, + final max=1, + final unit="1") if not have_byPasValCon + "Heat exchanger pump speed setpoint" + annotation (Placement(transformation(extent={{180,-230},{220,-190}}), + iconTransformation(extent={{100,-110},{140,-70}}))); + + Buildings.Controls.OBC.CDL.Reals.LessThreshold enaTChiWatRet( + final t=delDis) + "Enable condition based on chilled water return temperature upstream and downstream WSE" + annotation (Placement(transformation(extent={{60,90},{80,110}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis enaTWet( + final uLow = TOffsetEna - hysDt/2, + final uHigh = TOffsetEna + hysDt/2) + "Enable condition based on the outdoor wet bulb temperature" + annotation (Placement(transformation(extent={{20,156},{40,176}}))); + +protected + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Tuning wseTun( + final step=step, + final wseOnTimDec=wseOnTimDec, + final wseOnTimInc=wseOnTimInc) + "Tuning parameter for the WSE outlet temperature calculation" + annotation (Placement(transformation(extent={{-140,30},{-120,50}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.PredictedOutletTemperature wseTOut( + final heaExcAppDes=heaExcAppDes, + final cooTowAppDes=cooTowAppDes, + final TOutWetDes=TOutWetDes, + final VHeaExcDes_flow=VHeaExcDes_flow) + "Calculates the predicted WSE outlet temperature" + annotation (Placement(transformation(extent={{-100,150},{-80,170}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Subtract" + annotation (Placement(transformation(extent={{-20,156},{0,176}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Subtract" + annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol( + final trueHoldDuration=holdPeriod, + final falseHoldDuration=holdPeriod) + "Keeps a signal constant for a given time period" + annotation (Placement(transformation(extent={{140,156},{160,176}}))); + + Buildings.Controls.OBC.CDL.Logical.And and2 "And" + annotation (Placement(transformation(extent={{100,156},{120,176}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( + final uLow = TOffsetDis - hysDt/2, + final uHigh = TOffsetDis + hysDt/2) + "Hysteresis comparing CHW temperatures upstream and downstream WSE" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + + Buildings.Controls.OBC.CDL.Logical.Timer timer + "Measures the disable condition satisfied time " + annotation (Placement(transformation(extent={{20,90},{40,110}}))); + + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg + "Falling edge to indicate the moment of disable" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truHol( + final trueHoldDuration=holdPeriod, + final falseHoldDuration=0) + "Holds a true signal for a period of time right after disable" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + + Buildings.Controls.OBC.CDL.Logical.Nor nor + "Not either of the inputs" + annotation (Placement(transformation(extent={{-20,90},{0,110}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.BypassValve wseVal( + final dpDes=dpDes, + final controllerType=valCon, + final k=k, + final Ti=Ti, + final Td=Td) if have_byPasValCon + "Chilled water flow through economizer is controlled using bypass valve" + annotation (Placement(transformation(extent={{120,-150},{140,-130}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.HeatExchangerPump wsePum( + final minSpe=minSpe, + final desSpe=desSpe) + if not have_byPasValCon + "Pump control for economizer when the chilled water flow is controlled by a variable speed heat exchanger pump" + annotation (Placement(transformation(extent={{120,-190},{140,-170}}))); + + Buildings.Controls.OBC.CDL.Logical.And and1 + "Plant enabled with 0 initial stage, it means enabled with economizer-only operation" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=0) "Stage 0" + annotation (Placement(transformation(extent={{-140,-90},{-120,-70}}))); + + Buildings.Controls.OBC.CDL.Integers.Equal intEqu + "Check if initial stage is 0" + annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); + + Buildings.Controls.OBC.CDL.Logical.Latch lat + "Plant enabled with economizer-only operation" + annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); + + Buildings.Controls.OBC.CDL.Integers.Equal intEqu1 + "Check if current stage is initial stage" + annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not1 + "Not in initial stage" + annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); + + Buildings.Controls.OBC.CDL.Logical.Or enaEco "Economizer enabled" + annotation (Placement(transformation(extent={{120,-30},{140,-10}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre2 + "Break algebric loop" + annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); + + Buildings.Controls.OBC.CDL.Logical.And enaWSE + "Enable economizer if the plant is enabled" + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre1 + "Break algebric loop" + annotation (Placement(transformation(extent={{60,10},{80,30}}))); + +equation + connect(uTowFanSpeMax, wseTun.uTowFanSpeMax) annotation (Line(points={{-200,20}, + {-150,20},{-150,35},{-142,35}}, color={0,0,127})); + connect(TOutWet, wseTOut.TOutWet) + annotation (Line(points={{-200,210},{-120,210},{-120,168},{-102,168}}, + color={0,0,127})); + connect(VChiWat_flow, wseTOut.VChiWat_flow) + annotation (Line(points={{-200,70},{-120,70},{-120,160},{-102,160}}, + color={0,0,127})); + connect(TChiWatRet, sub1.u1) + annotation (Line(points={{-200,170},{-170,170},{-170,106},{-102,106}}, + color={0,0,127})); + connect(enaTWet.y, and2.u1) + annotation (Line(points={{42,166},{98,166}}, color={255,0,255})); + connect(truFalHol.u, and2.y) + annotation (Line(points={{138,166},{122,166}}, + color={255,0,255})); + connect(timer.y, enaTChiWatRet.u) + annotation (Line(points={{42,100},{58,100}}, color={0,0,127})); + connect(TChiWatRetDow, sub1.u2) + annotation (Line(points={{-200,130},{-160,130},{-160,94},{-102,94}}, + color={0,0,127})); + connect(sub1.y, hys.u) + annotation (Line(points={{-78,100},{-62,100}},color={0,0,127})); + connect(enaTChiWatRet.y, and2.u2) annotation (Line(points={{82,100},{90,100},{ + 90,158},{98,158}}, color={255,0,255})); + connect(wseTun.y, wseTOut.uTunPar) annotation (Line(points={{-118,40},{-110,40}, + {-110,152},{-102,152}}, color={0,0,127})); + connect(wseTOut.y, sub2.u2) annotation (Line(points={{-78,160},{-22,160}}, + color={0,0,127})); + connect(TChiWatRet, sub2.u1) annotation (Line(points={{-200,170},{-170,170},{-170, + 180},{-60,180},{-60,172},{-22,172}}, color={0,0,127})); + connect(sub2.y, enaTWet.u) + annotation (Line(points={{2,166},{18,166}}, color={0,0,127})); + connect(wseTun.y, yTunPar) + annotation (Line(points={{-118,40},{200,40}}, color={0,0,127})); + connect(nor.y, timer.u) + annotation (Line(points={{2,100},{18,100}}, color={255,0,255})); + connect(hys.y, nor.u1) + annotation (Line(points={{-38,100},{-22,100}}, color={255,0,255})); + connect(truHol.y, nor.u2) annotation (Line(points={{-38,60},{-30,60},{-30,92}, + {-22,92}}, color={255,0,255})); + connect(falEdg.y, truHol.u) + annotation (Line(points={{-78,60},{-62,60}}, color={255,0,255})); + connect(wseTOut.y, TWsePre) annotation (Line(points={{-78,160},{-60,160},{-60, + 130},{200,130}}, color={0,0,127})); + connect(uIni, intEqu.u1) + annotation (Line(points={{-200,-50},{-102,-50}}, color={255,127,0})); + connect(conInt.y, intEqu.u2) annotation (Line(points={{-118,-80},{-110,-80},{-110, + -58},{-102,-58}}, color={255,127,0})); + connect(intEqu.y, and1.u2) annotation (Line(points={{-78,-50},{-70,-50},{-70,-28}, + {-62,-28}}, color={255,0,255})); + connect(uIni, intEqu1.u1) annotation (Line(points={{-200,-50},{-150,-50},{-150, + -100},{-102,-100}}, color={255,127,0})); + connect(uChiSta, intEqu1.u2) + annotation (Line(points={{-200,-108},{-102,-108}}, color={255,127,0})); + connect(intEqu1.y, not1.u) + annotation (Line(points={{-78,-100},{-62,-100}}, color={255,0,255})); + connect(enaEco.y, y) + annotation (Line(points={{142,-20},{200,-20}}, color={255,0,255})); + connect(dpChiWat, wseVal.dpChiWat) annotation (Line(points={{-200,-140},{-60,-140}, + {-60,-146},{118,-146}}, color={0,0,127})); + connect(uPum, wsePum.uPum) annotation (Line(points={{-200,-180},{118,-180}}, + color={255,0,255})); + connect(TEntHex, wsePum.TEntHex) annotation (Line(points={{-200,-210},{100, + -210},{100,-188},{118,-188}}, color={0,0,127})); + connect(wseVal.yConWatIsoVal, yConWatIsoVal) annotation (Line(points={{142,-134}, + {160,-134},{160,-100},{200,-100}}, color={0,0,127})); + connect(wseVal.yRetVal, yRetVal) + annotation (Line(points={{142,-146},{200,-146}}, color={0,0,127})); + connect(wsePum.yPumOn, yPumOn) + annotation (Line(points={{142,-180},{200,-180}}, color={255,0,255})); + connect(wsePum.yPumSpe, yPumSpe) annotation (Line(points={{142,-186},{160,-186}, + {160,-210},{200,-210}}, color={0,0,127})); + connect(wsePum.yConWatIsoVal, yConWatIsoVal) annotation (Line(points={{142,-174}, + {160,-174},{160,-100},{200,-100}}, color={0,0,127})); + connect(TChiWatRet, wsePum.TEntWSE) annotation (Line(points={{-200,170},{-170, + 170},{-170,-184},{118,-184}}, color={0,0,127})); + connect(uPla, wseVal.uPla) annotation (Line(points={{-200,-20},{-154,-20},{ + -154,-134},{118,-134}}, color={255,0,255})); + connect(uPla, wsePum.uPla) annotation (Line(points={{-200,-20},{-154,-20},{ + -154,-172},{118,-172}}, color={255,0,255})); + connect(uPla, and1.u1) + annotation (Line(points={{-200,-20},{-62,-20}}, color={255,0,255})); + connect(lat.y, pre2.u) + annotation (Line(points={{42,-20},{58,-20}}, color={255,0,255})); + connect(enaEco.y, wseVal.uWSE) annotation (Line(points={{142,-20},{150,-20},{150, + -40},{110,-40},{110,-140},{118,-140}}, color={255,0,255})); + connect(enaEco.y, wsePum.uWSE) annotation (Line(points={{142,-20},{150,-20},{150, + -40},{110,-40},{110,-176},{118,-176}}, color={255,0,255})); + connect(enaEco.y, falEdg.u) annotation (Line(points={{142,-20},{150,-20},{150, + 0},{-160,0},{-160,60},{-102,60}}, color={255,0,255})); + connect(enaEco.y, wseTun.uWseSta) annotation (Line(points={{142,-20},{150,-20}, + {150,0},{-160,0},{-160,45},{-142,45}}, color={255,0,255})); + connect(pre2.y, enaEco.u2) annotation (Line(points={{82,-20},{100,-20},{100, + -28},{118,-28}}, color={255,0,255})); + connect(not1.y, lat.clr) annotation (Line(points={{-38,-100},{0,-100},{0,-26}, + {18,-26}}, color={255,0,255})); + connect(and1.y, lat.u) + annotation (Line(points={{-38,-20},{18,-20}}, color={255,0,255})); + connect(uPla, enaWSE.u2) annotation (Line(points={{-200,-20},{-154,-20},{-154, + 12},{18,12}}, color={255,0,255})); + connect(enaWSE.y, pre1.u) + annotation (Line(points={{42,20},{58,20}}, color={255,0,255})); + connect(pre1.y, enaEco.u1) annotation (Line(points={{82,20},{110,20},{110,-20}, + {118,-20}}, color={255,0,255})); + connect(truFalHol.y, enaWSE.u1) annotation (Line(points={{162,166},{168,166},{ + 168,60},{0,60},{0,20},{18,20}}, color={255,0,255})); + annotation (defaultComponentName = "wseSta", + Icon(coordinateSystem(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={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-82,64},{80,-56}}, + lineColor={28,108,200}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Polygon( + points={{-82,64},{-16,8},{-82,-56},{-82,64}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{6,60},{72,-52}}, + lineColor={28,108,200}, + lineThickness=0.5), + Line( + points={{6,-52},{72,60}}, + color={28,108,200}, + thickness=0.5)}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-180,-220},{180,220}}), graphics={ + Rectangle( + extent={{-178,-2},{58,-118}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), Text( + extent={{-92,-64},{52,-78}}, + textColor={0,0,127}, + textString="Plant enabled in water side economizer mode")}), +Documentation(info=" +

                      +Waterside economizer (WSE) control sequence per ASHRAE Guideline36-2021, section 5.20.3. +

                      +

                      Enable and disable WSE

                      +

                      +The sequence controls the WSE status as follows: +

                      +
                        +
                      • +Enable WSE if it has been disabled for at least holdPeriod of time and the chilled water return +temperature (CHWRT) upstream of WSE, TChiWatRet, is greater than the WSE predicted heat +exchanger leaving water temperature (PHXLWT) increased in TOffsetEna. +
                      • +
                      • +Disable WSE if it has been enabled for at least holdPeriod of time and CHWRT downstream of +WSE, TChiWatRetDow, is greater than TChiWatRet decreased in TOffsetDis +for delDis time period. +
                      • +
                      +

                      +The following state machine chart illustrates the transitions between WSE enabled and disabled state: +

                      +

                      +\"Image +

                      +

                      +The WSE enabling sequence uses the following subsequences: +

                      + + +

                      Chilled water flow through the WSE

                      + + + + +", +revisions=" +
                        +
                      • +January 19, 2021, by Milica Grahovac:
                        +Added state chart illustration. +
                      • +
                      • +October 13, 2018, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/BypassValve.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/BypassValve.mo new file mode 100644 index 00000000000..64e8770ec9c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/BypassValve.mo @@ -0,0 +1,158 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences; +block BypassValve + "Valves control when chilled water flow through economizer is controlled using bypass valve" + + parameter Real dpDes( + final unit="Pa", + displayUnit="Pa", + final quantity="PressureDifference", + final min=0)=6000 + "Design pressure difference across the chilled water side economizer"; + parameter CDL.Types.SimpleController controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(group="Valve controller")); + parameter Real k=0.1 + "Gain of controller" + annotation (Dialog(group="Valve controller")); + parameter Real Ti(unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(group="Valve controller", + enable=controllerType == CDL.Types.SimpleController.PI or controllerType == CDL.Types.SimpleController.PID)); + parameter Real Td(unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(group="Valve controller", + enable=controllerType == CDL.Types.SimpleController.PD or controllerType == CDL.Types.SimpleController.PID)); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enable signal" + annotation (Placement(transformation(extent={{-140,60},{-100,100}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWSE + "True: waterside economizer is enabled" + annotation (Placement(transformation(extent={{-140,20},{-100,60}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat( + final unit="Pa", + final quantity="PressureDifference") + "Differential static pressure across economizer in the chilled water side" + annotation (Placement(transformation(extent={{-140,-60},{-100,-20}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yConWatIsoVal( + final min=0, + final max=1, + final unit="1") + "Economizer condensing water isolation valve position" + annotation (Placement(transformation(extent={{100,20},{140,60}}), + iconTransformation(extent={{100,40},{140,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetVal( + final min=0, + final max=1, + final unit="1") + "WSE in-line CHW return line valve position" + annotation (Placement(transformation(extent={{100,-40},{140,0}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal conWatIso + "Condensing water valve position" + annotation (Placement(transformation(extent={{60,30},{80,50}}))); + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conPID( + final controllerType=controllerType, + final k=k, + final Ti=Ti, + final Td=Td, + final reverseActing=false, + final y_reset=1) "Chilled water return line valve controller" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( + final k=1) "Constant one" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( + final k=dpDes) + "Design static pressure difference across waterside economizer in chilled water side" + annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Divide div1 + "Normalize the measured value" + annotation (Placement(transformation(extent={{-40,-56},{-20,-36}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi + "Return line valve position" + annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 + "Waterside economizer commanded on" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); +equation + connect(dpChiWat, div1.u1) + annotation (Line(points={{-120,-40},{-42,-40}}, color={0,0,127})); + connect(con1.y, div1.u2) annotation (Line(points={{-58,-80},{-50,-80},{-50,-52}, + {-42,-52}}, color={0,0,127})); + connect(con.y, conPID.u_s) + annotation (Line(points={{-58,0},{-12,0}}, color={0,0,127})); + connect(div1.y, conPID.u_m) + annotation (Line(points={{-18,-46},{0,-46},{0,-12}}, color={0,0,127})); + connect(conPID.y, swi.u1) annotation (Line(points={{12,0},{20,0},{20,-12},{58, + -12}},color={0,0,127})); + connect(con.y, swi.u3) annotation (Line(points={{-58,0},{-50,0},{-50,-28},{58, + -28}},color={0,0,127})); + connect(swi.y, yRetVal) annotation (Line(points={{82,-20},{120,-20}}, + color={0,0,127})); + connect(conWatIso.y, yConWatIsoVal) + annotation (Line(points={{82,40},{120,40}}, color={0,0,127})); + connect(uWSE, and1.u1) + annotation (Line(points={{-120,40},{-82,40}}, color={255,0,255})); + connect(uPla, and1.u2) annotation (Line(points={{-120,80},{-90,80},{-90,32},{-82, + 32}}, color={255,0,255})); + connect(and1.y, conWatIso.u) + annotation (Line(points={{-58,40},{58,40}}, color={255,0,255})); + connect(and1.y, conPID.trigger) annotation (Line(points={{-58,40},{-40,40},{-40, + -20},{-6,-20},{-6,-12}}, color={255,0,255})); + connect(and1.y, swi.u2) annotation (Line(points={{-58,40},{-40,40},{-40,-20},{ + 58,-20}}, color={255,0,255})); +annotation (defaultComponentName = "wseVal", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name")}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

                      +Waterside economizer valves control when the chilled water flow through the economizer +is controlled using a modulating heat exchanger bypass valve. It is implemented +according to ASHRAE Guideline36-2021, section 5.20.3.4-6. +

                      +

                      +When economizer is enabled, start next condenser pump and (or) adjust the pump +speed (see +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Controller), +open the condenser water isolation valve to the heat exchanger (yConWatIsoVal=1), +and enable the economizer in-line chilled water return line valve (yRetVal=1). +

                      +

                      +When the in-line valve is enabled, it shall be modulated by a direct-acting PID +loop to maintain the static pressure difference across the chilled water side +of the heat exchanger at the design value (dpDes). Map the loop output from 0% open +at 0% output to 100% open at 100% output. Bias the loop to launce from 100% +output. The valve shall be fully open when the loop is disabled. +

                      +

                      +When the economizer is disabled, the economizer in-line chilled water return line +valve shall be disabled (fully open), the heat exchanger condensing water isolation +valve fully closed (yConWatIsoVal=0), and the last lag condenser water +pump disabled and (or) change the pump speed +(see +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Controller). +

                      +", +revisions=" +
                        +
                      • +July 14, 2022, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end BypassValve; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/HeatExchangerPump.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/HeatExchangerPump.mo new file mode 100644 index 00000000000..f29e009a55c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/HeatExchangerPump.mo @@ -0,0 +1,221 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences; +block HeatExchangerPump + "Pump control for economizer when the chilled water flow is controlled by a variable speed heat exchanger pump" + parameter Real minSpe = 0.1 "Minimum pump speed"; + parameter Real desSpe = 0.9 "Design pump speed"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enable signal" + annotation (Placement(transformation(extent={{-200,120},{-160,160}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWSE + "True: waterside economizer is enabled" + annotation (Placement(transformation(extent={{-200,90},{-160,130}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPum + "True: heat exchanger pump is proven on" + annotation (Placement(transformation(extent={{-200,40},{-160,80}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TEntWSE( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chilled water return temperature upstream of the economizer" + annotation (Placement(transformation(extent={{-200,0},{-160,40}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TEntHex( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chilled water temperature entering heat exchanger" + annotation (Placement(transformation(extent={{-200,-60},{-160,-20}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yConWatIsoVal( + final min=0, + final max=1, + final unit="1") "Economizer condensing water isolation valve position" + annotation (Placement(transformation(extent={{160,90},{200,130}}), + iconTransformation(extent={{100,40},{140,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yPumOn + "Heat exchanger pump command on" + annotation (Placement(transformation(extent={{160,50},{200,90}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yPumSpe( + final min=0, + final max=1, + final unit="1") "Heat exchanger pump speed setpoint" + annotation (Placement(transformation(extent={{160,10},{200,50}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal conWatIso + "Condensing water isolation valve position" + annotation (Placement(transformation(extent={{40,100},{60,120}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Temperature difference" + annotation (Placement(transformation(extent={{-140,-20},{-120,0}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( + final t=1.11, + final h=0.44) + "Check if the temperature difference is greater than 2 degF (1.11 degK)" + annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( + final t=0.56, + final h=0.45) + "Check if the temperature difference is greater than 1 degF (0.56 degK)" + annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); + Buildings.Controls.OBC.CDL.Integers.Switch resSpeReq1 + "Pump speed reset request" + annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant two( + final k=2) "Constant two" + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant one( + final k=1) "Constant one" + annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant zer( + final k=0) "Constant zero" + annotation (Placement(transformation(extent={{-100,-140},{-80,-120}}))); + Buildings.Controls.OBC.CDL.Integers.Switch resSpeReq + "Pump speed reset request" + annotation (Placement(transformation(extent={{20,-20},{40,0}}))); + Buildings.Controls.OBC.ASHRAE.G36.Generic.TrimAndRespond resSpe( + final iniSet=desSpe, + final minSet=minSpe, + final maxSet=desSpe, + final delTim=900, + final samplePeriod=120, + final numIgnReq=0, + final triAmo=0.02, + final resAmo=-0.03, + final maxRes=-0.06) + "Reset pump speed" + annotation (Placement(transformation(extent={{60,-20},{80,0}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Pump Speed" + annotation (Placement(transformation(extent={{120,20},{140,40}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 + "Waterside economizer commanded on" + annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); +equation + connect(conWatIso.y, yConWatIsoVal) + annotation (Line(points={{62,110},{180,110}}, color={0,0,127})); + connect(TEntWSE, sub.u1) annotation (Line(points={{-180,20},{-150,20},{-150,-4}, + {-142,-4}}, color={0,0,127})); + connect(TEntHex, sub.u2) annotation (Line(points={{-180,-40},{-150,-40},{-150, + -16},{-142,-16}}, color={0,0,127})); + connect(sub.y, greThr.u) + annotation (Line(points={{-118,-10},{-102,-10}}, color={0,0,127})); + connect(sub.y, greThr1.u) annotation (Line(points={{-118,-10},{-110,-10},{-110, + -90},{-102,-90}}, color={0,0,127})); + connect(greThr1.y, resSpeReq1.u2) + annotation (Line(points={{-78,-90},{-42,-90}}, color={255,0,255})); + connect(zer.y, resSpeReq1.u3) annotation (Line(points={{-78,-130},{-60,-130},{ + -60,-98},{-42,-98}}, color={255,127,0})); + connect(greThr.y, resSpeReq.u2) + annotation (Line(points={{-78,-10},{18,-10}},color={255,0,255})); + connect(two.y, resSpeReq.u1) annotation (Line(points={{-78,30},{0,30},{0,-2},{ + 18,-2}}, color={255,127,0})); + connect(resSpeReq1.y, resSpeReq.u3) annotation (Line(points={{-18,-90},{0,-90}, + {0,-18},{18,-18}}, color={255,127,0})); + connect(one.y, resSpeReq1.u1) annotation (Line(points={{-78,-50},{-60,-50},{-60, + -82},{-42,-82}}, color={255,127,0})); + connect(resSpeReq.y,resSpe. numOfReq) annotation (Line(points={{42,-10},{50,-10}, + {50,-18},{58,-18}}, color={255,127,0})); + connect(uPum,resSpe. uDevSta) annotation (Line(points={{-180,60},{50,60},{50,-2}, + {58,-2}}, color={255,0,255})); + connect(resSpe.y, mul.u2) annotation (Line(points={{82,-10},{100,-10},{100,24}, + {118,24}},color={0,0,127})); + connect(conWatIso.y, mul.u1) annotation (Line(points={{62,110},{100,110},{100, + 36},{118,36}}, color={0,0,127})); + connect(mul.y, yPumSpe) + annotation (Line(points={{142,30},{180,30}}, color={0,0,127})); + connect(uWSE, and1.u1) + annotation (Line(points={{-180,110},{-102,110}}, color={255,0,255})); + connect(and1.y, conWatIso.u) + annotation (Line(points={{-78,110},{38,110}}, color={255,0,255})); + connect(and1.y, yPumOn) annotation (Line(points={{-78,110},{20,110},{20,70},{180, + 70}}, color={255,0,255})); + connect(uPla, and1.u2) annotation (Line(points={{-180,140},{-120,140},{-120,102}, + {-102,102}}, color={255,0,255})); +annotation (defaultComponentName = "wsePum", + 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={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name")}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-160,-160},{160,160}})), + Documentation(info=" +

                      +It implements the control of the waterside economizer valves when the chilled water +flow through the economizer is controlled by variable speed heat exchanger pump. +It is implemented according to ASHRAE Guideline36-2021, section 5.20.3.7-10. +

                      +

                      +When economizer is enabled (uWSE=true), start next condenser water +pump and (or) adjust the pump speed +(see +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Controller), +open the condenser water isolation valve to the heat exchanger (yConWatIsoVal=1), +and enable the chilled water heat exchanger pump. +

                      +

                      +The economizer heat exchanger pump speed reset requests shall be generated based +on the difference between chilled water return temperature upstream of the economizer +and economizer heat exchanger entering chilled water temperature. +

                      +
                        +
                      1. +If the temperature difference exceeeds 2 °F (1.11 °K), send 2 requests +until the difference is less than 1.2 °F (0.67 °F). +
                      2. +
                      3. +Else if the temperature difference exceeds 1 °F (0.56 °K), send 1 request +until the difference is less than 0.2 °F (0.11 °K). +
                      4. +
                      5. +Else send 0 requests. +
                      6. +
                      +

                      +When the heat exchanger pump is proven on, the pump speed shall be reset using +Trim and Respond logic with the following parameters: +

                      + + + + + + + + + + + + + + +
                      Variable Value Definition
                      DeviceEconomizer heat exchanger pump proven on Associated device
                      SP0Pump design speed (desSpe)Initial setpoint
                      SPminPump minimum speed (minSpe)Minimum setpoint
                      SPmaxPump design speed (desSpe)Maximum setpoint
                      Td15 minutesDelay timer
                      T2 minutesTime step
                      I0Number of ignored requests
                      RPump speed reset requestsNumber of requests
                      SPtrim2%Trim amount
                      SPres-3%Respond amount
                      SPres_max-6%Maximum response per time interval
                      +
                      + +

                      +When economizer is disabled (uWSE=false), the chilled water heat +exchanger pump shall be disabled, the heat exchanger condenser water isolation +valve fully closed (yConWatIsoVal=0), and the last lag condenser water pump disabled +and (or) change the pump speed +see +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Controller). +

                      +", +revisions=" +
                        +
                      • +July 14, 2022, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end HeatExchangerPump; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/PredictedOutletTemperature.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/PredictedOutletTemperature.mo new file mode 100644 index 00000000000..e5b3e2fcf9d --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/PredictedOutletTemperature.mo @@ -0,0 +1,197 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences; +block PredictedOutletTemperature + "Waterside economizer predicted outlet temperature" + + parameter Real heaExcAppDes( + final unit="K", + final quantity="TemperatureDifference")=2 + "Design heat exchanger approach"; + + parameter Real cooTowAppDes( + final unit="K", + final quantity="TemperatureDifference")=2 + "Design cooling tower approach"; + + parameter Real TOutWetDes( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=288.15 + "Design outdoor air wet bulb temperature"; + + parameter Real VHeaExcDes_flow( + final unit="m3/s", + final quantity="VolumeFlowRate", + displayUnit="m3/s")=0.01 + "Desing heat exchanger chilled water flow rate"; + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uTunPar( + final min=-0.2, + final max=0.5) "Tuning parameter" + annotation (Placement(transformation(extent={{-200,-160},{-160,-120}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TOutWet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") "Outdoor air wet bulb temperature" + annotation (Placement(transformation(extent={{-200,120},{-160,160}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( + final quantity="VolumeFlowRate", + final unit="m3/s") + "Measured (secondary for primary-secondary plants) chilled water flow rate" + annotation (Placement(transformation(extent={{-200,-20},{-160,20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput y( + final quantity="ThermodynamicTemperature", + final unit="K") + "Predicted waterside economizer outlet temperature" + annotation (Placement(transformation(extent={{160,-20},{200,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Divide heaExcPlr + "Heat exchanger flow part load ratio" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaExcDes_flow( + final k= VHeaExcDes_flow) "Heat exchanger design flow" + annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaAppDes( + final k=heaExcAppDes) + "Heat exchanger design approach" + annotation (Placement(transformation(extent={{0,20},{20,40}}))); + + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Product" + annotation (Placement(transformation(extent={{60,40},{80,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Subtraction" + annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TWetDes( + final k=TOutWetDes) + "Design outdoor air wet bulb temperature" + annotation (Placement(transformation(extent={{-120,-40},{-100,-20}}))); + + Buildings.Controls.OBC.CDL.Reals.Multiply pro1 "Product" + annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant towAppDes( + final k=cooTowAppDes) + "Cooling tower design approach" + annotation (Placement(transformation(extent={{40,-120},{60,-100}}))); + + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum( + final nin=4) + "Sum of multiple inputs" + annotation (Placement(transformation(extent={{120,-10},{140,10}}))); + + Buildings.Controls.OBC.CDL.Reals.Min min1 + "Lesser of the input" + annotation (Placement(transformation(extent={{0,60},{20,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( + final k=1) "Constant one" + annotation (Placement(transformation(extent={{-60,100},{-40,120}}))); + +equation + connect(heaExcPlr.u2, heaExcDes_flow.y) annotation (Line(points={{-62,44},{ + -80,44},{-80,20},{-98,20}}, color={0,0,127})); + connect(VChiWat_flow, heaExcPlr.u1) annotation (Line(points={{-180,0},{-140,0}, + {-140,56},{-62,56}}, color={0,0,127})); + connect(heaAppDes.y, pro.u2) annotation (Line(points={{22,30},{40,30},{40,44}, + {58,44}}, color={0,0,127})); + connect(sub1.y, pro1.u1) annotation (Line(points={{-38,-50},{0,-50},{0,-64},{ + 58,-64}}, color={0,0,127})); + connect(uTunPar, pro1.u2) annotation (Line(points={{-180,-140},{20,-140},{20, + -76},{58,-76}}, color={0,0,127})); + connect(TOutWet, mulSum.u[1]) annotation (Line(points={{-180,140},{100,140},{ + 100,-0.75},{118,-0.75}}, + color={0,0,127})); + connect(pro.y, mulSum.u[2]) annotation (Line(points={{82,50},{90,50},{90, + -0.25},{118,-0.25}}, + color={0,0,127})); + connect(pro1.y, mulSum.u[3]) annotation (Line(points={{82,-70},{90,-70},{90, + 0.25},{118,0.25}},color={0,0,127})); + connect(towAppDes.y, mulSum.u[4]) annotation (Line(points={{62,-110},{100, + -110},{100,-2},{118,-2},{118,0.75}}, + color={0,0,127})); + connect(mulSum.y, y) + annotation (Line(points={{142,0},{180,0}}, color={0,0,127})); + connect(TOutWet, sub1.u2) annotation (Line(points={{-180,140},{-150,140},{-150, + -56},{-62,-56}}, color={0,0,127})); + connect(TWetDes.y, sub1.u1) annotation (Line(points={{-98,-30},{-80,-30},{-80, + -44},{-62,-44}}, color={0,0,127})); + connect(heaExcPlr.y, min1.u2) annotation (Line(points={{-38,50},{-20,50},{-20, + 64},{-2,64}}, color={0,0,127})); + connect(con.y, min1.u1) annotation (Line(points={{-38,110},{-20,110},{-20,76}, + {-2,76}}, color={0,0,127})); + connect(min1.y, pro.u1) annotation (Line(points={{22,70},{40,70},{40,56},{58, + 56}}, color={0,0,127})); + annotation (defaultComponentName = "wseTOut", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false, + extent={{-160,-180},{160,180}})), +Documentation(info=" +

                      +The waterside economizer (WSE) is enabled or disabled based on the predicted WSE +heat exchanger (HX) leaving water temperature, y. +This block predicts y based on current plant load +and ambient wet bulb temperature with resepect to the design conditions, as described in +ASHRAE Guideline36-2021, section 5.20.3.1. +

                      +

                      +The block calculates the predicted WSE output temperature y as a sum of these +three components: +

                      +
                        +
                      • +Current outoor air wet bulb temperature TOutWet. +
                      • +
                      • +Predicted heat exchanger approach at current part load flow, which equals +the product of the design heat exchanger approach heaExcAppDes and the +lesser of 1 and predicted heat exchanger part load ratio (PLRHX). PRLHX is a ratio +of the current chilled water flow rate for primary-only plants or the current secondary chilled water +flow rate for primary-secondary plants, VChiWat_flow, +divided by design HX chilled water flow rate VHeaExcDes_flow. +
                      • +
                      • +Predicted cooling tower approach, which is a sum of the: + +
                      • +
                      +", +revisions=" +
                        +
                      • +October 13, 2018, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end PredictedOutletTemperature; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Tuning.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Tuning.mo new file mode 100644 index 00000000000..bfa13b24bb7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Tuning.mo @@ -0,0 +1,317 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences; +block Tuning + "Defines a tuning parameter for the temperature prediction downstream of WSE" + + parameter Real step( + final unit="1")=0.02 + "Incremental step used to reduce or increase the water-side economizer tuning parameter"; + + parameter Real wseOnTimDec( + final unit="s", + final quantity="Time", + displayUnit="h")=3600 + "Economizer enable time needed to allow decrease of the tuning parameter"; + + parameter Real wseOnTimInc( + final unit="s", + final quantity="Time", + displayUnit="h")=1800 + "Economizer enable time needed to allow increase of the tuning parameter"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWseSta "WSE enable disable status" + annotation (Placement(transformation(extent={{-360,100},{-320,140}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uTowFanSpeMax( + final unit="1") + "Maximum cooling tower fan speed signal" + annotation (Placement(transformation( + extent={{-360,-100},{-320,-60}}), iconTransformation(extent={{-140,-70}, + {-100,-30}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput y( + final max=maxTunPar, + final min=minTunPar, + final start=initTunPar) + "Tuning parameter for the waterside economizer outlet temperature prediction" + annotation (Placement(transformation(extent={{320,50},{360,90}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + final parameter Integer larInt=65535 "Large integer used to reset counters"; + + final parameter Real antWinGai=1 "Anti-windup gain"; + + final parameter Real initTunPar = 0 + "Initial value of the tuning parameter"; + + final parameter Real minTunPar( + final unit="1") = -0.2 + "Tuning parameter minimum limit"; + + final parameter Real maxTunPar( + final unit="1") = 0.5 + "Tuning parameter maximum limit"; + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant resVal( + final k=0) "Reset value" + annotation (Placement(transformation(extent={{120,0},{140,20}}))); + + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum( + final k={-1*step,step,1}, nin=3) "Multiple input sum" + annotation (Placement(transformation(extent={{120,60},{140,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Anti-windup adder" + annotation (Placement(transformation(extent={{200,20},{220,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Timer tim(final t=wseOnTimDec) "Timer" + annotation (Placement(transformation(extent={{-260,140},{-240,160}}))); + + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg "Falling edge" + annotation (Placement(transformation(extent={{-220,90},{-200,110}}))); + + Buildings.Controls.OBC.CDL.Logical.And and2 "And" + annotation (Placement(transformation(extent={{-140,140},{-120,160}}))); + + Buildings.Controls.OBC.CDL.Logical.Timer tim1 "Timer" + annotation (Placement(transformation(extent={{-260,40},{-240,60}}))); + + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg1 "Falling edge" + annotation (Placement(transformation(extent={{-220,-10},{-200,10}}))); + + Buildings.Controls.OBC.CDL.Logical.And and1 "And" + annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); + + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( + final t=wseOnTimInc) "Less than" + annotation (Placement(transformation(extent={{-220,40},{-200,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( + final uHigh=0.99, + final uLow=0.98) "Checks if the signal is at its maximum" + annotation (Placement(transformation(extent={{-280,-90},{-260,-70}}))); + + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam2( + final y_start=0) "Sampler" + annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); + + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( + final t=0.5) "Greater or equal than" + annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Conversion" + annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not1 "Not" + annotation (Placement(transformation(extent={{-260,-30},{-240,-10}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not2 "Not" + annotation (Placement(transformation(extent={{-240,-150},{-220,-130}}))); + + Buildings.Controls.OBC.CDL.Logical.And and5 "And" + annotation (Placement(transformation(extent={{-200,-160},{-180,-140}}))); + + Buildings.Controls.OBC.CDL.Logical.And and6 "And" + annotation (Placement(transformation(extent={{-200,-120},{-180,-100}}))); + + Buildings.Controls.OBC.CDL.Logical.Or and4 "And" + annotation (Placement(transformation(extent={{-80,-120},{-60,-100}}))); + + Buildings.Controls.OBC.CDL.Logical.Latch lat "Latch" + annotation (Placement(transformation(extent={{-140,-140},{-120,-120}}))); + + Buildings.Controls.OBC.CDL.Integers.OnCounter disCou + "Counts the number of times the WSE got disabled" + annotation (Placement(transformation(extent={{-100,140},{-80,160}}))); + + Buildings.Controls.OBC.CDL.Integers.OnCounter disCou1 + "Counts the number of times the WSE got disabled" + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea + "Type converter" + annotation (Placement(transformation(extent={{60,140},{80,160}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea1 + "Type converter" + annotation (Placement(transformation(extent={{0,0},{20,20}}))); + + Buildings.Controls.OBC.CDL.Integers.Max maxInt + "Greater or equal a threshold" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + + Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold intGreEquThr1( + final t=larInt) "Greater or equal a threshold" + annotation (Placement(transformation(extent={{-10,70},{10,90}}))); + + Buildings.Controls.OBC.CDL.Reals.Limiter lim( + final uMax=maxTunPar, + final uMin=minTunPar) "Limiter" + annotation (Placement(transformation(extent={{160,60},{180,80}}))); + + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes( + final k=antWinGai) + "Integrator with reset" + annotation (Placement(transformation(extent={{240,0},{260,20}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre preRes + "Breaks algebraic loop for the counter and integrator reset" + annotation (Placement(transformation(extent={{20,70},{40,90}}))); + + Buildings.Controls.OBC.CDL.Logical.And and3 + "Logical and" + annotation (Placement(transformation(extent={{-108,0},{-88,20}}))); + +equation + connect(uWseSta, tim.u) + annotation (Line(points={{-340,120},{-280,120},{-280,150},{-262,150}}, + color={255,0,255})); + connect(uWseSta, tim1.u) annotation (Line(points={{-340,120},{-280,120},{-280, + 50},{-262,50}},color={255,0,255})); + connect(uTowFanSpeMax, hys.u) + annotation (Line(points={{-340,-80},{-282,-80}}, color={0,0,127})); + connect(triSam2.y, greThr.u) + annotation (Line(points={{-38,-80},{-22,-80}}, color={0,0,127})); + connect(booToRea.y, triSam2.u) annotation (Line(points={{-78,-80},{-62,-80}}, + color={0,0,127})); + connect(uWseSta, falEdg.u) annotation (Line(points={{-340,120},{-280,120},{-280, + 100},{-222,100}}, color={255,0,255})); + connect(falEdg.y, and2.u2) annotation (Line(points={{-198,100},{-150,100},{-150, + 142},{-142,142}},color={255,0,255})); + connect(uWseSta, falEdg1.u) annotation (Line(points={{-340,120},{-280,120},{-280, + 0},{-222,0}}, color={255,0,255})); + connect(and1.u2, falEdg1.y) annotation (Line(points={{-142,2},{-160,2},{-160,0}, + {-198,0}}, color={255,0,255})); + connect(hys.y, booToRea.u) + annotation (Line(points={{-258,-80},{-102,-80}},color={255,0,255})); + connect(and4.y, triSam2.trigger) annotation (Line(points={{-58,-110},{-50,-110}, + {-50,-92}}, color={255,0,255})); + connect(uWseSta, not1.u) annotation (Line(points={{-340,120},{-280,120},{-280, + -20},{-262,-20}},color={255,0,255})); + connect(hys.y, and6.u1) annotation (Line(points={{-258,-80},{-244,-80},{-244,-110}, + {-202,-110}}, color={255,0,255})); + connect(not1.y, and6.u2) annotation (Line(points={{-238,-20},{-210,-20},{-210, + -118},{-202,-118}},color={255,0,255})); + connect(and4.u1, and6.y) annotation (Line(points={{-82,-110},{-178,-110}}, + color={255,0,255})); + connect(uWseSta, and5.u2) annotation (Line(points={{-340,120},{-300,120},{-300, + -158},{-202,-158}}, color={255,0,255})); + connect(hys.y, not2.u) annotation (Line(points={{-258,-80},{-252,-80},{-252,-140}, + {-242,-140}}, color={255,0,255})); + connect(and5.u1, not2.y) + annotation (Line(points={{-202,-150},{-210,-150},{-210,-140},{-218,-140}}, + color={255,0,255})); + connect(and5.y, lat.u) annotation (Line(points={{-178,-150},{-172,-150},{-172, + -130},{-142,-130}}, color={255,0,255})); + connect(lat.y, and4.u2) annotation (Line(points={{-118,-130},{-90,-130},{-90, + -118},{-82,-118}}, + color={255,0,255})); + connect(not1.y, lat.clr) annotation (Line(points={{-238,-20},{-160,-20},{-160, + -136},{-142,-136}}, color={255,0,255})); + connect(tim1.y, lesThr.u) + annotation (Line(points={{-238,50},{-222,50}}, color={0,0,127})); + connect(intToRea.u, disCou.y) + annotation (Line(points={{58,150},{-78,150}},color={255,127,0})); + connect(and2.y, disCou.trigger) + annotation (Line(points={{-118,150},{-102,150}}, color={255,0,255})); + connect(disCou1.y, intToRea1.u) + annotation (Line(points={{-58,10},{-2,10}}, color={255,127,0})); + connect(lim.y, y) + annotation (Line(points={{182,70},{340,70}}, color={0,0,127})); + connect(mulSum.y, lim.u) + annotation (Line(points={{142,70},{158,70}}, color={0,0,127})); + connect(lim.y, sub1.u1) annotation (Line(points={{182,70},{190,70},{190,36},{198, + 36}}, color={0,0,127})); + connect(mulSum.y, sub1.u2) annotation (Line(points={{142,70},{152,70},{152,24}, + {198,24}}, color={0,0,127})); + connect(sub1.y, intWitRes.u) annotation (Line(points={{222,30},{230,30},{230,10}, + {238,10}}, color={0,0,127})); + connect(maxInt.y, intGreEquThr1.u) + annotation (Line(points={{-18,80},{-12,80}},color={255,127,0})); + connect(disCou.y, maxInt.u1) annotation (Line(points={{-78,150},{-50,150},{-50, + 86},{-42,86}}, color={255,127,0})); + connect(disCou1.y, maxInt.u2) annotation (Line(points={{-58,10},{-50,10},{-50, + 74},{-42,74}}, color={255,127,0})); + connect(intToRea.y, mulSum.u[1]) annotation (Line(points={{82,150},{100,150}, + {100,69.3333},{118,69.3333}},color={0,0,127})); + connect(intToRea1.y, mulSum.u[2]) annotation (Line(points={{22,10},{80,10},{ + 80,70},{118,70}}, + color={0,0,127})); + connect(intWitRes.y, mulSum.u[3]) annotation (Line(points={{262,10},{280,10}, + {280,-40},{110,-40},{110,70.6667},{118,70.6667}},color={0,0,127})); + connect(intGreEquThr1.y, preRes.u) + annotation (Line(points={{12,80},{18,80}}, color={255,0,255})); + connect(preRes.y, disCou.reset) annotation (Line(points={{42,80},{50,80},{50, + 120},{-90,120},{-90,138}}, color={255,0,255})); + connect(preRes.y, disCou1.reset) annotation (Line(points={{42,80},{50,80},{50, + -10},{-70,-10},{-70,-2}}, color={255,0,255})); + connect(preRes.y, intWitRes.trigger) annotation (Line(points={{42,80},{50,80}, + {50,-10},{250,-10},{250,-2}}, color={255,0,255})); + connect(resVal.y, intWitRes.y_reset_in) annotation (Line(points={{142,10},{182, + 10},{182,2},{238,2}}, color={0,0,127})); + connect(disCou1.trigger, and3.y) + annotation (Line(points={{-82,10},{-86,10}}, color={255,0,255})); + connect(and1.y, and3.u1) + annotation (Line(points={{-118,10},{-110,10}}, color={255,0,255})); + connect(greThr.y, and3.u2) annotation (Line(points={{2,-80},{20,-80},{20,-20}, + {-116,-20},{-116,2},{-110,2}}, color={255,0,255})); + connect(tim.passed, and2.u1) annotation (Line(points={{-238,142},{-220,142},{ + -220,150},{-142,150}}, color={255,0,255})); + connect(lesThr.y, and1.u1) annotation (Line(points={{-198,50},{-180,50},{-180, + 10},{-142,10}}, color={255,0,255})); + annotation (defaultComponentName = "wseTun", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name")}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-320,-200},{320,200}})), +Documentation(info=" +

                      +Waterside economizer outlet temperature prediction tuning parameter subsequence +per ASHRAE Guideline36-2021, section 5.20.3.3. +

                      +

                      +The subsequence calculates the tuning parameter y as follows: +

                      +
                        +
                      • +Decrease y in step when the WSE is disabled if the WSE remained +enabled for greater than wseOnTimDec time period. +
                      • +
                      • +Increase y in step when the WSE is disabled if the WSE +remained enabled for less than wseOnTimInc time period and +the cooling tower fan speed signal uTowFanSpeMax did not decrease +below 100% speed while the WSE was enabled. +
                      • +
                      +

                      +y initializes at 0 upon first plant start up, +it holds its value when the plant is disabled and tuning resumes from that value when the plant is re-enabled. +It is limited between -0.2 and 0.5. +

                      +

                      +In order to avoid large integer values above larInt, the counters +get reset to 0 each time any of them reaches that value. +

                      +", +revisions=" +
                        +
                      • +September 12, 2019, by Milica Grahovac:
                        +Revised for performance. +
                      • +
                      • +October 13, 2018, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end Tuning; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/BypassValve.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/BypassValve.mo new file mode 100644 index 00000000000..662d1e8b095 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/BypassValve.mo @@ -0,0 +1,86 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation; +model BypassValve "Validate the control of inline valve" + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.BypassValve wseVal( + final Ti=10) + "Chilled water return line in-line valve control" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse ecoSta( + final width=0.8, + final period=3600) "Water side economizer enable/disable status" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse dpWSE( + final amplitude=3000, + final period=3600, + final offset=4500) + "Static pressure difference across chilled water side economizer" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 + "Plant enable" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse enaPla( + final width=0.2, final period=3600) + "Enabled plant" + annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); +equation + connect(ecoSta.y, wseVal.uWSE) annotation (Line(points={{-38,0},{18,0}}, + color={255,0,255})); + connect(dpWSE.y, wseVal.dpChiWat) annotation (Line(points={{-38,-40},{-20,-40}, + {-20,-6},{18,-6}}, color={0,0,127})); + connect(enaPla.y, not2.u) + annotation (Line(points={{-58,50},{-42,50}}, color={255,0,255})); + connect(not2.y, wseVal.uPla) annotation (Line(points={{-18,50},{0,50},{0,6},{18, + 6}}, color={255,0,255})); +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/BypassValve.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.BypassValve. +

                      +

                      +The validation shows that when the plant is enabled in waterside mode +(uPla=true and uWSE=true): +

                      +
                        +
                      • +The condenser water isolation valve to the heat exchanger will be fully +open (yConIsoVal=1). +
                      • +
                      • +The economizer in-line chilled water return line valve will be enabled, +with the initial position as fully open (yRetVal=1). +
                      • +
                      • +The return line valve will be modulated to maintain the static pressure +difference (dpChiWat) across the chilled water side of the heat +exchanger at the design value (dpDes). +
                      • +
                      +

                      +If the econimizer is disabled (uWSE=false), the condenser water +isolation valve to the heat exchanger should be fully closed and the return +line valve should be disabled in fully open position. +

                      +", revisions=" +
                        +
                      • +July 15, 2022, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false))); +end BypassValve; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/HeatExchangerPump.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/HeatExchangerPump.mo new file mode 100644 index 00000000000..ea98b5bf167 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/HeatExchangerPump.mo @@ -0,0 +1,94 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation; +model HeatExchangerPump "Validate the control of heat exchanger pump" + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.HeatExchangerPump wsePum + "Economizer heat exchanger pump control" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse ecoSta( + final width=0.8, + final period=3600) "Water side economizer enable/disable status" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp entWSETem( + final height=6, + final duration=3600, + final offset=285.15) + "Economizer upstream chilled water temperature" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse pumOn( + final width=0.8, + final period=3600) + "Pump proven on" + annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp entHexTem( + final height=8, + final duration=3600, + final offset=283.15) + "Entering heat exchanger return chilled water temperature" + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 + "Plant enable" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse enaPla( + final width=0.2, final period=3600) + "Enabled plant" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); +equation + connect(ecoSta.y,wsePum. uWSE) annotation (Line(points={{-38,50},{0,50},{0,4}, + {18,4}}, color={255,0,255})); + connect(pumOn.y, wsePum.uPum) annotation (Line(points={{-38,10},{-10,10},{-10, + 0},{18,0}}, color={255,0,255})); + connect(entWSETem.y, wsePum.TEntWSE) annotation (Line(points={{-38,-30},{-10,-30}, + {-10,-4},{18,-4}}, color={0,0,127})); + connect(entHexTem.y, wsePum.TEntHex) annotation (Line(points={{-38,-70},{0,-70}, + {0,-8},{18,-8}}, color={0,0,127})); + connect(enaPla.y, not2.u) + annotation (Line(points={{-58,80},{-42,80}}, color={255,0,255})); + connect(not2.y, wsePum.uPla) annotation (Line(points={{-18,80},{8,80},{8,8},{18, + 8}}, color={255,0,255})); +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/HeatExchangerPump.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.HeatExchangerPump. +It demonstrates the process of controlling the heat exhcnager pump in following scenarios: +

                      +
                        +
                      • +At 720 seconds, the plant is enabled in waterside economizer mode. The heat exchange pump becomes enabled +(yPumOn=true) and the condenser water isolation valve becomes fully open +(yConWatIsoVal=1). +
                      • +
                      • +From 720 seconds to 2880 seconds, the pump speed is adjusted by the Trim and Respond sequence +based on the speed reset requests that are generated based on the temperature difference between +chilled water return temperature upstream of the economizer and chilled water temperature +entering heat exchanger. +
                      • +
                      • +At 2880 seconds, the economizer becomes disabled. Thus, the pump is disabled and the pump +speed setpoint becomes 0. +
                      • +
                      +", revisions=" +
                        +
                      • +July 15, 2022, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false))); +end HeatExchangerPump; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/PredictedOutletTemperature.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/PredictedOutletTemperature.mo new file mode 100644 index 00000000000..5966971f78c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/PredictedOutletTemperature.mo @@ -0,0 +1,84 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation; +model PredictedOutletTemperature + "Validate water side economizer outlet temperature prediction" + + parameter Real aveTWetBul( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=288.15 + "Chilled water supply set temperature"; + + parameter Real aveVChiWat_flow( + final unit="m3/s", + final quantity="VolumeFlowRate", + displayUnit="m3/s")=0.01 + "Average measured chilled water return temperature"; + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.PredictedOutletTemperature + wseTOut "Waterside economizer outlet temperature prediction" + annotation (Placement(transformation(extent={{40,0},{60,20}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TOutWetSig( + final amplitude=2, + final freqHz=1/600, + final offset=aveTWetBul) + "Measured outdoor air wet bulb temperature" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiWatFlow( + final freqHz=1/600, + final offset=aveVChiWat_flow, + final amplitude=0.002) "Chilled water flow" + annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); + + Buildings.Controls.OBC.CDL.Discrete.Sampler sam1( + final samplePeriod=60) "Sampler" + annotation (Placement(transformation(extent={{-20,-60},{0,-40}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( + final offset=-0.2, + final height=0.7, + final duration=2100) "Ramp" + annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); + +equation + connect(ram.y, sam1.u) + annotation (Line(points={{-38,-50},{-22,-50}}, color={0,0,127})); + connect(sam1.y, wseTOut.uTunPar) annotation (Line(points={{2,-50},{20,-50},{20, + 2},{38,2}}, color={0,0,127})); + connect(TOutWetSig.y, wseTOut.TOutWet) annotation (Line(points={{-38,50},{20,50}, + {20,18},{38,18}},color={0,0,127})); + connect(chiWatFlow.y, wseTOut.VChiWat_flow) + annotation (Line(points={{-38,10},{38,10}}, color={0,0,127})); + +annotation ( + experiment(StopTime=2100.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/PredictedOutletTemperature.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.PredictedOutletTemperature. +

                      +", revisions=" +
                        +
                      • +October 15, 2018, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false))); +end PredictedOutletTemperature; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/Tuning_uEcoSta_uTowFanSpeMax.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/Tuning_uEcoSta_uTowFanSpeMax.mo new file mode 100644 index 00000000000..7cdcc4079ef --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/Tuning_uEcoSta_uTowFanSpeMax.mo @@ -0,0 +1,197 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation; +model Tuning_uEcoSta_uTowFanSpeMax + "Validate water side economizer tuning parameter sequence" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Tuning wseTun + "Tests tuning parameter increase due to a dip in tower fan speed" + annotation (Placement(transformation(extent={{-40,160},{-20,180}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Tuning wseTun1 + "Tests tuning parameter remains constant inspite of a dip in tower fan speed due to the prolonged WSE on status" + annotation (Placement(transformation(extent={{100,160},{120,180}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Tuning wseTun2 + "Tests tuning parameter decrease due to WSE being on for a long time before disable" + annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Tuning wseTun3 + "Tests tuning parameter remains constant despite of a dip in tower fan speed due to the prolonged WSE on status" + annotation (Placement(transformation(extent={{100,40},{120,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Tuning wseTun4 + "Tests anti-windup" + annotation (Placement(transformation(extent={{100,-100},{120,-80}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Timer tim + "Timer" + annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); + + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( + final t=7e4) "Greater than" + annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=true) "Constant" + annotation (Placement(transformation(extent={{-120,-90},{-100,-70}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch logSwi "Logical switch" + annotation (Placement(transformation(extent={{60,-90},{80,-70}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse ecoSta( + final width=0.5, + final period=2*55*60) + "Water side economizer enable/disable status" + annotation (Placement(transformation(extent={{-120,200},{-100,220}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTowFanSpeSig0( + final k=1) + "Maximum cooling tower fan speed signal" + annotation (Placement(transformation(extent={{-120,140},{-100,160}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTowFanSpeSig2( + final k=1) + "Maximum cooling tower fan speed signal" + annotation (Placement(transformation(extent={{-120,40},{-100,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTowFanSig1( + final k=1) + "Cooling tower fan full load signal" + annotation (Placement(transformation(extent={{20,160},{40,180}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse ecoSta1( + final width=0.5, + final period=2*16*60) + "Water side economizer enable/disable status" + annotation (Placement(transformation(extent={{20,200},{40,220}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin cooTowFanSta1( + final amplitude=0.2, + final offset=1.1, + final freqHz=1/(80*60), + final phase=3.1415926535898) "Cooling tower fan speed status signal" + annotation (Placement(transformation(extent={{20,118},{40,138}}))); + + Buildings.Controls.OBC.CDL.Reals.Min min1 "Minimum" + annotation (Placement(transformation(extent={{60,140},{80,160}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse ecoSta2( + final width=0.5, + final period=2*65*60) + "Water side economizer enable/disable status" + annotation (Placement(transformation(extent={{-120,100},{-100,120}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse ecoSta3( + final width=0.5, + final period=2*20*60) + "Water side economizer enable/disable status" + annotation (Placement(transformation(extent={{20,80},{40,100}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTowFanSpeSig3( + final k=1) + "Maximum cooling tower fan speed signal" + annotation (Placement(transformation(extent={{20,30},{40,50}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse ecoSta4( + final width=0.5, + final period=2*20*60) + "Water side economizer enable/disable status" + annotation (Placement(transformation(extent={{20,-120},{40,-100}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTowFanSpeSig1( + final k=1) + "Maximum cooling tower fan speed signal" + annotation (Placement(transformation(extent={{20,-180},{40,-160}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse ecoSta5( + final width=0.5, + final period=2*65*60) + "Water side economizer enable/disable status" + annotation (Placement(transformation(extent={{20,-60},{40,-40}}))); + +equation + connect(ecoSta.y,wseTun.uWseSta) annotation (Line(points={{-98,210},{-70,210}, + {-70,175},{-42,175}}, color={255,0,255})); + connect(maxTowFanSig1.y, min1.u1) annotation (Line(points={{42,170},{50,170},{ + 50,156},{58,156}}, color={0,0,127})); + connect(cooTowFanSta1.y, min1.u2) annotation (Line(points={{42,128},{48,128},{ + 48,144},{58,144}}, color={0,0,127})); + connect(min1.y, wseTun1.uTowFanSpeMax) annotation (Line(points={{82,150},{90,150}, + {90,165},{98,165}}, color={0,0,127})); + connect(ecoSta1.y,wseTun1.uWseSta) annotation (Line(points={{42,210},{70,210}, + {70,175},{98,175}}, color={255,0,255})); + connect(ecoSta2.y,wseTun2.uWseSta) annotation (Line(points={{-98,110},{-70,110}, + {-70,75},{-42,75}}, color={255,0,255})); + connect(maxTowFanSpeSig2.y, wseTun2.uTowFanSpeMax) annotation (Line(points={{-98,50}, + {-70,50},{-70,65},{-42,65}}, color={0,0,127})); + connect(maxTowFanSpeSig0.y, wseTun.uTowFanSpeMax) annotation (Line(points={{-98,150}, + {-70,150},{-70,165},{-42,165}}, color={0,0,127})); + connect(ecoSta3.y,wseTun3.uWseSta) annotation (Line(points={{42,90},{70,90},{ + 70,55},{98,55}}, color={255,0,255})); + connect(wseTun3.uTowFanSpeMax, maxTowFanSpeSig3.y) annotation (Line(points={{98,45}, + {70,45},{70,40},{42,40}}, color={0,0,127})); + connect(maxTowFanSpeSig1.y, wseTun4.uTowFanSpeMax) annotation (Line(points={{42,-170}, + {80,-170},{80,-95},{98,-95}}, color={0,0,127})); + connect(con.y, tim.u) + annotation (Line(points={{-98,-80},{-82,-80}}, color={255,0,255})); + connect(tim.y, greThr1.u) + annotation (Line(points={{-58,-80},{-42,-80}}, color={0,0,127})); + connect(greThr1.y, logSwi.u2) + annotation (Line(points={{-18,-80},{58,-80}}, color={255,0,255})); + connect(ecoSta5.y, logSwi.u1) annotation (Line(points={{42,-50},{50,-50},{50, + -72},{58,-72}}, + color={255,0,255})); + connect(ecoSta4.y, logSwi.u3) annotation (Line(points={{42,-110},{50,-110},{50, + -88},{58,-88}}, color={255,0,255})); + connect(logSwi.y, wseTun4.uWseSta) annotation (Line(points={{82,-80},{90,-80}, + {90,-85},{98,-85}}, color={255,0,255})); +annotation ( + experiment( + StopTime=150000, + Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/Tuning_uEcoSta_uTowFanSpeMax.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Tuning. +

                      +", revisions=" +
                        +
                      • +October 15, 2018, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-140,-240},{140,240}}), + graphics={ + Text( + extent={{-126,6},{-20,-6}}, + textColor={0,0,127}, + textString="Tests tuning parameter decrease +based on WSE enable duration +prior to disable"), + Text( + extent={{-10,14},{154,-18}}, + textColor={0,0,127}, + textString="Tests tuning parameter increase +based on WSE enable duration +prior to disable and cooling tower +fan speed during WSE enable."), + Text( + extent={{-46,-208},{48,-214}}, + textColor={0,0,127}, + textString="Tests anti-windup")})); +end Tuning_uEcoSta_uTowFanSpeMax; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/package.mo new file mode 100644 index 00000000000..a831498af37 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences; +package Validation "Collection of validation models" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/package.order new file mode 100644 index 00000000000..9314cb28bf0 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/package.order @@ -0,0 +1,4 @@ +BypassValve +HeatExchangerPump +PredictedOutletTemperature +Tuning_uEcoSta_uTowFanSpeMax diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/package.mo new file mode 100644 index 00000000000..22f19d76e81 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/package.mo @@ -0,0 +1,43 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers; +package Subsequences "Waterside economizer control subsequences" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains waterside economizer control subsequences. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}})})); +end Subsequences; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/package.order new file mode 100644 index 00000000000..51698baf81d --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/package.order @@ -0,0 +1,5 @@ +BypassValve +HeatExchangerPump +PredictedOutletTemperature +Tuning +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Validation/Controller.mo new file mode 100644 index 00000000000..7ed73a3306f --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Validation/Controller.mo @@ -0,0 +1,315 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Validation; +model Controller + "Validates the waterside economizer enable-disable controller" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Controller + wseSta(TOutWetDes(displayUnit="degC")) + "Waterside economizer enable status sequence" + annotation (Placement(transformation(extent={{-190,40},{-170,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Controller + wseSta1 "Waterside economizer enable status sequence" + annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Controller + wseSta2 "Waterside economizer enable status sequence" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Controller + wseSta3( + final have_byPasValCon=false, + TOutWetDes(displayUnit="degC")) + "Waterside economizer enable status sequence" + annotation (Placement(transformation(extent={{240,40},{260,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin dpWSE( + final amplitude=3000, + freqHz=1/3600, + final offset=4500) + "Static pressure difference across chilled water side economizer" + annotation (Placement(transformation(extent={{-260,-80},{-240,-60}}))); + +protected + parameter Real TOutWetBul( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=283.15 + "Average outdoor air wet bulb temperature"; + + parameter Real TChiWatRet( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=293.15 + "Chilled water retun temperature upstream of the WSE"; + + parameter Real TWseOut( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=290.15 + "Chilled water retun temperature downstream of the WSE"; + + parameter Real VChiWat_flow( + final unit="m3/s", + final quantity="VolumeFlowRate", + displayUnit="m3/s")=0.01 + "Measured chilled water return temperature"; + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatFlow( + final k=VChiWat_flow) + "Chilled water flow" + annotation (Placement(transformation(extent={{-260,0},{-240,20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse TOutWetSig( + final amplitude=5, + final period=2*15*60, + final offset=TOutWetBul) "Measured outdoor air wet bulb temperature" + annotation (Placement(transformation(extent={{-260,100},{-240,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant constTowFanSig( + final k=1) + "Cooling tower fan full load signal" + annotation (Placement(transformation(extent={{-260,-40},{-240,-20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatRetSig( + final k=TChiWatRet) + "Chilled water return temperature upstream of WSE" + annotation (Placement(transformation(extent={{-260,70},{-240,90}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatRetDow( + final k=TWseOut) + "Chilled water return temperature downstream of WSE" + annotation (Placement(transformation(extent={{-260,40},{-240,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatFlow1( + final k=VChiWat_flow) + "Chilled water flow" + annotation (Placement(transformation(extent={{-150,0},{-130,20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutWetSig1( + final k=TOutWetBul) + "Measured outdoor air wet bulb temperature" + annotation (Placement(transformation(extent={{-150,100},{-130,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant constTowFanSig1( + final k=1) + "Cooling tower fan full load signal" + annotation (Placement(transformation(extent={{-150,-40},{-130,-20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatRetSig1( + final k=TChiWatRet) + "Chilled water return temperature upstream of WSE" + annotation (Placement(transformation(extent={{-150,70},{-130,90}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatRetDow1( + final offset=TWseOut, + final freqHz=1/1800, + final amplitude=4) + "Chilled water return temperature downstream of WSE" + annotation (Placement(transformation(extent={{-150,40},{-130,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatFlow2( + final k=VChiWat_flow) + "Chilled water flow" + annotation (Placement(transformation(extent={{-30,0},{-10,20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse TOutWetSig2( + final amplitude=5, + final period=2*15*60, + final offset=TOutWetBul) "Measured outdoor air wet bulb temperature" + annotation (Placement(transformation(extent={{-30,100},{-10,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant constTowFanSig2( + final k=1) + "Cooling tower fan full load signal" + annotation (Placement(transformation(extent={{-30,-40},{-10,-20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatRetSig2( + final k=TChiWatRet) + "Chilled water return temperature upstream of WSE" + annotation (Placement(transformation(extent={{-30,70},{-10,90}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatRetDow3( + final offset=TWseOut, + final freqHz=1/1800, + final amplitude=4) + "Chilled water return temperature downstream of WSE" + annotation (Placement(transformation(extent={{-30,40},{-10,60}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=0) + "Stage 0" + annotation (Placement(transformation(extent={{-300,-20},{-280,0}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1( + final k=2) + "Stage 0" + annotation (Placement(transformation(extent={{-300,-60},{-280,-40}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=true) "Enabled plant" + annotation (Placement(transformation(extent={{-300,22},{-280,42}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatFlow3( + final k=VChiWat_flow) + "Chilled water flow" + annotation (Placement(transformation(extent={{160,0},{180,20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant constTowFanSig3( + final k=1) + "Cooling tower fan full load signal" + annotation (Placement(transformation(extent={{160,-40},{180,-20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatRetSig3( + final k=TChiWatRet) + "Chilled water return temperature upstream of WSE" + annotation (Placement(transformation(extent={{160,70},{180,90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatRetDow2( + final k=TWseOut) + "Chilled water return temperature downstream of WSE" + annotation (Placement(transformation(extent={{160,40},{180,60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutWetSig3( + final k=292.15) + "Measured outdoor air wet bulb temperature" + annotation (Placement(transformation(extent={{160,100},{180,120}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.1, + final period=3600) "Enabled plant" + annotation (Placement(transformation(extent={{80,20},{100,40}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt2( + final k=0) + "Stage 0" + annotation (Placement(transformation(extent={{120,-20},{140,0}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TEntHex( + final height=3, + final duration=3600, + final offset=290.15) + "Return chilled water temperature entering heat exchanger" + annotation (Placement(transformation(extent={{160,-80},{180,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 + "Logical not" + annotation (Placement(transformation(extent={{120,20},{140,40}}))); +equation + connect(constTowFanSig.y, wseSta.uTowFanSpeMax) annotation (Line(points={{-238, + -30},{-200,-30},{-200,52},{-192,52}}, color={0,0,127})); + connect(TOutWetSig.y, wseSta.TOutWet) annotation (Line(points={{-238,110},{-200, + 110},{-200,60},{-192,60}}, color={0,0,127})); + connect(TChiWatRetSig.y, wseSta.TChiWatRet) annotation (Line(points={{-238,80}, + {-220,80},{-220,58},{-192,58}}, color={0,0,127})); + connect(chiWatFlow.y, wseSta.VChiWat_flow) annotation (Line(points={{-238,10}, + {-210,10},{-210,54},{-192,54}}, color={0,0,127})); + connect(TChiWatRetDow.y,wseSta.TChiWatRetDow) + annotation (Line(points={{-238,50},{-230,50},{-230,56},{-192,56}}, color={0,0,127})); + connect(constTowFanSig1.y, wseSta1.uTowFanSpeMax) annotation (Line(points={{-128, + -30},{-90,-30},{-90,52},{-82,52}}, color={0,0,127})); + connect(TOutWetSig1.y, wseSta1.TOutWet) annotation (Line(points={{-128,110},{-90, + 110},{-90,60},{-82,60}}, color={0,0,127})); + connect(TChiWatRetSig1.y, wseSta1.TChiWatRet) annotation (Line(points={{-128,80}, + {-110,80},{-110,58},{-82,58}}, color={0,0,127})); + connect(chiWatFlow1.y, wseSta1.VChiWat_flow) annotation (Line(points={{-128,10}, + {-100,10},{-100,54},{-82,54}}, color={0,0,127})); + connect(TChiWatRetDow1.y,wseSta1.TChiWatRetDow) + annotation (Line(points={{-128,50},{-120,50},{-120,56},{-82,56}}, color={0,0,127})); + connect(constTowFanSig2.y, wseSta2.uTowFanSpeMax) annotation (Line(points={{-8,-30}, + {30,-30},{30,52},{38,52}}, color={0,0,127})); + connect(TOutWetSig2.y,wseSta2. TOutWet) annotation (Line(points={{-8,110},{30, + 110},{30,60},{38,60}}, color={0,0,127})); + connect(TChiWatRetSig2.y,wseSta2. TChiWatRet) annotation (Line(points={{-8,80}, + {10,80},{10,58},{38,58}}, color={0,0,127})); + connect(chiWatFlow2.y,wseSta2. VChiWat_flow) annotation (Line(points={{-8,10}, + {20,10},{20,54},{38,54}}, color={0,0,127})); + connect(wseSta2.TChiWatRetDow, TChiWatRetDow3.y) + annotation (Line(points={{38,56},{0,56},{0,50},{-8,50}}, color={0,0,127})); + connect(con.y, wseSta.uPla) annotation (Line(points={{-278,32},{-220,32},{-220, + 50},{-192,50}}, color={255,0,255})); + connect(con.y, wseSta1.uPla) annotation (Line(points={{-278,32},{-110,32},{-110, + 50},{-82,50}}, color={255,0,255})); + connect(con.y, wseSta2.uPla) annotation (Line(points={{-278,32},{10,32},{10,50}, + {38,50}}, color={255,0,255})); + connect(conInt.y, wseSta.uIni) annotation (Line(points={{-278,-10},{-216,-10}, + {-216,48},{-192,48}}, color={255,127,0})); + connect(conInt.y, wseSta1.uIni) annotation (Line(points={{-278,-10},{-106,-10}, + {-106,48},{-82,48}}, color={255,127,0})); + connect(conInt.y, wseSta2.uIni) annotation (Line(points={{-278,-10},{14,-10},{ + 14,48},{38,48}}, color={255,127,0})); + connect(conInt1.y, wseSta.uChiSta) annotation (Line(points={{-278,-50},{-206,-50}, + {-206,46},{-192,46}}, color={255,127,0})); + connect(conInt1.y, wseSta1.uChiSta) annotation (Line(points={{-278,-50},{-96,-50}, + {-96,46},{-82,46}}, color={255,127,0})); + connect(conInt1.y, wseSta2.uChiSta) annotation (Line(points={{-278,-50},{24,-50}, + {24,46},{38,46}}, color={255,127,0})); + connect(dpWSE.y, wseSta.dpChiWat) annotation (Line(points={{-238,-70},{-226,-70}, + {-226,44},{-192,44}}, color={0,0,127})); + connect(dpWSE.y, wseSta1.dpChiWat) annotation (Line(points={{-238,-70},{-116,-70}, + {-116,44},{-82,44}}, color={0,0,127})); + connect(dpWSE.y, wseSta2.dpChiWat) annotation (Line(points={{-238,-70},{4,-70}, + {4,44},{38,44}}, color={0,0,127})); + connect(TOutWetSig3.y, wseSta3.TOutWet) annotation (Line(points={{182,110},{220, + 110},{220,60},{238,60}}, color={0,0,127})); + connect(TChiWatRetSig3.y, wseSta3.TChiWatRet) annotation (Line(points={{182,80}, + {214,80},{214,58},{238,58}}, color={0,0,127})); + connect(TChiWatRetDow2.y, wseSta3.TChiWatRetDow) annotation (Line(points={{182, + 50},{196,50},{196,56},{238,56}}, color={0,0,127})); + connect(chiWatFlow3.y, wseSta3.VChiWat_flow) annotation (Line(points={{182,10}, + {204,10},{204,54},{238,54}}, color={0,0,127})); + connect(constTowFanSig3.y, wseSta3.uTowFanSpeMax) annotation (Line(points={{182, + -30},{208,-30},{208,52},{238,52}}, color={0,0,127})); + connect(conInt2.y, wseSta3.uIni) annotation (Line(points={{142,-10},{212,-10}, + {212,48},{238,48}}, color={255,127,0})); + connect(booPul.y, not1.u) + annotation (Line(points={{102,30},{118,30}}, color={255,0,255})); + connect(not1.y, wseSta3.uPla) annotation (Line(points={{142,30},{200,30},{200, + 50},{238,50}}, color={255,0,255})); + connect(not1.y, wseSta3.uPum) annotation (Line(points={{142,30},{200,30},{200, + 42},{238,42}}, color={255,0,255})); + connect(TEntHex.y, wseSta3.TEntHex) annotation (Line(points={{182,-70},{220,-70}, + {220,40},{238,40}}, color={0,0,127})); + connect(conInt2.y, wseSta3.uChiSta) annotation (Line(points={{142,-10},{212,-10}, + {212,46},{238,46}}, color={255,127,0})); +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Validation/Controller.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Controller. +

                      +", revisions=" +
                        +
                      • +October 15, 2018, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-320,-140},{320,140}}), + graphics={ + Text( + extent={{-276,-88},{-194,-112}}, + textColor={0,0,127}, + textString="Tests enable conditions +based on the outdoor air +wetbulb temperature"), + Text( + extent={{-166,-84},{-78,-114}}, + textColor={0,0,127}, + textString="Tests disable conditions +based on the chilled water +temperature downstream of WSE"), + Text( + extent={{-34,-88},{40,-108}}, + textColor={0,0,127}, + textString="Combines conditions from +the first two tests"), + Text( + extent={{164,-86},{254,-98}}, + textColor={0,0,127}, + textString="Plant enabled in economizer mode")})); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Validation/package.mo new file mode 100644 index 00000000000..d9a4a2fa203 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers; +package Validation "Collection of validation models" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Validation/package.order new file mode 100644 index 00000000000..8cba75e31a7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Validation/package.order @@ -0,0 +1 @@ +Controller diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/package.mo new file mode 100644 index 00000000000..9f075b9fe8c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/package.mo @@ -0,0 +1,45 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant; +package Economizers "Waterside economizer (WSE) sequences" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains waterside economizer (WSE) control sequences. +The implementation is based on section 5.20.3. in ASHRAE Guideline36-2021. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end Economizers; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/package.order new file mode 100644 index 00000000000..9ffbffcb990 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/package.order @@ -0,0 +1,3 @@ +Controller +Subsequences +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/ControllerTwo.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/ControllerTwo.mo new file mode 100644 index 00000000000..50c5234b7f8 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/ControllerTwo.mo @@ -0,0 +1,333 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation; +block ControllerTwo + "Lead/lag or lead/standby equipment rotation controller for two devices or two groups of devices" + + parameter Boolean lag = true + "true = lead/lag; false = lead/standby"; + + parameter Boolean continuous = false + "Continuous lead device operation" + annotation (Evaluate=true, Dialog(enable=not lag)); + + parameter Boolean minLim = false + "Utilize minimum runtime period for a current lead device before rotation may occur" + annotation (Evaluate=true, Dialog(enable=not continuous)); + + parameter Boolean initRoles[nDev] = {true, false} + "Initial roles: true = lead, false = lag/standby" + annotation (Evaluate=true, Dialog(tab="Advanced", group="Initiation")); + + parameter Boolean simTimSta = true + "Measure rotation time from the simulation start" + annotation(Evaluate=true, Dialog(group="Scheduler", enable=continuous)); + + parameter Boolean weeInt = true + "Rotation is scheduled in: true = weekly intervals; false = daily intervals" + annotation(Evaluate=true, Dialog(group="Scheduler", enable=not simTimSta)); + + parameter Real rotationPeriod( + final unit="s", + final quantity="Time", + displayUnit="h") = 1209600 + "Rotation time period measured from simulation start" + annotation(Dialog(group="Scheduler", enable=simTimSta)); + + parameter Real minLeaRuntime( + final unit="s", + final quantity="Time", + displayUnit="h") = 43200 + "Minimum cumulative runtime period for a current lead device before rotation may occur" + annotation (Evaluate=true, Dialog(enable=(not continuous and minLim))); + + parameter Real offset( + final unit="s", + final quantity="Time") = 0 + "Offset that is added to 'time', may be used for computing time in a different time zone" + annotation(Evaluate=true, Dialog(group="Calendar", enable=(continuous and not simTimSta))); + + parameter Buildings.Controls.OBC.CDL.Types.ZeroTime zerTim = Buildings.Controls.OBC.CDL.Types.ZeroTime.NY2019 + "Enumeration for choosing how reference time (time = 0) should be defined" + annotation(Evaluate=true, Dialog(group="Calendar", enable=(continuous and not simTimSta))); + + parameter Integer yearRef(min=firstYear, max=lastYear) = 2019 + "Year when time = 0, used if zerTim=Custom" + annotation(Evaluate=true, Dialog(group="Calendar", enable=zerTim==Buildings.Controls.OBC.CDL.Types.ZeroTime.Custom and continuous)); + + parameter Integer houOfDay = 2 + "Rotation hour of the day: 0 = midnight; 23 = 11pm" + annotation(Evaluate=true, Dialog(group="Scheduler", enable=not simTimSta)); + + parameter Integer weeCou = 1 "Number of weeks" + annotation (Evaluate=true, Dialog(enable=weeInt and not simTimSta, group="Scheduler")); + + parameter Integer weekday = 1 + "Rotation weekday, 1 = Monday, 7 = Sunday" + annotation (Evaluate=true, Dialog(enable=weeInt and not simTimSta, group="Scheduler")); + + parameter Integer dayCou = 1 "Number of days" + annotation (Evaluate=true, Dialog(enable=not weeInt and not simTimSta, group="Scheduler")); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaStaSet if not continuous + "Lead device status setpoint" + annotation (Placement(transformation(extent={{-200,-20},{-160,20}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLagStaSet if lag + "Lag device status setpoint" + annotation (Placement(transformation(extent={{-200,-100},{-160,-60}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uDevSta[nDev] + "Device proven ON status, where each index represents a physical device/group of devices" + annotation (Placement(transformation(extent={{-200,60},{-160,100}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yDevStaSet[nDev] + "Device status setpoint, where each index represents a physical device/group of devices" + annotation (Placement(transformation(extent={{160,10},{180,30}}), iconTransformation( + extent={{100,40},{140,80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yDevRol[nDev] + "Device role: true = lead, false = lag or standby" annotation (Placement( + transformation(extent={{160,-30},{180,-10}}), iconTransformation(extent={{100,-80}, + {140,-40}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Scheduler + rotSch( + final rotationPeriod=rotationPeriod, + final simTimSta=simTimSta, + final weeInt=weeInt, + final houOfDay=houOfDay, + final weeCou=weeCou, + final weekday=weekday, + final dayCou=dayCou, + final zerTim=zerTim, + final yearRef=yearRef, + final offset=offset) if continuous + "Generates equipment rotation trigger based on a schedule" + annotation (Placement(transformation(extent={{0,20},{20,40}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.MinimumLeadRuntime + minLeaTim(final minLeaRuntime=minLeaRuntime) if (minLim and not continuous) + "Rotation signal generator with a minimum leading device runtime limiter" + annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); + +protected + final parameter Integer nDev = 2 + "Total number of devices, such as chillers, isolation valves, CW pumps, or CHW pumps"; + + final constant Integer firstYear = 2010 + "First year that is supported, i.e. the first year in timeStampsNewYear[:]" + annotation (Evaluate=true, Dialog(enable=not continuous)); + + final constant Integer lastYear = firstYear + 20 + "Last year that is currently supported" + annotation (Evaluate=true, Dialog(enable=not continuous)); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.LeastRuntime + leaRunTim(final lag=lag) if (not minLim and not continuous) + "Rotation signal generator based on least runtime, at device enable" + annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.ContinuousLeadSwapTwo + leaSwa if continuous + "Ensures no old lead device is switched off until the new lead device is proven on" + annotation (Placement(transformation(extent={{100,20},{120,40}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Two + rotTwoCon if continuous + "Based on a rotation trigger sets device roles according to equipment rotation" + annotation (Placement(transformation(extent={{40,20},{60,40}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Two + rotTwo if not continuous + "Based on a rotation trigger sets device roles according to equipment rotation" + annotation (Placement(transformation(extent={{100,-40},{120,-20}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator repLea( + final nout=nDev) if not continuous "Replicates lead signal" + annotation (Placement(transformation(extent={{-120,-20},{-100,0}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator repLag( + final nout=nDev) if lag "Replicates lag signal" + annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch logSwi1[nDev] if not continuous + "Switch" + annotation (Placement(transformation(extent={{-60,-42},{-40,-22}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staBySta[nDev]( + final k=fill(false, nDev)) if not lag and not continuous "Standby status" + annotation (Placement(transformation(extent={{-120,-90},{-100,-70}}))); + +equation + connect(logSwi1.u1, repLea.y) annotation (Line(points={{-62,-24},{-80,-24},{-80, + -10},{-98,-10}}, color={255,0,255})); + connect(logSwi1.u3,repLag. y) annotation (Line(points={{-62,-40},{-98,-40}}, + color={255,0,255})); + connect(uLeaStaSet, repLea.u) + annotation (Line(points={{-180,0},{-140,0},{-140,-10},{-122,-10}}, + color={255,0,255})); + connect(uLagStaSet, repLag.u) + annotation (Line(points={{-180,-80},{-140,-80},{-140,-40},{-122,-40}}, + color={255,0,255})); + connect(logSwi1.y, yDevStaSet) annotation (Line(points={{-38,-32},{-30,-32},{-30, + 60},{140,60},{140,20},{170,20}}, color={255,0,255})); + connect(staBySta.y,logSwi1. u3) annotation (Line(points={{-98,-80},{-90,-80},{ + -90,-40},{-62,-40}}, color={255,0,255})); + connect(leaSwa.yDevStaSet, yDevStaSet) annotation (Line(points={{122,30},{140, + 30},{140,20},{170,20}}, + color={255,0,255})); + connect(minLeaTim.yRot, rotTwo.uRot) + annotation (Line(points={{62,-30},{98,-30}}, color={255,0,255})); + connect(rotTwo.yDevRol, yDevRol) annotation (Line(points={{122,-30},{140,-30}, + {140,-20},{170,-20}},color={255,0,255})); + connect(rotTwo.yPreDevRolSig, minLeaTim.uPreDevRolSig) annotation (Line( + points={{122,-36},{140,-36},{140,-60},{20,-60},{20,-38},{38,-38}}, + color={255,0,255})); + connect(rotTwo.yPreDevRolSig, logSwi1.u2) annotation (Line(points={{122,-36},{ + 140,-36},{140,-60},{-80,-60},{-80,-32},{-62,-32}}, color={255,0,255})); + connect(rotSch.yRot, rotTwoCon.uRot) + annotation (Line(points={{22,30},{38,30}}, color={255,0,255})); + connect(uDevSta, leaSwa.uDevSta) annotation (Line(points={{-180,80},{90,80},{90, + 26},{98,26}}, color={255,0,255})); + connect(rotTwoCon.yDevRol, leaSwa.uDevRolSet) annotation (Line(points={{62,30}, + {80,30},{80,34},{98,34}}, + color={255,0,255})); + connect(rotTwoCon.yDevRol, yDevRol) annotation (Line(points={{62,30},{80,30},{ + 80,0},{140,0},{140,-20},{170,-20}}, color={255,0,255})); + connect(uDevSta, minLeaTim.uDevSta) annotation (Line(points={{-180,80},{-20,80}, + {-20,-30},{38,-30}}, color={255,0,255})); + connect(rotTwo.yPreDevRolSig, leaRunTim.uPreDevRolSig) annotation (Line( + points={{122,-36},{140,-36},{140,-94},{30,-94},{30,-88},{38,-88}}, + color={255,0,255})); + connect(uDevSta, leaRunTim.uDevSta) annotation (Line(points={{-180,80},{-20,80}, + {-20,-80},{38,-80}}, color={255,0,255})); + connect(leaRunTim.yRot, rotTwo.uRot) annotation (Line(points={{62,-80},{80,-80}, + {80,-30},{98,-30}}, color={255,0,255})); + +annotation(Diagram(coordinateSystem(extent={{-160,-100},{160,100}})), + defaultComponentName="equRot", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor={235,235,235}, + fillColor={235,235,235}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-75,-6},{-89,8}}, + lineColor={235,235,235}, + fillColor={235,235,235}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Ellipse( + origin={-26.6667,38.6207}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-53.3333,1.37927},{-13.3329,41.3792}}), + Ellipse( + origin={93.3333,-81.3793}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-53.3333,1.37927},{-13.3329,41.3792}}), + Ellipse( + origin={-26.6667,-81.3793}, + lineColor={128,128,128}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + extent={{-53.3333,1.37927},{-13.3329,41.3792}}), + Ellipse( + origin={93.333,38.6207}, + lineColor={128,128,128}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + extent={{-53.3333,1.37927},{-13.3329,41.3792}}), + Line(points={{-40,60},{0,60},{0,-60},{40,-60}}, color={128,128,128}), + Line(points={{-40,-60},{0,-60},{0,60},{40,60}}, color={128,128,128})}), + Documentation(info=" +

                      +This controller block rotates equipment, such as chillers, pumps or valves, in order +to ensure equal wear and tear. It is intended to be used for lead/lag and +lead/standby operation of two devices or groups of devices. The implementation is +based on the specification from ASHRAE Guideline36-2021, section 5.1.15.1.-4. +

                      +

                      +The controller takes as inputs the current device proven ON/OFF status vector uDevSta, +lead device status setpoint uLeaStaSet and lag device status setpoint uLagStaSet. +The controller features the following rotation subsequences to generate the device status setpoints yDevStaSet +and device roles yDevRol outputs: +

                      + +

                      +The +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Two subsequence allocates +the status setpoints yDevStaSet to devices based on the rotation signal. +

                      +

                      +The output vector yDevRol indicates the role of each device, where true +represents a lead role and false represents a lag or a standby role. +

                      +

                      +The indices of both output vectors and the uDevSta input vector represent physical devices. +

                      +

                      +In addition to the specification in Guideline36, this model allows the user to: +

                      +
                        +
                      • +specify time of day and either a number of days or a weekday with a number of weeks +as time period to rotate devices or groups of devices that run continuously. +
                      • +
                      • +optionally impose a minimum cumulative runtime period minLeaRuntime for a current +lead device before rotation may occur. The time is accumulated in any role for each device and +reset for each lead device or group of devices at role rotation. +This implementation assumes that a more frequent load is being sent to a lead device or group of devices. +
                      • +
                      +", revisions=" +
                        +
                      • +May 18, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end ControllerTwo; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/ContinuousLeadSwapTwo.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/ContinuousLeadSwapTwo.mo new file mode 100644 index 00000000000..b420c767069 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/ContinuousLeadSwapTwo.mo @@ -0,0 +1,69 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences; +block ContinuousLeadSwapTwo + "Ensures that the previous lead device remains enabled until the new lead device is proven on" + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uDevRolSet[nDev] + "Device role setpoint: true = lead, false = standby" + annotation (Placement(transformation(extent={{-100,0},{-60,40}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uDevSta[nDev] + "Device status: true = proven ON; false = proven OFF" + annotation (Placement(transformation(extent={{-100,-40},{-60,0}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yDevStaSet[nDev] + "Device status setpoint" + annotation (Placement(transformation(extent={{60,0},{100,40}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + final parameter Integer nDev = 2 + "Total number of devices, such as chillers, isolation valves, CW pumps, or CHW pumps"; + + Buildings.Controls.OBC.CDL.Logical.Or or1[nDev] "Logical or" + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not1[nDev] "Logical not" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + +equation + connect(uDevSta, not1.u) + annotation (Line(points={{-80,-20},{-42,-20}}, color={255,0,255})); + connect(uDevRolSet, or1.u1) + annotation (Line(points={{-80,20},{18,20}},color={255,0,255})); + connect(not1[1].y, or1[2].u2) + annotation (Line(points={{-18,-20},{0,-20},{0,12},{18,12}}, color={255,0,255})); + connect(not1[2].y, or1[1].u2) + annotation (Line(points={{-18,-20},{-10,-20},{-10,12},{18,12}}, color={255,0,255})); + connect(or1.y, yDevStaSet) + annotation (Line(points={{42,20},{80,20}}, color={255,0,255})); + annotation (defaultComponentName="leaSwa", + Icon(graphics={Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( extent={{71,7},{85,-7}}, + lineColor={235,235,235}, + fillColor={235,235,235}, + fillPattern=FillPattern.Solid), Ellipse( extent={{-75,-6},{-89,8}}, + lineColor={235,235,235}, + fillColor={235,235,235}, + fillPattern=FillPattern.Solid), Text( extent={{-120,146},{100,108}}, + textColor={0,0,255}, textString="%name")}), + Documentation(info=" +

                      +This block ensures that the new lead device is started and proven on before the old +lead device is switched to standby and shut off. The implementation is +according to ASHRAE Guideline36-2021, section 5.1.15.4.b. +

                      +", revisions=" +
                        +
                      • +May 18, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), + Diagram(coordinateSystem(extent={{-60,-40},{60,40}}))); +end ContinuousLeadSwapTwo; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/LeastRuntime.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/LeastRuntime.mo new file mode 100644 index 00000000000..c5e989eeb1a --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/LeastRuntime.mo @@ -0,0 +1,175 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences; +block LeastRuntime + "Generates equipment rotation signal at each device enable if that device has a least total runtime" + + parameter Boolean lag = true + "true = lead/lag; false = lead/standby"; + + parameter Boolean initRoles[nDev] = {true, false} + "Initial roles: true = lead, false = lag/standby" + annotation (Evaluate=true, Dialog(tab="Advanced", group="Initiation")); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uDevSta[nDev] + "Device status: true = proven ON, false = proven OFF" + annotation (Placement(transformation(extent={{-200,40},{-160,80}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPreDevRolSig[nDev] + "Device roles in the previous time instance: true = lead; false = lag or standby" + annotation (Placement(transformation(extent={{-200,-60},{-160,-20}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yRot + "Rotation trigger signal" + annotation (Placement(transformation(extent={{160,-20},{200,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Logical.TimerAccumulating accTim[nDev] + "Measures time spent loaded at the current role (lead or lag)" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + + CDL.Logical.MultiOr mulOr(nin=nDev) "Multiple or" + annotation (Placement(transformation(extent={{120,-10},{140,10}}))); +protected + final parameter Integer nDev = 2 + "Total number of devices, such as chillers, isolation valves, CW pumps, or CHW pumps"; + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con[nDev]( + final k=fill(false, nDev)) "Constant" + annotation (Placement(transformation(extent={{-120,20},{-100,40}}))); + + Buildings.Controls.OBC.CDL.Reals.Greater longer1 + "Runtime of the first device is longer than runtime of the second device" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + + Buildings.Controls.OBC.CDL.Reals.Greater longer2 + "Runtime of the second device is longer than the runtime of the first device" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not1 if lag "Logical not" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not2 if lag "Logical not" + annotation (Placement(transformation(extent={{0,20},{20,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not3[nDev] if lag "Logical not" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + + Buildings.Controls.OBC.CDL.Logical.And and3[nDev] if lag "Logical not" + annotation (Placement(transformation(extent={{40,10},{60,30}}))); + + Buildings.Controls.OBC.CDL.Logical.Edge edg [nDev]( + final pre_u_start=fill(false, nDev)) if lag "Rising edge" + annotation (Placement(transformation(extent={{-120,-20},{-100,0}}))); + + Buildings.Controls.OBC.CDL.Logical.And and1[nDev] if not lag "Logical and" + annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); + + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg [nDev]( + final pre_u_start=fill(false, nDev)) if not lag "Falling edge" + annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); + + Buildings.Controls.OBC.CDL.Logical.And and2[nDev] if lag + "Logical and" + annotation (Placement(transformation(extent={{80,10},{100,30}}))); + +equation + connect(uDevSta, accTim.u) + annotation (Line(points={{-180,60},{-82,60}}, color={255,0,255})); + connect(accTim[1].y, longer1.u1) + annotation (Line(points={{-58,60},{-42,60}}, color={0,0,127})); + connect(accTim[2].y, longer1.u2) annotation (Line(points={{-58,60},{-50,60},{-50, + 52},{-42,52}}, color={0,0,127})); + connect(accTim[1].y, longer2.u2) annotation (Line(points={{-58,60},{-50,60},{-50, + 22},{-42,22}}, color={0,0,127})); + connect(accTim[2].y, longer2.u1) annotation (Line(points={{-58,60},{-50,60},{-50, + 30},{-42,30}}, color={0,0,127})); + connect(longer2.y, not2.u) + annotation (Line(points={{-18,30},{-2,30}}, color={255,0,255})); + connect(longer1.y, not1.u) + annotation (Line(points={{-18,60},{-2,60}}, color={255,0,255})); + connect(uPreDevRolSig, not3.u) + annotation (Line(points={{-180,-40},{-62,-40}},color={255,0,255})); + connect(edg.y, and3.u2) annotation (Line(points={{-98,-10},{20,-10},{20,12},{38, + 12}}, color={255,0,255})); + connect(not1.y, and3[1].u1) annotation (Line(points={{22,60},{30,60},{30,20},{ + 38,20}}, color={255,0,255})); + connect(not2.y, and3[2].u1) annotation (Line(points={{22,30},{30,30},{30,20},{ + 38,20}}, color={255,0,255})); + connect(longer1.y, and1[1].u1) annotation (Line(points={{-18,60},{-10,60},{-10, + -60},{58,-60}}, color={255,0,255})); + connect(longer2.y, and1[2].u1) annotation (Line(points={{-18,30},{-10,30},{-10, + -60},{58,-60}}, color={255,0,255})); + connect(falEdg.y, and1.u2) annotation (Line(points={{-98,-60},{-60,-60},{-60,-68}, + {58,-68}}, color={255,0,255})); + connect(con.y, accTim.reset) annotation (Line(points={{-98,30},{-90,30},{-90,52}, + {-82,52}}, color={255,0,255})); + connect(uDevSta, falEdg.u) annotation (Line(points={{-180,60},{-140,60},{-140, + -60},{-122,-60}}, color={255,0,255})); + connect(uDevSta, edg.u) annotation (Line(points={{-180,60},{-140,60},{-140,-10}, + {-122,-10}}, color={255,0,255})); + connect(and3.y, and2.u1) + annotation (Line(points={{62,20},{78,20}}, color={255,0,255})); + connect(not3.y, and2.u2) annotation (Line(points={{-38,-40},{70,-40},{70,12},{ + 78,12}}, color={255,0,255})); + connect(and2.y, mulOr.u) annotation (Line(points={{102,20},{110,20},{110,0},{118, + 0}}, color={255,0,255})); + connect(and1.y, mulOr.u) annotation (Line(points={{82,-60},{110,-60},{110,0},{ + 118,0}}, color={255,0,255})); + connect(mulOr.y, yRot) + annotation (Line(points={{142,0},{180,0}}, color={255,0,255})); + + annotation (Diagram(coordinateSystem(extent={{-160,-80},{160,80}})), + defaultComponentName="leaRunTim", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Line(points={{-66,-70},{82,-70}}, + color={192,192,192}), + Line(points={{-58,68},{-58,-80}}, + color={192,192,192}), + Polygon(lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{90.0,-70.0},{68.0,-62.0},{68.0,-78.0},{90.0,-70.0}}), + Polygon(lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{-58,90},{-66,68},{-50,68},{-58,90}}), + Line(points={{-56,-70},{-38,-70},{-38,-26},{40,-26},{40,-70},{68,-70}}, + color={255,0,255}), + Line(points={{-58,0},{-40,0},{40,90},{40,0},{68,0}}, + color={0,0,127})}), + Documentation(info=" +

                      +This subsequence generates a rotation trigger signal yRot based on measuring the time each of the devices/groups of devices +has spent in its current role. The rotation trigger output yRot is generated: +

                      +
                        +
                      • +for lead/lag operation when a device/a group of devices is enabled that has the shortest cumulative runtime +
                      • +
                      • +for lead/standby operation when a device/a group of devices is disbled that has the longest cumulative runtime +
                      • +
                      +

                      +The implementation corresponts sections 5.1.15.3. and 5.1.15.4.a. of Guideline36-2021 when applied to +two devices or groups of devices. +

                      +", revisions=" +
                        +
                      • +May 15 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end LeastRuntime; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/MinimumLeadRuntime.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/MinimumLeadRuntime.mo new file mode 100644 index 00000000000..a39e657b5ff --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/MinimumLeadRuntime.mo @@ -0,0 +1,148 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences; +block MinimumLeadRuntime + "Generates equipment rotation signal when a lead device/group of devices exceeds a miminum cumulative runtime" + + parameter Boolean initRoles[nDev] = {true, false} + "Initial roles: true = lead, false = lag/standby" + annotation (Evaluate=true, Dialog(tab="Advanced", group="Initiation")); + + parameter Real minLeaRuntime( + final unit="s", + final quantity="Time", + displayUnit="h") = 864000 + "Minimum cumulative runtime period for a current lead device before rotation may occur"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uDevSta[nDev] + "Device status: true = proven ON, false = proven OFF" + annotation (Placement(transformation(extent={{-200,40},{-160,80}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPreDevRolSig[nDev] + "Device roles in the previous time instance: true = lead; false = lag or standby" + annotation (Placement(transformation(extent={{-200,-80},{-160,-40}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yRot "Rotation trigger signal" + annotation (Placement(transformation(extent={{160,0},{200,40}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Logical.TimerAccumulating accTim[nDev]( + final t=fill(minLeaRuntime, nDev)) + "Measures time spent loaded at the current role (lead or lag)" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + +protected + final parameter Integer nDev = 2 + "Total number of devices, such as chillers, isolation valves, CW pumps, or CHW pumps"; + + final parameter Real minLeaRuntimes[nDev]( + final unit=fill("s",nDev), + final quantity=fill("Time",nDev)) = fill(minLeaRuntime, nDev) + "Staging runtimes array"; + + Buildings.Controls.OBC.CDL.Logical.And and2[nDev] "Logical and" + annotation (Placement(transformation(extent={{80,10},{100,30}}))); + + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr( + final nin=nDev) "Array or" + annotation (Placement(transformation(extent={{120,10},{140,30}}))); + + Buildings.Controls.OBC.CDL.Logical.MultiAnd allOn( + final nin=nDev) "Outputs true if all devices are enabled" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + + Buildings.Controls.OBC.CDL.Logical.MultiOr anyOn( + final nin=nDev) "Checks if any device is disabled" + annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); + + Buildings.Controls.OBC.CDL.Logical.Not allOff + "Returns true if all devices are disabled" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep1( + final nout=nDev) "Booolean replicator" + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + + Buildings.Controls.OBC.CDL.Logical.Or equSig + "Outputs true if either all devices are enabled or all devices are disabled" + annotation (Placement(transformation(extent={{-20,10},{0,30}}))); + + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg1[nDev] "Falling Edge" + annotation (Placement(transformation(extent={{-140,-70},{-120,-50}}))); + +equation + connect(mulOr.u, and2.y) + annotation (Line(points={{118,20},{102,20}}, color={255,0,255})); + + connect(booRep1.y, and2.u2) + annotation (Line(points={{42,20},{50,20},{50,12},{78,12}}, color={255,0,255})); + connect(anyOn.y, allOff.u) + annotation (Line(points={{-78,-10},{-62,-10}}, color={255,0,255})); + connect(booRep1.u, equSig.y) + annotation (Line(points={{18,20},{2,20}}, color={255,0,255})); + connect(allOff.y, equSig.u2) annotation (Line(points={{-38,-10},{-30,-10},{-30, + 12},{-22,12}}, color={255,0,255})); + connect(allOn.y, equSig.u1) annotation (Line(points={{-38,30},{-30,30},{-30,20}, + {-22,20}},color={255,0,255})); + connect(uDevSta, accTim.u) + annotation (Line(points={{-180,60},{-62,60}}, color={255,0,255})); + connect(uDevSta, allOn.u) annotation (Line(points={{-180,60},{-80,60},{-80, + 30},{-62,30}}, color={255,0,255})); + connect(uDevSta, anyOn.u) annotation (Line(points={{-180,60},{-120,60},{-120, + -10},{-102,-10}}, color={255,0,255})); + connect(mulOr.y, yRot) + annotation (Line(points={{142,20},{180,20}}, color={255,0,255})); + connect(uPreDevRolSig, falEdg1.u) + annotation (Line(points={{-180,-60},{-142,-60}}, color={255,0,255})); + connect(falEdg1.y, accTim.reset) annotation (Line(points={{-118,-60},{-110,-60}, + {-110,52},{-62,52}}, color={255,0,255})); + connect(accTim.passed, and2.u1) annotation (Line(points={{-38,52},{60,52},{60, + 20},{78,20}}, color={255,0,255})); + annotation (Diagram(coordinateSystem(extent={{-160,-80},{160,80}})), + defaultComponentName="minLeaTim", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Line(points={{-66,-70},{82,-70}}, + color={192,192,192}), + Line(points={{-58,68},{-58,-80}}, + color={192,192,192}), + Polygon(lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{90.0,-70.0},{68.0,-62.0},{68.0,-78.0},{90.0,-70.0}}), + Polygon(lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{-58,90},{-66,68},{-50,68},{-58,90}}), + Line(points={{-56,-70},{-38,-70},{-38,-26},{40,-26},{40,-70},{68,-70}}, + color={255,0,255}), + Line(points={{-58,0},{-40,0},{40,90},{40,0},{68,0}}, + color={0,0,127})}), + Documentation(info=" +

                      +This subsequence generates a rotation trigger based on measuring time each of the devices enable time. +The rotation trigger output yRot is generated as the current lead device runtime +exceeds minLeaRuntime and the conditions are met such that the devices are not hot swapped. To +avoid hot swapping the lead and lag/standby device need to be either both ON or both OFF for the rotation to occur. +As the rotation trigger output yRot signal is generated, the runtime for the previous lead device +or group of devices is reset to zero. +

                      +This is an OBC custom implementation. +

                      +", revisions=" +
                        +
                      • +May 15, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end MinimumLeadRuntime; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Scheduler.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Scheduler.mo new file mode 100644 index 00000000000..7962ab2aed2 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Scheduler.mo @@ -0,0 +1,249 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences; +block Scheduler + "Equipment rotation signal based on a scheduler for equipment that runs continuously" + + parameter Buildings.Controls.OBC.CDL.Types.ZeroTime zerTim = Buildings.Controls.OBC.CDL.Types.ZeroTime.NY2019 + "Enumeration for choosing how reference time (time = 0) should be defined" + annotation(Dialog(group="Calendar", enable=not simTimSta)); + + parameter Integer yearRef( + final min=firstYear, + final max=lastYear) = 2019 + "Year when time = 0, used if zerTim=Custom" + annotation(Dialog(group="Calendar", enable=zerTim==Buildings.Controls.OBC.CDL.Types.ZeroTime.Custom)); + + parameter Real offset( + final unit="s", + final quantity="Time") = 0 + "Offset that is added to 'time', may be used for computing time in different time zone" + annotation(Dialog(group="Calendar", enable=not simTimSta)); + + parameter Real rotationPeriod( + final unit="s", + final quantity="Time", + displayUnit="h") = 1209600 + "Rotation time period measured from simulation start" + annotation(Dialog(group="Calendar", enable=simTimSta)); + + parameter Real iniRotDel( + final unit="s", + final quantity="Time", + displayUnit="s") = 1 + "Delay before the first rotation measured from simulation start" + annotation(Dialog(group="Calendar", enable=simTimSta)); + + parameter Boolean simTimSta = true + "Measure rotation time from the simulation start"; + + parameter Boolean weeInt = false + "Rotation is scheduled in: true = weekly intervals; false = daily intervals" + annotation (Evaluate=true, Dialog(enable=not simTimSta)); + + parameter Integer houOfDay = 2 "Rotation hour of the day: 0 = midnight; 23 = 11pm" + annotation (Evaluate=true, Dialog(enable=not simTimSta)); + + parameter Integer weeCou = 1 "Number of weeks" + annotation (Evaluate=true, Dialog(enable=weeInt and not simTimSta)); + + parameter Integer weekday = 1 + "Rotation weekday, 1 = Monday, 7 = Sunday" + annotation (Evaluate=true, Dialog(enable=weeInt and not simTimSta)); + + parameter Integer dayCou = 1 "Number of days" + annotation (Evaluate=true, Dialog(enable=not weeInt and not simTimSta)); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yRot + "Rotation trigger signal" + annotation (Placement(transformation(extent={{160,-20},{200,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.CalendarTime calTim( + final zerTim=zerTim, + final yearRef=yearRef, + final offset=offset) if not simTimSta + "Calendar time" + annotation (Placement(transformation(extent={{-140,100},{-120,120}}))); + + Buildings.Controls.OBC.CDL.Integers.OnCounter onCouInt if not simTimSta + "Integer counter" + annotation (Placement(transformation(extent={{0,10},{20,30}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.SampleTrigger rotTri(final period= + rotationPeriod, final shift=0) if simTimSta "Sample trigger" + annotation (Placement(transformation(extent={{-140,-120},{-120,-100}}))); + +protected + final constant Integer firstYear = 2010 + "First year that is supported, i.e. the first year in timeStampsNewYear[:]"; + + final constant Integer lastYear = firstYear + 11 + "Last year that is supported (actual building automation system need to support a larger range)"; + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant houOfDay1( + final k=houOfDay) if not simTimSta + "Hour of the day for rotating devices that run continuously" + annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant weeDay( + final k=weekday) if (weeInt and not simTimSta) "Weekday for the rotation" + annotation (Placement(transformation(extent={{-140,20},{-120,40}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant weeCou1( + final k=weeCou) if (weeInt and not simTimSta) "Number of weeks for scheduled rotation" + annotation (Placement(transformation(extent={{-140,-30},{-120,-10}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant dayCou1( + final k=dayCou) if (not weeInt and not simTimSta) "Number of days for scheduled rotation" + annotation (Placement(transformation(extent={{-140,-70},{-120,-50}}))); + + Buildings.Controls.OBC.CDL.Integers.Equal isWee if (weeInt and not simTimSta) + "Checks if current weekday is the rotation weekday" + annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); + + Buildings.Controls.OBC.CDL.Integers.Equal intEqu if not simTimSta + "Checks equality" + annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); + + Buildings.Controls.OBC.CDL.Logical.And and2 if not simTimSta + "Logical and" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + + Buildings.Controls.OBC.CDL.Integers.Equal intEqu2 if not simTimSta + "Logical equal" + annotation (Placement(transformation(extent={{40,10},{60,30}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre if not simTimSta + "Logical pre" + annotation (Placement(transformation(extent={{80,10},{100,30}}))); + + Buildings.Controls.OBC.CDL.Logical.Edge edg if not simTimSta + "Rising edge" + annotation (Placement(transformation(extent={{120,10},{140,30}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant truSig( + final k=true) if (not weeInt and not simTimSta) "True signal" + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); + + Buildings.Controls.OBC.CDL.Logical.Timer tim( + final t=iniRotDel) if simTimSta + "Timer" + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); + + Buildings.Controls.OBC.CDL.Logical.And and1 if simTimSta + "Logical And" + annotation (Placement(transformation(extent={{20,-120},{40,-100}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=true) if simTimSta "True constant for the timer" + annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); + +equation + connect(dayCou1.y, intEqu2.u2) annotation (Line(points={{-118,-60},{30,-60},{30, + 12},{38,12}}, color={255,127,0})); + connect(calTim.hour, intEqu.u1) annotation (Line(points={{-119,116},{-100,116}, + {-100,90},{-82,90}},color={255,127,0})); + connect(houOfDay1.y, intEqu.u2) annotation (Line(points={{-118,70},{-100,70},{ + -100,82},{-82,82}}, color={255,127,0})); + connect(calTim.weekDay, isWee.u1) annotation (Line(points={{-119,104},{-110,104}, + {-110,40},{-102,40}}, color={255,127,0})); + connect(weeDay.y, isWee.u2) annotation (Line(points={{-118,30},{-110,30},{-110, + 32},{-102,32}}, color={255,127,0})); + connect(intEqu.y, and2.u1) annotation (Line(points={{-58,90},{-50,90},{-50,20}, + {-42,20}},color={255,0,255})); + connect(intEqu2.y, pre.u) + annotation (Line(points={{62,20},{78,20}}, color={255,0,255})); + connect(pre.y, edg.u) + annotation (Line(points={{102,20},{118,20}}, color={255,0,255})); + connect(and2.y, onCouInt.trigger) + annotation (Line(points={{-18,20},{-2,20}},color={255,0,255})); + connect(onCouInt.y, intEqu2.u1) + annotation (Line(points={{22,20},{38,20}}, color={255,127,0})); + connect(pre.y, onCouInt.reset) annotation (Line(points={{102,20},{110,20},{110, + -8},{10,-8},{10,8}},color={255,0,255})); + connect(edg.y, yRot) + annotation (Line(points={{142,20},{150,20},{150,0},{180,0}}, color={255,0,255})); + connect(weeCou1.y, intEqu2.u2) annotation (Line(points={{-118,-20},{30,-20},{30, + 12},{38,12}}, color={255,127,0})); + connect(isWee.y, and2.u2) annotation (Line(points={{-78,40},{-60,40},{-60,12}, + {-42,12}}, color={255,0,255})); + connect(truSig.y, and2.u2) annotation (Line(points={{-78,10},{-60,10},{-60,12}, + {-42,12}}, color={255,0,255})); + connect(rotTri.y, and1.u2) annotation (Line(points={{-118,-110},{-70,-110},{-70, + -118},{18,-118}}, color={255,0,255})); + connect(and1.y, yRot) annotation (Line(points={{42,-110},{150,-110},{150,0},{180, + 0}}, color={255,0,255})); + connect(con.y, tim.u) + annotation (Line(points={{-78,-90},{-62,-90}}, color={255,0,255})); + connect(tim.passed, and1.u1) annotation (Line(points={{-38,-98},{0,-98},{0, + -110},{18,-110}}, color={255,0,255})); + annotation (Diagram(coordinateSystem(extent={{-160,-140},{160,140}})), + defaultComponentName="rotSch", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, if yRot then {0,255,0} + else {235,235,235}), + fillColor=DynamicSelect({235,235,235}, if yRot then {0,255,0} + else {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-75,-6},{-89,8}}, + lineColor={235,235,235}, + fillColor={235,235,235}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Ellipse( + extent={{-52,56},{58,-54}}, + lineColor={160,160,164}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Line( + points={{4,0},{-20,24}}, + thickness=0.5), + Line( + points={{4,0},{30,0}}, + thickness=0.5)}), + Documentation(info=" +

                      +This block outputs generates a rotation trigger at +chosen time intervals for lead/standby configurations where a lead device runs continuously. +The implementation is based on Guideline36-2021 5.1.15.4.b, except 5.1.15.4.b 1. +

                      +

                      +The user may chose to start counting time from simulation start to generate the +rotation signal at regular intervals rotationPeriod by setting a +flag sinTimSta to true, or to use a calendar. +

                      +

                      +If a calender is used the user needs to select the time of the day as an hour between 0 and 23 at which the rotation shall occur. +Hour 0 is midnight. +The block implements two options to select the time interval for the equipment rotation: +

                      +
                        +
                      • +Each dayCou days; +
                      • +
                      • +Each weeCou weeks on a weekday selected between 1 = Monday and 7 = Sunday. +
                      • +
                      +

                      +To enable weekly intervals set the weeInt to true, otherwise a number of days can be used. +

                      +", revisions=" +
                        +
                      • +May 18, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end Scheduler; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Two.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Two.mo new file mode 100644 index 00000000000..aa373381d96 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Two.mo @@ -0,0 +1,115 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences; +block Two + "Updates device roles based on the equipment rotation signal" + + parameter Boolean initRoles[nDev] = {true, false} + "Initial roles: true = lead, false = lag/standby" + annotation (Evaluate=true,Dialog(tab="Advanced", group="Initiation")); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uRot + "Rising edge to rotate the equipment" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yDevRol[nDev] + "Device role: true = lead, false = lag or standby" + annotation (Placement( + transformation(extent={{100,10},{120,30}}), iconTransformation(extent={{100,-20}, + {140,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yPreDevRolSig[nDev] + "Device roles in the previous time instance: true = lead; false = lag or standby" + annotation (Placement(transformation(extent={{100,-30},{120,-10}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + +protected + final parameter Integer nDev = 2 + "Total number of devices, such as chillers, isolation valves, CW pumps, or CHW pumps"; + + Buildings.Controls.OBC.CDL.Logical.Not not0[nDev] "Logical not" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch logSwi[nDev] "Switch" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre[nDev]( + final pre_u_start=initRoles) "Previous timestep" + annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=nDev) "Signal replicator" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + +equation + connect(logSwi.u1,not0. y) annotation (Line(points={{-2,8},{-30,8},{-30,-10},{ + -38,-10}}, color={255,0,255})); + connect(logSwi.y,pre. u) annotation (Line(points={{22,0},{30,0},{30,-20},{38,-20}}, + color={255,0,255})); + connect(pre.y,not0. u) annotation (Line(points={{62,-20},{80,-20},{80,-40},{-70, + -40},{-70,-10},{-62,-10}}, color={255,0,255})); + connect(pre.y,logSwi. u3) annotation (Line(points={{62,-20},{72,-20},{72,-34}, + {-14,-34},{-14,-8},{-2,-8}}, color={255,0,255})); + connect(logSwi.y, yDevRol) annotation (Line(points={{22,0},{66,0},{66,20},{110, + 20}}, color={255,0,255})); + connect(uRot, booRep.u) + annotation (Line(points={{-120,0},{-80,0},{-80,30},{-62,30}},color={255,0,255})); + connect(booRep.y, logSwi.u2) annotation (Line(points={{-38,30},{-20,30},{-20,0}, + {-2,0}}, color={255,0,255})); + connect(pre.y, yPreDevRolSig) annotation (Line(points={{62,-20},{110,-20}}, + color={255,0,255})); + annotation (Diagram(coordinateSystem(extent={{-100,-60},{100,60}})), + defaultComponentName="rotTwo", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Line(points={{-40,60},{0,60},{0,-60},{40,-60}}, color={128,128,128}), + Ellipse( + origin={-26.6667,38.6207}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-53.3333,1.37927},{-13.3329,41.3792}}), + Ellipse( + origin={93.333,38.6207}, + lineColor={128,128,128}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + extent={{-53.3333,1.37927},{-13.3329,41.3792}}), + Ellipse( + origin={93.3333,-81.3793}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-53.3333,1.37927},{-13.3329,41.3792}}), + Ellipse( + origin={-26.6667,-81.3793}, + lineColor={128,128,128}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + extent={{-53.3333,1.37927},{-13.3329,41.3792}}), + Line(points={{-40,-60},{0,-60},{0,60},{40,60}}, color={128,128,128})}), + Documentation(info=" +

                      +This subsequence takes a rotation trigger signal uRot as input to +rotate the device roles for two devices or groups of devices. It outputs the current device roles yDevRol +vector and its previous time instance value yPreDevRolSig, which is used +as an input signal to any upstream subsequences in the + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo. +

                      +", revisions=" +
                        +
                      • +May 18, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end Two; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/ContinuousLeadSwapTwo_uDevSta.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/ContinuousLeadSwapTwo_uDevSta.mo new file mode 100644 index 00000000000..e2c90186e18 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/ContinuousLeadSwapTwo_uDevSta.mo @@ -0,0 +1,177 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation; +model ContinuousLeadSwapTwo_uDevSta + "Validation sequence for lead device swap at continuous lead operation" + + parameter Real aveTWetBul( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=288.15 + "Chilled water supply set temperature"; + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.ContinuousLeadSwapTwo leaSwa + "Makes sure the new lead device is proven on before passing on the lead role" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.ContinuousLeadSwapTwo leaSwa1 + "A way to switch two signals and invert their values" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.ContinuousLeadSwapTwo leaSwa2 + "Makes sure the new lead device is proven on before passing on the lead role" + annotation (Placement(transformation(extent={{180,40},{200,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.ContinuousLeadSwapTwo leaSwa3 + "Makes sure the new lead device is proven on before passing on the lead role" + annotation (Placement(transformation(extent={{180,-80},{200,-60}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.5, + final period=10) "Pulse signal" + annotation (Placement(transformation(extent={{-200,80},{-180,100}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.5, + final period=15, + final shift=0) "Pulse signal" + annotation (Placement(transformation(extent={{-200,20},{-180,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + final width=0.5, + final period=10) "Pulse signal" + annotation (Placement(transformation(extent={{-200,-20},{-180,0}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul4( + final width=0.5, + final period=11) "Pulse signal" + annotation (Placement(transformation(extent={{20,80},{40,100}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul5( + final width=0.5, + final period=7, + final shift=0) "Pulse signal" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul6( + final width=0.5, + final period=10) "Pulse signal" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul7( + final width=0.5, + final period=10, + final shift=1) "Pulse signal" + annotation (Placement(transformation(extent={{20,-100},{40,-80}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not1 "Not" + annotation (Placement(transformation(extent={{-160,60},{-140,80}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not2 "Not" + annotation (Placement(transformation(extent={{-160,20},{-140,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not4 "Not" + annotation (Placement(transformation(extent={{-160,-40},{-140,-20}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not5 "Not" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not6 "Not" + annotation (Placement(transformation(extent={{60,60},{80,80}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not7 "Not" + annotation (Placement(transformation(extent={{60,-100},{80,-80}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not8 "Not" + annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol( + final trueHoldDuration=0, + final falseHoldDuration=6) "Holds false signal" + annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol1( + final trueHoldDuration=0, + final falseHoldDuration=6) "Holds false signal" + annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); + +equation + connect(booPul.y, not1.u) annotation ( + Line(points={{-178,90},{-170,90},{-170,70},{-162,70}}, color={255,0,255})); + connect(booPul.y,leaSwa. uDevSta[1]) annotation ( + Line(points={{-178,90},{-90,90},{-90,46},{-42,46}}, color={255,0,255})); + connect(booPul1.y, not2.u) + annotation (Line(points={{-178,30},{-162,30}},color={255,0,255})); + connect(not2.y,leaSwa. uDevSta[2]) annotation ( + Line(points={{-138,30},{-120,30},{-120,46},{-42,46}},color={255,0,255})); + + connect(booPul.y, leaSwa.uDevRolSet[1]) annotation (Line(points={{-178,90},{-60, + 90},{-60,54},{-42,54}}, color={255,0,255})); + connect(not1.y, leaSwa.uDevRolSet[2]) annotation (Line(points={{-138,70},{-60, + 70},{-60,54},{-42,54}}, color={255,0,255})); + connect(booPul2.y, not4.u) annotation (Line(points={{-178,-10},{-170,-10},{-170, + -30},{-162,-30}}, color={255,0,255})); + connect(booPul4.y, not6.u) annotation (Line(points={{42,90},{50,90},{50,70},{58, + 70}}, color={255,0,255})); + connect(booPul4.y, leaSwa2.uDevSta[1]) annotation (Line(points={{42,90},{130,90}, + {130,46},{178,46}}, color={255,0,255})); + connect(booPul5.y,not5. u) + annotation (Line(points={{42,30},{58,30}}, color={255,0,255})); + connect(not5.y, leaSwa2.uDevSta[2]) annotation (Line(points={{82,30},{100,30}, + {100,46},{178,46}}, color={255,0,255})); + connect(booPul4.y, leaSwa2.uDevRolSet[1]) annotation (Line(points={{42,90},{160, + 90},{160,54},{178,54}}, color={255,0,255})); + connect(not6.y, leaSwa2.uDevRolSet[2]) annotation (Line(points={{82,70},{160,70}, + {160,54},{178,54}}, color={255,0,255})); + connect(booPul6.y,not8. u) annotation (Line(points={{42,-30},{50,-30},{50,-50}, + {58,-50}}, color={255,0,255})); + connect(booPul6.y,leaSwa3. uDevSta[1]) annotation (Line(points={{42,-30},{130, + -30},{130,-74},{178,-74}}, color={255,0,255})); + connect(booPul7.y,not7. u) + annotation (Line(points={{42,-90},{58,-90}}, color={255,0,255})); + connect(not7.y,leaSwa3. uDevSta[2]) annotation (Line(points={{82,-90},{100,-90}, + {100,-74},{178,-74}}, color={255,0,255})); + connect(booPul6.y,leaSwa3. uDevRolSet[1]) annotation (Line(points={{42,-30},{160, + -30},{160,-66},{178,-66}}, color={255,0,255})); + connect(not8.y,leaSwa3. uDevRolSet[2]) annotation (Line(points={{82,-50},{160, + -50},{160,-66},{178,-66}}, color={255,0,255})); + connect(booPul2.y, truFalHol.u) annotation (Line(points={{-178,-10},{-120,-10}, + {-120,-50},{-102,-50}}, color={255,0,255})); + connect(not4.y, truFalHol1.u) annotation (Line(points={{-138,-30},{-130,-30},{ + -130,-90},{-102,-90}}, color={255,0,255})); + connect(truFalHol.y, leaSwa1.uDevSta[1]) annotation (Line(points={{-78,-50},{-60, + -50},{-60,-24},{-42,-24}}, color={255,0,255})); + connect(truFalHol1.y, leaSwa1.uDevSta[2]) annotation (Line(points={{-78,-90},{ + -60,-90},{-60,-24},{-42,-24}}, color={255,0,255})); + connect(booPul2.y, leaSwa1.uDevRolSet[1]) annotation (Line(points={{-178,-10}, + {-60,-10},{-60,-16},{-42,-16}}, color={255,0,255})); + connect(not4.y, leaSwa1.uDevRolSet[2]) annotation (Line(points={{-138,-30},{-110, + -30},{-110,-16},{-42,-16}}, color={255,0,255})); +annotation ( + experiment(StopTime=180, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/ContinuousLeadSwapTwo_uDevSta.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.ContinuousLeadSwapTwo. +

                      +", revisions=" +
                        +
                      • +May 18, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), + Icon(graphics={Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-220,-120},{220,120}}))); +end ContinuousLeadSwapTwo_uDevSta; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/LeastRuntime_uDevRol.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/LeastRuntime_uDevRol.mo new file mode 100644 index 00000000000..5dc24677abc --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/LeastRuntime_uDevRol.mo @@ -0,0 +1,154 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation; +model LeastRuntime_uDevRol + "Validate lead/lag and lead/standby switching signal based on least device runtime" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.LeastRuntime + leaRunTim(final lag=true) + "Equipment rotation signal based on device runtime and current device status" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.LeastRuntime + leaRunTim1(final lag=false) + "Equipment rotation signal based on device runtime and current device status" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.LeastRuntime + leaRunTim2(final lag=true) + "Equipment rotation signal based on device runtime and current device status" + annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Two + rotTwo "Updates device roles based on the equipment rotation signal" + annotation (Placement(transformation(extent={{80,40},{100,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Two + rotTwo1 "Updates device roles based on the equipment rotation signal" + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Two + rotTwo2 "Updates device roles based on the equipment rotation signal" + annotation (Placement(transformation(extent={{80,-60},{100,-40}}))); + +protected + parameter Boolean initRoles[2] = {true, false} + "Sets initial roles: true = lead, false = lag or standby"; + + Buildings.Controls.OBC.CDL.Logical.Switch logSwi[2] "Switch" + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch logSwi1[2] "Switch" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch logSwi2[2] "Switch" + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staSta[2]( + final k=fill(false, 2)) "Standby status" + annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator repLag1(final nout=2) + "Replicates lag signal" + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator repLag(final nout=2) + "Replicates lag signal" + annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator repLead(final nout=2) + "Replicates lead signal" + annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse leadLoad( + final width=0.8, + final period=7200) "Lead device enable status" + annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse lagLoad( + final width=0.2, final period=3600) "Lag device enable status" + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse lagLoad1( + final width=0.2, final period=5400) "Lag device enable status" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); + +equation + connect(leadLoad.y, repLead.u) annotation (Line(points={{-78,80},{-70,80},{-70, + 70},{-62,70}}, color={255,0,255})); + connect(lagLoad.y, repLag.u) annotation (Line(points={{-78,30},{-70,30},{-70,40}, + {-62,40}}, color={255,0,255})); + connect(repLead.y, logSwi.u1) annotation (Line(points={{-38,70},{-20,70},{-20, + 58},{-2,58}},color={255,0,255})); + connect(repLag.y, logSwi.u3) annotation (Line(points={{-38,40},{-10,40},{-10,42}, + {-2,42}}, color={255,0,255})); + connect(logSwi.y,leaRunTim. uDevSta) + annotation (Line(points={{22,50},{38,50}}, color={255,0,255})); + connect(logSwi1.y,leaRunTim1. uDevSta) + annotation (Line(points={{22,0},{38,0}}, color={255,0,255})); + connect(staSta.y,logSwi1. u3) annotation (Line(points={{-78,-10},{-40,-10},{-40, + -8},{-2,-8}}, color={255,0,255})); + connect(repLead.y,logSwi1. u1) annotation (Line(points={{-38,70},{-30,70},{-30, + 8},{-2,8}}, color={255,0,255})); + connect(lagLoad1.y, repLag1.u) + annotation (Line(points={{-78,-70},{-62,-70}}, color={255,0,255})); + connect(repLead.y,logSwi2. u1) annotation (Line(points={{-38,70},{-30,70},{-30, + -42},{-2,-42}}, color={255,0,255})); + connect(repLag1.y,logSwi2. u3) annotation (Line(points={{-38,-70},{-30,-70},{-30, + -58},{-2,-58}}, color={255,0,255})); + connect(logSwi2.y,leaRunTim2. uDevSta) + annotation (Line(points={{22,-50},{38,-50}}, color={255,0,255})); + connect(leaRunTim.yRot, rotTwo.uRot) + annotation (Line(points={{62,50},{78,50}}, color={255,0,255})); + connect(rotTwo.yPreDevRolSig,leaRunTim. uPreDevRolSig) annotation (Line(points={{102,44}, + {108,44},{108,30},{30,30},{30,42},{38,42}}, color={255,0,255})); + connect(rotTwo.yPreDevRolSig, logSwi.u2) annotation (Line(points={{102,44},{108, + 44},{108,30},{-20,30},{-20,50},{-2,50}}, color={255,0,255})); + connect(leaRunTim1.yRot, rotTwo1.uRot) + annotation (Line(points={{62,0},{78,0}}, color={255,0,255})); + connect(leaRunTim2.yRot, rotTwo2.uRot) + annotation (Line(points={{62,-50},{78,-50}}, color={255,0,255})); + connect(rotTwo2.yPreDevRolSig,leaRunTim2. uPreDevRolSig) annotation (Line(points={{102,-56}, + {110,-56},{110,-70},{30,-70},{30,-58},{38,-58}}, color={255, + 0,255})); + connect(rotTwo2.yPreDevRolSig, logSwi2.u2) annotation (Line(points={{102,-56}, + {110,-56},{110,-70},{-20,-70},{-20,-50},{-2,-50}}, color={255,0,255})); + connect(rotTwo1.yPreDevRolSig,leaRunTim1. uPreDevRolSig) annotation (Line(points={{102,-6}, + {110,-6},{110,-20},{30,-20},{30,-8},{38,-8}}, color={255,0, + 255})); + connect(rotTwo1.yPreDevRolSig, logSwi1.u2) annotation (Line(points={{102,-6},{ + 110,-6},{110,-20},{-20,-20},{-20,0},{-2,0}}, color={255,0,255})); + annotation ( + experiment(StopTime=100000.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/LeastRuntime_uDevRol.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.LeastRuntime. +

                      +", revisions=" +
                        +
                      • +May 15, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-120,-120},{120,120}}), + graphics={Text( + extent={{-52,-104},{46,-114}}, + textColor={0,0,127}, + textString="For simplicity this test assumes +the device ON/OFF status equals its setpoint +(there is no delay in starting or stopping devices).")})); +end LeastRuntime_uDevRol; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/MinimumLeadRuntime_uDevRol.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/MinimumLeadRuntime_uDevRol.mo new file mode 100644 index 00000000000..d06d037dd71 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/MinimumLeadRuntime_uDevRol.mo @@ -0,0 +1,155 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation; +model MinimumLeadRuntime_uDevRol + "Validate lead/lag and lead/standby switching signal based on device runtime" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.MinimumLeadRuntime + minLeaTim(final minLeaRuntime=43200) + "Equipment rotation signal based on device runtime and current device status" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.MinimumLeadRuntime + minLeaTim1(final minLeaRuntime=18000) + "Equipment rotation signal based on device runtime and current device status" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.MinimumLeadRuntime + minLeaTim2(final minLeaRuntime=14400) + "Equipment rotation signal based on device runtime and current device status" + annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Two + rotTwo "Updates device roles based on the equipment rotation signal" + annotation (Placement(transformation(extent={{80,40},{100,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Two + rotTwo1 "Updates device roles based on the equipment rotation signal" + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Two + rotTwo2 "Updates device roles based on the equipment rotation signal" + annotation (Placement(transformation(extent={{80,-60},{100,-40}}))); + +protected + parameter Boolean initRoles[2] = {true, false} + "Sets initial roles: true = lead, false = lag or standby"; + + Buildings.Controls.OBC.CDL.Logical.Switch logSwi[2] "Switch" + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch logSwi1[2] "Switch" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch logSwi2[2] "Switch" + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staSta[2]( + final k=fill(false, 2)) "Standby status" + annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator repLag1(final nout=2) + "Replicates lag signal" + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator repLag(final nout=2) + "Replicates lag signal" + annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator repLead(final nout=2) + "Replicates lead signal" + annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse leadLoad( + final width=0.8, + final period=7200) "Lead device enable status" + annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse lagLoad( + final width=0.2, final period=3600) "Lag device enable status" + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse lagLoad1( + final width=0.2, final period=5400) "Lag device enable status" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); + +equation + connect(leadLoad.y, repLead.u) annotation (Line(points={{-78,80},{-70,80},{-70, + 70},{-62,70}}, color={255,0,255})); + connect(lagLoad.y, repLag.u) annotation (Line(points={{-78,30},{-70,30},{-70,40}, + {-62,40}}, color={255,0,255})); + connect(repLead.y, logSwi.u1) annotation (Line(points={{-38,70},{-20,70},{-20, + 58},{-2,58}},color={255,0,255})); + connect(repLag.y, logSwi.u3) annotation (Line(points={{-38,40},{-10,40},{-10,42}, + {-2,42}}, color={255,0,255})); + connect(logSwi.y, minLeaTim.uDevSta) + annotation (Line(points={{22,50},{38,50}}, color={255,0,255})); + connect(logSwi1.y, minLeaTim1.uDevSta) + annotation (Line(points={{22,0},{38,0}}, color={255,0,255})); + connect(staSta.y,logSwi1. u3) annotation (Line(points={{-78,-10},{-40,-10},{-40, + -8},{-2,-8}}, color={255,0,255})); + connect(repLead.y,logSwi1. u1) annotation (Line(points={{-38,70},{-30,70},{-30, + 8},{-2,8}}, color={255,0,255})); + connect(lagLoad1.y, repLag1.u) + annotation (Line(points={{-78,-70},{-62,-70}}, color={255,0,255})); + connect(repLead.y,logSwi2. u1) annotation (Line(points={{-38,70},{-30,70},{-30, + -42},{-2,-42}}, color={255,0,255})); + connect(repLag1.y,logSwi2. u3) annotation (Line(points={{-38,-70},{-30,-70},{-30, + -58},{-2,-58}}, color={255,0,255})); + connect(logSwi2.y, minLeaTim2.uDevSta) + annotation (Line(points={{22,-50},{38,-50}}, color={255,0,255})); + connect(minLeaTim.yRot, rotTwo.uRot) + annotation (Line(points={{62,50},{78,50}}, color={255,0,255})); + connect(rotTwo.yPreDevRolSig, minLeaTim.uPreDevRolSig) annotation (Line(points={{102,44}, + {108,44},{108,30},{30,30},{30,42},{38,42}}, color={255,0,255})); + connect(rotTwo.yPreDevRolSig, logSwi.u2) annotation (Line(points={{102,44},{108, + 44},{108,30},{-20,30},{-20,50},{-2,50}}, color={255,0,255})); + connect(minLeaTim1.yRot, rotTwo1.uRot) + annotation (Line(points={{62,0},{78,0}}, color={255,0,255})); + connect(minLeaTim2.yRot, rotTwo2.uRot) + annotation (Line(points={{62,-50},{78,-50}}, color={255,0,255})); + connect(rotTwo2.yPreDevRolSig, minLeaTim2.uPreDevRolSig) annotation (Line(points={{102,-56}, + {110,-56},{110,-70},{30,-70},{30,-58},{38,-58}}, color={255, + 0,255})); + connect(rotTwo2.yPreDevRolSig, logSwi2.u2) annotation (Line(points={{102,-56}, + {110,-56},{110,-70},{-20,-70},{-20,-50},{-2,-50}}, color={255,0,255})); + connect(rotTwo1.yPreDevRolSig, minLeaTim1.uPreDevRolSig) annotation (Line(points={{102,-6}, + {110,-6},{110,-20},{30,-20},{30,-8},{38,-8}}, color={255,0, + 255})); + connect(rotTwo1.yPreDevRolSig, logSwi1.u2) annotation (Line(points={{102,-6},{ + 110,-6},{110,-20},{-20,-20},{-20,0},{-2,0}}, color={255,0,255})); + +annotation ( + experiment(StopTime=100000.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/MinimumLeadRuntime_uDevRol.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.MinimumLeadRuntime. +

                      +", revisions=" +
                        +
                      • +May 15, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-120,-120},{120,120}}), + graphics={Text( + extent={{-52,-104},{46,-114}}, + textColor={0,0,127}, + textString="For simplicity this test assumes +the device ON/OFF status equals its setpoint +(there is no delay in starting or stopping devices).")})); +end MinimumLeadRuntime_uDevRol; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Scheduler.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Scheduler.mo new file mode 100644 index 00000000000..0dd09b843e5 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Scheduler.mo @@ -0,0 +1,118 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation; +model Scheduler + "Validation sequence for the device swap scheduler in case of continuous lead device operation" + + parameter Real aveTWetBul( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=288.15 + "Chilled water supply set temperature"; + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Scheduler + rotSch( + final simTimSta=false, + final weeInt=false, + final dayCou=10) "Equipment rotation happens every 10 days at 2am" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Scheduler + rotSch1( + final simTimSta=false, + weeInt=true, + final weeCou=2, + final weekday=2) "Equipment rotation happens bi-weekly on Tuesday at 2am" + annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Scheduler + rotSch2( + final weeInt=false, + final houOfDay=5, + final dayCou=6) "Equipment rotation happens every 5 days at 6am" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Scheduler + rotSch3( + final simTimSta=false, + final weeInt=true, + final houOfDay=12, + final weeCou=4, + final weekday=6) "Equipment rotation happens every 4 weeks on Saturday at noon" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Scheduler + rotSch4( + final rotationPeriod=86400, + simTimSta=true, + final weeInt=true, + final houOfDay=12, + final weeCou=4, + final weekday=6) "Equipment rotation happens every 4 weeks on Saturday at noon" + annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol( + final trueHoldDuration=1800, + final falseHoldDuration=0) "Holds the signal for visualization purposes" + annotation (Placement(transformation(extent={{20,70},{40,90}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol1( + final trueHoldDuration=1800, + final falseHoldDuration=0) "Holds the signal for visualization purposes" + annotation (Placement(transformation(extent={{20,30},{40,50}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol2( + final trueHoldDuration=1800, + final falseHoldDuration=0) "Holds the signal for visualization purposes" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol3( + final trueHoldDuration=1800, + final falseHoldDuration=0) "Holds the signal for visualization purposes" + annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol4( + final trueHoldDuration=1800, + final falseHoldDuration=0) + "Holds the signal for visualization purposes" + annotation (Placement(transformation(extent={{20,-90},{40,-70}}))); + +equation + connect(rotSch.yRot, truFalHol.u) + annotation (Line(points={{-18,80},{18,80}}, color={255,0,255})); + connect(rotSch1.yRot, truFalHol1.u) + annotation (Line(points={{-18,40},{18,40}},color={255,0,255})); + connect(rotSch2.yRot, truFalHol2.u) + annotation (Line(points={{-18,0},{18,0}}, color={255,0,255})); + connect(rotSch3.yRot, truFalHol3.u) + annotation (Line(points={{-18,-40},{18,-40}},color={255,0,255})); + connect(rotSch4.yRot,truFalHol4. u) + annotation (Line(points={{-18,-80},{18,-80}},color={255,0,255})); +annotation ( + experiment(StopTime=3000000, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Scheduler.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Scheduler. +

                      +", revisions=" +
                        +
                      • +May 18, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(extent={{-60,-100},{60,100}}), + graphics={Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-60,-100},{60,100}}))); +end Scheduler; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Two_uRot.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Two_uRot.mo new file mode 100644 index 00000000000..6cbd27d72af --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Two_uRot.mo @@ -0,0 +1,55 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation; +model Two_uRot + "Validation sequence for device role rotation for two devices or groups of devices" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Two rotTwo + "Rotates roles between two devices or groups of devices" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Two rotTwo1 + "Rotates roles between two devices or groups of devices" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.SampleTrigger rotation(period( + displayUnit="h") = 86400, shift=7200) "Rotation trigger" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.SampleTrigger rotation1(period( + displayUnit="h") = 172800, shift=7200) "Rotation trigger" + annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); + +equation + connect(rotation.y, rotTwo.uRot) + annotation (Line(points={{-18,30},{18,30}}, color={255,0,255})); + connect(rotation1.y, rotTwo1.uRot) + annotation (Line(points={{-18,-30},{18,-30}}, color={255,0,255})); +annotation ( + experiment(StopTime=1000000, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Two_uRot.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Two. +

                      +", revisions=" +
                        +
                      • +November 5, 2019, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), + Icon(graphics={Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-60,-60},{60,60}}))); +end Two_uRot; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/package.mo new file mode 100644 index 00000000000..0b3887a2463 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences; +package Validation "Collection of validation models" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/package.order new file mode 100644 index 00000000000..7b775d54c4e --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/package.order @@ -0,0 +1,5 @@ +ContinuousLeadSwapTwo_uDevSta +LeastRuntime_uDevRol +MinimumLeadRuntime_uDevRol +Scheduler +Two_uRot diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/package.mo new file mode 100644 index 00000000000..fa2dc10860c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/package.mo @@ -0,0 +1,43 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation; +package Subsequences "Equipment rotation control subsequences" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains equipment staging and rotation control subsequences. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}})})); +end Subsequences; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/package.order new file mode 100644 index 00000000000..8a7466fd0ea --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/package.order @@ -0,0 +1,6 @@ +ContinuousLeadSwapTwo +LeastRuntime +MinimumLeadRuntime +Scheduler +Two +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo.mo new file mode 100644 index 00000000000..60a6c2d6f7c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo.mo @@ -0,0 +1,155 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Validation; +model ControllerTwo + "Validates lead/lag and lead/standby equipment rotation controller for two devices or groups of devices" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo + leaLag( + final lag=true, + final minLim=false) "Lead/lag rotation" + annotation (Placement(transformation(extent={{-20,80},{0,100}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo + leaLag1( + final lag=true, + final minLim=false) "Lead/lag rotation" + annotation (Placement(transformation(extent={{-20,40},{0,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo + leaSta( + final lag=false, + final minLim=false) "Lead/lag rotation" + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo + conLeaSimSta( + final lag=false, + final continuous=true, + final weeInt=false, + final rotationPeriod=1800, + final houOfDay=2, + final weeCou=1, + final weekday=6, + final dayCou=3) + "Lead/standby rotation for continuously operating device. Rotation time is measured from simulation start" + annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo + conLeaSch( + final lag=false, + final continuous=true, + final minLim=false, + final simTimSta=false, + weeInt=false, + zerTim=Buildings.Controls.OBC.CDL.Types.ZeroTime.Custom, + yearRef=2020, + houOfDay=2, + weekday=3, + dayCou=1) + "Lead/standby rotation for continuous operation" + annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel1[2](final delayTime={300, + 400}, + final delayOnInit={true,true}) + "Emulates device start-up time" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel[2]( + final delayTime={600,600}, + final delayOnInit={true,true}) "Emulates device start-up time" + annotation (Placement(transformation(extent={{20,0},{40,20}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre[2] "Boolean pre" + annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre1[2] "Boolean pre" + annotation (Placement(transformation(extent={{60,0},{80,20}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse leadLoad( + final width=0.8, final period(displayUnit="s") = 7200) + "Lead device ON/OFF status" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse lagLoad( + final width=0.2, + final period=3600) "Lag device ON/OFF status" + annotation (Placement(transformation(extent={{-100,40},{-80,60}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse lagLoad1( + final width=0.2, + final period=5400) "Lag device ON/OFF status" + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel2[2]( + final delayTime={600,600}, + final delayOnInit={true,true}) + "Emulates device start-up time" + annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre2[2] "Boolean pre" + annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); + +equation + connect(conLeaSimSta.yDevStaSet, truDel1.u) annotation (Line(points={{2,-24},{ + 10,-24},{10,-30},{18,-30}}, color={255,0,255})); + connect(leadLoad.y, leaLag.uLeaStaSet) annotation (Line(points={{-78,90},{-50, + 90},{-50,96},{-22,96}}, color={255,0,255})); + connect(lagLoad.y, leaLag.uLagStaSet) annotation (Line(points={{-78,50},{-40,50}, + {-40,90},{-22,90}}, color={255,0,255})); + connect(leadLoad.y, leaSta.uLeaStaSet) annotation (Line(points={{-78,90},{-70, + 90},{-70,16},{-22,16}}, color={255,0,255})); + connect(lagLoad1.y, leaLag1.uLagStaSet) annotation (Line(points={{-78,10},{-32, + 10},{-32,50},{-22,50}}, color={255,0,255})); + connect(leadLoad.y, leaLag1.uLeaStaSet) annotation (Line(points={{-78,90},{-50, + 90},{-50,56},{-22,56}}, color={255,0,255})); + connect(leaSta.yDevStaSet, truDel.u) annotation (Line(points={{2,16},{10,16},{ + 10,10},{18,10}}, color={255,0,255})); + connect(leaLag.yDevStaSet, leaLag.uDevSta) annotation (Line(points={{2,96},{20, + 96},{20,70},{-30,70},{-30,84},{-22,84}}, color={255,0,255})); + connect(leaLag1.yDevStaSet, leaLag1.uDevSta) annotation (Line(points={{2,56},{ + 20,56},{20,32},{-28,32},{-28,44},{-22,44}}, color={255,0,255})); + connect(truDel1.y, pre.u) + annotation (Line(points={{42,-30},{58,-30}}, color={255,0,255})); + connect(pre.y, conLeaSimSta.uDevSta) annotation (Line(points={{82,-30},{90,-30}, + {90,-50},{-30,-50},{-30,-36},{-22,-36}}, color={255,0,255})); + connect(truDel.y, pre1.u) + annotation (Line(points={{42,10},{58,10}}, color={255,0,255})); + connect(pre1.y, leaSta.uDevSta) annotation (Line(points={{82,10},{90,10},{90,-10}, + {-28,-10},{-28,4},{-22,4}}, color={255,0,255})); + connect(conLeaSch.yDevStaSet, truDel2.u) annotation (Line(points={{2,-64},{10, + -64},{10,-70},{18,-70}}, color={255,0,255})); + connect(truDel2.y, pre2.u) + annotation (Line(points={{42,-70},{58,-70}}, color={255,0,255})); + connect(pre2.y, conLeaSch.uDevSta) annotation (Line(points={{82,-70},{90,-70}, + {90,-90},{-30,-90},{-30,-76},{-22,-76}}, color={255,0,255})); + annotation ( + experiment(StopTime=100000.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo. +

                      +", revisions=" +
                        +
                      • +May 15 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-120,-120},{120,120}}))); +end ControllerTwo; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo_MinimumLeadRuntime.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo_MinimumLeadRuntime.mo new file mode 100644 index 00000000000..b05b56185a1 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo_MinimumLeadRuntime.mo @@ -0,0 +1,104 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Validation; +model ControllerTwo_MinimumLeadRuntime + "Validates lead/lag and lead/standby equipment rotation controller for two devices or groups of devices" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo + leaLag( + final lag=true, + minLim=true, + final minLeaRuntime=43200) + "Lead/lag rotation" + annotation (Placement(transformation(extent={{-20,40},{0,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo + leaLag1( + final lag=true, + minLim=true, + final minLeaRuntime=54000) + "Lead/lag rotation" + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo + leaSta( + final lag=false, + minLim=true, + final minLeaRuntime=43200) + "Lead/standby rotation" + annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel[2]( + final delayTime={600,600}, + final delayOnInit={true,true}) "Emulates device start-up time" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre1[2] "Boolean pre" + annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse leadLoad( + final width=0.8, + final period=7200) "Lead device ON/OFF status" + annotation (Placement(transformation(extent={{-100,40},{-80,60}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse lagLoad( + final width=0.2, + final period=3600) "Lag device ON/OFF status" + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse lagLoad1( + final width=0.2, + final period=5400) "Lag device ON/OFF status" + annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); + +equation + connect(leadLoad.y, leaLag.uLeaStaSet) annotation (Line(points={{-78,50},{-50, + 50},{-50,56},{-22,56}}, color={255,0,255})); + connect(lagLoad.y, leaLag.uLagStaSet) annotation (Line(points={{-78,10},{-40,10}, + {-40,50},{-22,50}}, color={255,0,255})); + connect(leadLoad.y, leaSta.uLeaStaSet) annotation (Line(points={{-78,50},{-70, + 50},{-70,-24},{-22,-24}}, + color={255,0,255})); + connect(lagLoad1.y, leaLag1.uLagStaSet) annotation (Line(points={{-78,-30},{-32, + -30},{-32,10},{-22,10}}, color={255,0,255})); + connect(leadLoad.y, leaLag1.uLeaStaSet) annotation (Line(points={{-78,50},{-50, + 50},{-50,16},{-22,16}}, color={255,0,255})); + connect(leaSta.yDevStaSet, truDel.u) annotation (Line(points={{2,-24},{10,-24}, + {10,-30},{18,-30}}, color={255,0,255})); + connect(leaLag.yDevStaSet, leaLag.uDevSta) annotation (Line(points={{2,56},{20, + 56},{20,30},{-30,30},{-30,44},{-22,44}}, color={255,0,255})); + connect(leaLag1.yDevStaSet, leaLag1.uDevSta) annotation (Line(points={{2,16},{ + 20,16},{20,-8},{-28,-8},{-28,4},{-22,4}}, color={255,0,255})); + connect(truDel.y, pre1.u) + annotation (Line(points={{42,-30},{58,-30}}, color={255,0,255})); + connect(pre1.y, leaSta.uDevSta) annotation (Line(points={{82,-30},{90,-30},{90, + -50},{-28,-50},{-28,-36},{-22,-36}}, color={255,0,255})); + annotation ( + experiment(StopTime=100000.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo_MinimumLeadRuntime.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.ControllerTwo. +

                      +", revisions=" +
                        +
                      • +May 15 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-120,-80},{120,80}}))); +end ControllerTwo_MinimumLeadRuntime; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/package.mo new file mode 100644 index 00000000000..cf21515766b --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation; +package Validation "Collection of validation models" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/package.order new file mode 100644 index 00000000000..cfbefbf6d93 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/package.order @@ -0,0 +1,2 @@ +ControllerTwo +ControllerTwo_MinimumLeadRuntime diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/package.mo new file mode 100644 index 00000000000..6dcd8d3c4d9 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/package.mo @@ -0,0 +1,49 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic; +package EquipmentRotation "Equipment rotation sequences to maintain even wear" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains equipment staging and rotation sequences implemented based on +ASHRAE Guideline36-2021, section 5.1.15. The control intent of these sequences is, +where the device configuration allows for it, +to have the devices be lead/lag or lead/standby rotated to maintain even wear. +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={-26.6667,38.6207}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-53.3333,1.37927},{-13.3329,41.3792}}), + Ellipse( + origin={93.3333,-81.3793}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-53.3333,1.37927},{-13.3329,41.3792}}), + Ellipse( + origin={-26.6667,-81.3793}, + lineColor={128,128,128}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + extent={{-53.3333,1.37927},{-13.3329,41.3792}}), + Ellipse( + origin={93.333,38.6207}, + lineColor={128,128,128}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + extent={{-53.3333,1.37927},{-13.3329,41.3792}}), + Line(points={{-40,60},{0,60},{0,-60},{40,-60}}, color={128,128,128}), + Line(points={{-40,-60},{0,-60},{0,60},{40,60}}, color={128,128,128}), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end EquipmentRotation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/package.order new file mode 100644 index 00000000000..d6215f892f4 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/package.order @@ -0,0 +1,3 @@ +ControllerTwo +Subsequences +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/IdentifyStage.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/IdentifyStage.mo new file mode 100644 index 00000000000..8d9a69760e5 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/IdentifyStage.mo @@ -0,0 +1,134 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic; +block IdentifyStage + "Identify current chiller stage according to the proven on status of the chillers" + + parameter Integer nSta = 3 + "Number of chiller stages"; + + parameter Integer nChi = 2 + "Number of chillers"; + + parameter Integer staMat[nSta, nChi] = {{1,0},{0,1},{1,1}} + "Staging matrix with chiller stage as row index and chiller as column index"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Vector of chiller proven on status: true=ON" + annotation(Placement(transformation(extent={{-140,10},{-100,50}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput ySta + "Current stage index" + annotation (Placement(transformation(extent={{100,-80},{140,-40}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + final parameter Real staInd[nSta] = {i for i in 1:nSta} + "Stage index vector"; + Buildings.Controls.OBC.CDL.Routing.BooleanVectorReplicator booVecRep( + final nin=nChi, + final nout=nSta) + "Replicate boolean vector to be a matric with total stages as row size and total chillers as column size" + annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[nSta,nChi] + "Convert boolean to integer" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu[nSta,nChi] + "Output true if the first integer input one equals to the second integer input" + annotation (Placement(transformation(extent={{0,60},{20,80}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea [nSta,nChi] + "Convert boolean to real" + annotation (Placement(transformation(extent={{40,60},{60,80}}))); + Buildings.Controls.OBC.CDL.Reals.MatrixMax rowMax( + final nRow=nSta, + final nCol=nChi) + "Outputs the row-wise maximum" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + Buildings.Controls.OBC.CDL.Reals.MatrixMin rowMin( + final nRow=nSta, + final nCol=nChi) + "Outputs the row-wise minimum" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply mul[nSta] + "Output product of the inputs" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con[nSta]( + final k=staInd) + "Stage indices" + annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply mul1[nSta] + "Output vector with the elements which equal to either zero or current stage index" + annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum curSta( + final nin=nSta) + "Current stage" + annotation (Placement(transformation(extent={{30,-70},{50,-50}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Convert real to integer signal" + annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant chiStaMatr[nSta,nChi]( + final k=staMat) + "Staging matrix" + annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); + +equation + connect(uChi, booVecRep.u) + annotation (Line(points={{-120,30},{-82,30}}, color={255,0,255})); + connect(booVecRep.y, booToInt.u) + annotation (Line(points={{-58,30},{-42,30}}, color={255,0,255})); + connect(chiStaMatr.y, intEqu.u1) + annotation (Line(points={{-18,70},{-2,70}}, color={255,127,0})); + connect(booToInt.y, intEqu.u2) annotation (Line(points={{-18,30},{-10,30},{-10, + 62},{-2,62}}, color={255,127,0})); + connect(intEqu.y, booToRea.u) + annotation (Line(points={{22,70},{38,70}}, color={255,0,255})); + connect(booToRea.y,rowMax. u) annotation (Line(points={{62,70},{70,70},{70,10}, + {-90,10},{-90,-20},{-82,-20}},color={0,0,127})); + connect(booToRea.y,rowMin. u) annotation (Line(points={{62,70},{70,70},{70,10}, + {-90,10},{-90,-60},{-82,-60}},color={0,0,127})); + connect(rowMax.y, mul.u1) annotation (Line(points={{-58,-20},{-50,-20},{-50,-34}, + {-42,-34}},color={0,0,127})); + connect(rowMin.y, mul.u2) annotation (Line(points={{-58,-60},{-50,-60},{-50,-46}, + {-42,-46}},color={0,0,127})); + connect(mul.y, mul1.u1) annotation (Line(points={{-18,-40},{-10,-40},{-10,-54}, + {-2,-54}}, color={0,0,127})); + connect(con.y, mul1.u2) annotation (Line(points={{-18,-80},{-10,-80},{-10,-66}, + {-2,-66}}, color={0,0,127})); + connect(mul1.y, curSta.u) + annotation (Line(points={{22,-60},{28,-60}}, color={0,0,127})); + connect(curSta.y, reaToInt.u) + annotation (Line(points={{52,-60},{58,-60}}, color={0,0,127})); + connect(reaToInt.y, ySta) + annotation (Line(points={{82,-60},{120,-60}}, color={255,127,0})); + +annotation (defaultComponentName="ideSta", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name")}), Diagram(coordinateSystem(preserveAspectRatio=false)), +Documentation(info=" +

                      +This subsequence is not directly specified in 1711 as it provides +a side calculation pertaining to generalization of the staging +sequences for any number of chillers and stages provided by the +user. +

                      +

                      +The subsequence outputs the current chiller stage index ySta according +to the current chillers proven on status uChi +and the given a staging matrix staMat which specified which chillers +should be enabled at each stage. +

                      +", +revisions=" +
                        +
                      • +May 3, 2023, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end IdentifyStage; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/DisableChillers.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/DisableChillers.mo new file mode 100644 index 00000000000..590e3657e2d --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/DisableChillers.mo @@ -0,0 +1,348 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable; +block DisableChillers + "Disable devices when the plant is disabled from chiller mode" + + parameter Boolean have_WSE=true + "True if the plant has waterside economizer. When the plant has waterside economizer, the condenser water pump speed must be variable"; + parameter Integer nChi=2 + "Total number of chillers"; + parameter Integer nChiWatPum = 2 + "Total number of chilled water pumps"; + parameter Integer nConWatPum = 2 + "Total number of condenser water pumps"; + parameter Integer nTowCel = 2 + "Total number of cooling tower cells"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller commanded on" + annotation (Placement(transformation(extent={{-240,180},{-200,220}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatReq[nChi] + "Chilled water requst status for each chiller" + annotation (Placement(transformation(extent={{-240,140},{-200,180}}), + iconTransformation(extent={{-140,50},{-100,90}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiWatIsoVal[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) "Chilled water isolation valve position" + annotation(Placement(transformation(extent={{-240,110},{-200,150}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uConWatReq[nChi] + "Condenser water requst status for each chiller" + annotation (Placement(transformation(extent={{-240,30},{-200,70}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatIsoVal[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Chiller condenser water isolation valve position" + annotation (Placement(transformation(extent={{-240,0},{-200,40}}), + iconTransformation(extent={{-140,-30},{-100,10}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiWatPumSpe[nChiWatPum] + "Chilled water pump speed" + annotation (Placement(transformation(extent={{-240,-100},{-200,-60}}), + iconTransformation(extent={{-140,-50},{-100,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpe[nConWatPum] + "Condenser water pump speed" + annotation (Placement(transformation(extent={{-240,-210},{-200,-170}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput chaPro + "Indicate if there is a stage up or stage down command" + annotation (Placement(transformation(extent={{-240,-160},{-200,-120}}), + iconTransformation(extent={{-140,-90},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWSE if have_WSE + "Water side economizer status: true = ON, false = OFF" + annotation (Placement(transformation(extent={{-240,-280},{-200,-240}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatIsoVal[nChi]( + final unit=fill("1", nChi), + final min=fill(0, nChi), + final max=fill(1, nChi)) + "Chiller chilled water isolation valve position setpoints" + annotation (Placement(transformation(extent={{200,180},{240,220}}), + iconTransformation(extent={{100,30},{140,70}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yConWatIsoVal[nChi]( + final unit=fill("1", nChi), + final min=fill(0, nChi), + final max=fill(1, nChi)) + "Chiller condenser water isolation valve position setpoints" + annotation (Placement(transformation(extent={{200,50},{240,90}}), + iconTransformation(extent={{100,0},{140,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatPumSpe[nChiWatPum]( + final unit=fill("1", nChiWatPum), + final min=fill(0, nChiWatPum), + final max=fill(1, nChiWatPum)) + "Chilled water pump speed" + annotation (Placement(transformation(extent={{200,-80},{240,-40}}), + iconTransformation(extent={{100,-40},{140,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yConWatPumSpe[nConWatPum]( + final unit=fill("1", nConWatPum), + final min=fill(0, nConWatPum), + final max=fill(1, nConWatPum)) + "Condenser water pump speed" + annotation (Placement(transformation(extent={{200,-190},{240,-150}}), + iconTransformation(extent={{100,-70},{140,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yTowCel + "True: the tower cells should be enabled" + annotation (Placement(transformation(extent={{200,-250},{240,-210}}), + iconTransformation(extent={{100,-110},{140,-70}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=180) + "Threshold time after chiller being disabled" + annotation (Placement(transformation(extent={{-100,190},{-80,210}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr( + final nin=nChi) + "Check if there is any chilled water request" + annotation (Placement(transformation(extent={{-180,150},{-160,170}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booScaRep1( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{80,190},{100,210}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr1( + final nin=nChi) + "Check if there is any condenser water request" + annotation (Placement(transformation(extent={{-180,40},{-160,60}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booScaRep2( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{80,60},{100,80}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booScaRep3( + final nout=nChiWatPum) + "Replicate boolean input" + annotation (Placement(transformation(extent={{100,-70},{120,-50}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booScaRep5( + final nout=nConWatPum) + "Replicate boolean input" + annotation (Placement(transformation(extent={{100,-180},{120,-160}}))); + Buildings.Controls.OBC.CDL.Logical.Not noChi "No enabled chiller" + annotation (Placement(transformation(extent={{-140,190},{-120,210}}))); + Buildings.Controls.OBC.CDL.Logical.Not noChiWatReq "No chilled water request" + annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); + Buildings.Controls.OBC.CDL.Logical.Or cloChiIsoVal + "Close all chilled water isolation valve" + annotation (Placement(transformation(extent={{-40,190},{-20,210}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[nChi] "Close valve" + annotation (Placement(transformation(extent={{160,190},{180,210}}))); + Buildings.Controls.OBC.CDL.Logical.Or cloConIsoVal + "Close all condenser water isolation valve" + annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); + Buildings.Controls.OBC.CDL.Logical.Not noConWatReq + "No condenser water request" + annotation (Placement(transformation(extent={{-140,40},{-120,60}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1[nChi] + "Close valve" + annotation (Placement(transformation(extent={{160,60},{180,80}}))); + Buildings.Controls.OBC.CDL.Logical.Or cloPums "Disable pumps" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi2[nChiWatPum] + "Disable pumps" + annotation (Placement(transformation(extent={{160,-70},{180,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi3[nConWatPum] + "Disable pumps" + annotation (Placement(transformation(extent={{160,-180},{180,-160}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 + "Plant is disabled and it is not in staging process" + annotation (Placement(transformation(extent={{40,190},{60,210}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 + "Plant is disabled and it is not in staging process" + annotation (Placement(transformation(extent={{40,60},{60,80}}))); + Buildings.Controls.OBC.CDL.Logical.Not not4 "Not in staging process" + annotation (Placement(transformation(extent={{-80,-150},{-60,-130}}))); + Buildings.Controls.OBC.CDL.Logical.And and3 + "Plant is disabled and it is not in staging process" + annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); + Buildings.Controls.OBC.CDL.Logical.And and4 + "Plant is disabled and it is not in staging process" + annotation (Placement(transformation(extent={{20,-180},{40,-160}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr chiMod( + final nin=nChi) + "True: the plant has chiller mode" + annotation (Placement(transformation(extent={{-180,190},{-160,210}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con[nChi]( + final k=fill(0, nChi)) "Constant zero" + annotation (Placement(transformation(extent={{20,240},{40,260}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1[nChiWatPum]( + final k=fill(0, nChiWatPum)) + "Constant zero" + annotation (Placement(transformation(extent={{20,-20},{40,0}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2[nConWatPum]( + final k=fill(0, nConWatPum)) + "Constant zero" + annotation (Placement(transformation(extent={{20,-120},{40,-100}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 if have_WSE + "Not in staging process" + annotation (Placement(transformation(extent={{-80,-270},{-60,-250}}))); + Buildings.Controls.OBC.CDL.Logical.And and5 + "Plant is disabled and it is not in staging process" + annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); + Buildings.Controls.OBC.CDL.Logical.And and6 + "Plant is disabled and it is not in staging process" + annotation (Placement(transformation(extent={{60,-180},{80,-160}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con3( + final k=true) if not have_WSE + "Logical true" + annotation (Placement(transformation(extent={{-80,-220},{-60,-200}}))); + Buildings.Controls.OBC.CDL.Logical.Or disTow + "Disable cooling tower" + annotation (Placement(transformation(extent={{80,-240},{100,-220}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con4( + final k=false) + if not have_WSE "Logical false" + annotation (Placement(transformation(extent={{-20,-290},{0,-270}}))); + +equation + connect(uChiWatReq, mulOr.u) + annotation (Line(points={{-220,160},{-182,160}}, color={255,0,255})); + connect(mulOr.y, noChiWatReq.u) + annotation (Line(points={{-158,160},{-142,160}}, color={255,0,255})); + connect(truDel.y, cloChiIsoVal.u1) + annotation (Line(points={{-78,200},{-42,200}},color={255,0,255})); + connect(noChiWatReq.y, cloChiIsoVal.u2) annotation (Line(points={{-118,160},{-50, + 160},{-50,192},{-42,192}}, color={255,0,255})); + connect(booScaRep1.y, swi.u2) + annotation (Line(points={{102,200},{158,200}}, color={255,0,255})); + connect(uChiWatIsoVal, swi.u3) annotation (Line(points={{-220,130},{130,130},{ + 130,192},{158,192}}, color={0,0,127})); + connect(truDel.y, cloConIsoVal.u1) annotation (Line(points={{-78,200},{-60,200}, + {-60,70},{-42,70}}, color={255,0,255})); + connect(mulOr1.y, noConWatReq.u) + annotation (Line(points={{-158,50},{-142,50}}, color={255,0,255})); + connect(uConWatReq, mulOr1.u) + annotation (Line(points={{-220,50},{-182,50}}, color={255,0,255})); + connect(noConWatReq.y, cloConIsoVal.u2) annotation (Line(points={{-118,50},{ + -60,50},{-60,62},{-42,62}},color={255,0,255})); + connect(booScaRep2.y, swi1.u2) + annotation (Line(points={{102,70},{158,70}}, color={255,0,255})); + connect(uConWatIsoVal, swi1.u3) annotation (Line(points={{-220,20},{140,20},{140, + 62},{158,62}}, color={0,0,127})); + connect(cloChiIsoVal.y, cloPums.u2) annotation (Line(points={{-18,200},{-10,200}, + {-10,140},{-100,140},{-100,-68},{-82,-68}}, color={255,0,255})); + connect(cloConIsoVal.y, cloPums.u1) annotation (Line(points={{-18,70},{-10,70}, + {-10,30},{-90,30},{-90,-60},{-82,-60}},color={255,0,255})); + connect(booScaRep3.y, swi2.u2) annotation (Line(points={{122,-60},{158,-60}}, + color={255,0,255})); + connect(uChiWatPumSpe, swi2.u3) annotation (Line(points={{-220,-80},{140,-80}, + {140,-68},{158,-68}}, color={0,0,127})); + connect(uConWatPumSpe, swi3.u3) annotation (Line(points={{-220,-190},{140,-190}, + {140,-178},{158,-178}}, color={0,0,127})); + connect(booScaRep5.y, swi3.u2) + annotation (Line(points={{122,-170},{158,-170}}, color={255,0,255})); + connect(and2.y, booScaRep1.u) + annotation (Line(points={{62,200},{78,200}}, color={255,0,255})); + connect(cloChiIsoVal.y, and2.u1) + annotation (Line(points={{-18,200},{38,200}}, color={255,0,255})); + connect(and1.y, booScaRep2.u) + annotation (Line(points={{62,70},{78,70}}, color={255,0,255})); + connect(cloConIsoVal.y, and1.u1) + annotation (Line(points={{-18,70},{38,70}},color={255,0,255})); + connect(chaPro, not4.u) + annotation (Line(points={{-220,-140},{-82,-140}}, color={255,0,255})); + connect(not4.y, and1.u2) annotation (Line(points={{-58,-140},{0,-140},{0,62},{ + 38,62}}, color={255,0,255})); + connect(not4.y, and2.u2) annotation (Line(points={{-58,-140},{0,-140},{0,192}, + {38,192}}, color={255,0,255})); + connect(cloPums.y, and3.u1) + annotation (Line(points={{-58,-60},{18,-60}}, color={255,0,255})); + connect(cloPums.y, and4.u1) annotation (Line(points={{-58,-60},{-10,-60},{-10, + -170},{18,-170}}, color={255,0,255})); + connect(not4.y, and4.u2) annotation (Line(points={{-58,-140},{0,-140},{0,-178}, + {18,-178}}, color={255,0,255})); + connect(not4.y, and3.u2) annotation (Line(points={{-58,-140},{0,-140},{0,-68}, + {18,-68}}, color={255,0,255})); + connect(swi3.y, yConWatPumSpe) + annotation (Line(points={{182,-170},{220,-170}}, color={0,0,127})); + connect(swi2.y, yChiWatPumSpe) + annotation (Line(points={{182,-60},{220,-60}}, color={0,0,127})); + connect(swi1.y, yConWatIsoVal) + annotation (Line(points={{182,70},{220,70}}, color={0,0,127})); + connect(swi.y, yChiWatIsoVal) + annotation (Line(points={{182,200},{220,200}}, color={0,0,127})); + connect(uChi, chiMod.u) + annotation (Line(points={{-220,200},{-182,200}}, color={255,0,255})); + connect(chiMod.y, noChi.u) + annotation (Line(points={{-158,200},{-142,200}}, color={255,0,255})); + connect(con.y, swi.u1) annotation (Line(points={{42,250},{140,250},{140,208},{ + 158,208}}, color={0,0,127})); + connect(con.y, swi1.u1) annotation (Line(points={{42,250},{140,250},{140,78},{ + 158,78}}, color={0,0,127})); + connect(con1.y, swi2.u1) annotation (Line(points={{42,-10},{140,-10},{140,-52}, + {158,-52}}, color={0,0,127})); + connect(con2.y, swi3.u1) annotation (Line(points={{42,-110},{140,-110},{140,-162}, + {158,-162}}, color={0,0,127})); + connect(uWSE, not1.u) + annotation (Line(points={{-220,-260},{-82,-260}}, color={255,0,255})); + connect(and3.y, and5.u1) + annotation (Line(points={{42,-60},{58,-60}}, color={255,0,255})); + connect(and5.y, booScaRep3.u) + annotation (Line(points={{82,-60},{98,-60}}, color={255,0,255})); + connect(and4.y, and6.u1) + annotation (Line(points={{42,-170},{58,-170}}, color={255,0,255})); + connect(and6.y, booScaRep5.u) + annotation (Line(points={{82,-170},{98,-170}}, color={255,0,255})); + connect(not1.y, and5.u2) annotation (Line(points={{-58,-260},{50,-260},{50,-68}, + {58,-68}}, color={255,0,255})); + connect(not1.y, and6.u2) annotation (Line(points={{-58,-260},{50,-260},{50,-178}, + {58,-178}}, color={255,0,255})); + connect(con3.y, and5.u2) annotation (Line(points={{-58,-210},{50,-210},{50,-68}, + {58,-68}}, color={255,0,255})); + connect(con3.y, and6.u2) annotation (Line(points={{-58,-210},{50,-210},{50,-178}, + {58,-178}}, color={255,0,255})); + connect(chiMod.y, disTow.u1) annotation (Line(points={{-158,200},{-150,200},{-150, + -230},{78,-230}}, color={255,0,255})); + connect(disTow.y, yTowCel) + annotation (Line(points={{102,-230},{220,-230}}, color={255,0,255})); + connect(uWSE, disTow.u2) annotation (Line(points={{-220,-260},{-150,-260},{-150, + -238},{78,-238}}, color={255,0,255})); + connect(con4.y, disTow.u2) annotation (Line(points={{2,-280},{60,-280},{60,-238}, + {78,-238}}, color={255,0,255})); + connect(noChi.y, truDel.u) + annotation (Line(points={{-118,200},{-102,200}}, color={255,0,255})); +annotation (defaultComponentName = "disChi", + 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={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name")}), + Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-200,-300},{200,300}})), + Documentation(info=" +

                      +It disables the devices when the chiller plant is disabled in chiller mode. +It is implemented as ASHRAE Guideline36-2021, section 5.20.2.5 and 5.20.2.7. +

                      +

                      +When the plant is disabled: +

                      +
                        +
                      • +Shut off all enabled chillers, if any. +
                      • +
                      • +For each enabled chiller, close the chilled water isolation valve after +3 minutes or the chiller is not requesting chilled water flow. +
                      • +
                      • +For each enabled chiller, close the condenser water isolation valve after +3 minutes or the chiller is not requesting condenser water flow. +
                      • +
                      • +Disable the operating primary chilled water pumps, condenser water pumps, and +cooling towers. +
                      • +
                      +", +revisions=" +
                        +
                      • +July 20, 2022, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end DisableChillers; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Enable.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Enable.mo new file mode 100644 index 00000000000..47526f6db3c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Enable.mo @@ -0,0 +1,295 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable; +block Enable "Sequence to enable and disable plant" + + parameter Real schTab[4,2] = [0,1; 6*3600,1; 19*3600,1; 24*3600,1] + "Plant enabling schedule allowing operators to lock out the plant during off-hour"; + + parameter Real TChiLocOut=277.5 + "Outdoor air lockout temperature below which the chiller plant should be disabled"; + + parameter Real plaThrTim( + final unit="s", + final quantity="Time")=900 + "Threshold time to check status of chiller plant"; + + parameter Real reqThrTim( + final unit="s", + final quantity="Time")=180 + "Threshold time to check current chiller plant request"; + + parameter Integer ignReq = 0 + "Ignorable chiller plant requests"; + + parameter Real locDt( + final unit="K", + final quantity="TemperatureDifference") = 5/9 + "Offset temperature for lockout chiller" + annotation (Dialog(tab="Advanced")); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput chiPlaReq + "Number of chiller plant cooling requests" + annotation (Placement(transformation(extent={{-240,70},{-200,110}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC") + "Outdoor air temperature" + annotation (Placement(transformation(extent={{-240,-170},{-200,-130}}), + iconTransformation(extent={{-140,-62},{-100,-22}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yPla + "Chiller plant enabling status" + annotation (Placement(transformation(extent={{200,70},{220,90}}), + iconTransformation(extent={{100,-10},{120,10}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable enaSch( + final table=schTab, + final smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + final extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic) + "Plant enabling schedule allowing operators to lock out the plant during off-hour" + annotation (Placement(transformation(extent={{-140,40},{-120,60}}))); + +// final parameter Buildings.Controls.OBC.CDL.Types.Smoothness tabSmo= +// Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments +// "Smoothness of table interpolation"; +// +// final parameter Buildings.Controls.OBC.CDL.Types.Extrapolation extrapolation= +// Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic +// "Extrapolation of data outside the definition range"; + +protected + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold schOn( + final t=0.5) + "Check if enabling schedule is active" + annotation (Placement(transformation(extent={{-100,40},{-80,60}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-140,110},{-120,130}}))); + + Buildings.Controls.OBC.CDL.Logical.Timer disTim( + final t=plaThrTim) + "Check if chiller plant has been disabled more than threshold time" + annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); + + Buildings.Controls.OBC.CDL.Integers.GreaterThreshold hasReq( + final t=ignReq) + "Check if the number of chiller plant request is greater than the number of ignorable request" + annotation (Placement(transformation(extent={{-140,80},{-120,100}}))); + + Buildings.Controls.OBC.CDL.Logical.MultiAnd enaPla( + final nin=4) "Enable chiller plant" + annotation (Placement(transformation(extent={{40,70},{60,90}}))); + + Buildings.Controls.OBC.CDL.Logical.Timer enaTim( + final t=plaThrTim) + "Check if chiller plant has been enabled more than threshold time" + annotation (Placement(transformation(extent={{-140,-20},{-120,0}}))); + + CDL.Logical.TrueDelay enaTim1(final delayTime=reqThrTim) + "Check if number of chiller plant request has been less than ignorable request by more than threshold time" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); + + Buildings.Controls.OBC.CDL.Logical.And disPla + "Disable chiller plant" + annotation (Placement(transformation(extent={{100,-28},{120,-8}}))); + + Buildings.Controls.OBC.CDL.Logical.Latch plaSta + "Chiller plant enabling status" + annotation (Placement(transformation(extent={{140,70},{160,90}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( + final uLow=0, + final uHigh=locDt) + "Check if outdoor temperature is lower than chiller lockout temperature" + annotation (Placement(transformation(extent={{-100,-140},{-80,-120}}))); + + Buildings.Controls.OBC.CDL.Logical.Or disPlaCon + "Disable chiller plant conditions" + annotation (Placement(transformation(extent={{60,-88},{80,-68}}))); + + Buildings.Controls.OBC.CDL.Logical.Not lesReq + "Check if it is less than the ignorable request" + annotation (Placement(transformation(extent={{-140,-80},{-120,-60}}))); + + Buildings.Controls.OBC.CDL.Logical.Not notLoc + "Check if outdoor temperature is higher than the chiller lockout temperature" + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre1 "Pre" + annotation (Placement(transformation(extent={{-180,110},{-160,130}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiLocOutTem( + final k=TChiLocOut) + "Outdoor air lockout temperature" + annotation (Placement(transformation(extent={{-180,-120},{-160,-100}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 + "Difference between chiller lockout temperature and outdoor temperature" + annotation (Placement(transformation(extent={{-140,-140},{-120,-120}}))); + + Buildings.Controls.OBC.CDL.Logical.Or or1 + "Disable chiller plant conditions" + annotation (Placement(transformation(extent={{-20,-110},{0,-90}}))); + +equation + connect(enaSch.y[1], schOn.u) + annotation (Line(points={{-118,50},{-102,50}}, color={0,0,127})); + connect(not1.y, disTim.u) + annotation (Line(points={{-118,120},{-102,120}}, color={255,0,255})); + connect(chiPlaReq, hasReq.u) + annotation (Line(points={{-220,90},{-142,90}}, color={255,127,0})); + connect(disTim.passed,enaPla. u[1]) + annotation (Line(points={{-78,112},{20,112},{20,77.375},{38,77.375}}, + color={255,0,255})); + connect(hasReq.y,enaPla. u[2]) + annotation (Line(points={{-118,90},{-20,90},{-20,79.125},{38,79.125}}, + color={255,0,255})); + connect(schOn.y,enaPla. u[3]) + annotation (Line(points={{-78,50},{0,50},{0,80.875},{38,80.875}}, + color={255,0,255})); + connect(schOn.y, not2.u) + annotation (Line(points={{-78,50},{-50,50},{-50,-50},{-42,-50}}, + color={255,0,255})); + connect(enaPla.y, plaSta.u) + annotation (Line(points={{62,80},{138,80}},color={255,0,255})); + connect(plaSta.y, yPla) + annotation (Line(points={{162,80},{210,80}}, color={255,0,255})); + connect(disPlaCon.y, disPla.u2) annotation (Line(points={{82,-78},{90,-78},{90, + -26},{98,-26}}, color={255,0,255})); + connect(not2.y, disPlaCon.u1) annotation (Line(points={{-18,-50},{20,-50},{20, + -78},{58,-78}}, color={255,0,255})); + connect(hasReq.y, lesReq.u) annotation (Line(points={{-118,90},{-20,90},{-20,70}, + {-180,70},{-180,-70},{-142,-70}}, color={255,0,255})); + connect(lesReq.y, enaTim1.u) + annotation (Line(points={{-118,-70},{-102,-70}}, color={255,0,255})); + connect(plaSta.y, pre1.u) annotation (Line(points={{162,80},{180,80},{180,140}, + {-190,140},{-190,120},{-182,120}}, color={255,0,255})); + connect(pre1.y, not1.u) + annotation (Line(points={{-158,120},{-142,120}}, color={255,0,255})); + connect(pre1.y, enaTim.u) + annotation (Line(points={{-158,120},{-150,120},{-150,-10},{-142,-10}}, + color={255,0,255})); + connect(TOut, sub1.u2) + annotation (Line(points={{-220,-150},{-150,-150},{-150,-136},{-142,-136}}, + color={0,0,127})); + connect(chiLocOutTem.y, sub1.u1) + annotation (Line(points={{-158,-110},{-150,-110},{-150,-124},{-142,-124}}, + color={0,0,127})); + connect(sub1.y, hys.u) + annotation (Line(points={{-118,-130},{-102,-130}}, color={0,0,127})); + connect(hys.y, notLoc.u) annotation (Line(points={{-78,-130},{-60,-130},{-60,10}, + {-22,10}}, color={255,0,255})); + connect(notLoc.y, enaPla.u[4]) annotation (Line(points={{2,10},{20,10},{20,82.625}, + {38,82.625}},color={255,0,255})); + connect(disPla.y, plaSta.clr) annotation (Line(points={{122,-18},{130,-18},{ + 130,74},{138,74}}, color={255,0,255})); + connect(enaTim.passed, disPla.u1) annotation (Line(points={{-118,-18},{98,-18}}, + color={255,0,255})); + connect(hys.y, or1.u2) annotation (Line(points={{-78,-130},{-60,-130},{-60,-108}, + {-22,-108}}, color={255,0,255})); + connect(or1.y, disPlaCon.u2) annotation (Line(points={{2,-100},{20,-100},{20,-86}, + {58,-86}}, color={255,0,255})); + connect(enaTim1.y, or1.u1) annotation (Line(points={{-78,-70},{-40,-70},{-40,-100}, + {-22,-100}}, color={255,0,255})); +annotation ( + defaultComponentName = "plaEna", + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-200,-180},{200,180}})), + Icon(graphics={ + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Ellipse(extent={{-80,80},{80,-80}}, lineColor={28,108,200},fillColor={170,255,213}, + fillPattern=FillPattern.Solid), + Ellipse(extent={{-90,90},{90,-90}}, lineColor={28,108,200}), + Rectangle(extent={{-75,2},{75,-2}}, lineColor={28,108,200}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid), + Text( + extent={{-66,46},{76,10}}, + textColor={28,108,200}, + textString="START"), + Text( + extent={{-66,-8},{76,-44}}, + textColor={28,108,200}, + textString="STOP")}), + Documentation(info=" +

                      +Block that generate chiller plant enable signals and output the initial plant stage, +according to ASHRAE Guideline36-2021, section 5.20.2.1, +5.20.2.2 and 5.20.2.3. +

                      +

                      +The chiller plant should be enabled and disabled according to following sequences: +

                      +
                        +
                      1. +An enabling schedule should be included to allow operators to lock out the +chiller plant during off-hour, e.g. to allow off-hour operation of HVAC systems +except the chiller plant. The default schedule shall be 24/7 and be adjustable. +
                      2. +
                      3. +The plant should be enabled in the lowest stage when the plant has been +disabled for at least plaThrTim, e.g. 15 minutes and: +
                          +
                        • +Number of chiller plant requests > ignReq (ignReq +should default to 0 and adjustable), and, +
                        • +
                        • +Outdoor air temperature is greater than chiller lockout temperature, +TOut > TChiLocOut, and, +
                        • +
                        • +The chiller enable schedule is active. +
                        • +
                        +
                      4. +
                      5. +The plant should be disabled when it has been enabled for at least +plaThrTim, e.g. 15 minutes and: +
                          +
                        • +Number of chiller plant requests ≤ ignReq for reqThrTim, or, +
                        • +
                        • +Outdoor air temperature is 1 °F less than chiller lockout temperature, +TOut < TChiLocOut - 1 °F, or, +
                        • +
                        • +The chiller enable schedule is inactive. +
                        • +
                        +
                      6. +
                      +

                      +The following state machine chart illustrates the transitions between plant enable and plant disable: +

                      +

                      +\"Image +

                      +", +revisions=" +
                        +
                      • +January 19, 2021, by Milica Grahovac:
                        +Added state chart illustration. +
                      • +
                      • +March 12, 2020, by Milica Grahovac:
                        +Removed initial stage determination as it is imlemented as a separate sequence. This is for +issue 1831. +
                      • +
                      • +January 24, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Enable; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/EnableDevices.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/EnableDevices.mo new file mode 100644 index 00000000000..a7c85649416 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/EnableDevices.mo @@ -0,0 +1,202 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable; +block EnableDevices + "Enable devices when plants is enabled in chiller mode or waterside economizer mode" + + parameter Integer nSta = 3 + "Number of chiller stages"; + parameter Integer nChiWatPum = 2 + "Total number of chilled water pumps"; + parameter Integer nConWatPum = 2 + "Total number of condenser water pumps"; + parameter Real iniPumDel(unit="s") = 5 + "Time to delay pump operation when the plant is just initiated"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enable signal" + annotation (Placement(transformation(extent={{-200,80},{-160,120}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uIni( + final min=0, + final max=nSta) + "Initial chiller stage (at plant enable)" + annotation (Placement(transformation(extent={{-200,40},{-160,80}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiSta( + final min=0, + final max=nSta) + "Current chiller stage" + annotation (Placement(transformation(extent={{-200,0},{-160,40}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum[nChiWatPum] + "Chilled water pump proven on" + annotation (Placement(transformation(extent={{-200,-80},{-160,-40}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uConWatPum[nConWatPum] + "Condenser water pump proven on" + annotation (Placement(transformation(extent={{-200,-130},{-160,-90}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yEnaPlaPro + "True: it is in the plant enabling process" + annotation (Placement(transformation(extent={{160,80},{200,120}}), + iconTransformation(extent={{100,70},{140,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChiWatIsoVal + "Lead chiller chilled water isolation valve commanded open" + annotation (Placement(transformation(extent={{160,10},{200,50}}), + iconTransformation(extent={{100,40},{140,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yConWatIsoVal + "Lead chiller condenser water isolation valve commanded open" + annotation (Placement(transformation(extent={{160,-20},{200,20}}), + iconTransformation(extent={{100,20},{140,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLeaPriChiPum + "Lead primary chilled water pump commanded on" + annotation (Placement(transformation(extent={{160,-50},{200,-10}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLeaConPum + "Lead condenser water pump commanded on" + annotation (Placement(transformation(extent={{160,-80},{200,-40}}), + iconTransformation(extent={{100,-50},{140,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLeaTowCel + "Lead cooling tower cell commanded on" + annotation (Placement(transformation(extent={{160,-110},{200,-70}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLeaChi + "Lead chiller commanded on" + annotation (Placement(transformation(extent={{160,-140},{200,-100}}), + iconTransformation(extent={{100,-110},{140,-70}}))); + + Buildings.Controls.OBC.CDL.Integers.Equal intEqu1 + "Check if current stage is initial stage" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 + "Not in initial stage" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg + "Plant enable edge" + annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); + Buildings.Controls.OBC.CDL.Logical.Latch ecoMod "Plant enabled in economizer mode" + annotation (Placement(transformation(extent={{0,90},{20,110}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=1) + "Stage 1, meaning it stages in chiller mode" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intChiMod + "Output true if it is enabled in chiller mode" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 + "Enabled devices associate with chiller mode operation" + annotation (Placement(transformation(extent={{100,20},{120,40}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr chiWatPumOn(final nin=nChiWatPum) + "Check if there is any chilled water pump proven on" + annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr conWatPumOn(final nin=nConWatPum) + "Check if there is any condenser water pump proven on" + annotation (Placement(transformation(extent={{-120,-120},{-100,-100}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 + "Check if the lead pumps are proven on" + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + Buildings.Controls.OBC.CDL.Logical.And and3 + "Enable lead chiller" + annotation (Placement(transformation(extent={{20,-130},{40,-110}}))); + +equation + connect(uPla, edg.u) + annotation (Line(points={{-180,100},{-102,100}}, color={255,0,255})); + connect(uIni, intEqu1.u1) annotation (Line(points={{-180,60},{-102,60}}, + color={255,127,0})); + connect(uChiSta, intEqu1.u2) + annotation (Line(points={{-180,20},{-140,20},{-140,52},{-102,52}}, color={255,127,0})); + connect(intEqu1.y, not1.u) + annotation (Line(points={{-78,60},{-62,60}}, color={255,0,255})); + connect(edg.y, ecoMod.u) + annotation (Line(points={{-78,100},{-2,100}}, color={255,0,255})); + connect(ecoMod.y, yEnaPlaPro) + annotation (Line(points={{22,100},{180,100}}, color={255,0,255})); + connect(conInt.y, intChiMod.u2) annotation (Line(points={{-98,0},{-60,0},{-60, + 22},{-42,22}}, color={255,127,0})); + connect(uIni, intChiMod.u1) annotation (Line(points={{-180,60},{-120,60},{-120, + 30},{-42,30}}, color={255,127,0})); + connect(ecoMod.y, and1.u2) annotation (Line(points={{22,100},{40,100},{40,22}, + {98,22}}, color={255,0,255})); + connect(and1.y, yChiWatIsoVal) + annotation (Line(points={{122,30},{180,30}}, color={255,0,255})); + connect(and1.y, yConWatIsoVal) annotation (Line(points={{122,30},{140,30},{140, + 0},{180,0}}, color={255,0,255})); + connect(uChiWatPum, chiWatPumOn.u) + annotation (Line(points={{-180,-60},{-122,-60}}, color={255,0,255})); + connect(uConWatPum, conWatPumOn.u) + annotation (Line(points={{-180,-110},{-122,-110}}, color={255,0,255})); + connect(chiWatPumOn.y, and2.u1) + annotation (Line(points={{-98,-60},{-62,-60}}, color={255,0,255})); + connect(conWatPumOn.y, and2.u2) annotation (Line(points={{-98,-110},{-80,-110}, + {-80,-68},{-62,-68}}, color={255,0,255})); + connect(and2.y, and3.u2) annotation (Line(points={{-38,-60},{-20,-60},{-20,-128}, + {18,-128}}, color={255,0,255})); + connect(and1.y, and3.u1) annotation (Line(points={{122,30},{140,30},{140,0},{0, + 0},{0,-120},{18,-120}}, color={255,0,255})); + connect(and3.y, yLeaChi) + annotation (Line(points={{42,-120},{180,-120}}, color={255,0,255})); + connect(not1.y, ecoMod.clr) annotation (Line(points={{-38,60},{-20,60},{-20,94}, + {-2,94}}, color={255,0,255})); + connect(intChiMod.y, and1.u1) + annotation (Line(points={{-18,30},{98,30}}, color={255,0,255})); + connect(ecoMod.y, yLeaPriChiPum) annotation (Line(points={{22,100},{40,100},{ + 40,-30},{180,-30}}, color={255,0,255})); + connect(ecoMod.y, yLeaConPum) annotation (Line(points={{22,100},{40,100},{40, + -60},{180,-60}}, color={255,0,255})); + connect(ecoMod.y, yLeaTowCel) annotation (Line(points={{22,100},{40,100},{40, + -90},{180,-90}}, color={255,0,255})); +annotation (defaultComponentName = "enaDev", + 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={{-100,138},{100,98}}, + textColor={0,0,255}, + textString="%name")}), + Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-160,-140},{160,140}})), + Documentation(info=" +

                      +It controls the devices when the chiller plant is enabled in chiller mode or +waterside economizer mode. It is implemented as provided in sections 5.20.2.4, +section a and b. +

                      +
                        +
                      1. +Open the isolation valves, + +
                      2. +
                      3. +Stage on lead primary chilled water pump, condenser water pump, and cooling +tower respectively. +
                      4. +
                      5. +If the plant is enabled in chiller mode, +once the lead pumps are proven on, enable lead chiller. +
                      6. +
                      +", +revisions=" +
                        +
                      • +July 20, 2022, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end EnableDevices; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/DisableChillers.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/DisableChillers.mo new file mode 100644 index 00000000000..4c4e851a01d --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/DisableChillers.mo @@ -0,0 +1,92 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation; +model DisableChillers + "Validation sequence for disabling chillers and the associated devices" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.DisableChillers + disPlaFroChi(have_WSE=false) + "Disable plant from chiller mode" + annotation (Placement(transformation(extent={{60,0},{80,20}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staPro( + final k=false) + "Staging change process" + annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiIsoVal[2]( + final k={1,0}) + "Chilled water isolation valve" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conIsoVal1[2]( + final k={1,0}) + "Condenser water isolation valve" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant pumSpe[2]( + final k={0.75,0}) "Pumps speed" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta[2]( + final width={0.5,0.01}, + final period={3600,7200}, + shift={0,-100}) + "Chiller status" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + +equation + connect(chiSta.y, disPlaFroChi.uChi) annotation (Line(points={{-38,50},{44,50}, + {44,19},{58,19}}, color={255,0,255})); + connect(chiSta.y, disPlaFroChi.uChiWatReq) annotation (Line(points={{-38,50}, + {40,50},{40,17},{58,17}},color={255,0,255})); + connect(chiSta.y, disPlaFroChi.uConWatReq) annotation (Line(points={{-38,50}, + {48,50},{48,12},{58,12}}, color={255,0,255})); + connect(chiIsoVal.y, disPlaFroChi.uChiWatIsoVal) annotation (Line(points={{-58,20}, + {20,20},{20,15},{58,15}}, color={0,0,127})); + connect(conIsoVal1.y, disPlaFroChi.uConWatIsoVal) annotation (Line(points={{-38,-10}, + {24,-10},{24,9},{58,9}}, color={0,0,127})); + connect(pumSpe.y, disPlaFroChi.uChiWatPumSpe) annotation (Line(points={{-58,-40}, + {28,-40},{28,7},{58,7}}, color={0,0,127})); + connect(pumSpe.y, disPlaFroChi.uConWatPumSpe) annotation (Line(points={{-58,-40}, + {32,-40},{32,5},{58,5}}, color={0,0,127})); + connect(staPro.y, disPlaFroChi.chaPro) annotation (Line(points={{-18,-70},{36, + -70},{36,3},{58,3}}, color={255,0,255})); +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/DisableChillers.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.DisableChillers. +It demonstrates the control of disabling plants from chiller mode (disPlaFroChi). +

                      +
                        +
                      • +Bofore 1800 seconds, the chiller 1 is enabled and the chiller 2 is disabled. +The chilled water isolation valve is fully open and the chiller water pump +speed equals the input speed setpoint. +
                      • +
                      • +After 1800 seconds, the chillers are disabled. Thus both the +chilled and condenser water isolation valves are closed, the +chilled and condenser water pump speed setpoint becomes 0, and +all the tower cells are disabled. +
                      • +
                      +", revisions=" +
                        +
                      • +July 22, 2022, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end DisableChillers; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/Enable.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/Enable.mo new file mode 100644 index 00000000000..c48cbd3e7f0 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/Enable.mo @@ -0,0 +1,187 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation; +model Enable + "Validation sequence for enabling and disabling chiller plant" + + parameter Real aveTWetBul( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=288.15 + "Chilled water supply set temperature"; + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Enable + disPlaSch( + final schTab=[0,0; + 10*60,1; + 19*3600,0; + 24*3600,0], + ignReq=1) + "Disable plant without waterside economizer, due to schedule" + annotation (Placement(transformation(extent={{40,90},{60,110}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Enable + disPlaReq( + final schTab=[0,0; + 6*3600,1; + 19*3600,0; + 24*3600,0], + ignReq=1) + "Disable plant without waterside economizer, due to lack of request" + annotation (Placement(transformation(extent={{40,0},{60,20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Enable + disPlaOutTem(final schTab=[0,0; 1*3600,1; 19*3600,0; 24*3600,0]) + "Disable plant without waterside economizer, due to low outdoor temperature" + annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); + +protected + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=3) + "Chiller plant requests above the number of ignored requests" + annotation (Placement(transformation(extent={{-20,100},{0,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOutTem( + final k=293.15) "Constant outdoor temperature above lockout" + annotation (Placement(transformation(extent={{-20,60},{0,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable chiPlaReq2( + final table=[0,1; + 6.5*3600,1; + 9*3600,2; + 9*3600 + 600,0; + 19*3600,0; + 24*3600,1], + final smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments) + "Number of chiller plant request" + annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 + "Convert real input to integer output" + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOutTem1( + final k=282.15) + "Constant outdoor temperature" + annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable chiPlaReq3( + final table=[0,1; + 6.5*3600,1; + 9*3600,2; + 14*3600,3; + 19*3600,3; + 24*3600,1], + final smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments) + "Number of chiller plant request" + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 + "Convert real input to integer output" + annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin outTem1( + final amplitude=7.5, + final freqHz=1/(24*3600), + final offset=275.15) "Outdoor temperature" + annotation (Placement(transformation(extent={{-20,-110},{0,-90}}))); + +equation + connect(conOutTem.y, disPlaSch.TOut) + annotation (Line(points={{2,70},{24,70},{24,95.8},{38,95.8}}, color={0,0,127})); + connect(chiPlaReq2.y[1], reaToInt2.u) + annotation (Line(points={{-38,10},{-22,10}}, color={0,0,127})); + connect(reaToInt2.y, disPlaReq.chiPlaReq) annotation (Line(points={{2,10},{20, + 10},{20,14},{38,14}}, color={255,127,0})); + connect(conOutTem1.y, disPlaReq.TOut) + annotation (Line(points={{2,-20},{24,-20},{24,5.8},{38,5.8}}, color={0,0,127})); + connect(chiPlaReq3.y[1], reaToInt3.u) + annotation (Line(points={{-38,-70},{-22,-70}}, color={0,0,127})); + connect(reaToInt3.y, disPlaOutTem.chiPlaReq) annotation (Line(points={{2,-70}, + {20,-70},{20,-66},{38,-66}}, color={255,127,0})); + connect(outTem1.y, disPlaOutTem.TOut) + annotation (Line(points={{2,-100},{24,-100},{24,-74.2},{38,-74.2}}, color={0,0,127})); + connect(conInt.y, disPlaSch.chiPlaReq) annotation (Line(points={{2,110},{20, + 110},{20,104},{38,104}}, color={255,127,0})); +annotation ( + experiment(StopTime=86400.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/Enable.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Enable. +It shows different conditions to enable and disable the plant. +

                      +
                        +
                      • +For instance disPlaReq, the input chiPlaReq becomes +greater than the ignorable request ignReq at 32400 seconds and +becomes less than the ignorable request at 33000 seconds. The plant is enabled +at 32400 seconds, but becomes disabled at 33300 seconds. It allows the plant +being enabled for 15 minutes and then becomes disabled. +
                      • +
                      • +For instance disPlaOutTem, the input TOut becomes +greater than the lockout temperature TChiLocOut at 4382.seconds. +The plant becomes enabled. At 39877.7 seconds, the input TOut +becomes lower than the lockeout temperature TChiLocOut by 0.556 +°C. The plant becomes disabled. +
                      • +
                      • +For instance disPlaSch, the chiller enabing schedule specifies +that the plant should be enabled at 600 seconds. However, the plant becomes +enabled at 900 seconds as it allows the plant being disabled for 15 minutes. +The plant becomes disabled at 68400 seconds, which is specified as in the +plant scheduling. +
                      • +
                      +", revisions=" +
                        +
                      • +March 12, 2020, by Milica Grahovac:
                        +Removed tests related to initial stage determination. This is for +issue 1831. +Updated tests to include schedule based reference results. +
                      • +
                      • +March 20, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(graphics={Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-140,-140},{140,140}}), + graphics={ + Text( + extent={{40,90},{106,74}}, + textColor={0,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Left, + textString="Disable plant +due to inactive schedule"), + Text( + extent={{40,0},{98,-12}}, + textColor={0,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Left, + textString="Disable plant +due to zero request"), + Text( + extent={{40,-82},{120,-96}}, + textColor={0,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Left, + textString="Disable plant +due to low outdoor temperature")})); +end Enable; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/EnableDevices.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/EnableDevices.mo new file mode 100644 index 00000000000..a580d0f27bc --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/EnableDevices.mo @@ -0,0 +1,110 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation; +model EnableDevices "Validation sequence for enabling plant devices" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.EnableDevices enaDev + "Enable valves and pumps" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.1, + final period=3600) + "Enabled plant" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 + "Logical not" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=1) + "Stage 1, meaning it stages in chiller mode" + annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Pulse staSet( + final amplitude=-1, + final width=0.8, + final period=3600, + offset=2) "Stage setpoint" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.3, + final period=3600) + "Proven on pumps" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 + "Logical not" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=false) + "Disabled pump" + annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); +equation + connect(booPul.y, not1.u) + annotation (Line(points={{-58,80},{-42,80}}, color={255,0,255})); + connect(not1.y, enaDev.uPla) annotation (Line(points={{-18,80},{40,80},{40,38}, + {58,38}}, color={255,0,255})); + connect(conInt.y, enaDev.uIni) annotation (Line(points={{-38,40},{28,40},{28,34}, + {58,34}}, color={255,127,0})); + connect(staSet.y, enaDev.uChiSta) annotation (Line(points={{-58,0},{0,0},{0,30}, + {58,30}}, color={255,127,0})); + connect(booPul1.y, not2.u) + annotation (Line(points={{-58,-40},{-42,-40}}, color={255,0,255})); + connect(not2.y, enaDev.uChiWatPum[1]) annotation (Line(points={{-18,-40},{20,-40}, + {20,26},{58,26}}, color={255,0,255})); + connect(not2.y, enaDev.uConWatPum[1]) annotation (Line(points={{-18,-40},{20,-40}, + {20,22},{58,22}}, color={255,0,255})); + connect(con.y, enaDev.uChiWatPum[2]) annotation (Line(points={{-18,-80},{40,-80}, + {40,26},{58,26}}, color={255,0,255})); + connect(con.y, enaDev.uConWatPum[2]) annotation (Line(points={{-18,-80},{40,-80}, + {40,22},{58,22}}, color={255,0,255})); +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/EnableDevices.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.EnableDevices. +It shows how to control devices when the plant is just enabled. +

                      +
                        +
                      • +At 360 seconds, the plant becomes enabled and the initial plant +stage is 1. Thus the plant is enabled in chiller mode. The +associated isolation valves, lead primary chiller and condenser +water pumps are enabled. +From 360 seconds to 2880 seconds, the chiller stage uChiSta +equals the initial plant stage uIni thus it is +in the plant enabling process. +
                      • +
                      • +At 1080 seconds, which it is still in the plant enabling process, +the chilled water and condenser water pumps are proven on. +Thus, the lead chiller becomes enabled. +
                      • +
                      • +At 2880 seconds, the plant enabling process is ended. +Thus the control after the moment becomes invalid. +
                      • +
                      + + + +", revisions=" +
                        +
                      • +July 22, 2022, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end EnableDevices; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/package.mo new file mode 100644 index 00000000000..1fa93695d82 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/package.mo @@ -0,0 +1,36 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable; +package Validation "Collection of validation models" + annotation ( preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/package.order new file mode 100644 index 00000000000..4cf17c6ee05 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/package.order @@ -0,0 +1,3 @@ +DisableChillers +Enable +EnableDevices diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/package.mo new file mode 100644 index 00000000000..c323a0db61b --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/package.mo @@ -0,0 +1,36 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic; +package PlantEnable "Package of sequences for enabling plant and the associated devices" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains sequences for enabling plant and the associate devices. +The sequences are implemented based on ASHRAE Gudeline36-2021, section 5.20.2. +"), +Icon(graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={28,108,200}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=5, + borderPattern=BorderPattern.Raised), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Ellipse(extent={{-80,80},{80,-80}}, lineColor={28,108,200},fillColor={170,255,213}, + fillPattern=FillPattern.Solid), + Ellipse(extent={{-90,90},{90,-90}}, lineColor={28,108,200}), + Rectangle(extent={{-75,2},{75,-2}}, lineColor={28,108,200}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid), + Text( + extent={{-66,46},{76,10}}, + textColor={28,108,200}, + textString="START"), + Text( + extent={{-66,-8},{76,-44}}, + textColor={28,108,200}, + textString="STOP")})); +end PlantEnable; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/package.order new file mode 100644 index 00000000000..ac6f1b7f7c8 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/package.order @@ -0,0 +1,4 @@ +DisableChillers +Enable +EnableDevices +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/Validation/IdentifyStage.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/Validation/IdentifyStage.mo new file mode 100644 index 00000000000..9ada5e5796e --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/Validation/IdentifyStage.mo @@ -0,0 +1,128 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.Validation; +model IdentifyStage "Validation identifying stage index" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.IdentifyStage ideSta + "Idendify stage index" + annotation (Placement(transformation(extent={{60,30},{80,50}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.IdentifyStage ideSta1( + nChi=3, + staMat={{1,0,0},{1,1,0},{1,1,1}}) + "Idendify stage index" + annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" + annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Not not3 "Logical not" + annotation (Placement(transformation(extent={{0,0},{20,20}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chi1( + final width=0.5, + final period=5) + "Chiller one status" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chi2( + final width=0.7, + final period=5) + "Chiller two status" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chi3( + final width=0.9, + final period=5) "Chiller three status" + annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); + +equation + connect(chi1.y, ideSta.uChi[1]) annotation (Line(points={{-58,60},{-40,60},{-40, + 40},{58,40}}, color={255,0,255})); + connect(chi2.y, ideSta.uChi[2]) annotation (Line(points={{-58,20},{-30,20},{-30, + 40},{58,40}}, color={255,0,255})); + connect(chi3.y, not1.u) + annotation (Line(points={{-58,-70},{-2,-70}}, color={255,0,255})); + connect(chi1.y, not3.u) annotation (Line(points={{-58,60},{-40,60},{-40,10},{-2, + 10}},color={255,0,255})); + connect(chi2.y, not2.u) annotation (Line(points={{-58,20},{-30,20},{-30,-30},{ + -2,-30}}, color={255,0,255})); + connect(not3.y, ideSta1.uChi[1]) annotation (Line(points={{22,10},{30,10},{30, + -30.6667},{58,-30.6667}}, color={255,0,255})); + connect(not2.y, ideSta1.uChi[2]) + annotation (Line(points={{22,-30},{58,-30}}, color={255,0,255})); + connect(not1.y, ideSta1.uChi[3]) annotation (Line(points={{22,-70},{40,-70},{ + 40,-29.3333},{58,-29.3333}}, + color={255,0,255})); + +annotation ( + experiment(StopTime=5.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/Validation/IdentifyStage.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.IdentifyStage. +It shows how to identify current chiller stage. +

                      +
                        +
                      • +For instance ideSta, the staging matrix staMat is +specified as {{1,0}, {0,1}, {1,1}} which means that in stage 1 +chiller 1 is enabled, in stage 2 chiller 2 is enabled and in stage 3 both +chillers are enabled. +
                          +
                        • +Before 2.5 seconds, since chiller 1 and 2 are enabled, current stage is 3. +
                        • +
                        • +From 2.5 seconds to 3.5 seconds, chiller 2 is enabled and chiller 1 is +disabled, current stage is 2. +
                        • +
                        • +After 3.5 seconds, both chillers are disabled, thus current stage is 0. +
                        • +
                        +
                      • +
                      • +For instance ideSta1, the staging matrix staMat is +specified as {{1,0,0},{1,1,0},{1,1,1}} which means that in stage 1 +chiller 1 is enabled, in stage 2 chiller 1 and 2 is enabled and in stage 3 all +3 chillers are enabled. +
                          +
                        • +Before 2.5 seconds, no chiller is enabled. The current chiller stage +is 0. +
                        • +
                        • +From 2.5 seconds to 3.5 seconds, only chiller 1 is enabled. Thus the +current chiller stage is 1. +
                        • +
                        • +From 3.5 seconds to 4.5 seconds, chiller 1 and 2 are enabled. Thus +the current chiller stage is 2. +
                        • +
                        • +After 4.5 seconds, all the three chillers are enabled. Thus the +current chiller stage is 3. +
                        • +
                        +
                      • +
                      +", revisions=" +
                        +
                      • +May 3, 2023, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end IdentifyStage; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/Validation/package.mo new file mode 100644 index 00000000000..05c444583d0 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic; +package Validation "Collection of validation models" + +annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})}), +preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +")); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/Validation/package.order new file mode 100644 index 00000000000..2485ca85f98 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/Validation/package.order @@ -0,0 +1 @@ +IdentifyStage diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/package.mo new file mode 100644 index 00000000000..53a2df1c70a --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/package.mo @@ -0,0 +1,43 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant; +package Generic "Generic control sequences" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains generic primary plant control sequences. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end Generic; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/package.order new file mode 100644 index 00000000000..5589c56e642 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/package.order @@ -0,0 +1,4 @@ +IdentifyStage +EquipmentRotation +PlantEnable +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Controller.mo new file mode 100644 index 00000000000..6cfce2b938d --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Controller.mo @@ -0,0 +1,288 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure; +block Controller "Head pressure controller for plants with headered condenser water pumps" + parameter Boolean have_heaPreConSig = false + "Flag indicating if there is head pressure control signal from chiller controller" + annotation (Dialog(group="Plant")); + parameter Boolean have_WSE=true + "True if the plant has waterside economizer. When the plant has waterside economizer, the condenser water pump speed must be variable" + annotation (Dialog(group="Plant")); + parameter Boolean have_fixSpeConWatPum=false + "Flag indicating if the plant has fixed speed condenser water pumps" + annotation (Dialog(group="Plant", enable=not have_WSE)); + parameter Real minTowSpe=0.1 + "Minimum cooling tower fan speed" + annotation (Dialog(group="Setpoints")); + parameter Real minConWatPumSpe=0.1 + "Minimum condenser water pump speed" + annotation (Dialog(group="Setpoints", enable= not ((not have_WSE) and have_fixSpeConWatPum))); + parameter Real minHeaPreValPos=0.1 + "Minimum head pressure control valve position" + annotation (Dialog(group="Setpoints", enable= (not ((not have_WSE) and (not have_fixSpeConWatPum))))); + parameter Real minChiLif=10 + "Minimum allowable lift at minimum load for chiller" + annotation (Dialog(tab="Loop signal", enable=not have_heaPreConSig)); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(tab="Loop signal", group="PID controller", enable=not have_heaPreConSig)); + parameter Real k=1 "Gain of controller" + annotation (Dialog(tab="Loop signal", group="PID controller", enable=not have_heaPreConSig)); + parameter Real Ti( + final unit="s", + final quantity="Time")=0.5 "Time constant of integrator block" + annotation (Dialog(tab="Loop signal", group="PID controller", + enable= not have_heaPreConSig + and (controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PI + or controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real Td( + final unit="s", + final quantity="Time")=0.5 + "Time constant of derivative block" + annotation (Dialog(tab="Loop signal", group="PID controller", + enable= not have_heaPreConSig + and (controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PD + or controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiHeaCon + "Chillers head pressure control status: true = ON, false = OFF" + annotation (Placement(transformation(extent={{-140,100},{-100,140}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatRet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") if not have_heaPreConSig + "Measured condenser water return temperature (condenser leaving)" + annotation (Placement(transformation(extent={{-140,70},{-100,110}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") if not have_heaPreConSig + "Measured chilled water supply temperature" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput desConWatPumSpe( + final min=0, + final max=1, + final unit="1") if not have_fixSpeConWatPum + "Design condenser water pump speed for current stage" + annotation (Placement(transformation(extent={{-140,10},{-100,50}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWSE + if have_WSE and (not have_fixSpeConWatPum) + "Status of water side economizer: true = ON, false = OFF" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uHeaPreCon( + final min=0, + final max=1, + final unit="1") if have_heaPreConSig + "Chiller head pressure control loop signal from chiller controller" + annotation (Placement(transformation(extent={{-140,-50},{-100,-10}}), + iconTransformation(extent={{-140,-120},{-100,-80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yMaxTowSpeSet( + final min=0, + final max=1, + final unit="1") "Maximum cooling tower speed setpoint" + annotation (Placement(transformation(extent={{100,60},{140,100}}), + iconTransformation(extent={{100,40},{140,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHeaPreConVal( + final min=0, + final max=1, + final unit="1") if have_WSE or ((not have_WSE) and have_fixSpeConWatPum) + "Head pressure control valve position" + annotation (Placement(transformation(extent={{100,10},{140,50}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yConWatPumSpeSet( + final min=0, + final max=1, + final unit="1") if not have_fixSpeConWatPum + "Condenser water pump speed setpoint" + annotation (Placement(transformation(extent={{100,-30},{140,10}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.ControlLoop + chiHeaPreLoo( + final minChiLif=minChiLif, + final controllerType=controllerType, + final k=k, + final Ti=Ti, + final Td=Td) if not have_heaPreConSig + "Generate chiller head pressure control loop signal" + annotation (Placement(transformation(extent={{-20,80},{0,100}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.MappingWithoutWSE + noWSE( + final have_fixSpeConWatPum=have_fixSpeConWatPum, + final minTowSpe=minTowSpe, + final minConWatPumSpe=minConWatPumSpe, + final minHeaPreValPos=minHeaPreValPos) if not have_WSE + "Controlling equipments for plants without waterside economizer" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.MappingWithWSE + withWSE( + final minTowSpe=minTowSpe, + final minConWatPumSpe=minConWatPumSpe, + final minHeaPreValPos=minHeaPreValPos) if have_WSE and (not have_fixSpeConWatPum) + "Controlling equipments for plants with waterside economizer" + annotation (Placement(transformation(extent={{40,-20},{60,0}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Switch swi if have_heaPreConSig + "Head pressure control from chiller controller" + annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( + final k=0) if have_heaPreConSig "Constant" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); + Buildings.Controls.OBC.CDL.Utilities.Assert assMes1( + final message="If the plant has waterside economizer, the condenser water pump cannot be fix speed.") + "Generate alert if the plant has waterside economizer and the condenser water pump has fix speed" + annotation (Placement(transformation(extent={{60,-110},{80,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant havWSE( + final k=have_WSE) + "Have waterside economizer" + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant fixSpe( + final k=have_fixSpeConWatPum) + "Fix speed condenser water pump" + annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); + Buildings.Controls.OBC.CDL.Logical.And fixSpeWSE + "The plant has waterside economizer and the condenser water pump is fix speed" + annotation (Placement(transformation(extent={{-20,-110},{0,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{20,-110},{40,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre "Break loop" + annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); + +equation + connect(chiHeaPreLoo.TConWatRet, TConWatRet) + annotation (Line(points={{-22,90},{-120,90}}, color={0,0,127})); + connect(chiHeaPreLoo.TChiWatSup, TChiWatSup) + annotation (Line(points={{-22,82},{-60,82},{-60,60},{-120,60}}, color={0,0,127})); + connect(chiHeaPreLoo.yHeaPreCon, noWSE.uHeaPreCon) + annotation (Line(points={{2,90},{20,90},{20,58},{38,58}}, color={0,0,127})); + connect(chiHeaPreLoo.yHeaPreCon, withWSE.uHeaPreCon) + annotation (Line(points={{2,90},{20,90},{20,-2},{38,-2}}, color={0,0,127})); + connect(withWSE.uWSE, uWSE) + annotation (Line(points={{38,-14},{-20,-14},{-20,0},{-120,0}}, + color={255,0,255})); + connect(uHeaPreCon, swi.u1) + annotation (Line(points={{-120,-30},{-60,-30},{-60,-32},{-22,-32}}, + color={0,0,127})); + connect(con.y, swi.u3) + annotation (Line(points={{-58,-60},{-40,-60},{-40,-48},{-22,-48}}, + color={0,0,127})); + connect(swi.y, noWSE.uHeaPreCon) + annotation (Line(points={{2,-40},{20,-40},{20,58},{38,58}}, color={0,0,127})); + connect(swi.y, withWSE.uHeaPreCon) + annotation (Line(points={{2,-40},{20,-40},{20,-2},{38,-2}}, color={0,0,127})); + connect(noWSE.yMaxTowSpeSet, yMaxTowSpeSet) + annotation (Line(points={{62,56},{80,56},{80,80},{120,80}}, color={0,0,127})); + connect(withWSE.yHeaPreConVal, yHeaPreConVal) + annotation (Line(points={{62,-16},{90,-16},{90,30},{120,30}}, color={0,0,127})); + connect(withWSE.yMaxTowSpeSet, yMaxTowSpeSet) + annotation (Line(points={{62,-4},{80,-4},{80,80},{120,80}}, color={0,0,127})); + connect(withWSE.yConWatPumSpeSet, yConWatPumSpeSet) + annotation (Line(points={{62,-10},{120,-10}}, color={0,0,127})); + connect(desConWatPumSpe, withWSE.desConWatPumSpe) + annotation (Line(points={{-120,30},{0,30},{0,-6},{38,-6}}, color={0,0,127})); + connect(noWSE.yConWatPumSpeSet, yConWatPumSpeSet) + annotation (Line(points={{62,42},{70,42},{70,-10},{120,-10}}, color={0,0,127})); + connect(noWSE.yHeaPreConVal, yHeaPreConVal) + annotation (Line(points={{62,46},{90,46},{90,30},{120,30}}, color={0,0,127})); + connect(desConWatPumSpe, noWSE.desConWatPumSpe) + annotation (Line(points={{-120,30},{0,30},{0,50},{38,50}}, color={0,0,127})); + connect(havWSE.y, fixSpeWSE.u1) annotation (Line(points={{-38,-90},{-30,-90},{ + -30,-100},{-22,-100}}, color={255,0,255})); + connect(fixSpe.y, fixSpeWSE.u2) annotation (Line(points={{-38,-120},{-30,-120}, + {-30,-108},{-22,-108}}, color={255,0,255})); + connect(fixSpeWSE.y, not1.u) + annotation (Line(points={{2,-100},{18,-100}}, color={255,0,255})); + connect(not1.y, assMes1.u) + annotation (Line(points={{42,-100},{58,-100}}, color={255,0,255})); + connect(uChiHeaCon, pre.u) + annotation (Line(points={{-120,120},{-82,120}}, color={255,0,255})); + connect(pre.y, swi.u2) annotation (Line(points={{-58,120},{-40,120},{-40,-40}, + {-22,-40}}, color={255,0,255})); + connect(pre.y, chiHeaPreLoo.uHeaPreEna) annotation (Line(points={{-58,120},{-40, + 120},{-40,98},{-22,98}}, color={255,0,255})); + connect(pre.y, noWSE.uHeaPreEna) annotation (Line(points={{-58,120},{-40,120}, + {-40,42},{38,42}}, color={255,0,255})); + connect(pre.y, withWSE.uHeaPreEna) annotation (Line(points={{-58,120},{-40,120}, + {-40,-18},{38,-18}}, color={255,0,255})); +annotation ( + defaultComponentName="heaPreCon", + 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), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-80,60},{82,-60}}, + lineColor={28,108,200}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Polygon( + points={{-80,60},{-14,4},{-80,-60},{-80,60}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-100,-140},{100,140}})), + Documentation(info=" +

                      +Block that generates control signals for chiller head pressure control, +according to ASHRAE Guideline36-2021, section 5.20.10 Head pressure control. +

                      +

                      +Note that if a plant has waterside economizer, the condenser water pump must be +variable speed. +

                      +

                      +This sequence contains three subsequences: +

                      + +", +revisions=" +
                        +
                      • +January 30, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/ControlLoop.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/ControlLoop.mo new file mode 100644 index 00000000000..a67af1ab189 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/ControlLoop.mo @@ -0,0 +1,149 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences; +block ControlLoop + "Sequence to generate head pressure control signal if it is not available from the chiller controller" + parameter Real minChiLif( + final min=1e-5, + final unit="K", + final quantity="TemperatureDifference") = 10 + "Minimum allowable lift at minimum load for chiller"; + parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(group="PID controller")); + parameter Real k=1 "Gain of controller" + annotation (Dialog(group="PID controller")); + parameter Real Ti( + final unit="s", + final quantity="Time")=0.5 + "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 Real Td( + final unit="s", + final quantity="Time")=0.5 + "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)); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uHeaPreEna + "Status of head pressure control: true = ON, false = OFF" + annotation (Placement(transformation(extent={{-140,0},{-100,40}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatRet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Measured condenser water return temperature (condenser leaving)" + annotation (Placement(transformation(extent={{-140,-40},{-100,0}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Measured chilled water supply temperature" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHeaPreCon( + final unit="1", + final min=0, + final max=1) "Chiller head pressure control loop output" + annotation (Placement(transformation(extent={{100,-20},{140,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conPID( + final controllerType=controllerType, + final k=k, + final Ti=Ti, + final Td=Td, + final yMax=1, + final yMin=0, + final y_reset=0) + "Generate head pressure control signal" + annotation (Placement(transformation(extent={{20,50},{40,70}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Subtract lif "Lift temperature" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(final k=1) + "Constant one" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(final k=1/minChiLif) + "Normalized by minimum allowable lift at minimum load for chiller" + annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); + +equation + connect(TConWatRet, lif.u1) annotation (Line(points={{-120,-20},{-80,-20},{-80, + -34},{-62,-34}}, color={0,0,127})); + connect(con.y, conPID.u_s) + annotation (Line(points={{-18,60},{18,60}}, color={0,0,127})); + connect(conPID.y, yHeaPreCon) + annotation (Line(points={{42,60},{60,60},{60,0},{120,0}}, color={0,0,127})); + connect(lif.y, gai.u) + annotation (Line(points={{-38,-40},{-22,-40}}, color={0,0,127})); + connect(gai.y, conPID.u_m) + annotation (Line(points={{2,-40},{30,-40},{30,48}}, color={0,0,127})); + connect(uHeaPreEna, conPID.trigger) + annotation (Line(points={{-120,20},{24,20},{24,48}}, color={255,0,255})); + connect(TChiWatSup, lif.u2) annotation (Line(points={{-120,-80},{-80,-80},{-80, + -46},{-62,-46}}, color={0,0,127})); + +annotation ( + defaultComponentName= "chiHeaPreLoo", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={170,255,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{-80,78},{-80,-90}}, color={192,192,192}), + Line(points={{-90,0},{82,0}}, color={192,192,192}), + Polygon( + points={{90,0},{68,8},{68,-8},{90,0}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(origin = {-1.939,-1.816}, + points={{61.939,7.816},{37.939,15.816},{11.939,-80.184},{-29.966,113.485}, + {-65.374,-61.217},{-78.061,-78.184}}, + color = {0,0,127}, + smooth = Smooth.Bezier)}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

                      +Block that generates chiller head pressure control loop signal when the signal +is not available from chiller controller, +according to ASHRAE Guideline36-2021, +section 5.20.10 Head pressure control, part 5.20.10.1 and 5.20.10.2. +

                      +

                      +1. When head pressure control loop is enabled, a reverse acting PID loop shall +maintain the temperature differential between the chiller condenser water +return (condenser leaving) temperature TConWatRet and chilled water supply temperature +TChiWatSup at minimum allowable lift minChiLif (chiller lift +equals to TConWatRet minus TChiWatSup) +

                      +

                      +2. Each operating chiller shall have its own head pressure control loop. +

                      +", +revisions=" +
                        +
                      • +January 30, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end ControlLoop; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/MappingWithWSE.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/MappingWithWSE.mo new file mode 100644 index 00000000000..3417face081 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/MappingWithWSE.mo @@ -0,0 +1,322 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences; +block MappingWithWSE + "Equipment setpoints when chiller head pressure control is enabled, for plants with waterside economizer and headered condenser water pumps" + parameter Real minTowSpe = 0.1 + "Minimum cooling tower fan speed"; + parameter Real minConWatPumSpe = 0.1 + "Minimum condenser water pump speed"; + parameter Real minHeaPreValPos = 0.1 + "Minimum head pressure control valve position"; + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uHeaPreCon( + final unit="1", + final min=0, + final max=1) + "Chiller head pressure control loop signal" + annotation (Placement(transformation(extent={{-220,110},{-180,150}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput desConWatPumSpe( + final unit="1", + final min=0, + final max=1) + "Design condenser water pump speed for current stage" + annotation (Placement(transformation(extent={{-220,40},{-180,80}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWSE + "Status of water side economizer: true = ON, false = OFF" + annotation (Placement(transformation(extent={{-220,-40},{-180,0}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uHeaPreEna + "Status of head pressure control: true = ON, false = OFF" + annotation (Placement(transformation(extent={{-220,-180},{-180,-140}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yMaxTowSpeSet( + final unit="1", + final min=0, + final max=1) "Maximum cooling tower speed setpoint" + annotation (Placement(transformation(extent={{180,120},{220,160}}), + iconTransformation(extent={{100,40},{140,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yConWatPumSpeSet( + final unit="1", + final min=0, + final max=1) "Condenser water pump speed setpoint" + annotation (Placement(transformation(extent={{180,20},{220,60}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHeaPreConVal( + final unit="1", + final min=0, + final max=1) "Head pressure control valve position" + annotation (Placement(transformation(extent={{180,-180},{220,-140}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Line maxCooTowSpeSet + "Maximum cooling tower speed setpoint" + annotation (Placement(transformation(extent={{0,120},{20,140}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{-60,150},{-40,170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) + "Constant one" + annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hal(final k=0.5) + "Constant value" + annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowMaxSpe( + final k=minTowSpe) + "Minimum allowable tower speed" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + Buildings.Controls.OBC.CDL.Reals.Line conWatPumSpe + "Condenser water pump speed" + annotation (Placement(transformation(extent={{0,20},{20,40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hal1(final k=0.5) + "Constant value" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one2(final k=1) + "Constant one" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( + final k=minConWatPumSpe) "Minimum condenser water pump speed" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one3(final k=1) + "Constant one" + annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one4(final k=1) + "Constant one" + annotation (Placement(transformation(extent={{-120,-100},{-100,-80}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( + final k=minHeaPreValPos) + "Minimum head pressure control valve position" + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1(final k=0) + "Constant value" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Line heaPreConVal + "Head pressure control valve position" + annotation (Placement(transformation(extent={{0,-78},{20,-58}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi + "Switch the maximum tower speed setpoint based on the economizer status" + annotation (Placement(transformation(extent={{60,170},{80,190}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1 + "Switch the condenser water pump speed setpoint based on the economizer status" + annotation (Placement(transformation(extent={{60,60},{80,80}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi2 + "Switch the head pressure control valve setpoint based on the economizer status" + annotation (Placement(transformation(extent={{60,-130},{80,-110}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi3 + "Switch the valve setpoint to 0 when the head pressure control is disabled" + annotation (Placement(transformation(extent={{140,-170},{160,-150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer2(final k=0) + "Constant value" + annotation (Placement(transformation(extent={{40,-190},{60,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi4 + "Switch the pump speed setpoint to 0 when the head pressure control is disabled" + annotation (Placement(transformation(extent={{140,30},{160,50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi5 + "Switch the maximum tower speed setpoint to 0 when the head pressure control is disabled" + annotation (Placement(transformation(extent={{140,130},{160,150}}))); + +equation + connect(zer.y, maxCooTowSpeSet.x1) + annotation (Line(points={{-38,160},{-20,160},{-20,138},{-2,138}}, color={0,0,127})); + connect(one.y, maxCooTowSpeSet.f1) + annotation (Line(points={{-98,160},{-80,160},{-80,134},{-2,134}}, + color={0,0,127})); + connect(hal.y, maxCooTowSpeSet.x2) + annotation (Line(points={{-98,100},{-80,100},{-80,126},{-2,126}}, + color={0,0,127})); + connect(hpTowMaxSpe.y, maxCooTowSpeSet.f2) + annotation (Line(points={{-38,100},{-20,100},{-20,122},{-2,122}}, color={0,0,127})); + connect(uHeaPreCon, maxCooTowSpeSet.u) + annotation (Line(points={{-200,130},{-2,130}}, color={0,0,127})); + connect(hal1.y,conWatPumSpe. x1) + annotation (Line(points={{-38,50},{-20,50},{-20,38},{-2,38}}, color={0,0,127})); + connect(con.y,conWatPumSpe. f2) + annotation (Line(points={{-38,0},{-20,0},{-20,22},{-2,22}}, color={0,0,127})); + connect(one2.y,conWatPumSpe. x2) + annotation (Line(points={{-98,0},{-80,0},{-80,26},{-2,26}}, color={0,0,127})); + connect(uHeaPreCon,conWatPumSpe. u) + annotation (Line(points={{-200,130},{-140,130},{-140,30},{-2,30}}, + color={0,0,127})); + connect(zer1.y, heaPreConVal.x1) + annotation (Line(points={{-38,-40},{-20,-40},{-20,-60},{-2,-60}}, color={0,0,127})); + connect(one3.y, heaPreConVal.f1) + annotation (Line(points={{-98,-40},{-80,-40},{-80,-64},{-2,-64}}, + color={0,0,127})); + connect(one4.y, heaPreConVal.x2) + annotation (Line(points={{-98,-90},{-80,-90},{-80,-72},{-2,-72}}, + color={0,0,127})); + connect(con1.y, heaPreConVal.f2) + annotation (Line(points={{-38,-90},{-20,-90},{-20,-76},{-2,-76}}, color={0,0,127})); + connect(uHeaPreCon, heaPreConVal.u) + annotation (Line(points={{-200,130},{-140,130},{-140,-68},{-2,-68}}, + color={0,0,127})); + connect(maxCooTowSpeSet.y, swi.u3) + annotation (Line(points={{22,130},{40,130},{40,172},{58,172}}, + color={0,0,127})); + connect(desConWatPumSpe, swi1.u1) + annotation (Line(points={{-200,60},{-120,60},{-120,78},{58,78}}, color={0,0,127})); + connect(conWatPumSpe.y, swi1.u3) + annotation (Line(points={{22,30},{40,30},{40,62},{58,62}}, + color={0,0,127})); + connect(uWSE, swi2.u2) + annotation (Line(points={{-200,-20},{-160,-20},{-160,-120},{58,-120}}, + color={255,0,255})); + connect(zer2.y, swi3.u3) + annotation (Line(points={{62,-180},{110,-180},{110,-168},{138,-168}}, + color={0,0,127})); + connect(uHeaPreEna, swi3.u2) + annotation (Line(points={{-200,-160},{138,-160}},color={255,0,255})); + connect(swi2.y, swi3.u1) + annotation (Line(points={{82,-120},{120,-120},{120,-152},{138,-152}}, + color={0,0,127})); + connect(swi3.y, yHeaPreConVal) + annotation (Line(points={{162,-160},{200,-160}}, color={0,0,127})); + connect(one.y, swi.u1) + annotation (Line(points={{-98,160},{-80,160},{-80,188},{58,188}}, + color={0,0,127})); + connect(desConWatPumSpe, conWatPumSpe.f1) + annotation (Line(points={{-200,60},{-120,60},{-120,34},{-2,34}}, + color={0,0,127})); + connect(one4.y, swi2.u3) + annotation (Line(points={{-98,-90},{-80,-90},{-80,-128},{58,-128}}, + color={0,0,127})); + connect(heaPreConVal.y, swi2.u1) + annotation (Line(points={{22,-68},{40,-68},{40,-112},{58,-112}}, + color={0,0,127})); + connect(uWSE, swi.u2) annotation (Line(points={{-200,-20},{-160,-20},{-160,180}, + {58,180}}, color={255,0,255})); + connect(uWSE, swi1.u2) annotation (Line(points={{-200,-20},{-160,-20},{-160,70}, + {58,70}}, color={255,0,255})); + connect(uHeaPreEna, swi4.u2) annotation (Line(points={{-200,-160},{100,-160},{ + 100,40},{138,40}}, color={255,0,255})); + connect(swi1.y, swi4.u1) annotation (Line(points={{82,70},{120,70},{120,48},{138, + 48}}, color={0,0,127})); + connect(zer2.y, swi4.u3) annotation (Line(points={{62,-180},{110,-180},{110,32}, + {138,32}}, color={0,0,127})); + connect(swi4.y, yConWatPumSpeSet) + annotation (Line(points={{162,40},{200,40}}, color={0,0,127})); + connect(swi.y, swi5.u1) annotation (Line(points={{82,180},{120,180},{120,148}, + {138,148}}, color={0,0,127})); + connect(zer2.y, swi5.u3) annotation (Line(points={{62,-180},{110,-180},{110,132}, + {138,132}}, color={0,0,127})); + connect(uHeaPreEna, swi5.u2) annotation (Line(points={{-200,-160},{100,-160},{ + 100,140},{138,140}}, color={255,0,255})); + connect(swi5.y, yMaxTowSpeSet) + annotation (Line(points={{162,140},{200,140}}, color={0,0,127})); +annotation ( + defaultComponentName= "heaPreConEqu", + 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, + borderPattern=BorderPattern.Raised), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Line(points={{-70,60},{-70,-54},{70,-54},{70,58}}, color={28,108,200}), + Line( + points={{-70,36},{-2,36},{70,-34}}, + color={28,108,200}, + thickness=0.5), + Line( + points={{-70,36},{-2,-30}}, + color={28,108,200}, + thickness=0.5), + Polygon( + points={{-70,60},{-72,56},{-68,56},{-70,60}}, + lineColor={28,108,200}, + lineThickness=0.5, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid), + Polygon( + points={{70,60},{68,56},{72,56},{70,60}}, + lineColor={28,108,200}, + lineThickness=0.5, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid), + Line( + points={{-2,-54},{-2,52}}, + color={28,108,200}, + pattern=LinePattern.Dash)}), + Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-180,-200},{180,200}})), + Documentation(info=" +

                      +Block that resets maximum cooling tower speed setpoint yMaxTowSpeSet, +controls condenser water pump speed yConWatPumSpeSet and +head pressure control valve position yHeaPreConVal +for plants with water side economizers and headered condenser water pumps. +The development follows ASHRAE Guideline36-2021, +section 5.20.10 Head pressure control, part 5.20.10.5, 5.20.10.6 and 5.20.10.7. +

                      +

                      +1. For each chiller, when the waterside economizer is disabled (uWSE = false), +map chiller head pressure control loop signal uHeaPreCon as follows: +

                      +
                        +
                      • +When uHeaPreCon changes from 0 to 50%, reset maximum cooling tower +speed setpoint yMaxTowSpeSet from 100% to minimum speed +minTowSpe. +
                      • +
                      • +When uHeaPreCon changes from 50% to 100%, reset condenser water +pump speed yConWatPumSpeSet from design speed for the stage +desConWatPumSpe to minimum speed minConWatPumSpe. +
                      • +
                      • +Each head pressure control valve yHeaPreConVal of enabled chiller shall +be 100% open, irrespective of loop output. +
                      • +
                      + +

                      +\"HeadControlCWP_WSE.png\" +

                      + +

                      +2. When the waterside economizer is enabled (uWSE = true), +

                      +
                        +
                      • +Maximum cooling tower speed setpoint yMaxTowSpeSet shall be 100% +irrespective of loop output. +
                      • +
                      • +Condenser water pump speed yConWatPumSpeSet shall be equal to the design +speed for the stage desConWatPumSpe, irrespective of loop output. +
                      • +
                      • +Each enabled chiller head pressure control loop output uHeaPreCon +shall reset head pressure control valve position yHeaPreConVal +from 100% open at 0% loop output to minimum position minHeaPreValPos +at 100% loop output. +
                      • +
                      + +

                      +\"HeadControlValve_WSE.png\" +

                      + +

                      +3. When the head pressure control loop is disabled (uHeaPreEna = false), +the head pressure control valve shall be closed; the maximum tower speed setpoint +and the condenser water pump speed setpoint becomes 0. +

                      +", +revisions=" +
                        +
                      • +January 30, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end MappingWithWSE; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/MappingWithoutWSE.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/MappingWithoutWSE.mo new file mode 100644 index 00000000000..8d057c0703c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/MappingWithoutWSE.mo @@ -0,0 +1,241 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences; +block MappingWithoutWSE + "Equipment setpoints when chiller head pressure control is enabled, for plants without waterside economizer" + parameter Boolean have_fixSpeConWatPum = true + "Flag: true=fixed speed condenser water pumps, false=variable speed condenser water pumps"; + parameter Real minTowSpe = 0.1 + "Minimum cooling tower fan speed"; + parameter Real minConWatPumSpe = 0.1 "Minimum condenser water pump speed" + annotation (Dialog(enable=not have_fixSpeConWatPum)); + parameter Real minHeaPreValPos = 0.1 "Minimum head pressure control valve position" + annotation (Dialog(enable=have_fixSpeConWatPum)); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uHeaPreCon( + final min=0, + final max=1, + final unit="1") + "Chiller head pressure control loop signal" + annotation (Placement(transformation(extent={{-200,70},{-160,110}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput desConWatPumSpe( + final min=0, + final max=1, + final unit="1") if not have_fixSpeConWatPum + "Design condenser water pump speed for current stage" + annotation (Placement(transformation(extent={{-200,-10},{-160,30}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uHeaPreEna + "Status of head pressure control: true = ON, false = OFF" + annotation (Placement(transformation(extent={{-200,-120},{-160,-80}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yMaxTowSpeSet( + final unit="1", + final min=0, + final max=1) "Maximum cooling tower speed setpoint" + annotation (Placement(transformation(extent={{160,10},{200,50}}), + iconTransformation(extent={{100,40},{140,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHeaPreConVal( + final unit="1", + final min=0, + final max=1) if have_fixSpeConWatPum + "Head pressure control valve position" + annotation (Placement(transformation(extent={{160,-60},{200,-20}}), + iconTransformation(extent={{100,-60},{140,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yConWatPumSpeSet( + final unit="1", + final min=0, + final max=1) if not have_fixSpeConWatPum + "Condenser water pump speed setpoint" + annotation (Placement(transformation(extent={{160,-120},{200,-80}}), + iconTransformation(extent={{100,-100},{140,-60}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Line maxCooTowSpeSet + "Maximum cooling tower speed setpoint" + annotation (Placement(transformation(extent={{60,80},{80,100}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{-40,110},{-20,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) + "Constant one" + annotation (Placement(transformation(extent={{-120,110},{-100,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hal(final k=0.5) + "Constant value" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowMaxSpe( + final k=minTowSpe) + "Minimum allowable tower speed" + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + Buildings.Controls.OBC.CDL.Reals.Line lin + "Head pressure control valve position, or condenser water pump speed" + annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hal1(final k=0.5) + "Constant value" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant fulOpeVal( + final k=1) if have_fixSpeConWatPum "Fully open valve position" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one2(k=1) "Constant one" + annotation (Placement(transformation(extent={{-120,-80},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minValPos( + final k=minHeaPreValPos) if have_fixSpeConWatPum + "Minimum head pressure control valve position" + annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi + "Switch the setpoint to 0 if the head pressure control loop is disabled" + annotation (Placement(transformation(extent={{120,-110},{140,-90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minPumSpe( + final k=minConWatPumSpe) if not have_fixSpeConWatPum + "Minimum condenser water pump speed" + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1 + "Switch the setpoint to 0 if the head pressure control loop is disabled" + annotation (Placement(transformation(extent={{120,20},{140,40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zero(final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{0,-140},{20,-120}}))); +equation + connect(zer.y, maxCooTowSpeSet.x1) + annotation (Line(points={{-18,120},{40,120},{40,98},{58,98}}, color={0,0,127})); + connect(one.y, maxCooTowSpeSet.f1) + annotation (Line(points={{-98,120},{-80,120},{-80,94},{58,94}}, color={0,0,127})); + connect(hal.y, maxCooTowSpeSet.x2) + annotation (Line(points={{-38,50},{-20,50},{-20,86},{58,86}}, color={0,0,127})); + connect(hpTowMaxSpe.y, maxCooTowSpeSet.f2) + annotation (Line(points={{22,50},{40,50},{40,82},{58,82}},color={0,0,127})); + connect(uHeaPreCon, maxCooTowSpeSet.u) + annotation (Line(points={{-180,90},{58,90}}, color={0,0,127})); + connect(hal1.y, lin.x1) + annotation (Line(points={{22,0},{40,0},{40,-32},{58,-32}}, color={0,0,127})); + connect(fulOpeVal.y, lin.f1) + annotation (Line(points={{-38,0},{-20,0},{-20,-36},{58,-36}}, color={0,0,127})); + connect(minValPos.y, lin.f2) + annotation (Line(points={{22,-70},{40,-70},{40,-48},{58,-48}}, + color={0,0,127})); + connect(one2.y, lin.x2) + annotation (Line(points={{-98,-70},{-80,-70},{-80,-44},{58,-44}}, + color={0,0,127})); + connect(uHeaPreCon, lin.u) + annotation (Line(points={{-180,90},{-100,90},{-100,-40},{58,-40}}, + color={0,0,127})); + connect(uHeaPreEna, swi.u2) + annotation (Line(points={{-180,-100},{118,-100}}, color={255,0,255})); + connect(lin.y, swi.u1) + annotation (Line(points={{82,-40},{100,-40},{100,-92},{118,-92}}, color={0,0,127})); + connect(swi.y, yConWatPumSpeSet) + annotation (Line(points={{142,-100},{180,-100}}, color={0,0,127})); + connect(desConWatPumSpe, lin.f1) + annotation (Line(points={{-180,10},{-140,10},{-140,-36},{58,-36}}, + color={0,0,127})); + connect(minPumSpe.y, lin.f2) + annotation (Line(points={{-38,-70},{-20,-70},{-20,-48},{58,-48}}, + color={0,0,127})); + connect(swi.y, yHeaPreConVal) + annotation (Line(points={{142,-100},{150,-100},{150,-40},{180,-40}}, color={0,0,127})); + connect(uHeaPreEna, swi1.u2) + annotation (Line(points={{-180,-100},{90,-100},{90,30},{118,30}}, + color={255,0,255})); + connect(maxCooTowSpeSet.y, swi1.u1) + annotation (Line(points={{82,90},{100,90},{100,38},{118,38}}, + color={0,0,127})); + connect(swi1.y, yMaxTowSpeSet) + annotation (Line(points={{142,30},{180,30}}, color={0,0,127})); + connect(zero.y, swi.u3) annotation (Line(points={{22,-130},{110,-130},{110,-108}, + {118,-108}}, color={0,0,127})); + connect(zero.y, swi1.u3) annotation (Line(points={{22,-130},{110,-130},{110,22}, + {118,22}}, color={0,0,127})); +annotation ( + defaultComponentName= "heaPreConEqu", + 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, + borderPattern=BorderPattern.Raised), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Line(points={{-70,60},{-70,-54},{70,-54},{70,58}}, color={28,108,200}), + Line( + points={{-70,36},{-2,36},{70,-34}}, + color={28,108,200}, + thickness=0.5), + Line( + points={{-70,36},{-2,-30}}, + color={28,108,200}, + thickness=0.5), + Polygon( + points={{-70,60},{-72,56},{-68,56},{-70,60}}, + lineColor={28,108,200}, + lineThickness=0.5, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid), + Polygon( + points={{70,60},{68,56},{72,56},{70,60}}, + lineColor={28,108,200}, + lineThickness=0.5, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid), + Line( + points={{-2,-54},{-2,52}}, + color={28,108,200}, + pattern=LinePattern.Dash)}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-160,-160},{160,160}})), + Documentation(info=" +

                      +Block that resets maximum cooling tower speed setpoint yMaxTowSpeSet, +controls head pressure control valve position yHeaPreConVal or +condenser water pump speed yConWatPumSpeSet +for plants without water side economizers. The development follows +ASHRAE Guideline36-2021, +section 5.20.10 Head pressure control, part 5.20.10.3, part 5.20.10.4 and 5.20.10.7. +

                      +

                      +1. For each chiller, map chiller head pressure control loop signal +uHeaPreCon as follows: +

                      +
                        +
                      • +When uHeaPreCon changes from 0 to 50%, reset maximum cooling tower +speed setpoint yMaxTowSpeSet from 100% to minimum speed +minTowSpe. +
                      • +
                      • +If the plant has fixed speed condenser water pumps (have_fixSpeConWatPum=true), then: +when uHeaPreCon changes from 50% to 100%, reset head pressure control +valve position yHeaPreConVal from 100% open to +minHeaPreValPos. +
                      • +
                      • +If the plant has variable speed condenser water pumps (have_fixSpeConWatPum=false), then: +when uHeaPreCon changes from 50% to 100%, reset condenser water pump +speed yConWatPumSpeSet from design speed for the stage desConWatPumSpe to +minimum speed minConWatPumSpe. When the pumps are dedicated, speed +reset shall be independent for each chiller. +
                      • +
                      + +

                      +\"HeadControlValve_noWSE.png\" +

                      + +

                      +2. When the head pressure control loop is disabled (uHeaPreEna = false), +the head pressure control valve shall be closed, or the pump should be disabled; the +maximum tower speed setpoint becomes 0. +

                      +", +revisions=" +
                        +
                      • +January 30, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end MappingWithoutWSE; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/ControlLoop.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/ControlLoop.mo new file mode 100644 index 00000000000..ca156ec625a --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/ControlLoop.mo @@ -0,0 +1,92 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation; +model ControlLoop "Validate sequence of output head pressure control signal" + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.ControlLoop + chiHeaPreLoo + "Output chiller head pressure control loop signal" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.7, + final period=5, + final shift=0.5) "Head pressure control enabling status" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSup(k=280.15) + "Measured chilled water supply temperature" + annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse TConWatRet( + final amplitude=-11, + period=5, + final offset=273.15 + 20) + "Measured condenser water return temperature" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(TChiWatSup.y, chiHeaPreLoo.TChiWatSup) + annotation (Line(points={{-38,-50},{0,-50},{0,-8},{38,-8}}, color={0,0,127})); + connect(booPul.y, chiHeaPreLoo.uHeaPreEna) + annotation (Line(points={{-38,50},{0,50},{0,8},{38,8}}, color={255,0,255})); + connect(TConWatRet.y, chiHeaPreLoo.TConWatRet) + annotation (Line(points={{-38,0},{38,0}}, color={0,0,127})); + +annotation ( + experiment(StopTime=5.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/ControlLoop.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.ControlLoop. +It demonstrates how the head pressure control loop +signal being generated. +

                      +
                        +
                      • +Before 0.5 seconds, the head pressure control loop is not enabled +(uHeaPreEna=false). The loop output is not valid +and will not be used. +
                      • +
                      • +At 0.5 seconds, the head pressure control loop is enabled. The +PID controller resets the output from 0. +
                      • +
                      • +From 0.5 seconds to 2.5 seconds, the difference between the +condenser water return temperature and the chilled water supply +temperature is 2 °K and it is less than the minimum LIFT +(10 °K). The reverse acting PID controller gradually increases +the output to 1. +
                      • +
                      • +From 2.5 seconds to 4 seconds, the difference between the +condenser water return temperature and the chilled water supply +temperature is 13 °K and it is greater than the minimum LIFT +(10 °K). The reverse acting PID controller gradually decreases +the output to 0. +
                      • +
                      • +After 4 seconds, the head pressure control loop becomes disabled +(uHeaPreEna=false). The loop output is not valid +and will not be used. +
                      • +
                      +", revisions=" +
                        +
                      • +March 22, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false))); +end ControlLoop; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithWSE.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithWSE.mo new file mode 100644 index 00000000000..0c254a8a36e --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithWSE.mo @@ -0,0 +1,123 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation; +model MappingWithWSE + "Validate sequence of specifying equipment setpoint based on head pressure control loop output" + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.MappingWithWSE + witWSE + "Specify setpoints for plant when waterside economizer is enabled" + annotation (Placement(transformation(extent={{60,50},{80,70}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.MappingWithWSE + noWSE + "Specify setpoints for plant when waterside economizer is disabled" + annotation (Placement(transformation(extent={{60,-90},{80,-70}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Constant enaWSE( + k=true) "Constant true" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desPumSpe( + k=0.75) "Design condenser water pump speed at current stage" + annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp conLoo(duration=3.5) + "Control loop output" + annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); + Buildings.Controls.OBC.CDL.Logical.Not disWSE + "Disabled economizer" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse enaPreCon( + width=0.9, + period=5) + "Pressure control enabling status" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + +equation + connect(conLoo.y, witWSE.uHeaPreCon) + annotation (Line(points={{-38,80},{-24,80},{-24,68},{58,68}}, color={0,0,127})); + connect(desPumSpe.y, witWSE.desConWatPumSpe) + annotation (Line(points={{-38,40},{-20,40},{-20,64},{58,64}}, color={0,0,127})); + connect(enaWSE.y, witWSE.uWSE) + annotation (Line(points={{-38,0},{-16,0},{-16,56},{58,56}}, color={255,0,255})); + connect(conLoo.y, noWSE.uHeaPreCon) + annotation (Line(points={{-38,80},{-24,80},{-24,-72},{58,-72}}, color={0,0,127})); + connect(desPumSpe.y, noWSE.desConWatPumSpe) + annotation (Line(points={{-38,40},{-20,40},{-20,-76},{58,-76}}, color={0,0,127})); + connect(enaWSE.y, disWSE.u) + annotation (Line(points={{-38,0},{-2,0}}, color={255,0,255})); + connect(disWSE.y, noWSE.uWSE) annotation (Line(points={{22,0},{40,0},{40,-84}, + {58,-84}}, color={255,0,255})); + connect(enaPreCon.y, witWSE.uHeaPreEna) annotation (Line(points={{-38,-40},{-12, + -40},{-12,52},{58,52}}, color={255,0,255})); + connect(enaPreCon.y, noWSE.uHeaPreEna) annotation (Line(points={{-38,-40},{-12, + -40},{-12,-88},{58,-88}}, color={255,0,255})); +annotation ( + experiment(StopTime=5.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithWSE.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.MappingWithWSE. +It demonstrates the setpoints control based on the output +from the head pressure control loop. +

                      +

                      +The instances witWSE and noWSE shows +the control when the waterside economizer is enabled and disabled +respectively. +

                      +
                        +
                      • +In instance withWSE, the economizer is enabled. +Thus, the maximum tower speed setpoint and the condenser +water pump speed setpoint equal their maximum, which are 1. +The head pressure control valve position yHeaPreConVal +resets from 100% open at 0% loop output to minimum position +minHeaPreValPos (0.1) at 100% loop output. +
                      • +
                      • +In instance noWSE, the economizer is disabled. +
                          +
                        • +When the loop signal uHeaPreCon changes from 0 to +50%, the maximum cooling tower speed setpoint yMaxTowSpeSet +resets from 100% to the minimum speed minTowSpe (0.1). +
                        • +
                        • +When the loop signal uHeaPreCon changes from 50% to +100%, the water pump speed setpoint yConWatPumSpeSet +resets from the stage desConWatPumSpe (0.75) to the +minimum speed minConWatPumSpe (0.1). +
                        • +
                        • +The head pressure control valve is fully open. +
                        • +
                        +
                      • +
                      • +For both instances, when the head pressure control loop becomes disabled, +the head pressure control valve is fully closed; the maximum +tower speed setpoint and the condenser water pump speed +setpoint becomes 0. +
                      • +
                      +", revisions=" +
                        +
                      • +April 1, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end MappingWithWSE; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithoutWSE.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithoutWSE.mo new file mode 100644 index 00000000000..e702a025fda --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithoutWSE.mo @@ -0,0 +1,117 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation; +model MappingWithoutWSE + "Validate sequence of specifying equipment setpoint based on head pressure control loop output" + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.MappingWithoutWSE + fixPumSpe + "Specify setpoints for plant with constant speed condenser water pumps" + annotation (Placement(transformation(extent={{0,30},{20,50}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.MappingWithoutWSE + varPumSpe(final have_fixSpeConWatPum=false) + "Specify setpoints for plant with constant speed condenser water pumps" + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse enaPreCon( + width=0.8, + period=5) "Constant true" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desPumSpe( + k=0.75) "Design condenser water pump speed at current stage" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp conLoo(duration=3.5) + "Control loop output" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + +equation + connect(conLoo.y, fixPumSpe.uHeaPreCon) + annotation (Line(points={{-38,60},{-20,60},{-20,48},{-2,48}}, color={0,0,127})); + connect(enaPreCon.y, fixPumSpe.uHeaPreEna) + annotation (Line(points={{-38,0},{-12,0},{-12,32},{-2,32}}, color={255,0,255})); + connect(conLoo.y, varPumSpe.uHeaPreCon) + annotation (Line(points={{-38,60},{-20,60},{-20,-32},{-2,-32}}, color={0,0,127})); + connect(enaPreCon.y, varPumSpe.uHeaPreEna) + annotation (Line(points={{-38,0},{-12,0},{-12,-48},{-2,-48}}, color={255,0,255})); + connect(desPumSpe.y, varPumSpe.desConWatPumSpe) + annotation (Line(points={{-38,-40},{-2,-40}}, color={0,0,127})); + +annotation ( + experiment(StopTime=5.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithoutWSE.mos" + "Simulate and plot"), + Documentation(info=" + +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.MappingWithoutWSE. +It demonstrates the setpoints control based on the output +from the head pressure control loop. +

                      +

                      +The instances fixPumSpe and varPumSpe shows +the control of the plants with the fixed speed condenser water pump +and the variable speed condenser water pump respectively. +

                      +
                        +
                      • +In instance fixPumSpe, the condenser water pump +speed is fixed. +
                          +
                        • +When the loop signal uHeaPreCon changes from 0 to +50%, the maximum cooling tower speed setpoint yMaxTowSpeSet +resets from 100% to the minimum speed minTowSpe (0.1). +
                        • +
                        • +When the loop signal uHeaPreCon changes from 50% to +100%, the head pressure control valve setpoint yHeaPreConVal +resets from 100% to the +minimum position minHeaPreValPos (0.1). +
                        • +
                        +
                      • +
                      • +In instance varPumSpe, the condenser water pump +speed is variable. +
                          +
                        • +When the loop signal uHeaPreCon changes from 0 to +50%, the maximum cooling tower speed setpoint yMaxTowSpeSet +resets from 100% to the minimum speed minTowSpe (0.1). +
                        • +
                        • +When the loop signal uHeaPreCon changes from 50% to +100%, the condenser water pump speed setpoint yConWatPumSpeSet +resets from the design condenser water pump speed desConWatPumSpe +to the minimum speed minConWatPumSpe (0.1). +
                        • +
                        +
                      • +
                      • +For both instances, when the head pressure control loop becomes disabled, +the head pressure control valve is fully closed; the maximum +tower speed setpoint and the condenser water pump speed +setpoint becomes 0. +
                      • +
                      +", revisions=" +
                        +
                      • +April 1, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end MappingWithoutWSE; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/package.mo new file mode 100644 index 00000000000..2ae2c13c15d --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences; +package Validation "Collection of validation models" + +annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})}), +preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +")); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/package.order new file mode 100644 index 00000000000..39d5c4147c0 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/package.order @@ -0,0 +1,3 @@ +ControlLoop +MappingWithWSE +MappingWithoutWSE diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/package.mo new file mode 100644 index 00000000000..3a2dbf02a21 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/package.mo @@ -0,0 +1,43 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure; +package Subsequences "Subsequences for chiller head pressure control" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains chiller head pressure control subsequences. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}})})); +end Subsequences; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/package.order new file mode 100644 index 00000000000..af2e13caba3 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/package.order @@ -0,0 +1,4 @@ +ControlLoop +MappingWithWSE +MappingWithoutWSE +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Validation/Controller.mo new file mode 100644 index 00000000000..b88a27d8432 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Validation/Controller.mo @@ -0,0 +1,186 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Validation; +model Controller "Validation head pressure controller" + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Controller + enaWSE "Head pressure for plant with waterside economizer that is enabled" + annotation (Placement(transformation(extent={{60,70},{80,90}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Controller + disWSE "Head pressure for plant with waterside economizer that is disabled" + annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Controller + conSpePum( + final have_WSE=false, have_fixSpeConWatPum=true) + "Head pressure for plant without waterside economizer, constant speed condenser water pump" + annotation (Placement(transformation(extent={{100,30},{120,50}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Controller + varSpePum( + final have_WSE=false) + "Head pressure for plant without waterside economizer, variable speed condenser water pump" + annotation (Placement(transformation(extent={{100,-110},{120,-90}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.7, + final period=5, + final shift=0.5) "Head pressure control enabling status" + annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TConWatRet( + final amplitude=-11, + final freqHz=2/10, + final offset=273.15 + 27) "Measured condenser water return temperature" + annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatSup( + final amplitude=1, + final freqHz=1/5, + final offset=273.15 + 6) "Measured chilled water supply temperature" + annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant runWSE( + final k=true) "Constant true" + annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desPumSpe( + final k=0.75) "Design condenser water pump speed at current stage" + annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); + +equation + connect(booPul.y,enaWSE.uChiHeaCon) + annotation (Line(points={{-98,100},{20,100},{20,90},{58,90}}, color={255,0,255})); + connect(TConWatRet.y, enaWSE.TConWatRet) + annotation (Line(points={{-98,60},{-20,60},{-20,86},{58,86}}, color={0,0,127})); + connect(TChiWatSup.y, enaWSE.TChiWatSup) + annotation (Line(points={{-98,20},{-10,20},{-10,82},{58,82}}, color={0,0,127})); + connect(desPumSpe.y, enaWSE.desConWatPumSpe) + annotation (Line(points={{-98,-20},{10,-20},{10,78},{58,78}}, color={0,0,127})); + connect(runWSE.y, enaWSE.uWSE) + annotation (Line(points={{-98,-60},{0,-60},{0,74},{58,74}}, color={255,0,255})); + connect(booPul.y,disWSE.uChiHeaCon) + annotation (Line(points={{-98,100},{20,100},{20,-50},{58,-50}}, color={255,0,255})); + connect(TConWatRet.y, disWSE.TConWatRet) + annotation (Line(points={{-98,60},{-20,60},{-20,-54},{58,-54}}, color={0,0,127})); + connect(TChiWatSup.y, disWSE.TChiWatSup) + annotation (Line(points={{-98,20},{-10,20},{-10,-58},{58,-58}}, color={0,0,127})); + connect(desPumSpe.y, disWSE.desConWatPumSpe) + annotation (Line(points={{-98,-20},{10,-20},{10,-62},{58,-62}}, color={0,0,127})); + connect(runWSE.y, not1.u) + annotation (Line(points={{-98,-60},{-80,-60},{-80,-80},{-62,-80}}, color={255,0,255})); + connect(not1.y, disWSE.uWSE) + annotation (Line(points={{-38,-80},{-28,-80},{-28,-66},{58,-66}}, color={255,0,255})); + connect(booPul.y,conSpePum.uChiHeaCon) + annotation (Line(points={{-98,100},{20,100},{20,50},{98,50}}, color={255,0,255})); + connect(booPul.y,varSpePum.uChiHeaCon) + annotation (Line(points={{-98,100},{20,100},{20,-90},{98,-90}}, color={255,0,255})); + connect(TConWatRet.y, conSpePum.TConWatRet) + annotation (Line(points={{-98,60},{-20,60},{-20,46},{98,46}}, color={0,0,127})); + connect(TChiWatSup.y, conSpePum.TChiWatSup) + annotation (Line(points={{-98,20},{-10,20},{-10,42},{98,42}}, color={0,0,127})); + connect(TConWatRet.y, varSpePum.TConWatRet) + annotation (Line(points={{-98,60},{-20,60},{-20,-94},{98,-94}}, color={0,0,127})); + connect(TChiWatSup.y, varSpePum.TChiWatSup) + annotation (Line(points={{-98,20},{-10,20},{-10,-98},{98,-98}}, color={0,0,127})); + connect(desPumSpe.y, varSpePum.desConWatPumSpe) + annotation (Line(points={{-98,-20},{10,-20},{10,-102},{98,-102}}, color={0,0,127})); + +annotation ( + experiment(StopTime=5.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Validation/Controller.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Controller. +It demonstrates the setpoint controls according to the head +pressure control. It has four instances: +

                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      InstanceWaterside economizerCondenser water pump speedNote
                      enaWSEYesVariableEconomizer enabled
                      disWSEYesVariableEconomizer disabled
                      conSpePumNoConstantn/a
                      varSpePumNoVariablen/a
                      +
                      + +

                      +It shows following process: +

                      + +
                        +
                      • +For instance enaWSE, since the economizer is enabled, the +condenser water pump speed setpoint yConWatPumSpeSet +equals to the design condenser water pump speed; the maximum tower +speed setpoint is maximum (1); and the head pressure control valve +setpoint is mapped from the loop output. +
                      • +
                      • +For instance disWSE, the economizer is disabled. +The head pressure control valve is fully open. The maximum +tower speed setpoint and the condenser water pump speed setpoint +is mapped from the loop output, which ranges from 0 to 0.4. Thus the +maximum tower speed setpoint is from 1 to 0.28 and the pump speed setpoint +keeps at maximum (1). +
                      • + +
                      • +For instance conSpePum, the pump speed is constant. +The maximum tower speed setpoint and the head pressure control valve +setpoint is mapped from the loop output, which ranges from 0 to 0.4. Thus the +maximum tower speed setpoint is from 1 to 0.28 and the head pressure +control valve setpoint keeps at maximum (1). +
                      • +
                      • +For instance varSpePum, the pump speed is variable. +The maximum tower speed setpoint and the condenser water pump speed setpoint +is mapped from the loop output, which ranges from 0 to 0.4. Thus the +maximum tower speed setpoint is from 1 to 0.28 and the pump speed setpoint +keeps at the design condenser water pump speed. +
                      • +
                      +", revisions=" +
                        +
                      • +April 2, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-140,-120},{140,120}}))); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Validation/package.mo new file mode 100644 index 00000000000..276dcac6da8 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure; +package Validation "Collection of validation models" + +annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})}), +preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +")); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Validation/package.order new file mode 100644 index 00000000000..8cba75e31a7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Validation/package.order @@ -0,0 +1 @@ +Controller diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/package.mo new file mode 100644 index 00000000000..87eba568683 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/package.mo @@ -0,0 +1,45 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant; +package HeadPressure "Chiller head pressure control sequence" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains chiller head pressure control sequences. +The implementation is based on section 5.20.10. in ASHRAE Guideline36-2021. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end HeadPressure; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/package.order new file mode 100644 index 00000000000..9ffbffcb990 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/package.order @@ -0,0 +1,3 @@ +Controller +Subsequences +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Controller.mo new file mode 100644 index 00000000000..0747eb57b92 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Controller.mo @@ -0,0 +1,192 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass; +block Controller + "Controller for chilled water minimum flow bypass valve" + + parameter Integer nChi=2 "Total number of chillers"; + parameter Real minFloSet[nChi]( + final min=fill(0,nChi), + final unit=fill("m3/s",nChi), + quantity=fill("VolumeFlowRate",nChi)) + "Minimum chilled water flow through each chiller" + annotation (Evaluate=true); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(group="Controller")); + parameter Real k=1 "Gain of controller" + annotation (Dialog(group="Controller")); + parameter Real Ti( + final unit="s", + final quantity="Time")=0.5 "Time constant of integrator block" + annotation (Dialog(group="Controller", enable=controllerType==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + controllerType==Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + parameter Real Td( + final unit="s", + final quantity="Time")=0 "Time constant of derivative block" + annotation (Dialog(group="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="Controller")); + parameter Real yMin=0.1 "Lower limit of output" + annotation (Dialog(group="Controller")); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum + "Maximum status feedback of all the chilled water pumps: true means at least one pump is proven on" + annotation (Placement(transformation(extent={{-180,30},{-140,70}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( + final min=0, + final unit="m3/s", + quantity="VolumeFlowRate") + "Measured chilled water flow rate through chillers" + annotation (Placement(transformation(extent={{-180,-10},{-140,30}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWatSet_flow( + final min=0, + final unit="m3/s", + quantity="VolumeFlowRate") "Chiller water minimum flow setpoint" + annotation (Placement(transformation(extent={{-180,-60},{-140,-20}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValPos( + final min=0, + final max=1, + final unit="1") "Chilled water minimum flow bypass valve position" + annotation (Placement(transformation(extent={{140,30},{180,70}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Reals.PIDWithReset valPos( + final controllerType=controllerType, + final k=k, + final Ti=Ti, + final Td=Td, + final yMax=yMax, + final yMin=yMin, + final y_reset=1) "Bypass valve position PI controller" + annotation (Placement(transformation(extent={{40,70},{60,90}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFlo[nChi]( + final k=minFloSet) "Minimum bypass flow rate at each stage" + annotation (Placement(transformation(extent={{-120,-90},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum( + final nin=nChi) + "Sum of minimum chilled water flow of all chillers" + annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Divide div + "Normalized minimum flow setpoint" + annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Divide div1 + "Normalized minimum bypass flow " + annotation (Placement(transformation(extent={{-20,-20},{0,0}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{100,40},{120,60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant opeVal( + final k=1) "Valve open" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + +equation + connect(minFlo.y, mulSum.u) + annotation (Line(points={{-98,-80},{-82,-80}},color={0,0,127})); + connect(VChiWat_flow, div1.u1) + annotation (Line(points={{-160,10},{-80,10},{-80,-4},{-22,-4}},color={0,0,127})); + connect(mulSum.y, div1.u2) + annotation (Line(points={{-58,-80},{-40,-80},{-40,-16},{-22,-16}}, + color={0,0,127})); + connect(mulSum.y, div.u2) + annotation (Line(points={{-58,-80},{-40,-80},{-40,-66},{-22,-66}}, + color={0,0,127})); + connect(div1.y, valPos.u_m) + annotation (Line(points={{2,-10},{50,-10},{50,68}}, color={0,0,127})); + connect(div.y, valPos.u_s) + annotation (Line(points={{2,-60},{20,-60},{20,80},{38,80}}, + color={0,0,127})); + connect(uChiWatPum, swi.u2) + annotation (Line(points={{-160,50},{98,50}}, color={255,0,255})); + connect(opeVal.y, swi.u3) + annotation (Line(points={{-38,30},{80,30},{80,42},{98,42}}, color={0,0,127})); + connect(swi.y, yValPos) + annotation (Line(points={{122,50},{160,50}},color={0,0,127})); + connect(div.u1, VChiWatSet_flow) + annotation (Line(points={{-22,-54},{-80,-54},{-80,-40},{-160,-40}}, + color={0,0,127})); + connect(uChiWatPum, valPos.trigger) + annotation (Line(points={{-160,50},{44,50},{44,68}}, + color={255,0,255})); + connect(valPos.y, swi.u1) + annotation (Line(points={{62,80},{80,80},{80,58},{98,58}}, + color={0,0,127})); + +annotation ( + defaultComponentName="minBypValCon", + 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), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-60,40},{80,-40}}, + lineColor={28,108,200}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Polygon( + points={{-60,40},{-20,0},{-60,-40},{-60,40}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Text( + extent={{-98,88},{-54,74}}, + textColor={255,0,255}, + textString="uChiWatPum"), + Text( + extent={{-98,6},{-54,-4}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="VChiWat_flow"), + Text( + extent={{68,6},{102,-4}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yValPos"), + Text( + extent={{-98,-74},{-42,-86}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="VChiWatSet_flow")}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-140,-100},{140,100}})), + Documentation(info=" +

                      +Block that controls chilled water minimum flow for primary-only +plants with a minimum flow bypass valve, +according to ASHRAE Guideline36-2021, +section 5.20.8 Chilled water minimum flow bypass valve. +

                      +

                      +The minimum chilled water flow setpoint VChiWatSet_flow is specified by block + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.FlowSetpoint. +

                      +

                      +When any chilled water pump is proven on (uChiWatPum = true), +the bypass valve PID loop shall be enabled. The valve shall be opened 100% otherwise. +When enabled, the bypass valve loop shall be biased to start with the valve +100% open. +

                      +", +revisions=" +
                        +
                      • +January 31, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/FlowSetpoint.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/FlowSetpoint.mo new file mode 100644 index 00000000000..f0bbd58904c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/FlowSetpoint.mo @@ -0,0 +1,1079 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass; +block FlowSetpoint "Chilled water minimum flow setpoint for primary-only plants" + + parameter Integer nChi = 3 + "Total number of chillers"; + parameter Boolean have_parChi=true + "Flag: true means that the plant has parallel chillers"; + parameter Real byPasSetTim( + final unit="s", + final quantity="Time")=300 + "Time constant for resetting minimum bypass flow"; + parameter Real minFloSet[nChi]( + final unit=fill("m3/s",nChi), + final quantity=fill("VolumeFlowRate",nChi), + displayUnit=fill("m3/s",nChi)) = {0.005, 0.005, 0.005} + "Minimum chilled water flow through each chiller"; + parameter Real maxFloSet[nChi]( + final unit=fill("m3/s",nChi), + final quantity=fill("VolumeFlowRate",nChi), + displayUnit=fill("m3/s",nChi)) = {0.025, 0.025, 0.025} + "Maximum chilled water flow through each chiller"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaUp + "Stage up logical signal" + annotation (Placement(transformation(extent={{-480,500},{-440,540}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uUpsDevSta + "Resetting status of upstream device (in staging up or down process) before reset minimum chilled water flow setpoint" + annotation (Placement(transformation(extent={{-480,460},{-440,500}}), + iconTransformation(extent={{-140,50},{-100,90}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller status: true=ON" + annotation (Placement(transformation(extent={{-480,420},{-440,460}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexEnaChi + "Index of next chiller to be enabled" + annotation (Placement(transformation(extent={{-480,150},{-440,190}}), + iconTransformation(extent={{-140,-10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexDisChi + "Index of next chiller to be disabled" + annotation (Placement(transformation(extent={{-480,10},{-440,50}}), + iconTransformation(extent={{-140,-30},{-100,10}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSubCha + "Indicate if upstream device has been reset in the sub-process. This input is used when the stage change needs chiller on-off" + annotation (Placement(transformation(extent={{-480,-200},{-440,-160}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOnOff + "Indicate if the stage change requires one chiller to be enabled while another is disabled" + annotation (Placement(transformation(extent={{-480,-240},{-440,-200}}), + iconTransformation(extent={{-140,-90},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaDow + "Stage down logical signal" + annotation (Placement(transformation(extent={{-480,-310},{-440,-270}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatMinFloSet( + final quantity="VolumeFlowRate", + final unit="m3/s", + final min=0) + "Chilled water minimum flow setpoint" + annotation (Placement(transformation(extent={{440,100},{480,140}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChaSet + "True: it is in the setpoint changing process" + annotation (Placement(transformation(extent={{440,-460},{480,-420}}), + iconTransformation(extent={{100,-100},{140,-60}}))); + +protected + final parameter Integer chiInd[nChi]={i for i in 1:nChi} + "Chiller index, {1,2,...,n}"; + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3( + final k=byPasSetTim) + "Duration time to change old setpoint to new setpoint" + annotation (Placement(transformation(extent={{-60,258},{-40,278}}))); + Buildings.Controls.OBC.CDL.Reals.Line oneMorSet + "Minimum flow setpoint when adding one more chiller" + annotation (Placement(transformation(extent={{100,320},{120,340}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2(final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{-60,300},{-40,320}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim(final t=byPasSetTim) + "Time after suppress chiller demand" + annotation (Placement(transformation(extent={{-220,510},{-200,530}}))); + Buildings.Controls.OBC.CDL.Reals.Line oneLeSet + "Minimum flow setpoint when disabling one chiller" + annotation (Placement(transformation(extent={{100,-40},{120,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim1(final t=byPasSetTim) + "Time after suppress chiller demand" + annotation (Placement(transformation(extent={{-220,-300},{-200,-280}}))); + Buildings.Controls.OBC.CDL.Reals.Switch dowSet + "Minimum flow chilled water flow setpoint when there is stage-down command" + annotation (Placement(transformation(extent={{240,-32},{260,-12}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" + annotation (Placement(transformation(extent={{-220,-330},{-200,-310}}))); + Buildings.Controls.OBC.CDL.Reals.Switch byPasSet1 + "Minimum flow chilled water flow setpoint" + annotation (Placement(transformation(extent={{400,230},{420,250}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and" + annotation (Placement(transformation(extent={{-320,510},{-300,530}}))); + Buildings.Controls.OBC.CDL.Logical.And and3 "Logical and" + annotation (Placement(transformation(extent={{-320,-300},{-300,-280}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFlo[nChi]( + final k=minFloSet) + "Minimum chilled water flow through each chiller" + annotation (Placement(transformation(extent={{-400,290},{-380,310}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxFlo[nChi]( + final k=maxFloSet) + "Maximum chilled water flow through each chiller" + annotation (Placement(transformation(extent={{-400,250},{-380,270}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer[nChi]( + final k=fill(0,nChi)) "Constant zero" + annotation (Placement(transformation(extent={{-400,210},{-380,230}}))); + Buildings.Controls.OBC.CDL.Reals.Divide floRat[nChi] + "Flow rate ratio through each chiller" + annotation (Placement(transformation(extent={{-280,270},{-260,290}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor nexChiRat(final nin=nChi) + if have_parChi + "Flow rate ratio of next enabling chiller" + annotation (Placement(transformation(extent={{-220,180},{-200,200}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor nexChiMaxFlo(final nin=nChi) + if have_parChi "Maximum flow rate of next enabling chiller" + annotation (Placement(transformation(extent={{-220,140},{-200,160}}))); + Buildings.Controls.OBC.CDL.Reals.Max max if have_parChi + "Maximum flow rate ratio of operating chillers after one chiller being enabled" + annotation (Placement(transformation(extent={{-80,180},{-60,200}}))); + Buildings.Controls.OBC.CDL.Reals.Add add2 if have_parChi + "Sum of maximum chilled water flow rate setpoint of operating chillers after one chiller being enabled" + annotation (Placement(transformation(extent={{-80,140},{-60,160}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt[nChi]( + final k=chiInd) "Chiller index vector" + annotation (Placement(transformation(extent={{-400,60},{-380,80}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep( + final nout=nChi) "Replicate integer input" + annotation (Placement(transformation(extent={{-400,20},{-380,40}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu[nChi] "Check equality of two integer inputs" + annotation (Placement(transformation(extent={{-320,60},{-300,80}}))); + Buildings.Controls.OBC.CDL.Logical.Xor xor[nChi] "Outputs true if exactly one input is true" + annotation (Placement(transformation(extent={{-220,60},{-200,80}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi3[nChi] if have_parChi + "Flow rate ratio of operating chiller" + annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi4[nChi] if have_parChi + "Maximum flow rate of operating chiller" + annotation (Placement(transformation(extent={{-120,30},{-100,50}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply pro2 if have_parChi + "Chilled water flow setpoint after disabling next chiller" + annotation (Placement(transformation(extent={{-20,60},{0,80}}))); + Buildings.Controls.OBC.CDL.Reals.Max max1 if not have_parChi + "Largest minimum flow rate setpoint of operating chillers after one chiller being enabled" + annotation (Placement(transformation(extent={{-20,-100},{0,-80}}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum1(final nin=nChi) + if have_parChi + "Sum of maximum chilled water flow rate setpoint of operating chillers after one chiller being disabled" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax1(final nin=nChi) + if not have_parChi + "Largest minimum flow rate setpoint of operating chillers" + annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax2(final nin=nChi) + if have_parChi + "Maximum flow rate ratio of operating chillers after one chiller being disabled" + annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax3(final nin=nChi) + if not have_parChi + "Largest minimum flow rate setpoint of operating chillers after one chiller being disabled" + annotation (Placement(transformation(extent={{-20,-140},{0,-120}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi5[nChi] if not have_parChi + "Minimum flow rate of operating chiller" + annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor nexChiMinFlo(final nin=nChi) + if not have_parChi "Minimum flow rate of next enabling chiller" + annotation (Placement(transformation(extent={{-220,-100},{-200,-80}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi6[nChi] if not have_parChi + "Minimum flow rate of operating chiller" + annotation (Placement(transformation(extent={{-100,-140},{-80,-120}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2 "Logical and" + annotation (Placement(transformation(extent={{-400,110},{-380,130}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi9[nChi] if have_parChi + "Flow rate ratio of operating chiller" + annotation (Placement(transformation(extent={{-220,440},{-200,460}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax4( + final nin=nChi) if have_parChi + "Maximum flow rate ratio of operating chillers" + annotation (Placement(transformation(extent={{-180,440},{-160,460}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi10[nChi] if have_parChi + "Maximum flow rate of operating chiller" + annotation (Placement(transformation(extent={{-220,400},{-200,420}}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum2( + final nin=nChi) if have_parChi + "Sum of maximum chilled water flow rate setpoint of operating chillers" + annotation (Placement(transformation(extent={{-180,400},{-160,420}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply pro3 if have_parChi + "Chilled water flow setpoint for current operating chillers" + annotation (Placement(transformation(extent={{-60,420},{-40,440}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi11[nChi] if have_parChi + "Maximum flow rate of operating chiller" + annotation (Placement(transformation(extent={{-220,320},{-200,340}}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum3( + final nin=nChi) if have_parChi + "Sum of maximum chilled water flow rate setpoint of operating chillers" + annotation (Placement(transformation(extent={{-180,320},{-160,340}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi12[nChi] if have_parChi + "Flow rate ratio of operating chiller" + annotation (Placement(transformation(extent={{-220,360},{-200,380}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax5(final nin=nChi) + if have_parChi + "Maximum flow rate ratio of operating chillers" + annotation (Placement(transformation(extent={{-180,360},{-160,380}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply pro4 if have_parChi + "Chilled water flow setpoint for current operating chillers" + annotation (Placement(transformation(extent={{-60,340},{-40,360}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply pro1 if have_parChi + "Chilled water flow setpoint for current operating chillers" + annotation (Placement(transformation(extent={{-20,160},{0,180}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax6( + final nin=nChi) if not have_parChi + "Largest minimum flow rate setpoint of operating chillers" + annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1[nChi] if not have_parChi + "Minimum flow rate of operating chiller" + annotation (Placement(transformation(extent={{-120,-20},{-100,0}}))); + Buildings.Controls.OBC.CDL.Reals.Switch byPasSet2 + "Minimum flow chilled water flow setpoint" + annotation (Placement(transformation(extent={{180,350},{200,370}}))); + Buildings.Controls.OBC.CDL.Reals.Switch upSet + "Minimum flow chilled water flow setpoint when there is stage-up command" + annotation (Placement(transformation(extent={{240,310},{260,330}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim2(final t=byPasSetTim) + "Time after suppress chiller demand" + annotation (Placement(transformation(extent={{-220,-260},{-200,-240}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and" + annotation (Placement(transformation(extent={{-320,-260},{-300,-240}}))); + Buildings.Controls.OBC.CDL.Reals.Line oneMorSet1 + "Minimum flow setpoint when adding one more chiller" + annotation (Placement(transformation(extent={{100,-260},{120,-240}}))); + Buildings.Controls.OBC.CDL.Reals.Switch byPasSet4 + "Minimum flow chilled water flow setpoint" + annotation (Placement(transformation(extent={{160,-210},{180,-190}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chaSet + "Minimum flow chilled water flow setpoint when there is stage-change command" + annotation (Placement(transformation(extent={{300,190},{320,210}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{300,230},{320,250}}))); + Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" + annotation (Placement(transformation(extent={{340,230},{360,250}}))); + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam[nChi] + "Hold the chiller status when there is any stage change" + annotation (Placement(transformation(extent={{-360,340},{-340,360}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChi] "Boolean to real" + annotation (Placement(transformation(extent={{-400,340},{-380,360}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=nChi) "Replicate boolean input" + annotation (Placement(transformation(extent={{-380,150},{-360,170}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greEquThr[nChi]( + final t=fill(0.5, nChi)) + "Convert real to boolean" + annotation (Placement(transformation(extent={{-320,340},{-300,360}}))); + Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold intGreEquThr( + final t=1) + "Check if index is in the range" + annotation (Placement(transformation(extent={{-400,-80},{-380,-60}}))); + Buildings.Controls.OBC.CDL.Integers.LessEqualThreshold intLesEquThr( + final t=nChi) + "Check if index is in the range" + annotation (Placement(transformation(extent={{-400,-170},{-380,-150}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1( + final k=1) + "Dummy index so the extractor will not have out of range index" + annotation (Placement(transformation(extent={{-360,-170},{-340,-150}}))); + Buildings.Controls.OBC.CDL.Logical.And and5 + "Check if index is in the range" + annotation (Placement(transformation(extent={{-360,-80},{-340,-60}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 + "Convert boolean to real" + annotation (Placement(transformation(extent={{-320,-80},{-300,-60}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi "Valid index" + annotation (Placement(transformation(extent={{-320,-140},{-300,-120}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply mul3 if not have_parChi + "Ensure zero output when the index is out of range" + annotation (Placement(transformation(extent={{-120,-90},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply mul1[2] if have_parChi + "Ensure zero output when the index is out of range" + annotation (Placement(transformation(extent={{-160,140},{-140,160}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaScaRep( + final nout=3) + "Replicate real input" + annotation (Placement(transformation(extent={{-270,-80},{-250,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Or or1 + "True: if it is time to change the setpoint" + annotation (Placement(transformation(extent={{-160,-430},{-140,-410}}))); + Buildings.Controls.OBC.CDL.Logical.Or or3 + "True: if it is time to change the setpoint" + annotation (Placement(transformation(extent={{-60,-450},{-40,-430}}))); + Buildings.Controls.OBC.CDL.Logical.Or or4 + "Check if the setpoint has been changed" + annotation (Placement(transformation(extent={{-98,-360},{-78,-340}}))); + Buildings.Controls.OBC.CDL.Logical.Or or5 + "True: the setpoint has been changed" + annotation (Placement(transformation(extent={{20,-380},{40,-360}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg + "True: the setpoint has been changed" + annotation (Placement(transformation(extent={{60,-380},{80,-360}}))); + Buildings.Controls.OBC.CDL.Logical.Not notChaSet + "True: if it is not time to change the setpoint" + annotation (Placement(transformation(extent={{22,-490},{42,-470}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi + "Setpoint being set" + annotation (Placement(transformation(extent={{120,-450},{140,-430}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "Check if the setpoint is being changed" + annotation (Placement(transformation(extent={{240,-450},{260,-430}}))); + Buildings.Controls.OBC.CDL.Logical.Edge staChaSet + "Start changing the setpoint" + annotation (Placement(transformation(extent={{160,-510},{180,-490}}))); + Buildings.Controls.OBC.CDL.Logical.Not chaSetPro + "True: it is in the setpoint changing process" + annotation (Placement(transformation(extent={{320,-450},{340,-430}}))); + Buildings.Controls.OBC.CDL.Reals.Switch byPasSet3 + "Minimum flow chilled water flow setpoint" + annotation (Placement(transformation(extent={{400,110},{420,130}}))); + Buildings.Controls.OBC.CDL.Logical.Latch inStaCha + "In stage changing process" + annotation (Placement(transformation(extent={{340,110},{360,130}}))); + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam1 + "Setpoint at the moment when ending stage change" + annotation (Placement(transformation(extent={{340,70},{360,90}}))); + Buildings.Controls.OBC.CDL.Logical.FallingEdge endSta + "End staging change" + annotation (Placement(transformation(extent={{240,50},{260,70}}))); + + Buildings.Controls.OBC.CDL.Logical.Edge staChaSet1 + "Start changing the setpoint" + annotation (Placement(transformation(extent={{180,-450},{200,-430}}))); +equation + connect(uStaDow, not2.u) + annotation (Line(points={{-460,-290},{-410,-290},{-410,-320},{-222,-320}}, + color={255,0,255})); + connect(and1.y, tim.u) + annotation (Line(points={{-298,520},{-222,520}}, color={255,0,255})); + connect(uStaDow, and3.u1) + annotation (Line(points={{-460,-290},{-322,-290}}, color={255,0,255})); + connect(and3.y, tim1.u) + annotation (Line(points={{-298,-290},{-222,-290}}, color={255,0,255})); + connect(minFlo.y, floRat.u1) + annotation (Line(points={{-378,300},{-300,300},{-300,286},{-282,286}}, + color={0,0,127})); + connect(maxFlo.y, floRat.u2) + annotation (Line(points={{-378,260},{-290,260},{-290,274},{-282,274}}, + color={0,0,127})); + connect(nexDisChi, intRep.u) + annotation (Line(points={{-460,30},{-402,30}}, color={255,127,0})); + connect(conInt.y, intEqu.u1) + annotation (Line(points={{-378,70},{-322,70}}, color={255,127,0})); + connect(intRep.y, intEqu.u2) + annotation (Line(points={{-378,30},{-360,30},{-360,62},{-322,62}}, + color={255,127,0})); + connect(intEqu.y, xor.u1) + annotation (Line(points={{-298,70},{-222,70}}, color={255,0,255})); + connect(xor.y, swi3.u2) + annotation (Line(points={{-198,70},{-140,70},{-140,100},{-122,100}}, + color={255,0,255})); + connect(xor.y, swi4.u2) + annotation (Line(points={{-198,70},{-140,70},{-140,40},{-122,40}}, + color={255,0,255})); + connect(multiMax2.y, pro2.u1) + annotation (Line(points={{-58,100},{-40,100},{-40,76},{-22,76}}, + color={0,0,127})); + connect(mulSum1.y, pro2.u2) + annotation (Line(points={{-58,40},{-40,40},{-40,64},{-22,64}}, + color={0,0,127})); + connect(swi3.y, multiMax2.u) + annotation (Line(points={{-98,100},{-82,100}}, color={0,0,127})); + connect(swi4.y, mulSum1.u) + annotation (Line(points={{-98,40},{-82,40}}, color={0,0,127})); + connect(swi5.y, multiMax1.u) + annotation (Line(points={{-98,-50},{-82,-50}}, color={0,0,127})); + connect(swi6.y, multiMax3.u) + annotation (Line(points={{-78,-130},{-22,-130}}, color={0,0,127})); + connect(multiMax1.y, max1.u1) + annotation (Line(points={{-58,-50},{-40,-50},{-40,-84},{-22,-84}}, + color={0,0,127})); + connect(xor.y, swi6.u2) + annotation (Line(points={{-198,70},{-140,70},{-140,-130},{-102,-130}}, + color={255,0,255})); + connect(uStaDow, or2.u2) + annotation (Line(points={{-460,-290},{-410,-290},{-410,112},{-402,112}}, + color={255,0,255})); + connect(uStaUp, or2.u1) + annotation (Line(points={{-460,520},{-410,520},{-410,120},{-402,120}}, + color={255,0,255})); + connect(booToRea.y, triSam.u) + annotation (Line(points={{-378,350},{-362,350}}, color={0,0,127})); + connect(or2.y, booRep.u) + annotation (Line(points={{-378,120},{-370,120},{-370,140},{-390,140},{-390,160}, + {-382,160}}, color={255,0,255})); + connect(booRep.y, triSam.trigger) + annotation (Line(points={{-358,160},{-350,160},{-350,338}}, color={255,0,255})); + connect(uChi, booToRea.u) + annotation (Line(points={{-460,440},{-420,440},{-420,350},{-402,350}}, + color={255,0,255})); + connect(uChi, swi9.u2) + annotation (Line(points={{-460,440},{-330,440},{-330,450},{-222,450}}, + color={255,0,255})); + connect(uChi, swi10.u2) + annotation (Line(points={{-460,440},{-330,440},{-330,410},{-222,410}}, + color={255,0,255})); + connect(floRat.y, swi9.u1) + annotation (Line(points={{-258,280},{-250,280},{-250,458},{-222,458}}, + color={0,0,127})); + connect(swi9.y, multiMax4.u) + annotation (Line(points={{-198,450},{-182,450}}, + color={0,0,127})); + connect(maxFlo.y, swi10.u1) + annotation (Line(points={{-378,260},{-290,260},{-290,418},{-222,418}}, + color={0,0,127})); + connect(zer.y, swi9.u3) + annotation (Line(points={{-378,220},{-240,220},{-240,442},{-222,442}}, + color={0,0,127})); + connect(zer.y, swi10.u3) + annotation (Line(points={{-378,220},{-240,220},{-240,402},{-222,402}}, + color={0,0,127})); + connect(swi10.y, mulSum2.u) + annotation (Line(points={{-198,410},{-182,410}}, + color={0,0,127})); + connect(multiMax4.y, pro3.u1) + annotation (Line(points={{-158,450},{-140,450},{-140,436},{-62,436}}, + color={0,0,127})); + connect(mulSum2.y, pro3.u2) + annotation (Line(points={{-158,410},{-140,410},{-140,424},{-62,424}}, + color={0,0,127})); + connect(floRat.y, swi12.u1) + annotation (Line(points={{-258,280},{-250,280},{-250,378},{-222,378}}, + color={0,0,127})); + connect(triSam.y, greEquThr.u) + annotation (Line(points={{-338,350},{-322,350}}, color={0,0,127})); + connect(greEquThr.y, swi12.u2) + annotation (Line(points={{-298,350},{-230,350},{-230,370},{-222,370}}, + color={255,0,255})); + connect(greEquThr.y, swi11.u2) + annotation (Line(points={{-298,350},{-230,350},{-230,330},{-222,330}}, + color={255,0,255})); + connect(zer.y, swi12.u3) + annotation (Line(points={{-378,220},{-240,220},{-240,362},{-222,362}}, + color={0,0,127})); + connect(maxFlo.y, swi11.u1) + annotation (Line(points={{-378,260},{-290,260},{-290,338},{-222,338}}, + color={0,0,127})); + connect(zer.y, swi11.u3) + annotation (Line(points={{-378,220},{-240,220},{-240,322},{-222,322}}, + color={0,0,127})); + connect(swi12.y, multiMax5.u) + annotation (Line(points={{-198,370},{-182,370}}, + color={0,0,127})); + connect(swi11.y, mulSum3.u) + annotation (Line(points={{-198,330},{-182,330}}, + color={0,0,127})); + connect(multiMax5.y, pro4.u1) + annotation (Line(points={{-158,370},{-120,370},{-120,356},{-62,356}}, + color={0,0,127})); + connect(mulSum3.y, pro4.u2) + annotation (Line(points={{-158,330},{-100,330},{-100,344},{-62,344}}, + color={0,0,127})); + connect(multiMax5.y, max.u1) + annotation (Line(points={{-158,370},{-120,370},{-120,196},{-82,196}}, + color={0,0,127})); + connect(mulSum3.y, add2.u1) + annotation (Line(points={{-158,330},{-100,330},{-100,156},{-82,156}}, + color={0,0,127})); + connect(max.y, pro1.u1) + annotation (Line(points={{-58,190},{-40,190},{-40,176},{-22,176}}, color={0,0,127})); + connect(add2.y, pro1.u2) + annotation (Line(points={{-58,150},{-40,150},{-40,164},{-22,164}}, color={0,0,127})); + connect(maxFlo.y, nexChiMaxFlo.u) + annotation (Line(points={{-378,260},{-290,260},{-290,150},{-222,150}}, + color={0,0,127})); + connect(greEquThr.y, xor.u2) + annotation (Line(points={{-298,350},{-230,350},{-230,62},{-222,62}}, + color={255,0,255})); + connect(floRat.y, swi3.u1) + annotation (Line(points={{-258,280},{-250,280},{-250,108},{-122,108}}, + color={0,0,127})); + connect(zer.y, swi3.u3) + annotation (Line(points={{-378,220},{-240,220},{-240,92},{-122,92}}, + color={0,0,127})); + connect(zer.y, swi4.u3) + annotation (Line(points={{-378,220},{-240,220},{-240,32},{-122,32}}, + color={0,0,127})); + connect(maxFlo.y, swi4.u1) + annotation (Line(points={{-378,260},{-290,260},{-290,48},{-122,48}}, + color={0,0,127})); + connect(uChi, swi1.u2) + annotation (Line(points={{-460,440},{-330,440},{-330,-10},{-122,-10}}, + color={255,0,255})); + connect(greEquThr.y, swi5.u2) + annotation (Line(points={{-298,350},{-230,350},{-230,-50},{-122,-50}}, + color={255,0,255})); + connect(swi1.y, multiMax6.u) + annotation (Line(points={{-98,-10},{-82,-10}}, + color={0,0,127})); + connect(zer.y, swi1.u3) + annotation (Line(points={{-378,220},{-240,220},{-240,-18},{-122,-18}}, + color={0,0,127})); + connect(zer.y, swi5.u3) + annotation (Line(points={{-378,220},{-240,220},{-240,-58},{-122,-58}}, + color={0,0,127})); + connect(maxFlo.y, swi1.u1) + annotation (Line(points={{-378,260},{-290,260},{-290,-2},{-122,-2}}, + color={0,0,127})); + connect(maxFlo.y, swi5.u1) + annotation (Line(points={{-378,260},{-290,260},{-290,-42},{-122,-42}}, + color={0,0,127})); + connect(maxFlo.y, nexChiMinFlo.u) + annotation (Line(points={{-378,260},{-290,260},{-290,-90},{-222,-90}}, + color={0,0,127})); + connect(maxFlo.y, swi6.u1) + annotation (Line(points={{-378,260},{-290,260},{-290,-122},{-102,-122}}, + color={0,0,127})); + connect(zer.y, swi6.u3) + annotation (Line(points={{-378,220},{-240,220},{-240,-138},{-102,-138}}, + color={0,0,127})); + connect(uUpsDevSta, and1.u2) + annotation (Line(points={{-460,480},{-380,480},{-380,512},{-322,512}}, + color={255,0,255})); + connect(uStaUp, and1.u1) + annotation (Line(points={{-460,520},{-322,520}}, color={255,0,255})); + connect(con2.y, oneMorSet.x1) + annotation (Line(points={{-38,310},{70,310},{70,338},{98,338}}, color={0,0,127})); + connect(pro4.y, oneMorSet.f1) + annotation (Line(points={{-38,350},{60,350},{60,334},{98,334}}, color={0,0,127})); + connect(con3.y, oneMorSet.x2) + annotation (Line(points={{-38,268},{80,268},{80,326},{98,326}}, color={0,0,127})); + connect(pro1.y, oneMorSet.f2) + annotation (Line(points={{2,170},{90,170},{90,322},{98,322}}, + color={0,0,127})); + connect(tim.y, oneMorSet.u) + annotation (Line(points={{-198,520},{50,520},{50,330},{98,330}}, + color={0,0,127})); + connect(con2.y, oneLeSet.x1) + annotation (Line(points={{-38,310},{70,310},{70,-22},{98,-22}}, + color={0,0,127})); + connect(pro4.y, oneLeSet.f1) + annotation (Line(points={{-38,350},{60,350},{60,-26},{98,-26}}, + color={0,0,127})); + connect(con3.y, oneLeSet.x2) + annotation (Line(points={{-38,268},{80,268},{80,-34},{98,-34}}, + color={0,0,127})); + connect(pro2.y, oneLeSet.f2) + annotation (Line(points={{2,70},{50,70},{50,-38},{98,-38}}, + color={0,0,127})); + connect(oneMorSet.y, byPasSet2.u3) + annotation (Line(points={{122,330},{170,330},{170,352},{178,352}}, + color={0,0,127})); + connect(pro3.y, byPasSet2.u1) + annotation (Line(points={{-38,430},{40,430},{40,368},{178,368}}, + color={0,0,127})); + connect(uSubCha, byPasSet2.u2) + annotation (Line(points={{-460,-180},{150,-180},{150,360},{178,360}}, + color={255,0,255})); + connect(uOnOff, upSet.u2) + annotation (Line(points={{-460,-220},{220,-220},{220,320},{238,320}}, + color={255,0,255})); + connect(byPasSet2.y, upSet.u1) + annotation (Line(points={{202,360},{220,360},{220,328},{238,328}}, + color={0,0,127})); + connect(oneMorSet.y, upSet.u3) + annotation (Line(points={{122,330},{170,330},{170,312},{238,312}}, + color={0,0,127})); + connect(uStaDow, and2.u2) + annotation (Line(points={{-460,-290},{-410,-290},{-410,-258},{-322,-258}}, + color={255,0,255})); + connect(uSubCha, and2.u1) + annotation (Line(points={{-460,-180},{-420,-180},{-420,-250},{-322,-250}}, + color={255,0,255})); + connect(and2.y, tim2.u) + annotation (Line(points={{-298,-250},{-222,-250}}, color={255,0,255})); + connect(con2.y, oneMorSet1.x1) + annotation (Line(points={{-38,310},{70,310},{70,-242},{98,-242}}, + color={0,0,127})); + connect(pro4.y, oneMorSet1.f1) + annotation (Line(points={{-38,350},{60,350},{60,-246},{98,-246}}, + color={0,0,127})); + connect(con3.y, oneMorSet1.x2) + annotation (Line(points={{-38,268},{80,268},{80,-254},{98,-254}}, + color={0,0,127})); + connect(pro1.y, oneMorSet1.f2) + annotation (Line(points={{2,170},{90,170},{90,-258},{98,-258}}, + color={0,0,127})); + connect(tim2.y, oneMorSet1.u) + annotation (Line(points={{-198,-250},{98,-250}}, color={0,0,127})); + connect(oneMorSet1.y, byPasSet4.u3) + annotation (Line(points={{122,-250},{140,-250},{140,-208},{158,-208}}, + color={0,0,127})); + connect(uUpsDevSta, byPasSet4.u2) + annotation (Line(points={{-460,480},{-430,480},{-430,-200},{158,-200}}, + color={255,0,255})); + connect(pro3.y, byPasSet4.u1) + annotation (Line(points={{-38,430},{40,430},{40,-192},{158,-192}}, + color={0,0,127})); + connect(uOnOff, dowSet.u2) + annotation (Line(points={{-460,-220},{220,-220},{220,-22},{238,-22}}, + color={255,0,255})); + connect(byPasSet4.y, dowSet.u1) + annotation (Line(points={{182,-200},{200,-200},{200,-14},{238,-14}}, + color={0,0,127})); + connect(uUpsDevSta, and3.u2) + annotation (Line(points={{-460,480},{-430,480},{-430,-298},{-322,-298}}, + color={255,0,255})); + connect(tim1.y, oneLeSet.u) + annotation (Line(points={{-198,-290},{30,-290},{30,-30},{98,-30}}, + color={0,0,127})); + connect(oneLeSet.y, dowSet.u3) + annotation (Line(points={{122,-30},{238,-30}}, + color={0,0,127})); + connect(dowSet.y, chaSet.u3) + annotation (Line(points={{262,-22},{270,-22},{270,192},{298,192}}, + color={0,0,127})); + connect(upSet.y, chaSet.u1) + annotation (Line(points={{262,320},{270,320},{270,208},{298,208}}, + color={0,0,127})); + connect(uStaUp, chaSet.u2) + annotation (Line(points={{-460,520},{-410,520},{-410,500},{280,500},{280,200}, + {298,200}}, color={255,0,255})); + connect(not1.y, and4.u1) + annotation (Line(points={{322,240},{338,240}}, color={255,0,255})); + connect(and4.y, byPasSet1.u2) + annotation (Line(points={{362,240},{398,240}}, color={255,0,255})); + connect(not2.y, and4.u2) + annotation (Line(points={{-198,-320},{330,-320},{330,232},{338,232}}, + color={255,0,255})); + connect(chaSet.y, byPasSet1.u3) + annotation (Line(points={{322,200},{380,200},{380,232},{398,232}}, + color={0,0,127})); + connect(pro3.y, byPasSet1.u1) + annotation (Line(points={{-38,430},{380,430},{380,248},{398,248}}, + color={0,0,127})); + connect(uStaUp, not1.u) + annotation (Line(points={{-460,520},{-410,520},{-410,500},{280,500},{280,240}, + {298,240}}, color={255,0,255})); + connect(multiMax1.y, oneMorSet.f1) + annotation (Line(points={{-58,-50},{60,-50},{60,334},{98,334}}, + color={0,0,127})); + connect(multiMax1.y, oneMorSet1.f1) + annotation (Line(points={{-58,-50},{60,-50},{60,-246},{98,-246}}, + color={0,0,127})); + connect(max1.y, oneMorSet.f2) + annotation (Line(points={{2,-90},{90,-90},{90,322},{98,322}}, + color={0,0,127})); + connect(max1.y, oneMorSet1.f2) + annotation (Line(points={{2,-90},{90,-90},{90,-258},{98,-258}}, + color={0,0,127})); + connect(multiMax3.y, oneLeSet.f2) + annotation (Line(points={{2,-130},{50,-130},{50,-38},{98,-38}}, + color={0,0,127})); + connect(multiMax6.y, byPasSet2.u1) + annotation (Line(points={{-58,-10},{40,-10},{40,368},{178,368}}, + color={0,0,127})); + connect(multiMax6.y, byPasSet4.u1) + annotation (Line(points={{-58,-10},{40,-10},{40,-192},{158,-192}}, + color={0,0,127})); + connect(multiMax6.y, byPasSet1.u1) + annotation (Line(points={{-58,-10},{40,-10},{40,280},{380,280},{380,248},{398, + 248}}, color={0,0,127})); + connect(multiMax1.y, oneLeSet.f1) + annotation (Line(points={{-58,-50},{60,-50},{60,-26},{98,-26}}, + color={0,0,127})); + connect(floRat.y, nexChiRat.u) + annotation (Line(points={{-258,280},{-250,280},{-250,190},{-222,190}}, + color={0,0,127})); + connect(conInt1.y, intSwi.u3) annotation (Line(points={{-338,-160},{-330,-160}, + {-330,-138},{-322,-138}}, color={255,127,0})); + connect(and5.y, booToRea1.u) + annotation (Line(points={{-338,-70},{-322,-70}}, color={255,0,255})); + connect(and5.y, intSwi.u2) annotation (Line(points={{-338,-70},{-330,-70},{-330, + -130},{-322,-130}}, color={255,0,255})); + connect(intGreEquThr.y, and5.u1) + annotation (Line(points={{-378,-70},{-362,-70}}, color={255,0,255})); + connect(intLesEquThr.y, and5.u2) annotation (Line(points={{-378,-160},{-370,-160}, + {-370,-78},{-362,-78}}, color={255,0,255})); + connect(nexEnaChi, intGreEquThr.u) annotation (Line(points={{-460,170},{-420,170}, + {-420,-70},{-402,-70}}, color={255,127,0})); + connect(nexEnaChi, intSwi.u1) annotation (Line(points={{-460,170},{-420,170},{ + -420,-122},{-322,-122}}, color={255,127,0})); + connect(nexEnaChi, intLesEquThr.u) annotation (Line(points={{-460,170},{-420,170}, + {-420,-160},{-402,-160}}, color={255,127,0})); + connect(intSwi.y, nexChiMinFlo.index) annotation (Line(points={{-298,-130},{-280, + -130},{-280,-110},{-210,-110},{-210,-102}}, color={255,127,0})); + connect(intSwi.y, nexChiMaxFlo.index) annotation (Line(points={{-298,-130},{-280, + -130},{-280,130},{-210,130},{-210,138}}, color={255,127,0})); + connect(intSwi.y, nexChiRat.index) annotation (Line(points={{-298,-130},{-280, + -130},{-280,170},{-210,170},{-210,178}}, color={255,127,0})); + connect(booToRea1.y, reaScaRep.u) + annotation (Line(points={{-298,-70},{-272,-70}}, color={0,0,127})); + connect(mul3.y, max1.u2) annotation (Line(points={{-98,-80},{-80,-80},{-80,-96}, + {-22,-96}}, color={0,0,127})); + connect(reaScaRep.y[3], mul3.u1) annotation (Line(points={{-248,-69.3333},{ + -180,-69.3333},{-180,-74},{-122,-74}}, + color={0,0,127})); + connect(reaScaRep.y[1], mul1[1].u2) annotation (Line(points={{-248,-70.6667}, + {-180,-70.6667},{-180,144},{-162,144}},color={0,0,127})); + connect(reaScaRep.y[2], mul1[2].u2) annotation (Line(points={{-248,-70},{-180, + -70},{-180,144},{-162,144}},color={0,0,127})); + connect(nexChiMaxFlo.y, mul1[2].u1) annotation (Line(points={{-198,150},{-180, + 150},{-180,156},{-162,156}}, color={0,0,127})); + connect(nexChiRat.y, mul1[1].u1) annotation (Line(points={{-198,190},{-180,190}, + {-180,156},{-162,156}}, color={0,0,127})); + connect(mul1[1].y, max.u2) annotation (Line(points={{-138,150},{-120,150},{-120, + 184},{-82,184}}, color={0,0,127})); + connect(mul1[2].y, add2.u2) annotation (Line(points={{-138,150},{-120,150},{-120, + 144},{-82,144}}, color={0,0,127})); + connect(nexChiMinFlo.y, mul3.u2) annotation (Line(points={{-198,-90},{-180,-90}, + {-180,-86},{-122,-86}}, color={0,0,127})); + connect(and2.y, or1.u1) annotation (Line(points={{-298,-250},{-270,-250},{-270, + -420},{-162,-420}}, color={255,0,255})); + connect(and3.y, or1.u2) annotation (Line(points={{-298,-290},{-260,-290},{-260, + -428},{-162,-428}}, color={255,0,255})); + connect(tim2.passed, or4.u1) annotation (Line(points={{-198,-258},{-120,-258}, + {-120,-350},{-100,-350}}, color={255,0,255})); + connect(tim1.passed, or4.u2) annotation (Line(points={{-198,-298},{-140,-298}, + {-140,-358},{-100,-358}}, color={255,0,255})); + connect(or1.y, or3.u1) annotation (Line(points={{-138,-420},{-100,-420},{-100, + -440},{-62,-440}}, color={255,0,255})); + connect(or4.y, or5.u1) annotation (Line(points={{-76,-350},{-30,-350},{-30,-370}, + {18,-370}}, color={255,0,255})); + connect(and1.y, or3.u2) annotation (Line(points={{-298,520},{-284,520},{-284,-448}, + {-62,-448}}, color={255,0,255})); + connect(tim.passed, or5.u2) annotation (Line(points={{-198,512},{-132,512},{-132, + -378},{18,-378}}, color={255,0,255})); + connect(or5.y, edg.u) + annotation (Line(points={{42,-370},{58,-370}}, color={255,0,255})); + connect(or3.y, logSwi.u2) + annotation (Line(points={{-38,-440},{118,-440}}, color={255,0,255})); + connect(edg.y, logSwi.u1) annotation (Line(points={{82,-370},{100,-370},{100, + -432},{118,-432}}, + color={255,0,255})); + connect(or3.y, notChaSet.u) annotation (Line(points={{-38,-440},{-20,-440},{-20, + -480},{20,-480}}, color={255,0,255})); + connect(notChaSet.y, logSwi.u3) annotation (Line(points={{44,-480},{100,-480}, + {100,-448},{118,-448}}, color={255,0,255})); + connect(or3.y, staChaSet.u) annotation (Line(points={{-38,-440},{-20,-440},{-20, + -500},{158,-500}}, color={255,0,255})); + connect(staChaSet.y, lat.clr) annotation (Line(points={{182,-500},{220,-500},{ + 220,-446},{238,-446}}, color={255,0,255})); + connect(lat.y, chaSetPro.u) + annotation (Line(points={{262,-440},{318,-440}}, color={255,0,255})); + connect(chaSetPro.y, yChaSet) + annotation (Line(points={{342,-440},{460,-440}}, color={255,0,255})); + connect(byPasSet1.y, byPasSet3.u1) annotation (Line(points={{422,240},{430,240}, + {430,180},{380,180},{380,128},{398,128}}, color={0,0,127})); + connect(inStaCha.y, byPasSet3.u2) + annotation (Line(points={{362,120},{398,120}}, color={255,0,255})); + connect(or2.y, inStaCha.u) + annotation (Line(points={{-378,120},{338,120}}, color={255,0,255})); + connect(byPasSet1.y, triSam1.u) annotation (Line(points={{422,240},{430,240},{ + 430,180},{320,180},{320,80},{338,80}}, color={0,0,127})); + connect(endSta.y, triSam1.trigger) + annotation (Line(points={{262,60},{350,60},{350,68}}, color={255,0,255})); + connect(or2.y, endSta.u) annotation (Line(points={{-378,120},{200,120},{200,60}, + {238,60}}, color={255,0,255})); + connect(endSta.y, inStaCha.clr) annotation (Line(points={{262,60},{300,60},{300, + 114},{338,114}}, color={255,0,255})); + connect(triSam1.y, byPasSet3.u3) annotation (Line(points={{362,80},{380,80},{380, + 112},{398,112}}, color={0,0,127})); + connect(byPasSet3.y, yChiWatMinFloSet) + annotation (Line(points={{422,120},{460,120}}, color={0,0,127})); + connect(logSwi.y, staChaSet1.u) + annotation (Line(points={{142,-440},{178,-440}}, color={255,0,255})); + connect(staChaSet1.y, lat.u) + annotation (Line(points={{202,-440},{238,-440}}, color={255,0,255})); +annotation ( + defaultComponentName="minChiFloSet", + Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Rectangle(extent={{-36,42},{0,28}}, lineColor={28,108,200}), + Rectangle(extent={{-36,28},{0,14}}, lineColor={28,108,200}), + Rectangle(extent={{-36,14},{0,0}}, lineColor={28,108,200}), + Rectangle(extent={{-36,0},{0,-14}}, lineColor={28,108,200}), + Rectangle(extent={{-36,-14},{0,-28}}, lineColor={28,108,200}), + Text( + extent={{-32,38},{-12,32}}, + textColor={28,108,200}, + textString="Stage #"), + Text( + extent={{-30,24},{-10,18}}, + textColor={28,108,200}, + textString="0"), + Text( + extent={{-30,10},{-10,4}}, + textColor={28,108,200}, + textString="1"), + Text( + extent={{-30,-4},{-10,-10}}, + textColor={28,108,200}, + textString="2"), + Rectangle(extent={{-36,-28},{0,-42}}, lineColor={28,108,200}), + Text( + extent={{-30,-18},{-10,-24}}, + textColor={28,108,200}, + textString="..."), + Text( + extent={{-30,-32},{-10,-38}}, + textColor={28,108,200}, + textString="n"), + Rectangle(extent={{2,42},{38,28}}, lineColor={28,108,200}), + Rectangle(extent={{2,28},{38,14}}, lineColor={28,108,200}), + Rectangle(extent={{2,14},{38,0}}, lineColor={28,108,200}), + Rectangle(extent={{2,0},{38,-14}}, lineColor={28,108,200}), + Rectangle(extent={{2,-14},{38,-28}}, lineColor={28,108,200}), + Text( + extent={{8,38},{34,32}}, + textColor={28,108,200}, + textString="Min flow"), + Text( + extent={{6,24},{34,18}}, + textColor={28,108,200}, + textString="minFloSet[1]"), + Rectangle(extent={{2,-28},{38,-42}}, lineColor={28,108,200}), + Text( + extent={{8,-18},{28,-24}}, + textColor={28,108,200}, + textString="..."), + Text( + extent={{6,10},{34,4}}, + textColor={28,108,200}, + textString="minFloSet[2]"), + Text( + extent={{6,-32},{34,-38}}, + textColor={28,108,200}, + textString="minFloSet[n]"), + Text( + extent={{6,-4},{34,-10}}, + textColor={28,108,200}, + textString="minFloSet[3]"), + Text( + extent={{-98,20},{-44,4}}, + textColor={255,127,0}, + textString="nexEnaChi"), + Text( + extent={{-98,0},{-44,-16}}, + textColor={255,127,0}, + textString="nexDisChi"), + Text( + extent={{-98,-82},{-52,-96}}, + textColor={255,0,255}, + textString="uStaDow"), + Text( + extent={{-102,-64},{-60,-76}}, + textColor={255,0,255}, + textString="uOnOff"), + Text( + extent={{-98,-32},{-52,-46}}, + textColor={255,0,255}, + textString="uSubCha"), + Text( + extent={{-98,98},{-58,84}}, + textColor={255,0,255}, + textString="uStaUp"), + Text( + extent={{-98,78},{-38,64}}, + textColor={255,0,255}, + textString="uUpsDevSta"), + Text( + extent={{-98,48},{-70,34}}, + textColor={255,0,255}, + textString="uChi"), + Text( + extent={{44,6},{98,-6}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiWatMinFloSet"), + Text( + extent={{58,-68},{96,-88}}, + textColor={255,0,255}, + textString="yChaSet")}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-440,-540},{440,540}}), graphics={ + Rectangle( + extent={{-398,498},{18,42}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-398,18},{18,-178}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-92,494},{14,478}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="Plant with parallel chillers"), + Text( + extent={{-80,22},{18,6}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="Plant with series chillers"), + Text( + extent={{-54,214},{18,198}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="Minimum flow setpoint when"), + Text( + extent={{-46,202},{18,188}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="enabling additional chiller"), + Text( + extent={{-34,102},{18,88}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="disabling one chiller"), + Text( + extent={{-54,114},{18,98}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="Minimum flow setpoint when"), + Text( + extent={{-38,-60},{26,-74}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="enabling additional chiller"), + Text( + extent={{-30,-142},{22,-156}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="disabling one chiller"), + Text( + extent={{-92,472},{10,456}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="Minimum flow setpoint according to"), + Text( + extent={{-54,460},{10,446}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="current chillers status"), + Text( + extent={{-88,402},{14,386}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="Minimum flow setpoint according to"), + Text( + extent={{-66,390},{14,376}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="chillers status at the moment"), + Text( + extent={{-62,380},{16,366}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="when requiring stage change"), + Text( + extent={{-38,4},{26,-10}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="current chillers status"), + Rectangle( + extent={{-438,-320},{238,-538}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{124,-330},{270,-350}}, + textColor={0,0,127}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Right, + textString="Check if it is in the setpoint changing process")}), + Documentation(info=" +

                      +Block that outputs chilled water minimum flow setpoint for primary-only +plants with a minimum flow bypass valve, +according to ASHRAE Guideline36-2021, +section 5.20.8 Chilled water minimum flow bypass valve. +

                      +

                      +1. For plants with parallel chillers, bypass valve shall modulate to maintain minimum +flow as measured by the chilled water flow meter at a setpoint that ensures minimum +flow through all operating chillers, as follows: +

                      +
                        +
                      • +For the operating chillers in current stage, identify the chiller with the +highest ratio of minFloSet to maxFloSet. +
                      • +
                      • +Calculate the minimum flow setpoint as the highest ratio multiplied by the sum +of maxFloSet for the operating chillers. +
                      • +
                      + + + + + + + + + + + + + + + + + + + + + +
                      Chiller Minimum flow Maximum flow
                      1minFloSet[1]maxFloSet[1]
                      2minFloSet[2]maxFloSet[2]
                      .........
                      +
                      + +

                      +2. For plants with series chillers, bypass valve shall modulate to maintain minimum +flow as measured by the chilled water flow meter at a setpoint equal to the largest +minFloSet of the operating chillers in current stage. +

                      +

                      +3. If there is any stage change requiring a chiller on and another chiller off, +the minimum flow setpoint shall temporarily change to account for the +minFloSet of both the chiller to be enabled and to be disabled +prior to starting the newly enabled chiller. +

                      +

                      +Note that when there is a stage change requiring a change in the +minimum flow setpoint, the change should be slowly. +For example, this could be accomplished by resetting the setpoint X GPM/second, +where X = (NewSetpoint - OldSetpoint) / byPasSetTim. +

                      +", revisions=" +
                        +
                      • +January 31, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end FlowSetpoint; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/Controller.mo new file mode 100644 index 00000000000..3071613bfd2 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/Controller.mo @@ -0,0 +1,106 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.Validation; +model Controller "Validate control of minimum bypass valve" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.Controller + minBypValCon( + nChi=3, + minFloSet={0.005,0.005,0.005}) + "Minimum bypass valve position" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse chiFloSet( + amplitude=-0.005, + period=3, + offset=0.015) + "Minimum flow setpoint" + annotation (Placement(transformation(extent={{-80,-82},{-60,-60}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiWatPum( + width=0.15, + period=4, + shift=0.1) + "Chilled water pump on command" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + Buildings.Controls.OBC.CDL.Logical.Not not4 "Logical not" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( + amplitude=0.0025, + freqHz=1/2, + offset=0.005) + "Output sine wave value" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( + height=0.015, + duration=2, + startTime=1.2) + "Output ramp value" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Add add2 + "Measured minimum bypass flow rate" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + +equation + connect(chiWatPum.y, not4.u) + annotation (Line(points={{-58,60},{-42,60}}, color={255,0,255})); + connect(not4.y, minBypValCon.uChiWatPum) + annotation (Line(points={{-18,60},{20,60},{20,8},{38,8}}, + color={255,0,255})); + connect(sin.y, add2.u1) + annotation (Line(points={{-58,20},{-40,20},{-40,6},{-22,6}}, + color={0,0,127})); + connect(ram.y, add2.u2) + annotation (Line(points={{-58,-20},{-40,-20},{-40,-6},{-22,-6}}, + color={0,0,127})); + connect(add2.y, minBypValCon.VChiWat_flow) + annotation (Line(points={{2,0},{38,0}}, + color={0,0,127})); + connect(chiFloSet.y, minBypValCon.VChiWatSet_flow) + annotation (Line(points={{-58,-71},{20,-71},{20,-8},{38,-8}}, color={0,0,127})); + +annotation ( + experiment(StopTime=4.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/Controller.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.Controller. +It demonstrates the bypass valve control to maintain the minimum +chilled water flow through the chillers. +

                      +
                        +
                      • +From 0.1 seconds to 0.7 seconds, there is no chilled water pump proven on +(uChiWatPum=false). Thus the bypass valve position setpoint +is 1. +
                      • +
                      • +From 0.7 seconds to the end, there is chilled water pump proven on. +When the measured chilled water flow is less than the setpoint, the +bypass valve position setpoint is 1. After the measured chilled water +flow is greater than the setpoint, the bypass valve setpoint gradually +decreases. +
                      • +
                      +", revisions=" +
                        +
                      • +March 28, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/FlowSetpoint.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/FlowSetpoint.mo new file mode 100644 index 00000000000..366299b9dda --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/FlowSetpoint.mo @@ -0,0 +1,255 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.Validation; +model FlowSetpoint + "Validation sequence of specifying minimum bypass flow setpoint" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.FlowSetpoint + staUp( + nChi=3, + byPasSetTim=1.5) + "Minimum flow setpoint when there is stage up command" + annotation (Placement(transformation(extent={{120,170},{140,190}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.FlowSetpoint + onOffStaUp( + nChi=3, + byPasSetTim=1.5) + "Minimum flow setpoint when there is stage up command and the change requires one chiller off and another chiller on" + annotation (Placement(transformation(extent={{120,-10},{140,10}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.FlowSetpoint + staDow( + nChi=3, + byPasSetTim=1.5) + "Minimum flow setpoint when there is stage down command" + annotation (Placement(transformation(extent={{120,-170},{140,-150}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Constant noOnOff( + final k=false) + "No chiller on/off during the stage change" + annotation (Placement(transformation(extent={{-140,50},{-120,70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse staCha( + final width=0.25, + final period=4) "Stage up command" + annotation (Placement(transformation(extent={{-140,190},{-120,210}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse upDev( + final width=0.3, + final period=4) + "Status of upflow device" + annotation (Placement(transformation(extent={{-140,160},{-120,180}}))); + Buildings.Controls.OBC.CDL.Reals.Switch enaChi "Next enabling chiller" + annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant noStaCha( + final k=false) "No stage change" + annotation (Placement(transformation(extent={{-140,10},{-120,30}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-100,190},{-80,210}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" + annotation (Placement(transformation(extent={{-100,160},{-80,180}}))); + Buildings.Controls.OBC.CDL.Reals.Switch disChi "Disabling chiller" + annotation (Placement(transformation(extent={{-40,-130},{-20,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant haveOnOff( + final k=true) + "Have chiller on/off during the stage change" + annotation (Placement(transformation(extent={{-140,-70},{-120,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse enaNexChi( + final width=0.8, + final period=4) + "Enable next chiller" + annotation (Placement(transformation(extent={{-140,-30},{-120,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Not not3 "Logical not" + annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( + final k=3) "Index of enabling chiller" + annotation (Placement(transformation(extent={{-140,110},{-120,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( + final k=0) "Zero" + annotation (Placement(transformation(extent={{-140,-190},{-120,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( + final k=2) "Index of disabling chiller" + annotation (Placement(transformation(extent={{-140,-110},{-120,-90}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real input to integer output" + annotation (Placement(transformation(extent={{0,90},{20,110}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real input to integer output" + annotation (Placement(transformation(extent={{0,-130},{20,-110}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 + "Convert real input to integer output" + annotation (Placement(transformation(extent={{0,-190},{20,-170}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiSta[3]( + final k={true,true,false}) + "Current chiller status" + annotation (Placement(transformation(extent={{-40,130},{-20,150}}))); + +equation + connect(noOnOff.y, staUp.uOnOff) + annotation (Line(points={{-118,60},{76,60},{76,173},{118,173}}, + color={255,0,255})); + connect(noStaCha.y, staUp.uStaDow) + annotation (Line(points={{-118,20},{92,20},{92,171},{118,171}}, + color={255,0,255})); + connect(staCha.y, not1.u) + annotation (Line(points={{-118,200},{-102,200}}, color={255,0,255})); + connect(upDev.y, not2.u) + annotation (Line(points={{-118,170},{-102,170}}, color={255,0,255})); + connect(not1.y,enaChi. u2) + annotation (Line(points={{-78,200},{-60,200},{-60,100},{-42,100}}, + color={255,0,255})); + connect(not1.y, staUp.uStaUp) + annotation (Line(points={{-78,200},{68,200},{68,189},{118,189}}, + color={255,0,255})); + connect(not2.y, staUp.uUpsDevSta) + annotation (Line(points={{-78,170},{72,170},{72,187},{118,187}}, + color={255,0,255})); + connect(not1.y, disChi.u2) + annotation (Line(points={{-78,200},{-60,200},{-60,-120},{-42,-120}}, + color={255,0,255})); + connect(noOnOff.y, staDow.uOnOff) + annotation (Line(points={{-118,60},{76,60},{76,-167},{118,-167}}, + color={255,0,255})); + connect(noStaCha.y, staDow.uStaUp) + annotation (Line(points={{-118,20},{92,20},{92,-151},{118,-151}}, + color={255,0,255})); + connect(not2.y, staDow.uUpsDevSta) + annotation (Line(points={{-78,170},{72,170},{72,-153},{118,-153}}, + color={255,0,255})); + connect(not1.y, staDow.uStaDow) + annotation (Line(points={{-78,200},{68,200},{68,-169},{118,-169}}, + color={255,0,255})); + connect(not1.y, onOffStaUp.uStaUp) + annotation (Line(points={{-78,200},{68,200},{68,9},{118,9}}, + color={255,0,255})); + connect(not2.y, onOffStaUp.uUpsDevSta) + annotation (Line(points={{-78,170},{72,170},{72,7},{118,7}}, + color={255,0,255})); + connect(haveOnOff.y, onOffStaUp.uOnOff) + annotation (Line(points={{-118,-60},{40,-60},{40,-7},{118,-7}}, + color={255,0,255})); + connect(noStaCha.y, onOffStaUp.uStaDow) + annotation (Line(points={{-118,20},{0,20},{0,-9},{118,-9}}, + color={255,0,255})); + connect(con.y, enaChi.u1) + annotation (Line(points={{-118,120},{-100,120},{-100,108},{-42,108}}, + color={0,0,127})); + connect(con1.y, disChi.u1) + annotation (Line(points={{-118,-100},{-100,-100},{-100,-112},{-42,-112}}, + color={0,0,127})); + connect(zer.y, enaChi.u3) + annotation (Line(points={{-118,-180},{-64,-180},{-64,92},{-42,92}}, + color={0,0,127})); + connect(zer.y, disChi.u3) + annotation (Line(points={{-118,-180},{-64,-180},{-64,-128},{-42,-128}}, + color={0,0,127})); + connect(enaChi.y, reaToInt.u) + annotation (Line(points={{-18,100},{-2,100}}, color={0,0,127})); + connect(disChi.y, reaToInt1.u) + annotation (Line(points={{-18,-120},{-2,-120}}, color={0,0,127})); + connect(zer.y, reaToInt2.u) + annotation (Line(points={{-118,-180},{-60,-180},{-60,-180},{-2,-180}}, + color={0,0,127})); + connect(chiSta.y, staUp.uChi) + annotation (Line(points={{-18,140},{80,140},{80,184},{118,184}}, + color={255,0,255})); + connect(chiSta.y, onOffStaUp.uChi) + annotation (Line(points={{-18,140},{80,140},{80,4},{118,4}}, + color={255,0,255})); + connect(chiSta.y, staDow.uChi) + annotation (Line(points={{-18,140},{80,140},{80,-156},{118,-156}}, + color={255,0,255})); + connect(reaToInt.y, staUp.nexEnaChi) + annotation (Line(points={{22,100},{88,100},{88,181},{118,181}}, + color={255,127,0})); + connect(reaToInt2.y, staUp.nexDisChi) + annotation (Line(points={{22,-180},{84,-180},{84,179},{118,179}}, + color={255,127,0})); + connect(reaToInt2.y, staDow.nexEnaChi) + annotation (Line(points={{22,-180},{84,-180},{84,-159},{118,-159}}, + color={255,127,0})); + connect(reaToInt1.y, staDow.nexDisChi) + annotation (Line(points={{22,-120},{88,-120},{88,-161},{118,-161}}, + color={255,127,0})); + connect(reaToInt.y, onOffStaUp.nexEnaChi) + annotation (Line(points={{22,100},{88,100},{88,1},{118,1}}, + color={255,127,0})); + connect(reaToInt1.y, onOffStaUp.nexDisChi) + annotation (Line(points={{22,-120},{88,-120},{88,-1},{118,-1}}, + color={255,127,0})); + connect(enaNexChi.y, not3.u) + annotation (Line(points={{-118,-20},{-102,-20}}, color={255,0,255})); + connect(noOnOff.y, staUp.uSubCha) annotation (Line(points={{-118,60},{ + 76,60},{76,176},{118,176}}, color={255,0,255})); + connect(noOnOff.y, staDow.uSubCha) annotation (Line(points={{-118,60},{ + 76,60},{76,-164},{118,-164}}, color={255,0,255})); + connect(not3.y, onOffStaUp.uSubCha) annotation (Line(points={{-78,-20}, + {20,-20},{20,-4},{118,-4}}, color={255,0,255})); + +annotation ( + experiment(StopTime=4.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/FlowSetpoint.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.FlowSetpoint. +It shows the calculation of the minimum chilled waterflow through +the operating chillers. +

                      +

                      +It includes three instances staUp, staDow, +and onOffStaUp that shows the minimum chilled waterflow +setpoint when the plant is stageing up, staging down, and staging up +with one chiller being enabled and another one chiller being disabled. +

                      +
                        +
                      • +For instance staUp, the plant stages up at moment 1 second, +It stages up from chiller 1 and 2, to also enable chiller 3. +When in the staging process all the up devices has been controlled +uUpsDevSta=true at 1.2 seconds, the minimum flow +setpoint changes from 0.01 m3/s (sum of minimum flow of chiller 1 and 2) +to 0.015 m3/s (sum of minium flow of all chillers). The staging process +takes 1.5 seconds (byPasSetTim). +
                      • +
                      • +For instance onOffStaUp, the plant stages up at moment 1 seconds. +It enables chiller 3 and disables chiller 2. +When in the staging process all the up devices has been controlled +uUpsDevSta=true at 1.2 seconds, the minimum flow +setpoint changes from 0.01 m3/s (sum of minimum flow of chiller 1 and 2) +to 0.015 m3/s (sum of minium flow of all chillers) at 2.7 seconds. +When the chiller staging process are done (uSubCha=true), the +minimum flow setpoint changes back to 0.01 m3/s (sum of minimum flow of +chiller 1 and 3). +
                      • +
                      • +For instance staDow, the plant stages down at moment 1 second. +It stages down from chiller 1 and 2, to disable chiller 2. +When in the staging process all the up devices has been controlled +uUpsDevSta=true at 1.2 seconds, the minimum flow +setpoint changes from 0.01 m3/s (sum of minimum flow of chiller 1 and 2) +to 0.005 m3/s (minium flow of chiller 1). The staging process +takes 1.5 seconds (byPasSetTim). +
                      • +
                      +", revisions=" +
                        +
                      • +March 28, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-160,-220},{160, + 220}}))); +end FlowSetpoint; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/package.mo new file mode 100644 index 00000000000..fdc1f0fd350 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/package.mo @@ -0,0 +1,29 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass; +package Validation "Collection of validation models" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/package.order new file mode 100644 index 00000000000..963d7cb2bbf --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/package.order @@ -0,0 +1,2 @@ +Controller +FlowSetpoint diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/package.mo new file mode 100644 index 00000000000..cfce18c7f18 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/package.mo @@ -0,0 +1,44 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant; +package MinimumFlowBypass "Sequences for controlling chilled water minimum flow bypass valve" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains chilled water minimum flow bypass valve control sequences. +The implementation is based on section 5.20.8. in ASHRAE Guideline36-2021. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end MinimumFlowBypass; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/package.order new file mode 100644 index 00000000000..f9fe0732435 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/package.order @@ -0,0 +1,3 @@ +Controller +FlowSetpoint +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Controller.mo new file mode 100644 index 00000000000..bc739f1e489 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Controller.mo @@ -0,0 +1,671 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater; +block Controller + "Sequences to control chilled water pumps in primary-only plant system" + + parameter Boolean have_heaPum = true + "Flag of headered chilled water pumps design: true=headered, false=dedicated"; + parameter Boolean have_locSen = false + "Flag of local DP sensor: true=local DP sensor hardwired to controller"; + parameter Boolean have_WSE = false + "True: the plant has waterside economizer"; + parameter Integer nPum = 2 + "Total number of chilled water pumps"; + parameter Integer nChi = 2 + "Total number of chillers"; + parameter Integer nSen=2 + "Total number of remote differential pressure sensors"; + parameter Real minPumSpe=0.1 "Minimum pump speed"; + parameter Real maxPumSpe=1 "Maximum pump speed"; + parameter Integer nPum_nominal( + final max=nPum, + final min=1)=nPum + "Total number of pumps that operate at design conditions" + annotation (Dialog(group="Nominal conditions")); + parameter Real VChiWat_flow_nominal( + final unit="m3/s", + final quantity="VolumeFlowRate", + final min=1e-6)=0.5 + "Total plant design chilled water flow rate" + annotation (Dialog(group="Nominal conditions")); + parameter Real maxLocDp( + final unit="Pa", + final quantity="PressureDifference")=15*6894.75 + "Maximum chilled water loop local differential pressure setpoint" + annotation (Dialog(group="Pump speed control when there is local DP sensor", enable=have_locSen)); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(group="Speed controller")); + parameter Real k=1 "Gain of controller" + annotation (Dialog(group="Speed controller")); + parameter Real Ti( + final unit="s", + final quantity="Time", + displayUnit="s")=0.5 "Time constant of integrator block" + annotation (Dialog(group="Speed controller")); + parameter Real Td( + final unit="s", + final quantity="Time", + displayUnit="s")=0.1 "Time constant of derivative block" + annotation (Dialog(group="Speed controller", + enable= + controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uPumLeaLag[nPum] if have_heaPum + "Index of chilled water pumps in lead-lag order: lead pump, first lag pump, second lag pump, etc." + annotation (Placement(transformation(extent={{-320,210},{-280,250}}), + iconTransformation(extent={{-140,90},{-100,130}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla if not have_heaPum + "True: plant is enabled" + annotation (Placement(transformation(extent={{-320,170},{-280,210}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum[nPum] + "Chilled water pumps proven on status" + annotation (Placement(transformation(extent={{-320,130},{-280,170}}), + iconTransformation(extent={{-140,50},{-100,90}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiEna if not have_heaPum + "Lead chiller enabling status" + annotation (Placement(transformation(extent={{-320,100},{-280,140}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiSta if not have_heaPum + "Lead chiller proven on status" + annotation (Placement(transformation(extent={{-320,70},{-280,110}}), + iconTransformation(extent={{-140,10},{-100,50}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiWatReq + if not have_heaPum + "Status indicating if lead chiller is requesting chilled water" + annotation (Placement(transformation(extent={{-320,40},{-280,80}}), + iconTransformation(extent={{-140,-10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWse if have_heaPum and have_WSE + "True: the plant has waterside economizer" + annotation (Placement(transformation(extent={{-320,-20},{-280,20}}), + iconTransformation(extent={{-140,-30},{-100,10}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiWatIsoVal[nChi]( + final unit=fill("1", nChi), + final min=fill(0, nChi), + final max=fill(1, nChi)) if have_heaPum + "Chilled water isolation valve position" + annotation (Placement(transformation(extent={{-320,10},{-280,50}}), + iconTransformation(extent={{-140,-50},{-100,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( + final unit="m3/s") if have_heaPum + "Chilled water flow" + annotation (Placement(transformation(extent={{-320,-70},{-280,-30}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat_local( + final unit="Pa", + final quantity="PressureDifference") if have_locSen + "Chilled water differential static pressure from local sensor" + annotation (Placement(transformation(extent={{-320,-180},{-280,-140}}), + iconTransformation(extent={{-140,-90},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat_remote[nSen]( + final unit=fill("Pa", nSen), + final quantity=fill("PressureDifference", nSen)) + "Chilled water differential static pressure from remote sensor" + annotation (Placement(transformation(extent={{-320,-220},{-280,-180}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatSet_remote[nSen]( + final unit=fill("Pa", nSen), + final quantity=fill("PressureDifference",nSen)) + "Chilled water differential static pressure setpoint" + annotation (Placement(transformation(extent={{-320,-270},{-280,-230}}), + iconTransformation(extent={{-140,-130},{-100,-90}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLea + "Lead pump status setpoint" + annotation (Placement(transformation(extent={{280,60},{320,100}}), + iconTransformation(extent={{100,60},{140,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChiWatPum[nPum] + if have_heaPum + "Chilled water pump status setpoint" + annotation (Placement(transformation(extent={{280,20},{320,60}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yPumSpe( + final min=0, + final max=1, + final unit="1") "Enabled chilled water pump speed" + annotation (Placement(transformation(extent={{280,-220},{320,-180}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput dpChiWatPumSet_local( + final quantity="PressureDifference", + final unit="Pa", + displayUnit="Pa") if have_locSen + "Local differential pressure setpoint" + annotation (Placement(transformation(extent={{280,-260},{320,-220}}), + iconTransformation(extent={{100,-110},{140,-70}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.EnableLead_dedicated + enaDedLeaPum if not have_heaPum + "Enable lead pump of dedicated pumps" + annotation (Placement(transformation(extent={{-200,100},{-180,120}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.EnableLead_headered + enaHeaLeaPum(final nChi=nChi, final have_WSE=have_WSE) + if have_heaPum + "Enable lead pump of headered pumps" + annotation (Placement(transformation(extent={{-200,60},{-180,80}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.EnableLag_primary_dP + enaLagChiPum( + final nPum=nPum, + final nPum_nominal=nPum_nominal, + final VChiWat_flow_nominal=VChiWat_flow_nominal) if have_heaPum + "Enable lag pump for primary-only plants using differential pressure pump speed control" + annotation (Placement(transformation(extent={{-240,-26},{-220,-6}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Speed_primary_localDp + pumSpeLocDp( + final nSen=nSen, + final nPum=nPum, + final minLocDp=minLocDp, + final maxLocDp=maxLocDp, + final minPumSpe=minPumSpe, + final maxPumSpe=maxPumSpe, + final controllerType=controllerType, + final k=k, + final Ti=Ti, + final Td=Td) if have_locSen + "Chilled water pump speed control with local DP sensor" + annotation (Placement(transformation(extent={{0,-220},{20,-200}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Speed_primary_remoteDp + pumSpeRemDp( + final nSen=nSen, + final nPum=nPum, + final minPumSpe=minPumSpe, + final maxPumSpe=maxPumSpe, + final controllerType=controllerType, + final k=k, + final Ti=Ti, + final Td=Td) if not have_locSen + "Chilled water pump speed control with remote DP sensor" + annotation (Placement(transformation(extent={{-60,-250},{-40,-230}}))); + +protected + final parameter Real minLocDp( + final unit="Pa", + final quantity="PressureDifference")=5*6894.75 + "Minimum chilled water loop local differential pressure setpoint" + annotation (Dialog(group="Pump speed control when there is local DP sensor", enable=have_locSen)); + final parameter Integer pumInd[nPum]={i for i in 1:nPum} + "Pump index, {1,2,...,n}"; + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=1) if have_heaPum + "Constant one" + annotation (Placement(transformation(extent={{-220,190},{-200,210}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep( + final nout=nPum) if have_heaPum + "Replicate integer input" + annotation (Placement(transformation(extent={{0,220},{20,240}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=nPum) if have_heaPum + "Replicate boolean input" + annotation (Placement(transformation(extent={{0,90},{20,110}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep1( + final nout=nPum) if have_heaPum + "Replicate integer input" + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep1( + final nout=nPum) if have_heaPum + "Replicate boolean input" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep2( + final nout=nPum) if have_heaPum + "Replicate integer input" + annotation (Placement(transformation(extent={{20,-100},{40,-80}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep2( + final nout=nPum) if have_heaPum + "Replicate boolean input" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea[nPum] + if have_heaPum + "Convert integer to real number" + annotation (Placement(transformation(extent={{-220,220},{-200,240}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor leaPum( + final nin=nPum) if have_heaPum + "Lead pump index" + annotation (Placement(transformation(extent={{-80,220},{-60,240}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt if have_heaPum + "Convert real input to integer output" + annotation (Placement(transformation(extent={{-40,220},{-20,240}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant pumIndCon[nPum]( + final k=pumInd) if have_heaPum + "Pump index array" + annotation (Placement(transformation(extent={{-220,160},{-200,180}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu1[nPum] if have_heaPum + "Check lead pump" + annotation (Placement(transformation(extent={{60,180},{80,200}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor nexLagPum( + final nin=nPum) if have_heaPum + "Next lag pump" + annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 if have_heaPum + "Convert real input to integer output" + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu2[nPum] if have_heaPum + "Check next lag pump" + annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor lasLagPum( + final nin=nPum) if have_heaPum + "Last lag pump" + annotation (Placement(transformation(extent={{-80,-100},{-60,-80}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 if have_heaPum + "Convert real input to integer output" + annotation (Placement(transformation(extent={{-50,-100},{-30,-80}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu3[nPum] if have_heaPum + "Check next lag pump" + annotation (Placement(transformation(extent={{60,-100},{80,-80}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[nPum] + if have_heaPum + "Convert boolean to integer" + annotation (Placement(transformation(extent={{-240,-130},{-220,-110}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum mulSumInt( + final nin=nPum) if have_heaPum + "Sum of integer inputs" + annotation (Placement(transformation(extent={{-200,-130},{-180,-110}}))); + Buildings.Controls.OBC.CDL.Integers.Add addInt if have_heaPum + "Integer add" + annotation (Placement(transformation(extent={{-140,-80},{-120,-60}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu4[nPum] if have_heaPum + "Check if all the pumps have achieved the setpoint status" + annotation (Placement(transformation(extent={{-200,-80},{-180,-60}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1[nPum] if have_heaPum + "Convert boolean to integer" + annotation (Placement(transformation(extent={{-240,-80},{-220,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre1[nPum] if have_heaPum + "Breaks algebraic loops" + annotation (Placement(transformation(extent={{220,-130},{240,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Switch leaPumSta[nPum] if have_heaPum + "Lead pump status" + annotation (Placement(transformation(extent={{120,180},{140,200}}))); + Buildings.Controls.OBC.CDL.Logical.Switch nexLagPumSta[nPum] if have_heaPum + "Next lag pump status" + annotation (Placement(transformation(extent={{120,-40},{140,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Switch lasLagPumSta[nPum] if have_heaPum + "Last lag pump status" + annotation (Placement(transformation(extent={{120,-100},{140,-80}}))); + Buildings.Controls.OBC.CDL.Logical.Or enaPum[nPum] if have_heaPum + "Chilled water pump status" + annotation (Placement(transformation(extent={{180,-40},{200,-20}}))); + Buildings.Controls.OBC.CDL.Logical.And pumSta[nPum] if have_heaPum + "Chilled water pump status" + annotation (Placement(transformation(extent={{180,-100},{200,-80}}))); + Buildings.Controls.OBC.CDL.Logical.Switch addPum[nPum] if have_heaPum + "Add pump" + annotation (Placement(transformation(extent={{240,-10},{260,10}}))); + Buildings.Controls.OBC.CDL.Logical.Switch remPum[nPum] if have_heaPum + "Remove pump" + annotation (Placement(transformation(extent={{220,-80},{240,-60}}))); + Buildings.Controls.OBC.CDL.Logical.MultiAnd mulAnd( + final nin=nPum) if have_heaPum + "Check if all the pumps have achieved the setpoint status" + annotation (Placement(transformation(extent={{-140,-30},{-120,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Latch enaNexLag if have_heaPum + "Hold the enabling signal till the pump is proven on" + annotation (Placement(transformation(extent={{0,20},{20,40}}))); + Buildings.Controls.OBC.CDL.Logical.Latch disLasLag if have_heaPum + "Hold the disabling signal till the pump is proven off" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 if have_heaPum + "Logical not" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Buildings.Controls.OBC.CDL.Logical.And pumSta1[nPum] if have_heaPum + "Chilled water pump status" + annotation (Placement(transformation(extent={{240,30},{260,50}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr( + final nin=nPum) + "Check if there is any enabled pump" + annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2 + "Check if the lead pump is enabled" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr if have_heaPum + "Check if there is any pump running" + annotation (Placement(transformation(extent={{-160,-170},{-140,-150}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1(final k=1) + if have_heaPum + "Dummy index" + annotation (Placement(transformation(extent={{-200,-190},{-180,-170}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi if have_heaPum + "Output 1 when there is no pump running, to avoid warning downstream" + annotation (Placement(transformation(extent={{-100,-170},{-80,-150}}))); + Buildings.Controls.OBC.CDL.Integers.Multiply mulInt if have_heaPum + "Output zero when there is no pump running" + annotation (Placement(transformation(extent={{-10,-100},{10,-80}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt2 + if have_heaPum + "Convert boolean to integer" + annotation (Placement(transformation(extent={{-50,-130},{-30,-110}}))); + +equation + connect(enaDedLeaPum.uLeaChiEna, uLeaChiEna) + annotation (Line(points={{-202,113},{-250,113},{-250,120},{-300,120}}, + color={255,0,255})); + connect(enaDedLeaPum.uLeaChiSta, uLeaChiSta) + annotation (Line(points={{-202,107},{-240,107},{-240,90},{-300,90}}, + color={255,0,255})); + connect(enaDedLeaPum.uLeaChiWatReq, uLeaChiWatReq) + annotation (Line(points={{-202,102},{-230,102},{-230,60},{-300,60}}, + color={255,0,255})); + connect(uPumLeaLag, intToRea.u) + annotation (Line(points={{-300,230},{-222,230}}, color={255,127,0})); + connect(intToRea.y, leaPum.u) + annotation (Line(points={{-198,230},{-82,230}}, color={0,0,127})); + connect(conInt.y, leaPum.index) + annotation (Line(points={{-198,200},{-70,200},{-70,218}}, color={255,127,0})); + connect(leaPum.y, reaToInt.u) + annotation (Line(points={{-58,230},{-42,230}},color={0,0,127})); + connect(reaToInt.y, intRep.u) + annotation (Line(points={{-18,230},{-2,230}}, color={255,127,0})); + connect(intRep.y, intEqu1.u1) + annotation (Line(points={{22,230},{30,230},{30,190},{58,190}}, color={255,127,0})); + connect(pumIndCon.y, intEqu1.u2) + annotation (Line(points={{-198,170},{50,170},{50,182},{58,182}}, + color={255,127,0})); + connect(intEqu1.y, leaPumSta.u2) + annotation (Line(points={{82,190},{118,190}}, color={255,0,255})); + connect(uChiWatPum, leaPumSta.u3) + annotation (Line(points={{-300,150},{100,150},{100,182},{118,182}}, + color={255,0,255})); + connect(booRep.y, leaPumSta.u1) + annotation (Line(points={{22,100},{90,100},{90,198},{118,198}}, + color={255,0,255})); + connect(intToRea.y, nexLagPum.u) + annotation (Line(points={{-198,230},{-160,230},{-160,-50},{-82,-50}}, + color={0,0,127})); + connect(nexLagPum.y, reaToInt1.u) + annotation (Line(points={{-58,-50},{-42,-50}}, color={0,0,127})); + connect(reaToInt1.y, intRep1.u) + annotation (Line(points={{-18,-50},{-2,-50}}, color={255,127,0})); + connect(intRep1.y, intEqu2.u2) + annotation (Line(points={{22,-50},{40,-50},{40,-38},{58,-38}}, color={255,127,0})); + connect(pumIndCon.y, intEqu2.u1) + annotation (Line(points={{-198,170},{50,170},{50,-30},{58,-30}}, + color={255,127,0})); + connect(intEqu2.y, nexLagPumSta.u2) + annotation (Line(points={{82,-30},{118,-30}}, color={255,0,255})); + connect(booRep1.y, nexLagPumSta.u1) + annotation (Line(points={{82,30},{110,30},{110,-22},{118,-22}}, + color={255,0,255})); + connect(uChiWatPum, nexLagPumSta.u3) + annotation (Line(points={{-300,150},{100,150},{100,-38},{118,-38}}, + color={255,0,255})); + connect(lasLagPum.y, reaToInt2.u) + annotation (Line(points={{-58,-90},{-52,-90}}, color={0,0,127})); + connect(intRep2.y, intEqu3.u2) + annotation (Line(points={{42,-90},{46,-90},{46,-98},{58,-98}}, + color={255,127,0})); + connect(pumIndCon.y, intEqu3.u1) + annotation (Line(points={{-198,170},{50,170},{50,-90},{58,-90}}, + color={255,127,0})); + connect(intEqu3.y, lasLagPumSta.u2) + annotation (Line(points={{82,-90},{118,-90}}, color={255,0,255})); + connect(enaLagChiPum.VChiWat_flow, VChiWat_flow) + annotation (Line(points={{-242,-12},{-250,-12},{-250,-50},{-300,-50}}, + color={0,0,127})); + connect(uChiWatPum, enaLagChiPum.uChiWatPum) + annotation (Line(points={{-300,150},{-260,150},{-260,-19.8},{-242,-19.8}}, + color={255,0,255})); + connect(intToRea.y, lasLagPum.u) + annotation (Line(points={{-198,230},{-160,230},{-160,-90},{-82,-90}}, + color={0,0,127})); + connect(booRep2.y, lasLagPumSta.u1) + annotation (Line(points={{82,0},{90,0},{90,-82},{118,-82}}, + color={255,0,255})); + connect(uChiWatPum, lasLagPumSta.u3) + annotation (Line(points={{-300,150},{100,150},{100,-98},{118,-98}}, + color={255,0,255})); + connect(nexLagPumSta.y,enaPum. u2) + annotation (Line(points={{142,-30},{150,-30},{150,-38},{178,-38}}, + color={255,0,255})); + connect(leaPumSta.y,enaPum. u1) + annotation (Line(points={{142,190},{160,190},{160,-30},{178,-30}}, + color={255,0,255})); + connect(pumSpeLocDp.dpChiWat_local, dpChiWat_local) + annotation (Line(points={{-2,-202},{-240,-202},{-240,-160},{-300,-160}}, + color={0,0,127})); + connect(pumSpeLocDp.dpChiWat_remote, dpChiWat_remote) + annotation (Line(points={{-2,-214},{-270,-214},{-270,-200},{-300,-200}}, + color={0,0,127})); + connect(pumSpeLocDp.dpChiWatSet_remote, dpChiWatSet_remote) annotation (Line( + points={{-2,-218},{-220,-218},{-220,-250},{-300,-250}}, color={0,0,127})); + connect(dpChiWat_remote, pumSpeRemDp.dpChiWat_remote) annotation (Line(points={{-300, + -200},{-270,-200},{-270,-240},{-62,-240}}, color={0,0,127})); + connect(dpChiWatSet_remote, pumSpeRemDp.dpChiWatSet_remote) annotation (Line( + points={{-300,-250},{-220,-250},{-220,-248},{-62,-248}}, color={0,0,127})); + connect(enaPum.y, pumSta.u2) + annotation (Line(points={{202,-30},{210,-30},{210,-50},{150,-50},{150,-98}, + {178,-98}}, color={255,0,255})); + connect(lasLagPumSta.y, pumSta.u1) + annotation (Line(points={{142,-90},{178,-90}}, color={255,0,255})); + connect(booRep2.y, remPum.u2) + annotation (Line(points={{82,0},{90,0},{90,-70},{218,-70}}, + color={255,0,255})); + connect(pumSta.y, remPum.u3) + annotation (Line(points={{202,-90},{210,-90},{210,-78},{218,-78}}, + color={255,0,255})); + connect(leaPumSta.y, remPum.u1) + annotation (Line(points={{142,190},{160,190},{160,-62},{218,-62}}, color={255,0,255})); + connect(enaPum.y, addPum.u1) + annotation (Line(points={{202,-30},{210,-30},{210,8},{238,8}}, color={255,0,255})); + connect(booRep1.y, addPum.u2) + annotation (Line(points={{82,30},{110,30},{110,0},{238,0}}, color={255,0,255})); + connect(remPum.y, addPum.u3) + annotation (Line(points={{242,-70},{250,-70},{250,-20},{220,-20},{220,-8}, + {238,-8}}, color={255,0,255})); + connect(uChiWatPum, booToInt.u) + annotation (Line(points={{-300,150},{-260,150},{-260,-120},{-242,-120}}, + color={255,0,255})); + connect(booToInt.y, mulSumInt.u) + annotation (Line(points={{-218,-120},{-202,-120}}, color={255,127,0})); + connect(addInt.y, nexLagPum.index) + annotation (Line(points={{-118,-70},{-70,-70},{-70,-62}},color={255,127,0})); + connect(mulSumInt.y, addInt.u2) + annotation (Line(points={{-178,-120},{-170,-120},{-170,-76},{-142,-76}}, + color={255,127,0})); + connect(conInt.y, addInt.u1) + annotation (Line(points={{-198,200},{-150,200},{-150,-64},{-142,-64}}, + color={255,127,0})); + connect(enaDedLeaPum.uPla, uPla) + annotation (Line(points={{-202,118},{-240,118},{-240,190},{-300,190}}, + color={255,0,255})); + connect(uChiWatPum, pumSpeLocDp.uChiWatPum) annotation (Line(points={{-300,150}, + {-260,150},{-260,-206},{-2,-206}}, color={255,0,255})); + connect(uChiWatPum, pumSpeRemDp.uChiWatPum) annotation (Line(points={{-300,150}, + {-260,150},{-260,-232},{-62,-232}}, color={255,0,255})); + connect(pumSpeLocDp.yChiWatPumSpe, yPumSpe) + annotation (Line(points={{22,-210},{162,-210},{162,-200},{300,-200}}, + color={0,0,127})); + connect(pumSpeRemDp.yChiWatPumSpe, yPumSpe) annotation (Line(points={{-39,-240}, + {40,-240},{40,-200},{300,-200}}, color={0,0,127})); + connect(enaLagChiPum.yUp, enaNexLag.u) annotation (Line(points={{-218,-12},{-196, + -12},{-196,30},{-2,30}}, + color={255,0,255})); + connect(enaNexLag.y, booRep1.u) + annotation (Line(points={{22,30},{58,30}}, color={255,0,255})); + connect(booToInt1.y, intEqu4.u1) + annotation (Line(points={{-218,-70},{-202,-70}}, color={255,127,0})); + connect(booToInt.y, intEqu4.u2) annotation (Line(points={{-218,-120},{-210,-120}, + {-210,-78},{-202,-78}}, color={255,127,0})); + connect(intEqu4.y, mulAnd.u) annotation (Line(points={{-178,-70},{-170,-70},{-170, + -20},{-142,-20}}, color={255,0,255})); + connect(disLasLag.y, not2.u) + annotation (Line(points={{-18,0},{-2,0}}, color={255,0,255})); + connect(not2.y, booRep2.u) + annotation (Line(points={{22,0},{58,0}}, color={255,0,255})); + connect(pumSpeLocDp.dpChiWatPumSet_local, dpChiWatPumSet_local) annotation ( + Line(points={{22,-216},{200,-216},{200,-240},{300,-240}}, color={0,0,127})); + connect(booRep.y, pumSta1.u1) annotation (Line(points={{22,100},{90,100},{90,40}, + {238,40}}, color={255,0,255})); + connect(addPum.y, pumSta1.u2) annotation (Line(points={{262,0},{268,0},{268,20}, + {220,20},{220,32},{238,32}}, color={255,0,255})); + connect(pumSta1.y, yChiWatPum) + annotation (Line(points={{262,40},{300,40}}, color={255,0,255})); + connect(pumSta1.y, pre1.u) annotation (Line(points={{262,40},{272,40},{272,-100}, + {210,-100},{210,-120},{218,-120}}, color={255,0,255})); + connect(uChiWatIsoVal, enaHeaLeaPum.uChiWatIsoVal) annotation (Line(points={{-300,30}, + {-222,30},{-222,70},{-202,70}}, color={0,0,127})); + connect(uChiWatPum, mulOr.u) annotation (Line(points={{-300,150},{-140,150},{-140, + 120},{-102,120}}, color={255,0,255})); + connect(mulOr.y, or2.u1) annotation (Line(points={{-78,120},{-70,120},{-70,100}, + {-62,100}}, color={255,0,255})); + connect(enaDedLeaPum.yLea, or2.u2) annotation (Line(points={{-178,110},{-120,110}, + {-120,92},{-62,92}}, color={255,0,255})); + connect(enaHeaLeaPum.yLea, or2.u2) annotation (Line(points={{-178,70},{-120,70}, + {-120,92},{-62,92}}, color={255,0,255})); + connect(or2.y, yLea) annotation (Line(points={{-38,100},{-20,100},{-20,80},{300, + 80}}, color={255,0,255})); + connect(or2.y, booRep.u) + annotation (Line(points={{-38,100},{-2,100}}, color={255,0,255})); + connect(mulSumInt.y, intGreThr.u) annotation (Line(points={{-178,-120},{-170,-120}, + {-170,-160},{-162,-160}}, color={255,127,0})); + connect(intGreThr.y, intSwi.u2) + annotation (Line(points={{-138,-160},{-102,-160}}, color={255,0,255})); + connect(intSwi.y, lasLagPum.index) annotation (Line(points={{-78,-160},{-70,-160}, + {-70,-102}}, color={255,127,0})); + connect(mulSumInt.y, intSwi.u1) annotation (Line(points={{-178,-120},{-130,-120}, + {-130,-152},{-102,-152}}, color={255,127,0})); + connect(conInt1.y, intSwi.u3) annotation (Line(points={{-178,-180},{-130,-180}, + {-130,-168},{-102,-168}}, color={255,127,0})); + connect(intGreThr.y, booToInt2.u) annotation (Line(points={{-138,-160},{-120,-160}, + {-120,-120},{-52,-120}}, color={255,0,255})); + connect(booToInt2.y, mulInt.u2) annotation (Line(points={{-28,-120},{-20,-120}, + {-20,-96},{-12,-96}}, color={255,127,0})); + connect(reaToInt2.y, mulInt.u1) annotation (Line(points={{-28,-90},{-20,-90},{ + -20,-84},{-12,-84}}, color={255,127,0})); + connect(mulInt.y, intRep2.u) + annotation (Line(points={{12,-90},{18,-90}}, color={255,127,0})); + connect(mulAnd.y, disLasLag.clr) annotation (Line(points={{-118,-20},{-100, + -20},{-100,-6},{-42,-6}}, color={255,0,255})); + connect(mulAnd.y, enaNexLag.clr) annotation (Line(points={{-118,-20},{-100, + -20},{-100,24},{-2,24}}, color={255,0,255})); + connect(pre1.y, booToInt1.u) annotation (Line(points={{242,-120},{260,-120},{ + 260,-140},{-250,-140},{-250,-70},{-242,-70}}, color={255,0,255})); + connect(enaLagChiPum.yDown, disLasLag.u) annotation (Line(points={{-218,-20},{ + -188,-20},{-188,0},{-42,0}},color={255,0,255})); + connect(uWse, enaHeaLeaPum.uWse) annotation (Line(points={{-300,0},{-214,0},{-214, + 64},{-202,64}}, color={255,0,255})); +annotation ( + defaultComponentName="chiWatPum", + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-280,-260},{280,260}}), graphics={ + Rectangle( + extent={{-276,256},{156,64}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{66,252},{140,236}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Enable lead pump"), + Rectangle( + extent={{-276,56},{156,-136}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{70,58},{154,44}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Enable next lag pump"), + Text( + extent={{70,-116},{152,-134}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Disable last lag pump"), + Rectangle( + extent={{-276,-146},{156,-258}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{70,-154},{152,-168}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Enabled pump speed")}), + 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), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-80,60},{82,-60}}, + lineColor={28,108,200}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Polygon( + points={{-80,60},{-14,4},{-80,-60},{-80,60}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid)}), + Documentation(info=" +

                      +Primary chilled water pump control sequence per ASHRAE Guideline36-2021, +section 5.20.6.1 to section 5.20.6.11, except section 3 and 4. It includes: +

                      + +", +revisions=" +
                        +
                      • +February 13, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/EnableLag_primary_dP.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/EnableLag_primary_dP.mo new file mode 100644 index 00000000000..371c196d12b --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/EnableLag_primary_dP.mo @@ -0,0 +1,257 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences; +block EnableLag_primary_dP + "Sequences for enabling and disabling lag pumps for primary-only plants using differential pressure pump speed control" + parameter Integer nPum = 2 "Total number of pumps"; + parameter Real timPer( + final unit="s", + final quantity="Time")=600 + "Delay time period for enabling and disabling lag pumps"; + parameter Real staCon = -0.03 "Constant used in the staging equation" + annotation (Dialog(tab="Advanced")); + parameter Real relFloHys = 0.01 + "Constant value used in hysteresis for checking relative flow rate" + annotation (Dialog(tab="Advanced")); + parameter Integer nPum_nominal( + final max = nPum, + final min = 1) = nPum + "Total number of pumps that operate at design conditions" + annotation (Dialog(group="Nominal conditions")); + parameter Real VChiWat_flow_nominal( + final unit="m3/s", + final quantity="VolumeFlowRate", + final min=1e-6)=0.5 + "Total plant design chilled water flow rate" + annotation (Dialog(group="Nominal conditions")); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( + final unit="m3/s", + final quantity="VolumeFlowRate") "Chilled water flow" + annotation (Placement(transformation(extent={{-260,60},{-220,100}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum[nPum] + "Chilled water pump status" + annotation (Placement(transformation(extent={{-260,-20},{-220,20}}), + iconTransformation(extent={{-140,-58},{-100,-18}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yUp + "Next lag pump status, a rising edge indicates that next lag pump should be enabled" + annotation (Placement(transformation(extent={{220,80},{260,120}}), + iconTransformation(extent={{100,20},{140,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yDown + "Last lag pump status, a falling edge indicates that last lag pump should be disabled" + annotation (Placement(transformation(extent={{220,-180},{260,-140}}), + iconTransformation(extent={{100,-60},{140,-20}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=timPer) + "Check if the condition for enabling the pump has been constantly satisfied for enough time" + annotation (Placement(transformation(extent={{40,90},{60,110}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel1( + final delayTime=timPer) + "Check if the condition for disabling the pump has been constantly satisfied for enough time" + annotation (Placement(transformation(extent={{40,-170},{60,-150}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis enaPum( + final uLow=(-1)*relFloHys, + final uHigh=relFloHys) + "Check if the condition for enabling next lag pump is satisfied" + annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis disPum( + final uLow=(-1)*relFloHys, + final uHigh=relFloHys) + "Check if the condition for disabling last lag pump is satisfied" + annotation (Placement(transformation(extent={{-80,-170},{-60,-150}}))); + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter chiWatFloRat( + final k=1/VChiWat_flow_nominal) "Chiller water flow ratio" + annotation (Placement(transformation(extent={{-200,70},{-180,90}}))); + +protected + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[nPum] + "Convert boolean input to integer number" + annotation (Placement(transformation(extent={{-200,-10},{-180,10}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum numOpePum(final nin=nPum) + "Total number of operating pumps" + annotation (Placement(transformation(extent={{-140,-10},{-120,10}}))); + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea + "Convert integer to real" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( + final p=-1) "Add real inputs" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 + "Find inputs difference" + annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 + "Find inputs difference" + annotation (Placement(transformation(extent={{-120,-170},{-100,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Switch enaNexLag + "Enabling next lag pump" + annotation (Placement(transformation(extent={{180,90},{200,110}}))); + Buildings.Controls.OBC.CDL.Logical.Switch shuLasLag + "Shut off last lag pump" + annotation (Placement(transformation(extent={{180,-170},{200,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=true) + "Logical true" + annotation (Placement(transformation(extent={{120,150},{140,170}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1( + final k=false) + "Logical false" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter nomPum( + final k=1/nPum_nominal) + "Pump number ratio" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter nomPum1( + final k=1/nPum_nominal) + "Pump number ratio" + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2( + final k=0.03) + "Constant" + annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract sub + "Input difference" + annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 + "Input difference" + annotation (Placement(transformation(extent={{60,30},{80,50}}))); + +equation + connect(VChiWat_flow,chiWatFloRat. u) + annotation (Line(points={{-240,80},{-202,80}}, color={0,0,127})); + connect(uChiWatPum,booToInt. u) + annotation (Line(points={{-240,0},{-202,0}}, color={255,0,255})); + connect(booToInt.y,numOpePum. u) + annotation (Line(points={{-178,0},{-142,0}}, + color={255,127,0})); + connect(numOpePum.y,intToRea. u) + annotation (Line(points={{-118,0},{-102,0}}, color={255,127,0})); + connect(sub2.y, enaPum.u) + annotation (Line(points={{-98,100},{-82,100}}, color={0,0,127})); + connect(sub1.y, disPum.u) + annotation (Line(points={{-98,-160},{-82,-160}}, color={0,0,127})); + connect(intToRea.y, addPar1.u) + annotation (Line(points={{-78,0},{-60,0},{-60,-40},{-42,-40}}, + color={0,0,127})); + connect(chiWatFloRat.y, sub2.u1) + annotation (Line(points={{-178,80},{-160,80},{-160,106},{-122,106}}, + color={0,0,127})); + connect(chiWatFloRat.y, sub1.u2) + annotation (Line(points={{-178,80},{-160,80},{-160,-166},{-122,-166}}, + color={0,0,127})); + connect(con.y, enaNexLag.u1) + annotation (Line(points={{142,160},{160,160},{160,108},{178,108}}, + color={255,0,255})); + connect(shuLasLag.y, yDown) + annotation (Line(points={{202,-160},{240,-160}}, color={255,0,255})); + connect(enaNexLag.y, yUp) + annotation (Line(points={{202,100},{240,100}}, color={255,0,255})); + connect(con1.y, enaNexLag.u3) + annotation (Line(points={{122,0},{140,0},{140,92},{178,92}}, + color={255,0,255})); + connect(intToRea.y, nomPum.u) + annotation (Line(points={{-78,0},{-2,0}}, color={0,0,127})); + connect(addPar1.y, nomPum1.u) + annotation (Line(points={{-18,-40},{-2,-40}}, color={0,0,127})); + connect(enaPum.y, truDel.u) + annotation (Line(points={{-58,100},{38,100}}, color={255,0,255})); + connect(truDel.y, enaNexLag.u2) + annotation (Line(points={{62,100},{178,100}}, color={255,0,255})); + connect(disPum.y, truDel1.u) + annotation (Line(points={{-58,-160},{38,-160}}, color={255,0,255})); + connect(truDel1.y, shuLasLag.u2) + annotation (Line(points={{62,-160},{178,-160}}, color={255,0,255})); + connect(nomPum.y, sub3.u1) + annotation (Line(points={{22,0},{30,0},{30,46},{58,46}}, color={0,0,127})); + connect(nomPum1.y, sub.u1) annotation (Line(points={{22,-40},{30,-40},{30,-34}, + {58,-34}}, color={0,0,127})); + connect(con2.y, sub3.u2) annotation (Line(points={{22,-80},{40,-80},{40,34},{58, + 34}}, color={0,0,127})); + connect(con2.y, sub.u2) annotation (Line(points={{22,-80},{40,-80},{40,-46},{58, + -46}}, color={0,0,127})); + connect(sub3.y, sub2.u2) annotation (Line(points={{82,40},{100,40},{100,70},{-140, + 70},{-140,94},{-122,94}}, color={0,0,127})); + connect(sub.y, sub1.u1) annotation (Line(points={{82,-40},{100,-40},{100,-120}, + {-140,-120},{-140,-154},{-122,-154}}, color={0,0,127})); + connect(con.y, shuLasLag.u1) annotation (Line(points={{142,160},{160,160},{160, + -152},{178,-152}}, color={255,0,255})); + connect(con1.y, shuLasLag.u3) annotation (Line(points={{122,0},{140,0},{140,-168}, + {178,-168}}, color={255,0,255})); +annotation ( + defaultComponentName="enaLagChiPum", + 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={{-100,150},{100,110}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-98,52},{-38,30}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="VChiWat_flow"), + Text( + extent={{-98,-24},{-34,-48}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChiWatPum"), + Text( + extent={{64,48},{98,34}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yUp"), + Text( + extent={{62,-26},{96,-50}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yDown")}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-220,-200},{220,200}})), + Documentation(info=" +

                      +Block that enable and disable lag primary chilled water pump, for plants +with headered primary chilled water pumps, +according to ASHRAE Guideline36-2021, +section 5.20.6 Primary chilled water pumps, part 5.20.6.6. +

                      +

                      +Chilled water pump shall be staged as a function of chilled water flow ratio (CHWFR), +i.e. the ratio of current chilled water flow VChiWat_flow to design +flow VChiWat_flow_nominal, and the number of pumps num_nominal +that operate at design conditions. Pumps are assumed to be equally sized. +

                      +
                      +                  VChiWat_flow
                      +     CHWFR = ----------------------
                      +              VChiWat_flow_nominal
                      +
                      +

                      +1. Start the next lag pump yNexLagPum whenever the following is +true for 10 minutes: +

                      +
                      +              Number_of_operating_pumps
                      +     CHWFR > ---------------------------  - 0.03
                      +                       num_nominal
                      +
                      +

                      +2. Shut off the last lag pump whenever the following is true for 10 minutes: +

                      +
                      +              Number_of_operating_pumps - 1
                      +     CHWFR ≤ -------------------------------  - 0.03
                      +                       num_nominal
                      +
                      +", revisions=" +
                        +
                      • +January 28, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end EnableLag_primary_dP; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/EnableLead_dedicated.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/EnableLead_dedicated.mo new file mode 100644 index 00000000000..72f7ca53f21 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/EnableLead_dedicated.mo @@ -0,0 +1,138 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences; +block EnableLead_dedicated + "Sequence to enable or disable the lead pump of plants with dedicated primary chilled water pumps" + + final parameter Real offTimThr( + final unit="s", + final quantity="Time")=180 + "Threshold to check lead chiller off time"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "True: plant is enabled" + annotation (Placement(transformation(extent={{-140,50},{-100,90}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiEna + "True: lead chiller is enabled" + annotation (Placement(transformation(extent={{-140,20},{-100,60}}), + iconTransformation(extent={{-140,10},{-100,50}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiSta + "True: lead chiller is proven on" + annotation (Placement(transformation(extent={{-140,-60},{-100,-20}}), + iconTransformation(extent={{-140,-50},{-100,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiWatReq + "True: lead chiller is requesting chilled water" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLea + "Lead pump status setpoint" + annotation (Placement(transformation(extent={{100,50},{140,90}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Logical.Latch leaPumSta + "Lead pump status" + annotation (Placement(transformation(extent={{40,60},{60,80}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Or or2 "Logical or" + annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Not noChiWatReq "No chilled water request" + annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Not proOff "Lead chiller proven off" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim( + final t=offTimThr) + "Check if the chiller has been OFF for more than 3 minutes" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and" + annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); + Buildings.Controls.OBC.CDL.Logical.Not disLeaChi "Disabled lead chiller" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + Buildings.Controls.OBC.CDL.Logical.Edge disLeaPum + "Disable lead pump when the input has rising edge" + annotation (Placement(transformation(extent={{0,30},{20,50}}))); +equation + connect(uLeaChiWatReq, noChiWatReq.u) + annotation (Line(points={{-120,-80},{-82,-80}}, color={255,0,255})); + connect(uLeaChiSta, proOff.u) + annotation (Line(points={{-120,-40},{-82,-40}}, color={255,0,255})); + connect(proOff.y, tim.u) + annotation (Line(points={{-58,-40},{-42,-40}}, color={255,0,255})); + connect(noChiWatReq.y, or2.u2) + annotation (Line(points={{-58,-80},{30,-80},{30,-48},{38,-48}}, + color={255,0,255})); + connect(uLeaChiEna, disLeaChi.u) + annotation (Line(points={{-120,40},{-82,40}}, color={255,0,255})); + connect(disLeaChi.y, and2.u1) + annotation (Line(points={{-58,40},{-42,40}}, color={255,0,255})); + connect(or2.y, and2.u2) + annotation (Line(points={{62,-40},{80,-40},{80,-10},{-50,-10},{-50,32},{-42, + 32}}, color={255,0,255})); + connect(uPla, leaPumSta.u) + annotation (Line(points={{-120,70},{38,70}}, color={255,0,255})); + connect(and2.y, disLeaPum.u) + annotation (Line(points={{-18,40},{-2,40}}, color={255,0,255})); + connect(disLeaPum.y, leaPumSta.clr) + annotation (Line(points={{22,40},{30,40},{30,64},{38,64}}, color={255,0,255})); + connect(tim.passed, or2.u1) annotation (Line(points={{-18,-48},{20,-48},{20,-40}, + {38,-40}}, color={255,0,255})); + connect(leaPumSta.y, yLea) + annotation (Line(points={{62,70},{120,70}}, color={255,0,255})); +annotation ( + defaultComponentName="enaLeaChiPum", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-98,42},{-44,20}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uLeaChiEna"), + Text( + extent={{62,10},{98,-6}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yUp"), + Text( + extent={{-100,150},{100,110}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-98,-18},{-44,-40}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uLeaChiOn"), + Text( + extent={{-98,-68},{-26,-90}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uLeaChiWatReq"), + Text( + extent={{-94,90},{-74,74}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uPla")}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

                      +Block that enable and disable leading primary chilled water pump, for plants +with dedicated primary chilled water pumps and parallel chillers, +according to ASHRAE Guideline36-2021, section 5.20.6.6. +

                      +

                      +The lead primary chilled water pump should be enabled when the plant is enabled +(uPla = true). It should be disabled when the lead +chiller is disabled (uLeaChiEna = false) and either the lead chiller +has been proven off (uLeaChiSta = false) for 3 minutes or is not +requesting chilled water flow (uLeaChiWatReq = false). +

                      +", revisions=" +
                        +
                      • +August 1, 2020, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end EnableLead_dedicated; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/EnableLead_headered.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/EnableLead_headered.mo new file mode 100644 index 00000000000..7cfd5e7dec2 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/EnableLead_headered.mo @@ -0,0 +1,126 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences; +block EnableLead_headered + "Sequence to enable or disable the lead pump of plants with headered primary chilled water pumps" + + parameter Integer nChi=2 + "Total number of chiller CHW isolation valves"; + parameter Boolean have_WSE + "True: the plant has waterside economizer"; + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiWatIsoVal[nChi]( + final unit=fill("1", nChi), + final min=fill(0, nChi), + final max=fill(1, nChi)) "Chilled water isolation valve position" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWse if have_WSE + "Waterside economizer proven on status: true=ON" + annotation (Placement(transformation(extent={{-140,-60},{-100,-20}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLea + "Lead pump status setpoint" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Switch leaPumSta "Lead pump status" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con(final k=true) + "Logical true" + annotation (Placement(transformation(extent={{0,60},{20,80}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1(final k=false) + "Logical false" + annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys4[nChi]( + final uLow=fill(0.925,nChi), + final uHigh=fill(0.975, nChi)) + "Check if isolation valve is open more than 95%" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr anyIsoVal(final nin=nChi) + "Check if any chilled water isolation valve is proven on" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con2( + final k=false) + if not have_WSE + "Logical false" + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2 + "Check if the chilled water pump should be enabled" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + +equation + connect(con.y,leaPumSta. u1) + annotation (Line(points={{22,70},{40,70},{40,8},{58,8}}, color={255,0,255})); + connect(con1.y,leaPumSta. u3) + annotation (Line(points={{22,-70},{40,-70},{40,-8},{58,-8}}, + color={255,0,255})); + connect(leaPumSta.y, yLea) + annotation (Line(points={{82,0},{120,0}}, color={255,0,255})); + connect(uChiWatIsoVal, hys4.u) + annotation (Line(points={{-120,0},{-82,0}}, color={0,0,127})); + connect(hys4.y, anyIsoVal.u) + annotation (Line(points={{-58,0},{-42,0}}, color={255,0,255})); + connect(anyIsoVal.y, or2.u1) + annotation (Line(points={{-18,0},{-2,0}}, color={255,0,255})); + connect(uWse, or2.u2) annotation (Line(points={{-120,-40},{-10,-40},{-10,-8},{ + -2,-8}}, color={255,0,255})); + connect(or2.y, leaPumSta.u2) + annotation (Line(points={{22,0},{58,0}}, color={255,0,255})); + connect(con2.y, or2.u2) annotation (Line(points={{-38,-70},{-10,-70},{-10,-8}, + {-2,-8}}, color={255,0,255})); +annotation ( + defaultComponentName="enaLeaChiPum", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-96,12},{-20,-8}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uChiWatIsoVal"), + Text( + extent={{42,12},{96,-10}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yLeaPum"), + Text( + extent={{-98,-48},{-44,-70}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uWse")}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

                      +Block that enable and disable leading primary chilled water pump, for plants +with headered primary chilled water pumps and parallel chillers, +according to ASHRAE Guideline36-2021, +section 5.20.6 Primary chilled water pumps, part 1, 2, and 3. +

                      +
                        +
                      1. +Primary chilled water pumps shall be lead-lag. Note that the lead-lag control is +implemented in a separated sequence. +
                      2. +
                      3. +The lead primary chilled water pump shall be enabled when any chiller +CHW isolation valve uChiIsoVal is fully open, or if the plant +has waterside economizer and the economizer is enabled, shall be disabled +when chiller CHW isolation valves are commanded closed and the economizer is diabled +if the plant has the economizer. +
                      4. +
                      +", revisions=" +
                        +
                      • +August 1, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end EnableLead_headered; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Speed_primary_localDp.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Speed_primary_localDp.mo new file mode 100644 index 00000000000..a4629bfceb2 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Speed_primary_localDp.mo @@ -0,0 +1,295 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences; +block Speed_primary_localDp + "Pump speed control for primary-only plants where the remote DP sensor(s) is not hardwired to the plant controller, but a local DP sensor is hardwired" + parameter Integer nSen = 2 + "Total number of remote differential pressure sensors"; + parameter Integer nPum = 2 + "Total number of chilled water pumps"; + parameter Real minLocDp( + final unit="Pa", + displayUnit="Pa", + final quantity="PressureDifference", + final min=0)=5*6894.75 + "Minimum chilled water loop local differential pressure setpoint"; + parameter Real maxLocDp( + final unit="Pa", + displayUnit="Pa", + final quantity="PressureDifference", + final min=minLocDp) = 15*6894.75 + "Maximum chilled water loop local differential pressure setpoint"; + parameter Real minPumSpe = 0.1 "Minimum pump speed"; + parameter Real maxPumSpe = 1 "Maximum pump speed"; + parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation(Dialog(group="Speed controller")); + parameter Real k=1 "Gain of controller" + annotation(Dialog(group="Speed controller")); + parameter Real Ti( + final unit="s", + final quantity="Time")=0.5 "Time constant of integrator block" + annotation(Dialog(group="Speed controller")); + parameter Real Td( + final unit="s", + final quantity="Time")=0.1 "Time constant of derivative block" + annotation (Dialog(group="Speed controller", + enable= + controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat_local( + final unit="Pa", + final quantity="PressureDifference") + "Chilled water differential static pressure from local sensor" + annotation (Placement(transformation(extent={{-180,80},{-140,120}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum[nPum] + "Chilled water pump status" + annotation (Placement(transformation(extent={{-180,-60},{-140,-20}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat_remote[nSen]( + final unit=fill("Pa", nSen), + final quantity=fill("PressureDifference", nSen)) + "Chilled water differential static pressure from remote sensor" + annotation (Placement(transformation(extent={{-180,-100},{-140,-60}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatSet_remote[nSen]( + final unit=fill("Pa", nSen), final quantity=fill("PressureDifference", + nSen)) "Chilled water differential static pressure setpoint" + annotation (Placement(transformation(extent={{-180,-140},{-140,-100}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatPumSpe( + final min=minPumSpe, + final max=maxPumSpe, + final unit="1") "Chilled water pump speed" + annotation (Placement(transformation(extent={{140,100},{180,140}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput dpChiWatPumSet_local( + final quantity="PressureDifference", + final unit="Pa", + displayUnit="Pa") + "Local differential pressure setpoint" + annotation (Placement(transformation(extent={{140,-40},{180,0}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conPID1( + final controllerType=controllerType, + final k=k, + final Ti=Ti, + final Td=Td, + final yMax=1, + final yMin=0, + final y_reset=0) "Pump speed controller" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + Buildings.Controls.OBC.CDL.Reals.Line pumSpe "Pump speed" + annotation (Placement(transformation(extent={{100,50},{120,70}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMax maxRemDP( + final nin=nSen) + "Highest output from differential pressure control loops" + annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Line locDpSet + "Local differential pressure setpoint" + annotation (Placement(transformation(extent={{100,-30},{120,-10}}))); + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conPID[nSen]( + final controllerType=fill(controllerType, nSen), + final k=fill(k, nSen), + final Ti=fill(Ti, nSen), + final Td=fill(Td, nSen), + final yMax=fill(1, nSen), + final yMin=fill(0, nSen), + final y_reset=fill(0, nSen)) "Pump speed controller" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + +protected + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=nSen) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{60,10},{80,30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant locDp_min( + final k=minLocDp) + "Minimum local differential pressure" + annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) + "Constant one" + annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant locDp_max( + final k=maxLocDp) + "Maximum local differential pressure " + annotation (Placement(transformation(extent={{40,-130},{60,-110}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant pumSpe_min( + final k=minPumSpe) "Minimum pump speed" + annotation (Placement(transformation(extent={{40,90},{60,110}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant pumSpe_max( + final k=maxPumSpe) "Maximum pump speed" + annotation (Placement(transformation(extent={{-20,90},{0,110}}))); + Buildings.Controls.OBC.CDL.Reals.Divide div[nSen] + "Normalized pressure difference" + annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); + Buildings.Controls.OBC.CDL.Reals.Divide div1 + "Normalized pressure difference" + annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep1( + final nout=nSen) "Replicate real input" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{100,110},{120,130}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr(final nin=nPum) + "Check if there is any pump enabled" + annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); + +equation + connect(conPID.y, maxRemDP.u) + annotation (Line(points={{22,-20},{38,-20}}, color={0,0,127})); + connect(booRep.y, conPID.trigger) + annotation (Line(points={{-18,-40},{4,-40},{4,-32}}, color={255,0,255})); + connect(maxRemDP.y, locDpSet.u) + annotation (Line(points={{62,-20},{98,-20}}, color={0,0,127})); + connect(zer.y, locDpSet.x1) + annotation (Line(points={{82,20},{90,20},{90,-12},{98,-12}}, color={0,0,127})); + connect(locDp_min.y, locDpSet.f1) + annotation (Line(points={{62,-60},{70,-60},{70,-16},{98,-16}}, + color={0,0,127})); + connect(one.y, locDpSet.x2) + annotation (Line(points={{-98,20},{40,20},{40,0},{80,0},{80,-24},{98,-24}}, + color={0,0,127})); + connect(locDp_max.y, locDpSet.f2) + annotation (Line(points={{62,-120},{80,-120},{80,-28},{98,-28}}, + color={0,0,127})); + connect(zer.y, pumSpe.x1) + annotation (Line(points={{82,20},{90,20},{90,68},{98,68}}, color={0,0,127})); + connect(pumSpe_min.y, pumSpe.f1) + annotation (Line(points={{62,100},{70,100},{70,64},{98,64}}, color={0,0,127})); + connect(conPID1.y, pumSpe.u) + annotation (Line(points={{-18,60},{98,60}}, color={0,0,127})); + connect(one.y, pumSpe.x2) + annotation (Line(points={{-98,20},{40,20},{40,56},{98,56}},color={0,0,127})); + connect(pumSpe_max.y, pumSpe.f2) + annotation (Line(points={{2,100},{20,100},{20,52},{98,52}}, color={0,0,127})); + connect(dpChiWat_remote, div.u1) + annotation (Line(points={{-160,-80},{-80,-80},{-80,-94},{-42,-94}}, + color={0,0,127})); + connect(locDpSet.y, div1.u2) + annotation (Line(points={{122,-20},{130,-20},{130,40},{-120,40},{-120,74}, + {-102,74}}, color={0,0,127})); + connect(dpChiWat_local, div1.u1) + annotation (Line(points={{-160,100},{-120,100},{-120,86},{-102,86}}, + color={0,0,127})); + connect(one.y, reaRep1.u) + annotation (Line(points={{-98,20},{-90,20},{-90,0},{-82,0}}, color={0,0,127})); + connect(reaRep1.y, conPID.u_s) + annotation (Line(points={{-58,0},{-20,0},{-20,-20},{-2,-20}}, color={0,0,127})); + connect(div.y, conPID.u_m) + annotation (Line(points={{-18,-100},{10,-100},{10,-32}}, color={0,0,127})); + connect(one.y, conPID1.u_s) + annotation (Line(points={{-98,20},{-90,20},{-90,60},{-42,60}}, color={0,0,127})); + connect(div1.y, conPID1.u_m) + annotation (Line(points={{-78,80},{-60,80},{-60,32},{-30,32},{-30,48}}, + color={0,0,127})); + connect(pumSpe.y, swi.u1) + annotation (Line(points={{122,60},{130,60},{130,100},{80,100},{80,128},{98,128}}, + color={0,0,127})); + connect(zer.y, swi.u3) + annotation (Line(points={{82,20},{90,20},{90,112},{98,112}}, + color={0,0,127})); + connect(swi.y, yChiWatPumSpe) + annotation (Line(points={{122,120},{160,120}}, color={0,0,127})); + connect(mulOr.y, booRep.u) + annotation (Line(points={{-98,-40},{-42,-40}}, color={255,0,255})); + connect(mulOr.y, swi.u2) + annotation (Line(points={{-98,-40},{-50,-40},{-50,120},{98,120}}, + color={255,0,255})); + connect(mulOr.y, conPID1.trigger) + annotation (Line(points={{-98,-40},{-50,-40},{-50,-20},{-36,-20},{-36,48}}, + color={255,0,255})); + connect(uChiWatPum, mulOr.u) + annotation (Line(points={{-160,-40},{-122,-40}},color={255,0,255})); + connect(dpChiWatSet_remote, div.u2) annotation (Line(points={{-160,-120},{-80, + -120},{-80,-106},{-42,-106}}, color={0,0,127})); + connect(locDpSet.y, dpChiWatPumSet_local) + annotation (Line(points={{122,-20},{160,-20}}, color={0,0,127})); +annotation ( + defaultComponentName="chiPumSpe", + Icon(coordinateSystem(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={{-100,150},{100,110}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-98,52},{-44,30}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChiWatPum"), + Text( + extent={{-98,-30},{-30,-52}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="dpChiWat_remote"), + Text( + extent={{22,12},{98,-10}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiWatPumSpe"), + Text( + extent={{-98,-68},{-20,-92}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="dpChiWatSet_remote"), + Text( + extent={{-98,92},{-30,70}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="dpChiWat_local"), + Text( + extent={{6,-46},{98,-70}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="dpChiWatPumSet_local")}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-140,-140},{140,140}})), + Documentation(info=" +

                      +Block that control speed of enabled chilled water pumps for primary-only plants where +the remote pressure differential (DP) sensor(s) is not hardwired to the plant controller, +but a local DP sensor is hardwired to the plant controller, +according to ASHRAE Guideline36-2021, +section 5.20.6 Primary chilled water pumps, part 5.20.6.9, 5.20.6.10 and 5.20.6.11. +

                      +
                        +
                      1. +Remote DP shall be maintained at setpoint dpChiWatSet by a reverse +acting PID loop running in the controller to which the remote sensor is wired. +The loop output shall be a DP setpoint for the local primary loop DP sensor +hardwired to the plant controller. Reset local DP from minLocDp, +e.g. 5 psi (34473.8 Pa), at 0% loop output to maxLocDp at 100% +loop output. +
                      2. +
                      3. +When any pump is proven on, pump speed shall be controlled by a reverse acting +PID loop maintaining the local primary DP signal at the DP setpoint output +from the remote sensor control loop. All pumps receive the same speed signal. +PID loop output shall be mapped from minimum pump speed (minPumSpe) +at 0% to maximum pump speed (maxPumSpe) at 100%. +
                      4. +
                      5. +Where multiple remote DP sensors exist, a PID loop shall run for each sensor. +The DP setpoint for the local DP sensor shall be the highest DP setpoint output +from each of the remote loops. +
                      6. +
                      +", revisions=" +
                        +
                      • +August 1, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Speed_primary_localDp; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Speed_primary_remoteDp.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Speed_primary_remoteDp.mo new file mode 100644 index 00000000000..3ad90bcf8e9 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Speed_primary_remoteDp.mo @@ -0,0 +1,205 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences; +block Speed_primary_remoteDp + "Pump speed control for primary-only plants where the remote DP sensor(s) is hardwired to the plant controller" + parameter Integer nSen = 2 + "Total number of remote differential pressure sensors"; + parameter Integer nPum = 2 + "Total number of chilled water pumps"; + parameter Real minPumSpe = 0.1 "Minimum pump speed"; + parameter Real maxPumSpe = 1 "Maximum pump speed"; + parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation(Dialog(group="Speed controller")); + parameter Real k=1 "Gain of controller" + annotation(Dialog(group="Speed controller")); + parameter Real Ti( + final unit="s", + final quantity="Time")=0.5 + "Time constant of integrator block" + annotation(Dialog(group="Speed controller")); + parameter Real Td( + final unit="s", + final quantity="Time")=0.1 + "Time constant of derivative block" + annotation (Dialog(group="Speed controller", + enable=controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum[nPum] + "Chilled water pump status" + annotation (Placement(transformation(extent={{-160,-20},{-120,20}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat_remote[nSen]( + final unit=fill("Pa", nSen), + final quantity=fill("PressureDifference", nSen)) + "Chilled water differential static pressure" + annotation (Placement(transformation(extent={{-160,-80},{-120,-40}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatSet_remote[nSen]( + final unit=fill("Pa", nSen), + final quantity=fill("PressureDifference",nSen)) + "Chilled water differential static pressure setpoint" + annotation (Placement(transformation(extent={{-160,-120},{-120,-80}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatPumSpe( + final min=minPumSpe, + final max=maxPumSpe, + final unit="1") "Chilled water pump speed" + annotation (Placement(transformation(extent={{120,80},{160,120}}), + iconTransformation(extent={{100,-10},{120,10}}))); + + Buildings.Controls.OBC.CDL.Reals.MultiMax maxLoo( + final nin=nSen) + "Maximum DP loop output" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + Buildings.Controls.OBC.CDL.Reals.Line pumSpe "Pump speed" + annotation (Placement(transformation(extent={{60,50},{80,70}}))); + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conPID[nSen]( + final controllerType=fill(controllerType, nSen), + final k=fill(k, nSen), + final Ti=fill(Ti, nSen), + final Td=fill(Td, nSen), + final yMax=fill(1, nSen), + final yMin=fill(0, nSen), + final y_reset=fill(0, nSen)) "Pump speed controller" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + +protected + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=nSen) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant pumSpe_min( + final k=minPumSpe) "Minimum pump speed" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant pumSpe_max( + final k=maxPumSpe) "Maximum pump speed" + annotation (Placement(transformation(extent={{-20,30},{0,50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) + "Constant one" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{-20,70},{0,90}}))); + Buildings.Controls.OBC.CDL.Reals.Divide div[nSen] + "Normalized pressure difference" + annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep1( + final nout=nSen) "Replicate real input" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{80,90},{100,110}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr(final nin=nPum) + "Check if there is any pump enabled" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + +equation + connect(conPID.y, maxLoo.u) + annotation (Line(points={{42,0},{58,0}}, color={0,0,127})); + connect(booRep.y, conPID.trigger) + annotation (Line(points={{2,-40},{24,-40},{24,-12}}, color={255,0,255})); + connect(zer.y, pumSpe.x1) + annotation (Line(points={{2,80},{20,80},{20,68},{58,68}}, color={0,0,127})); + connect(pumSpe_min.y, pumSpe.f1) + annotation (Line(points={{-58,80},{-40,80},{-40,64},{58,64}}, color={0,0,127})); + connect(one.y, pumSpe.x2) + annotation (Line(points={{-58,40},{-40,40},{-40,56},{58,56}}, color={0,0,127})); + connect(pumSpe_max.y, pumSpe.f2) + annotation (Line(points={{2,40},{20,40},{20,52},{58,52}}, color={0,0,127})); + connect(maxLoo.y, pumSpe.u) + annotation (Line(points={{82,0},{100,0},{100,40},{40,40},{40,60},{58,60}}, + color={0,0,127})); + connect(dpChiWat_remote, div.u1) annotation (Line(points={{-140,-60},{-40,-60}, + {-40,-74},{-22,-74}}, color={0,0,127})); + connect(div.y, conPID.u_m) + annotation (Line(points={{2,-80},{30,-80},{30,-12}}, color={0,0,127})); + connect(one.y, reaRep1.u) + annotation (Line(points={{-58,40},{-40,40},{-40,0},{-22,0}}, + color={0,0,127})); + connect(reaRep1.y, conPID.u_s) + annotation (Line(points={{2,0},{18,0}}, color={0,0,127})); + connect(pumSpe.y, swi.u1) + annotation (Line(points={{82,60},{100,60},{100,80},{60,80},{60,108},{78,108}}, + color={0,0,127})); + connect(zer.y, swi.u3) + annotation (Line(points={{2,80},{20,80},{20,92},{78,92}}, + color={0,0,127})); + connect(swi.y, yChiWatPumSpe) + annotation (Line(points={{102,100},{140,100}}, color={0,0,127})); + connect(mulOr.y, booRep.u) + annotation (Line(points={{-78,0},{-50,0},{-50,-40},{-22,-40}}, + color={255,0,255})); + connect(mulOr.y, swi.u2) + annotation (Line(points={{-78,0},{-50,0},{-50,100},{78,100}}, + color={255,0,255})); + connect(uChiWatPum, mulOr.u) + annotation (Line(points={{-140,0},{-102,0}}, color={255,0,255})); + connect(dpChiWatSet_remote, div.u2) annotation (Line(points={{-140,-100},{-40, + -100},{-40,-86},{-22,-86}}, color={0,0,127})); + +annotation ( + defaultComponentName="chiPumSpe", + Icon(coordinateSystem(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={{-100,150},{100,110}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-98,92},{-44,70}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChiWatPum"), + Text( + extent={{-98,10},{-26,-10}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="dpChiWat_remote"), + Text( + extent={{22,12},{98,-10}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiWatPumSpe"), + Text( + extent={{-98,-68},{-10,-88}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="dpChiWatSet_remote")}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-120,-120},{120,120}})), + Documentation(info=" +

                      +Block that output chilled water pump speed setpoint for primary-only plants where +the remote pressure differential sensor is hardwired to the plant controller, +according to ASHRAE Guideline36-2021, +section 5.20.6 Primary chilled water pumps, part 5.20.6.7 and 5.20.6.8. +

                      +
                        +
                      1. +When any chilled water pump is proven on, uChiWatPum = true, +pump speed will be controlled by a reverse acting PID loop maintaining the +differential pressure signal at a setpoint dpChiWatSet. All pumps +receive the same speed signal. PID loop output shall be mapped from minimum +pump speed (minPumSpe) at 0% to maximum pump speed +(maxPumSpe) at 100%. +
                      2. +
                      3. +Where multiple differential pressure sensors exist, a PID loop shall run for +each sensor. Chilled water pumps shall be controlled to the maximum signal output +of all DP sensor loops. +
                      4. +
                      +", revisions=" +
                        +
                      • +August 1, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Speed_primary_remoteDp; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLag_primary_dP.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLag_primary_dP.mo new file mode 100644 index 00000000000..cd729fa99c0 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLag_primary_dP.mo @@ -0,0 +1,80 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation; +model EnableLag_primary_dP + "Validate sequence for enabling lag pump for primary-only plants using differential pressure pump speed control" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.EnableLag_primary_dP + enaLagChiPum( + final nPum=3, + final VChiWat_flow_nominal=0.5) + "Enable lag pump for primary-only plants using differential pressure pump speed control" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con[2]( + final k=fill(true, 2)) "Constant true" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1(final k=false) + "Constant false" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( + final amplitude=0.25, + final freqHz=1/3600, + final offset=0.25) "Measured chilled water flow rate" + annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); + +equation + connect(con[1].y, enaLagChiPum.uChiWatPum[1]) + annotation (Line(points={{-38,0},{-20,0},{-20,-4.46667},{18,-4.46667}}, + color={255,0,255})); + connect(con[2].y, enaLagChiPum.uChiWatPum[2]) + annotation (Line(points={{-38,0},{-20,0},{-20,-3.8},{18,-3.8}}, + color={255,0,255})); + connect(con1.y, enaLagChiPum.uChiWatPum[3]) + annotation (Line(points={{-38,-40},{0,-40},{0,-3.13333},{18,-3.13333}}, + color={255,0,255})); + connect(sin.y, enaLagChiPum.VChiWat_flow) + annotation (Line(points={{-38,40},{-20,40},{-20,4},{18,4}}, + color={0,0,127})); + +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLag_primary_dP.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.EnableLag_primary_dP. +It validates the conditions for enabling and disabling the lag pump. +

                      +
                        +
                      • +At 2.8 minute, the condition for enabling the lag pump becomes satified and it +durates more than 10 minutes. At 12.8 minute, the lag pump enabling output becomes true. +
                      • +
                      • +At 34 minute, the condition for diabling the lag pump becomes satisfied and it keeps +true for more than 10 minutes. At 44 minutes, the lag pump disabling output become true. +
                      • +
                      +", revisions=" +
                        +
                      • +Arpil 4, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end EnableLag_primary_dP; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_dedicated.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_dedicated.mo new file mode 100644 index 00000000000..7c69076dc6f --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_dedicated.mo @@ -0,0 +1,96 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation; +model EnableLead_dedicated + "Validate sequence for enabling lead pump of plants with dedicated primary chilled water pumps" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.EnableLead_dedicated + enaLeaChiPum + "Enable lead chilled water pump when the lead chiller is enabled" + annotation (Placement(transformation(extent={{60,70},{80,90}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.EnableLead_dedicated + disLeaChiPum + "Disable lead pump due to that the lead chiller has been proven off" + annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay leaChiProOn( + final delayTime=120) + "Lead chiller proven on status" + annotation (Placement(transformation(extent={{-20,50},{0,70}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse leaChiEna( + final period=7200, + final shift=400) + "Lead chiller enabling status" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse enaPla( + final period=7200, + final shift=200) + "Plant enabling status" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse enaPla1( + final width=0.75, final period=4000) + "Plant enabling status" + annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); +equation + connect(leaChiEna.y, enaLeaChiPum.uLeaChiEna) annotation (Line(points={{-58,40}, + {30,40},{30,83},{58,83}}, color={255,0,255})); + connect(leaChiEna.y, leaChiProOn.u) annotation (Line(points={{-58,40},{-50,40}, + {-50,60},{-22,60}}, color={255,0,255})); + connect(leaChiProOn.y, enaLeaChiPum.uLeaChiSta) annotation (Line(points={{2,60},{ + 40,60},{40,77},{58,77}}, color={255,0,255})); + connect(leaChiProOn.y, enaLeaChiPum.uLeaChiWatReq) annotation (Line(points={{2,60},{ + 40,60},{40,72},{58,72}}, color={255,0,255})); + connect(enaPla.y, enaLeaChiPum.uPla) annotation (Line(points={{-58,80},{20,80}, + {20,88},{58,88}}, color={255,0,255})); + connect(enaPla1.y, disLeaChiPum.uPla) annotation (Line(points={{-58,-10},{20,-10}, + {20,-22},{58,-22}}, color={255,0,255})); + connect(enaPla1.y, disLeaChiPum.uLeaChiEna) annotation (Line(points={{-58,-10}, + {20,-10},{20,-27},{58,-27}}, color={255,0,255})); + connect(enaPla1.y, disLeaChiPum.uLeaChiSta) annotation (Line(points={{-58,-10}, + {20,-10},{20,-33},{58,-33}}, color={255,0,255})); + connect(enaPla1.y, disLeaChiPum.uLeaChiWatReq) annotation (Line(points={{-58,-10}, + {20,-10},{20,-38},{58,-38}}, color={255,0,255})); +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_dedicated.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.EnableLead_dedicated. +The instances enaLeaChiPum and disLeaChiPum shows how the +lead pump being enabled and disabled. +

                      +
                        +
                      • +For the instance enaLeaChiPum, the plant enabling input becomes +true at 200 second. At the meantime, the lead pump enabling output +becomes true. +
                      • +
                      • +For the instance disLeaChiPum, the plant and the lead chiller becomes +disabled at 3000 second. The lead pump thus becomes disabled. +
                      • +
                      +", revisions=" +
                        +
                      • +Arpil 4, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end EnableLead_dedicated; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_headered.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_headered.mo new file mode 100644 index 00000000000..d099ddea6b8 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_headered.mo @@ -0,0 +1,61 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation; +model EnableLead_headered + "Validate sequence for enabling lead pump of plants with headered primary chilled water pumps" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.EnableLead_headered + enaLeaChiPum(final nChi=2, have_WSE=true) + "Enable lead chilled water pump based on the status of chilled water isolation valves" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp isoVal1( + duration=3000, + startTime=300) + "Chilled water isolation valve position" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp isoVal2( + duration=3000, + startTime=900) + "Chilled water isolation valve position" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant wse(k=false) + "Waterside economizer status" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + +equation + connect(isoVal1.y, enaLeaChiPum.uChiWatIsoVal[1]) annotation (Line(points={{-18, + 20},{0,20},{0,-0.5},{18,-0.5}}, color={0,0,127})); + connect(isoVal2.y, enaLeaChiPum.uChiWatIsoVal[2]) annotation (Line(points={{-18, + -20},{0,-20},{0,0.5},{18,0.5}}, color={0,0,127})); + connect(wse.y, enaLeaChiPum.uWse) annotation (Line(points={{-18,-60},{10,-60}, + {10,-6},{18,-6}}, color={255,0,255})); +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_headered.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.EnableLead_headered. +

                      +", revisions=" +
                        +
                      • +Arpil 4, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end EnableLead_headered; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_localDp.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_localDp.mo new file mode 100644 index 00000000000..11a9ec9b4de --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_localDp.mo @@ -0,0 +1,117 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation; +model Speed_primary_localDp + "Validate sequence of controlling chilled water pump speed for primary-only plants with local DP sensor hardwired to the plant controller" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Speed_primary_localDp + chiPumSpe(nSen=2, nPum=2) + "Chilled water pump speed control based local pressure difference sensor" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse pumSta[2]( + final width=fill(0.9, 2), + final period=fill(10, 2), + final shift=fill(1, 2)) "Pump status" + annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant difPreSet( + final k=8.5*6894.75) + "Pressure difference setpoint" + annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin remPreSen1( + final offset=8.5*6894.75, + final freqHz=1/10, + final amplitude=1.5*6894.75) "Remote pressure difference sensor reading" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin remPreSen2( + final offset=8.5*6894.75, + final freqHz=1/10, + final startTime=2, + final amplitude=1*6894.75) "Remote pressure difference sensor reading" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin locPreSen( + final freqHz=1/5, + final amplitude=1*6894.75, + final offset=8.5*6894.75) "Local pressure difference sensor reading" + annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep( + final nout=2) "Replicate real input" + annotation (Placement(transformation(extent={{-30,-90},{-10,-70}}))); + +equation + connect(locPreSen.y, chiPumSpe.dpChiWat_local) + annotation (Line(points={{-38,80},{0,80},{0,8},{18,8}}, + color={0,0,127})); + connect(remPreSen1.y, chiPumSpe.dpChiWat_remote[1]) + annotation (Line(points={{-38,0},{-20,0},{-20,-4.5},{18,-4.5}}, + color={0,0,127})); + connect(remPreSen2.y, chiPumSpe.dpChiWat_remote[2]) + annotation (Line(points={{-38,-40},{-20,-40},{-20,-3.5},{18,-3.5}}, + color={0,0,127})); + connect(pumSta.y, chiPumSpe.uChiWatPum) + annotation (Line(points={{-38,40},{-20,40},{-20,4},{18,4}}, + color={255,0,255})); + connect(difPreSet.y, reaRep.u) + annotation (Line(points={{-38,-80},{-32,-80}}, color={0,0,127})); + connect(reaRep.y, chiPumSpe.dpChiWatSet_remote) + annotation (Line(points={{-8,-80},{0,-80},{0,-8},{18,-8}}, color={0,0,127})); + +annotation ( + experiment(StopTime=10.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_localDp.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Speed_primary_localDp. +

                      +

                      +It shows the process of specifying the chilled water pump speed +for a primary-only plant, with one local pressure sensor and two +remote pressure sensors. +

                      +
                        +
                      • +Both pumps become enabled at 1 second. Thus the pump speed +setpoint becomes non-zero. +
                      • +
                      • +After 1 seconds, the two remote pressure sensors have the measured values higher than +the setpoint. The reverse acting PID controller thus gives the minimum +output. The local pressure setpoint is at the minimum value (50000 Pa). +
                      • +
                      • +When the remote sensors have the measured values that becoome lower than the setpoint, +their reverse acting PID controllers give the output greater than the minimum. +The greater of the two output values from both PID controllers is picked for +specifying the local pressure setpoint (locDpSet.y). +
                      • +
                      • +The reverse acting PID controller for the local pressure control gives +minimum output (0.1) if the measured local pressure value is greater than its +setpoint. When the measured value becomes greater than its setpoint, +the PID controller increases its output, thus increases the chilled water +pump speed. +
                      • +
                      +", revisions=" +
                        +
                      • +Arpil 4, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end Speed_primary_localDp; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_remoteDp.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_remoteDp.mo new file mode 100644 index 00000000000..0ab5765c1fc --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_remoteDp.mo @@ -0,0 +1,99 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation; +model Speed_primary_remoteDp + "Validate sequence of controlling chilled water pump speed for primary-only plants with remote DP sensor hardwired to the plant controller" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Speed_primary_remoteDp + chiPumSpe(nSen=2, nPum=2) + "Chilled water pump speed control based remote pressure difference sensor" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + +//protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse pumSta[2]( + final width=fill(0.9, 2), + final period=fill(10, 2), + final shift=fill(1, 2)) "Pump status" + annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant difPreSet( + final k=8.5*6894.75) + "Pressure difference setpoint" + annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin remPreSen1( + final offset=8.5*6894.75, + final freqHz=1/10, + final amplitude=1.5*6894.75) "Remote pressure difference sensor reading" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin remPreSen2( + final offset=8.5*6894.75, + final freqHz=1/10, + final startTime=2, + final amplitude=1*6894.75) "Remote pressure difference sensor reading" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep( + final nout=2) "Replicate real input" + annotation (Placement(transformation(extent={{-30,-90},{-10,-70}}))); + +equation + connect(pumSta.y, chiPumSpe.uChiWatPum) + annotation (Line(points={{-38,40},{-20,40},{-20,8},{18,8}}, + color={255,0,255})); + connect(remPreSen1.y, chiPumSpe.dpChiWat_remote[1]) annotation (Line(points={{-38,0}, + {-10,0},{-10,-0.5},{18,-0.5}}, color={0,0,127})); + connect(remPreSen2.y, chiPumSpe.dpChiWat_remote[2]) annotation (Line(points={{-38,-40}, + {-28,-40},{-28,0.5},{18,0.5}}, color={0,0,127})); + connect(difPreSet.y, reaRep.u) + annotation (Line(points={{-38,-80},{-32,-80}}, color={0,0,127})); + connect(reaRep.y, chiPumSpe.dpChiWatSet_remote) annotation (Line(points={{-8, + -80},{0,-80},{0,-8},{18,-8}}, color={0,0,127})); + +annotation ( + experiment(StopTime=10.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_remoteDp.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Speed_primary_remoteDp. +

                      +

                      +It shows the process of specifying the chilled water pump speed +for a primary-only plant, with two remote pressure sensors hardwired +to the controller. +

                      +
                        +
                      • +Both of the pumps become enabled at 1 second. Thus the pump speed +setpoint becomes non-zero. +
                      • +
                      • +After 1 seconds, the two remote pressure sensors have the measured values higher +than the setpoint. The reverse acting PID controller thus gives the minimum output. +Thus the pump speed is minimum. +
                      • +
                      • +When the measured values become lower than the setpoint, the reverse acting PID +controller increases the output, thus increase the chilled water pump speed till +to the maximum. +
                      • +
                      +", revisions=" +
                        +
                      • +Arpil 4, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end Speed_primary_remoteDp; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/package.mo new file mode 100644 index 00000000000..d30e244dc53 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences; +package Validation "Collection of validation models" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/package.order new file mode 100644 index 00000000000..d16f96117bb --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/package.order @@ -0,0 +1,5 @@ +EnableLag_primary_dP +EnableLead_dedicated +EnableLead_headered +Speed_primary_localDp +Speed_primary_remoteDp diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/package.mo new file mode 100644 index 00000000000..d6272b5fe84 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/package.mo @@ -0,0 +1,45 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater; +package Subsequences "Chilled water pump control sequences" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains subsequences for chilled water pumps control for plants with +parallel chillers. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end Subsequences; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/package.order new file mode 100644 index 00000000000..9e96bb60c2d --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/package.order @@ -0,0 +1,6 @@ +EnableLag_primary_dP +EnableLead_dedicated +EnableLead_headered +Speed_primary_localDp +Speed_primary_remoteDp +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Validation/Controller.mo new file mode 100644 index 00000000000..63784202069 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Validation/Controller.mo @@ -0,0 +1,184 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Validation; +model Controller "Validate chiller water pump control sequence" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Controller + heaNoLoc( + final nPum=3, + final nPum_nominal=3) + "Pump speed control for plant with headered primary chilled water pump and without local DP sensor" + annotation (Placement(transformation(extent={{80,150},{100,170}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Controller + dedNoLoc( + final have_heaPum=false, + final nPum=3, + final nPum_nominal=3) + "Pump speed control for plant with dedicated primary chilled water pump and without local DP sensor" + annotation (Placement(transformation(extent={{80,60},{100,80}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Controller + dedLoc( + final have_heaPum=false, + final have_locSen=true, + final nPum=3, + final nPum_nominal=3) + "Pump speed control for plant with dedicated primary chilled water pump and with local DP sensor" + annotation (Placement(transformation(extent={{80,-90},{100,-70}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp isoVal[2]( + duration=fill(1200, 2), + startTime={0,300}) + "Chilled water isolation valve position" + annotation (Placement(transformation(extent={{-100,130},{-80,150}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt[3]( + final k={2,1,3}) + "Chilled water pump operating priority" + annotation (Placement(transformation(extent={{-60,150},{-40,170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiWatFlo( + final amplitude=0.25, + final freqHz=1/3600, + final offset=0.25) "Measured chilled water flow rate" + annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin remPreSen1( + final offset=8.4*6894.75, + final freqHz=1/3600, + final amplitude=0.2*6894.75) "Remote pressure difference sensor reading" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin remPreSen2( + final offset=8.5*6894.75, + final freqHz=1/3600, + final startTime=2, + final amplitude=0.05*6894.75) "Remote pressure difference sensor reading" + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant difPreSet( + final k=8.5*6894.75) + "Pressure difference setpoint" + annotation (Placement(transformation(extent={{-60,-140},{-40,-120}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin locPreSen( + final offset=8.5*6894.75, + final freqHz=1/3600, + final startTime=2, + final amplitude=0.2*6894.75) "Local pressure difference sensor reading" + annotation (Placement(transformation(extent={{-100,-120},{-80,-100}}))); + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold leaChiProOn( + final trueHoldDuration=2000, falseHoldDuration=0) + "Lead chiller proven on status" + annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=3) "Replicate plant enabling status" + annotation (Placement(transformation(extent={{-20,30},{0,50}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse enaPla( + final period=7200, + final shift=200) + "Plant enabling status" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse leaChiEna( + final period=3600, + final shift=300) "Lead chiller enabling status" + annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep( + final nout=2) + "Replicate real input" + annotation (Placement(transformation(extent={{-20,-140},{0,-120}}))); + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol[3]( + trueHoldDuration=fill(5, 3)) "Chilled water pump status" + annotation (Placement(transformation(extent={{0,110},{20,130}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre[3] "Break loop" + annotation (Placement(transformation(extent={{80,110},{100,130}}))); + +equation + connect(conInt.y, heaNoLoc.uPumLeaLag) + annotation (Line(points={{-38,160},{32,160},{32,171},{78,171}}, color={255,127,0})); + connect(chiWatFlo.y, heaNoLoc.VChiWat_flow) + annotation (Line(points={{-38,-50},{48,-50},{48,155},{78,155}}, + color={0,0,127})); + connect(remPreSen1.y, heaNoLoc.dpChiWat_remote[1]) + annotation (Line(points={{-78,-70},{52,-70},{52,151},{78,151}}, + color={0,0,127})); + connect(remPreSen2.y, heaNoLoc.dpChiWat_remote[2]) + annotation (Line(points={{-38,-90},{52,-90},{52,151},{78,151}}, + color={0,0,127})); + connect(remPreSen1.y, dedNoLoc.dpChiWat_remote[1]) + annotation (Line(points={{-78,-70},{52,-70},{52,61},{78,61}}, + color={0,0,127})); + connect(remPreSen2.y, dedNoLoc.dpChiWat_remote[2]) + annotation (Line(points={{-38,-90},{52,-90},{52,61},{78,61}}, + color={0,0,127})); + connect(locPreSen.y, dedLoc.dpChiWat_local) + annotation (Line(points={{-78,-110},{48,-110},{48,-87},{78,-87}}, color={0,0,127})); + connect(remPreSen1.y, dedLoc.dpChiWat_remote[1]) + annotation (Line(points={{-78,-70},{52,-70},{52,-89},{78,-89}}, + color={0,0,127})); + connect(remPreSen2.y, dedLoc.dpChiWat_remote[2]) + annotation (Line(points={{-38,-90},{52,-90},{52,-89},{78,-89}}, + color={0,0,127})); + connect(enaPla.y, dedNoLoc.uPla) annotation (Line(points={{-38,60},{20,60},{ + 20,79},{78,79}}, color={255,0,255})); + connect(enaPla.y, dedLoc.uPla) annotation (Line(points={{-38,60},{20,60},{20, + -71},{78,-71}}, color={255,0,255})); + connect(leaChiEna.y, dedNoLoc.uLeaChiEna) annotation (Line(points={{-38,10},{ + 24,10},{24,75},{78,75}}, color={255,0,255})); + connect(leaChiEna.y, dedLoc.uLeaChiEna) annotation (Line(points={{-38,10},{24, + 10},{24,-75},{78,-75}}, color={255,0,255})); + connect(leaChiEna.y, leaChiProOn.u) annotation (Line(points={{-38,10},{-30,10}, + {-30,-20},{-22,-20}}, color={255,0,255})); + connect(leaChiProOn.y, dedNoLoc.uLeaChiSta) annotation (Line(points={{2,-20}, + {28,-20},{28,73},{78,73}},color={255,0,255})); + connect(leaChiProOn.y, dedLoc.uLeaChiSta) annotation (Line(points={{2,-20},{ + 28,-20},{28,-77},{78,-77}}, color={255,0,255})); + connect(leaChiProOn.y, dedNoLoc.uLeaChiWatReq) annotation (Line(points={{2,-20}, + {28,-20},{28,71},{78,71}}, color={255,0,255})); + connect(leaChiProOn.y, dedLoc.uLeaChiWatReq) annotation (Line(points={{2,-20}, + {28,-20},{28,-79},{78,-79}}, color={255,0,255})); + connect(enaPla.y, booRep.u) annotation (Line(points={{-38,60},{-30,60},{-30,40}, + {-22,40}}, color={255,0,255})); + connect(booRep.y, dedNoLoc.uChiWatPum) annotation (Line(points={{2,40},{32,40}, + {32,77},{78,77}}, color={255,0,255})); + connect(booRep.y, dedLoc.uChiWatPum) annotation (Line(points={{2,40},{32,40}, + {32,-73},{78,-73}},color={255,0,255})); + connect(difPreSet.y, reaRep.u) + annotation (Line(points={{-38,-130},{-22,-130}}, color={0,0,127})); + connect(reaRep.y, heaNoLoc.dpChiWatSet_remote) annotation (Line(points={{2,-130}, + {56,-130},{56,149},{78,149}}, color={0,0,127})); + connect(reaRep.y, dedNoLoc.dpChiWatSet_remote) annotation (Line(points={{2,-130}, + {56,-130},{56,59},{78,59}}, color={0,0,127})); + connect(reaRep.y, dedLoc.dpChiWatSet_remote) annotation (Line(points={{2,-130}, + {56,-130},{56,-91},{78,-91}}, color={0,0,127})); + connect(isoVal.y, heaNoLoc.uChiWatIsoVal) annotation (Line(points={{-78,140}, + {40,140},{40,157},{78,157}},color={0,0,127})); + connect(truFalHol.y, heaNoLoc.uChiWatPum) annotation (Line(points={{22,120},{ + 44,120},{44,167},{78,167}}, color={255,0,255})); + connect(heaNoLoc.yChiWatPum, pre.u) annotation (Line(points={{102,160},{120,160}, + {120,140},{70,140},{70,120},{78,120}}, color={255,0,255})); + connect(pre.y, truFalHol.u) annotation (Line(points={{102,120},{110,120},{110, + 100},{-10,100},{-10,120},{-2,120}}, color={255,0,255})); +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Validation/Controller.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Controller. +

                      +", revisions=" +
                        +
                      • +Arpil 4, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-120,-180},{140,180}}))); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Validation/package.mo new file mode 100644 index 00000000000..abf439d8131 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater; +package Validation "Collection of validation models" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Validation/package.order new file mode 100644 index 00000000000..8cba75e31a7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Validation/package.order @@ -0,0 +1 @@ +Controller diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/package.mo new file mode 100644 index 00000000000..75356b59422 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/package.mo @@ -0,0 +1,32 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps; +package ChilledWater "Sequences for chilled water pump control" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains control sequences for chilled water pumps. +The implementations are based on section 5.20.6 Primary chilled water pumps, +in ASHRAE Guideline36-2021. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + extent={{-66,66},{68,-68}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), Polygon( + points={{0,66},{0,-68},{68,0},{0,66}}, + lineColor={0,0,0}, + fillColor={0,127,255}, + fillPattern=FillPattern.Solid)})); +end ChilledWater; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/package.order new file mode 100644 index 00000000000..9ffbffcb990 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/package.order @@ -0,0 +1,3 @@ +Controller +Subsequences +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Controller.mo new file mode 100644 index 00000000000..a77af418a44 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Controller.mo @@ -0,0 +1,318 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater; +block Controller "Condenser water pump controller" + + parameter Boolean have_heaPum = true + "Flag of headered condenser water pumps design: true=headered, false=dedicated"; + parameter Boolean have_WSE = true + "Flag of waterside economizer: true=have WSE, false=no WSE"; + parameter Boolean fixSpe = false + "Flag to indicate if the plant has fix speed condenser water pump"; + parameter Integer nChi=2 "Total number of chillers"; + parameter Integer nConWatPum=2 "Total number of condenser water pumps"; + parameter Integer totSta=6 + "Total number of plant stages, including stage zero and the stages with a WSE, if applicable" + annotation (Dialog(group="Stage design speed")); + parameter Integer nChiSta = 3 + "Total number of chiller stages, including stage zero but not the stages with a WSE, if applicable"; + parameter Real staVec[totSta]={0,0.5,1,1.5,2,2.5} + "Chiller stage vector, element value like x.5 means chiller stage x plus WSE" + annotation (Dialog(group="Stage design speed")); + parameter Real desConWatPumSpe[totSta]={0,0.5,0.75,0.6,0.75,0.9} + "Design condenser water pump speed setpoints, according to current chiller stage and WSE status" + annotation (Dialog(group="Stage design speed")); + parameter Real desConWatPumNum[totSta]={0,1,1,2,2,2} + "Design number of condenser water pumps that should be ON, according to current chiller stage and WSE status" + annotation (Dialog(group="Stage design speed")); + parameter Real desChiNum[nChiSta]={0,1,2} + "Design number of chiller that should be ON, according to current chiller stage" + annotation (Dialog(group="Stage design speed", enable=fixSpe)); + parameter Real pumSpeChe = 0.05 + "Lower threshold value to check if condenser water pump has achieved setpoint"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiConIsoVal[nChi] + if have_heaPum + "Chiller condenser water isolation valve status" + annotation (Placement(transformation(extent={{-160,130},{-120,170}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiEna + "Lead chiller enabling status: true=lead chiller is enabled" + annotation (Placement(transformation(extent={{-160,100},{-120,140}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiSta + "Lead chiller status: true=lead chiller proven on" + annotation (Placement(transformation(extent={{-162,70},{-122,110}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaConWatReq + "Status indicating if chiller is requesting condenser water" + annotation (Placement(transformation(extent={{-162,40},{-122,80}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEnaPla + "True: plant is just enabled" + annotation(Placement(transformation(extent={{-160,10},{-120,50}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiSta + "Current chiller stage that does not include WSE" + annotation (Placement(transformation(extent={{-160,-26},{-120,14}}), + iconTransformation(extent={{-140,-30},{-100,10}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWSE if have_WSE + "Water side economizer status: true = ON, false = OFF" + annotation (Placement(transformation(extent={{-160,-60},{-120,-20}}), + iconTransformation(extent={{-140,-50},{-100,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpeSet( + final min=0, + final max=1, + final unit="1") if not fixSpe + "Condenser water pump speed setpoint" + annotation (Placement(transformation(extent={{-160,-90},{-120,-50}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpe( + final min=0, + final max=1, + final unit="1") if not fixSpe + "Current condenser water pump speed" + annotation (Placement(transformation(extent={{-160,-130},{-120,-90}}), + iconTransformation(extent={{-140,-90},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uConWatPum[nConWatPum] if fixSpe + "Status indicating if condenser water pump is running" + annotation (Placement(transformation(extent={{-160,-160},{-120,-120}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLeaPum + "Lead pump status setpoint" + annotation (Placement(transformation(extent={{120,110},{160,150}}), + iconTransformation(extent={{100,70},{140,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yDesConWatPumSpe + if not fixSpe + "Condenser water pump design speed at current stage" + annotation (Placement(transformation(extent={{120,40},{160,80}}), + iconTransformation(extent={{100,10},{140,50}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yConWatPumNum + "Number of operating condenser water pumps" + annotation (Placement(transformation(extent={{120,0},{160,40}}), + iconTransformation(extent={{100,-50},{140,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yPumSpeChe + "Flag to indicate if pump speed achieves setpoint" + annotation (Placement(transformation(extent={{120,-70},{160,-30}}), + iconTransformation(extent={{100,-110},{140,-70}}))); + +protected + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.EnableLead_headered + enaLeaHeaPum(final have_WSE=have_WSE) if have_heaPum + "Enable lead pumps for plants with headered condenser water pump" + annotation (Placement(transformation(extent={{20,120},{40,140}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.EnableLead_dedicated + enaLeaDedPum if not have_heaPum + "Enable lead pumps for plants with dedicated condenser water pump" + annotation (Placement(transformation(extent={{20,70},{40,90}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Speed + pumSpe( + final have_WSE=have_WSE, + final fixSpe=fixSpe, + final totSta=totSta, + final nChiSta=nChiSta, + final staVec=staVec, + final desConWatPumSpe=desConWatPumSpe, + final desConWatPumNum=desConWatPumNum, + final desChiNum=desChiNum) + "Design pump speed of condenser water pump at current stage" + annotation (Placement(transformation(extent={{20,-20},{40,0}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract speDif if not fixSpe + "Calculate difference between speed setpoint and operating speed" + annotation (Placement(transformation(extent={{-80,-100},{-60,-80}}))); + Buildings.Controls.OBC.CDL.Reals.Abs abs if not fixSpe + "Absolute difference" + annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys(final uLow=pumSpeChe, + final uHigh=2*pumSpeChe) if not fixSpe + "Check if operating speed equals to setpoint" + annotation (Placement(transformation(extent={{0,-100},{20,-80}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 if not fixSpe + "Logical not" + annotation (Placement(transformation(extent={{40,-100},{60,-80}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) + if not fixSpe + "Constant zero" + annotation (Placement(transformation(extent={{-60,42},{-40,62}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant zer1(final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{-60,2},{-40,22}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi if not fixSpe + "Real switch" + annotation (Placement(transformation(extent={{80,50},{100,70}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi "Integer switch" + annotation (Placement(transformation(extent={{80,10},{100,30}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and" + annotation (Placement(transformation(extent={{80,-60},{100,-40}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=false) if not have_WSE + "Logical true" + annotation (Placement(transformation(extent={{-60,100},{-40,120}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[nConWatPum] if fixSpe + "Convert boolean to integer" + annotation (Placement(transformation(extent={{-100,-150},{-80,-130}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum mulSumInt( + final nin=nConWatPum) if fixSpe + "Calculate total number of pumps that are running" + annotation (Placement(transformation(extent={{-40,-150},{-20,-130}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu if fixSpe + "Check if total number of running pumps are equal to setpoint" + annotation (Placement(transformation(extent={{40,-130},{60,-110}}))); + +equation + connect(uWSE, enaLeaHeaPum.uWseConIsoVal) + annotation (Line(points={{-140,-40},{0,-40},{0,130},{18,130}}, + color={255,0,255})); + connect(enaLeaDedPum.uLeaChiSta, uLeaChiSta) + annotation (Line(points={{18,76},{-90,76},{-90,90},{-142,90}}, color={255,0,255})); + connect(enaLeaDedPum.uLeaConWatReq, uLeaConWatReq) + annotation (Line(points={{18,72},{-80,72},{-80,60},{-142,60}}, + color={255,0,255})); + connect(uWSE, pumSpe.uWSE) + annotation (Line(points={{-140,-40},{0,-40},{0,-14},{18,-14}}, color={255,0,255})); + connect(enaLeaHeaPum.yLea, yLeaPum) + annotation (Line(points={{42,130},{140,130}}, color={255,0,255})); + connect(enaLeaDedPum.yLea, yLeaPum) + annotation (Line(points={{42,80},{50,80},{50,130},{140,130}}, color={255,0,255})); + connect(speDif.y, abs.u) + annotation (Line(points={{-58,-90},{-42,-90}}, color={0,0,127})); + connect(hys.y, not1.u) + annotation (Line(points={{22,-90},{38,-90}}, color={255,0,255})); + connect(uChiSta, pumSpe.uChiSta) + annotation (Line(points={{-140,-6},{18,-6}}, + color={255,127,0})); + connect(swi.y,yDesConWatPumSpe) + annotation (Line(points={{102,60},{140,60}}, color={0,0,127})); + connect(enaLeaDedPum.yLea, swi.u2) + annotation (Line(points={{42,80},{50,80},{50,60},{78,60}}, color={255,0,255})); + connect(enaLeaHeaPum.yLea, swi.u2) + annotation (Line(points={{42,130},{50,130},{50,60},{78,60}}, color={255,0,255})); + connect(zer.y, swi.u3) + annotation (Line(points={{-38,52},{78,52}}, color={0,0,127})); + connect(enaLeaHeaPum.yLea, intSwi.u2) + annotation (Line(points={{42,130},{50,130},{50,20},{78,20}}, color={255,0,255})); + connect(enaLeaDedPum.yLea, intSwi.u2) + annotation (Line(points={{42,80},{50,80},{50,20},{78,20}}, color={255,0,255})); + connect(pumSpe.yConWatPumNum, intSwi.u1) + annotation (Line(points={{42,-10},{68,-10},{68,28},{78,28}}, color={255,127,0})); + connect(intSwi.y, yConWatPumNum) + annotation (Line(points={{102,20},{140,20}}, color={255,127,0})); + connect(zer1.y, intSwi.u3) + annotation (Line(points={{-38,12},{78,12}}, color={255,127,0})); + connect(and2.y, yPumSpeChe) + annotation (Line(points={{102,-50},{140,-50}}, color={255,0,255})); + connect(not1.y, and2.u2) + annotation (Line(points={{62,-90},{70,-90},{70,-58},{78,-58}}, + color={255,0,255})); + connect(enaLeaHeaPum.yLea, and2.u1) + annotation (Line(points={{42,130},{50,130},{50,-50},{78,-50}}, color={255,0,255})); + connect(enaLeaDedPum.yLea, and2.u1) + annotation (Line(points={{42,80},{50,80},{50,-50},{78,-50}}, color={255,0,255})); + connect(pumSpe.yDesConWatPumSpe, swi.u1) + annotation (Line(points={{42,-4},{60,-4},{60,68},{78,68}}, color={0,0,127})); + connect(con.y, enaLeaHeaPum.uWseConIsoVal) + annotation (Line(points={{-38,110},{-20,110},{-20,130},{18,130}}, + color={255,0,255})); + connect(con.y, pumSpe.uWSE) + annotation (Line(points={{-38,110},{-20,110},{-20,-14},{18,-14}}, + color={255,0,255})); + connect(uLeaChiEna, enaLeaDedPum.uLeaChiEna) + annotation (Line(points={{-140,120},{-80,120},{-80,84},{18,84}}, + color={255,0,255})); + connect(enaLeaHeaPum.uChiConIsoVal, uChiConIsoVal) annotation (Line(points={{18,136}, + {-40,136},{-40,150},{-140,150}}, color={255,0,255})); + connect(uConWatPum, booToInt.u) + annotation (Line(points={{-140,-140},{-102,-140}}, color={255,0,255})); + connect(booToInt.y, mulSumInt.u) + annotation (Line(points={{-78,-140},{-42,-140}}, color={255,127,0})); + connect(mulSumInt.y, intEqu.u2) annotation (Line(points={{-18,-140},{20,-140}, + {20,-128},{38,-128}}, color={255,127,0})); + connect(intSwi.y, intEqu.u1) annotation (Line(points={{102,20},{110,20},{110,-30}, + {30,-30},{30,-120},{38,-120}}, color={255,127,0})); + connect(intEqu.y, and2.u2) annotation (Line(points={{62,-120},{70,-120},{70,-58}, + {78,-58}}, color={255,0,255})); + connect(abs.y, hys.u) annotation (Line(points={{-18,-90},{-2,-90}}, + color={0,0,127})); + connect(uConWatPumSpeSet, speDif.u1) annotation (Line(points={{-140,-70},{ + -100,-70},{-100,-84},{-82,-84}}, + color={0,0,127})); + connect(uConWatPumSpe, speDif.u2) annotation (Line(points={{-140,-110},{-100, + -110},{-100,-96},{-82,-96}}, + color={0,0,127})); + connect(uEnaPla, enaLeaHeaPum.uEnaPla) annotation (Line(points={{-140,30},{10, + 30},{10,124},{18,124}}, color={255,0,255})); + connect(uEnaPla, enaLeaDedPum.uEnaPla) annotation (Line(points={{-140,30},{10, + 30},{10,88},{18,88}}, color={255,0,255})); + +annotation (Dialog(tab="Advanced"), + defaultComponentName="conWatPumCon", + Icon(coordinateSystem(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={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,60},{82,-60}}, + lineColor={28,108,200}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Polygon( + points={{-80,60},{-14,4},{-80,-60},{-80,60}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-120,-160},{120,160}})), + Documentation(info=" +

                      +Block that generates control signals for condenser water pumps control, +according to ASHRAE Guideline36-2021, +section 5.20.9 Condenser water pumps. +

                      +

                      +This sequence contains three subsequences: +

                      + +", +revisions=" +
                        +
                      • +Febuary 4, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/EnableLead_dedicated.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/EnableLead_dedicated.mo new file mode 100644 index 00000000000..35c1ab74534 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/EnableLead_dedicated.mo @@ -0,0 +1,145 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences; +block EnableLead_dedicated + "Sequence for enabling lead pump of plants with dedicated condenser water pumps" + + final parameter Real offTimThr( + final unit="s", + final quantity="Time")=180 + "Threshold to check lead chiller OFF time"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEnaPla + "True: plant is just enabled" + annotation(Placement(transformation(extent={{-140,50},{-100,90}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiEna + "Lead chiller commanded on status" + annotation (Placement(transformation(extent={{-140,10},{-100,50}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiSta + "Lead chiller proven on status" + annotation (Placement(transformation(extent={{-140,-60},{-100,-20}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaConWatReq + "Status indicating if chiller is requesting condenser water" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLea "Lead pump status" + annotation (Placement(transformation(extent={{100,50},{140,90}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Or or2 "Logical or" + annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Latch leaPumSta + "Lead pump status" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim( + final t=offTimThr) + "Check if the chiller has been proven off for more than threshold time" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Not not3 + "Check if the lead chiller is disabled" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + Buildings.Controls.OBC.CDL.Logical.Or or1 + "Logical or" + annotation (Placement(transformation(extent={{60,60},{80,80}}))); + +equation + connect(uLeaConWatReq, not1.u) + annotation (Line(points={{-120,-80},{-82,-80}}, color={255,0,255})); + connect(uLeaChiEna, leaPumSta.u) + annotation (Line(points={{-120,30},{18,30}}, color={255,0,255})); + connect(uLeaChiSta, not2.u) + annotation (Line(points={{-120,-40},{-82,-40}}, color={255,0,255})); + connect(not2.y, tim.u) + annotation (Line(points={{-58,-40},{-42,-40}}, color={255,0,255})); + connect(not1.y, or2.u2) + annotation (Line(points={{-58,-80},{20,-80},{20,-48},{38,-48}}, + color={255,0,255})); + connect(or2.y, and2.u2) + annotation (Line(points={{62,-40},{80,-40},{80,-20},{-30,-20},{-30,-8}, + {-22,-8}},color={255,0,255})); + connect(uLeaChiEna, not3.u) + annotation (Line(points={{-120,30},{-80,30},{-80,0},{-62,0}}, + color={255,0,255})); + connect(not3.y, and2.u1) + annotation (Line(points={{-38,0},{-22,0}}, color={255,0,255})); + connect(and2.y, leaPumSta.clr) + annotation (Line(points={{2,0},{10,0},{10,24},{18,24}}, color={255,0,255})); + connect(tim.passed, or2.u1) + annotation (Line(points={{-18,-48},{0,-48},{0,-40},{38,-40}}, + color={255,0,255})); + connect(or1.y, yLea) + annotation (Line(points={{82,70},{120,70}}, color={255,0,255})); + connect(uEnaPla, or1.u1) + annotation (Line(points={{-120,70},{58,70}}, color={255,0,255})); + connect(leaPumSta.y, or1.u2) annotation (Line(points={{42,30},{50,30},{50,62}, + {58,62}}, color={255,0,255})); + +annotation ( + defaultComponentName="enaLeaConPum", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-98,54},{-44,32}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uLeaChiEna"), + Text( + extent={{42,12},{96,-10}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yLeaPum"), + Text( + extent={{-100,150},{100,110}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-98,-28},{-44,-50}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uLeaChiOn"), + Text( + extent={{-98,-68},{-26,-90}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uLeaConWatReq"), + Text( + extent={{-96,90},{-50,70}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uEnaPla")}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

                      +Block that enable and disable lead condenser water pump, for plants +with dedicated condenser water pumps, +according to ASHRAE Guideline36-2021, +section 5.20.9 Condenser water pumps, part 5.20.9.4. +

                      +

                      +The lead condenser water pump should be enabled when lead chiller is commanded +to run (uLeaChiEna = true). It should be disabled when the lead +chiller is disabled and either the lead chiller has been proven off +(uLeaChiSta = false) for offTimThr, i.e. 3 minutes, or +is not requesting condenser water flow (uLeaConWatReq = false). +

                      +", revisions=" +
                        +
                      • +January 28, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end EnableLead_dedicated; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/EnableLead_headered.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/EnableLead_headered.mo new file mode 100644 index 00000000000..0af50b2ff1e --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/EnableLead_headered.mo @@ -0,0 +1,132 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences; +block EnableLead_headered + "Sequence for enabling lead pump of plants with headered condenser water pumps" + parameter Boolean have_WSE = true + "Flag of waterside economizer: true=have WSE, false=no WSE"; + parameter Integer nChi=2 "Total number of chiller"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWseConIsoVal + if have_WSE "WSE condenser water isolation valve commanded status" + annotation (Placement(transformation(extent={{-140,-28},{-100,12}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiConIsoVal[nChi] + "Chiller condenser water isolation valve commanded status" + annotation (Placement(transformation(extent={{-140,30},{-100,70}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEnaPla + "True: plant is just enabled" + annotation(Placement(transformation(extent={{-140,-80},{-100,-40}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLea "Lead pump status" + annotation (Placement(transformation(extent={{100,-20},{140,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Switch leaPumSta "Lead pump status" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1( + final k=false) "Logical false" + annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=true) "Logical true" + annotation (Placement(transformation(extent={{-20,70},{0,90}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2 "Logical or" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con2( + final k=false) if not have_WSE + "Logical false" + annotation (Placement(transformation(extent={{-80,-48},{-60,-28}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr( + final nin=nChi) + "Check if there is any chiller enabled" + annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); + Buildings.Controls.OBC.CDL.Logical.Or or1 "Logical or" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + +equation + connect(con1.y, leaPumSta.u3) + annotation (Line(points={{2,-80},{40,-80},{40,-8},{58,-8}}, + color={255,0,255})); + connect(con.y, leaPumSta.u1) + annotation (Line(points={{2,80},{40,80},{40,8},{58,8}}, color={255,0,255})); + connect(leaPumSta.y, yLea) + annotation (Line(points={{82,0},{120,0}}, color={255,0,255})); + connect(uWseConIsoVal, or2.u2) + annotation (Line(points={{-120,-8},{-42,-8}}, + color={255,0,255})); + connect(con2.y, or2.u2) + annotation (Line(points={{-58,-38},{-50,-38},{-50,-8},{-42,-8}}, + color={255,0,255})); + connect(uChiConIsoVal, mulOr.u) + annotation (Line(points={{-120,50},{-82,50}}, color={255,0,255})); + connect(mulOr.y, or2.u1) + annotation (Line(points={{-58,50},{-50,50},{-50,0},{-42,0}}, + color={255,0,255})); + connect(or2.y, or1.u1) annotation (Line(points={{-18,0},{-2,0}}, + color={255,0,255})); + connect(uEnaPla, or1.u2) annotation (Line(points={{-120,-60},{-10,-60},{-10,-8}, + {-2,-8}}, color={255,0,255})); + connect(or1.y, leaPumSta.u2) + annotation (Line(points={{22,0},{58,0}}, color={255,0,255})); + +annotation ( + defaultComponentName="enaLeaConPum", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,150},{100,110}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-98,72},{-44,50}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChiConIsoVal"), + Text( + extent={{42,12},{96,-10}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yLeaPum"), + Text( + extent={{-98,12},{-44,-10}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uWseConIsoVal"), + Text( + extent={{-98,-50},{-58,-68}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uEnaPla")}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

                      +Block that enable and disable lead condenser water pump, for plants +with headered condenser water pumps, +according to ASHRAE Guideline36-2021, +section 5.20.9 Condenser water pumps, part 5.20.9.2-3. +

                      +
                        +
                      1. +Condenser water pumps shall be lead-lag. +
                      2. +
                      3. +The lead condenser water pump shall be enabled when condenser water +isolation valve of any chiller uChiConIsoVal or water side economizer +uWseConIsoVal is commanded open. It shall be disabled when +all chiller and water side economizer condenser water isolation valves are +commanded closed. +
                      4. +
                      +", revisions=" +
                        +
                      • +January 28, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end EnableLead_headered; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Speed.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Speed.mo new file mode 100644 index 00000000000..78b46f7b91c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Speed.mo @@ -0,0 +1,272 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences; +block Speed + "Output design speed of condenser water pumps at current stage" + + parameter Boolean have_WSE = true + "Flag to indicate if the plant has water side economizer"; + parameter Boolean fixSpe = false + "Flag to indicate if the plant has fix speed condenser water pump"; + parameter Integer totSta = 6 + "Total number of plant stages, including stage zero and the stages with a WSE, if applicable"; + parameter Integer nChiSta = 3 + "Total number of chiller stages, including stage zero but not the stages with a WSE, if applicable"; + parameter Real staVec[totSta] = {0, 0.5, 1, 1.5, 2, 2.5} + "Plant stage vector, element value like x.5 means chiller stage x plus WSE"; + parameter Real desConWatPumSpe[totSta] = {0, 0.5, 0.75, 0.6, 0.75, 0.9} + "Design condenser water pump speed setpoint, according to current chiller stage and WSE status" + annotation (Dialog(group="Setpoint according to stage")); + parameter Real desConWatPumNum[totSta] = {0,1,1,2,2,2} + "Design number of condenser water pumps that should be ON, according to current chiller stage and WSE status" + annotation (Dialog(group="Setpoint according to stage")); + parameter Real desChiNum[nChiSta] = {0, 1, 2} + "Design number of chiller that should be ON, according to current chiller stage" + annotation (Dialog(group="Setpoint according to stage", enable=fixSpe)); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiSta + "Current chiller stage index that does not include the WSE" + annotation (Placement(transformation(extent={{-180,80},{-140,120}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWSE if have_WSE + "Water side economizer status: true = ON, false = OFF" + annotation (Placement(transformation(extent={{-180,-60},{-140,-20}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yConWatPumNum + "Design number of operating condenser water pumps at current stage" + annotation (Placement(transformation(extent={{140,-40},{180,0}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yDesConWatPumSpe + if not fixSpe + "Design condenser water pump speed at current stage" + annotation (Placement(transformation(extent={{140,0},{180,40}}), + iconTransformation(extent={{100,40},{140,80}}))); + +protected + Buildings.Controls.OBC.CDL.Routing.RealExtractor conWatPumOn( + final nin=totSta) if not fixSpe + "Number of condenser water pump should be on" + annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor conWatPumSpe( + final nin=totSta) if not fixSpe + "Condenser water pump speed" + annotation (Placement(transformation(extent={{80,10},{100,30}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt if not fixSpe + "Convert real input to integer output" + annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1[totSta]( + final k=desConWatPumSpe) if not fixSpe + "Condenser water pump speed setpoint" + annotation (Placement(transformation(extent={{40,10},{60,30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2[totSta]( + final k=desConWatPumNum) if not fixSpe + "Number of condenser water pump should be on" + annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea if not fixSpe + "Convert integer to real number" + annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3[totSta]( + final k=staVec) if not fixSpe + "Chiller stage vector, element value like x.5 means chiller stage x plus WSE" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( + final realTrue=0.5) if have_WSE + "Convert boolean input to real output" + annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Add add2 if not fixSpe + "Add two real inputs" + annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep( + final nout=totSta) if not fixSpe + "Replicate real input" + annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract sub1[totSta] if not fixSpe + "Add two real inputs" + annotation (Placement(transformation(extent={{0,70},{20,90}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greEquThr[totSta]( + final t=fill(-0.1, totSta)) if not fixSpe + "Identify current stage" + annotation (Placement(transformation(extent={{40,70},{60,90}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[totSta] + if not fixSpe + "Convert boolean to integer" + annotation (Placement(transformation(extent={{80,70},{100,90}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum mulSumInt( + final nin=totSta) if not fixSpe + "Current stage index" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con4( + final k=0) if not have_WSE + "Constant zero" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con5[nChiSta]( + final k=desChiNum) if fixSpe + "Number of chiller should be enabled" + annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor conWatPumOn1( + final nin=nChiSta) if fixSpe + "Number of condenser water pump should be on" + annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 if fixSpe + "Convert real input to integer output" + annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); + Buildings.Controls.OBC.CDL.Integers.AddParameter addPar( + final p=1) + if fixSpe + "Change the chiller stage index to the index for downstream selection" + annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); + +equation + connect(con1.y,conWatPumSpe. u) + annotation (Line(points={{62,20},{78,20}}, color={0,0,127})); + connect(con2.y,conWatPumOn. u) + annotation (Line(points={{2,-20},{18,-20}}, color={0,0,127})); + connect(uChiSta,intToRea. u) + annotation (Line(points={{-160,100},{-122,100}}, color={255,127,0})); + connect(conWatPumSpe.y, yDesConWatPumSpe) + annotation (Line(points={{102,20},{160,20}}, color={0,0,127})); + connect(yConWatPumNum, reaToInt.y) + annotation (Line(points={{160,-20},{82,-20}}, color={255,127,0})); + connect(conWatPumOn.y, reaToInt.u) + annotation (Line(points={{42,-20},{58,-20}}, color={0,0,127})); + connect(uWSE, booToRea.u) + annotation (Line(points={{-160,-40},{-122,-40}}, color={255,0,255})); + connect(intToRea.y, add2.u1) + annotation (Line(points={{-98,100},{-90,100},{-90,106},{-82,106}}, color={0,0,127})); + connect(booToRea.y, add2.u2) + annotation (Line(points={{-98,-40},{-90,-40},{-90,94},{-82,94}}, color={0,0,127})); + connect(add2.y, reaRep.u) + annotation (Line(points={{-58,100},{-42,100}}, color={0,0,127})); + connect(sub1.y,greEquThr. u) + annotation (Line(points={{22,80},{38,80}}, color={0,0,127})); + connect(greEquThr.y, booToInt.u) + annotation (Line(points={{62,80},{78,80}}, color={255,0,255})); + connect(mulSumInt.y, conWatPumSpe.index) + annotation (Line(points={{-38,0},{90,0},{90,8}}, color={255,127,0})); + connect(mulSumInt.y, conWatPumOn.index) + annotation (Line(points={{-38,0},{-30,0},{-30,-40},{30,-40},{30,-32}}, + color={255,127,0})); + connect(booToInt.y, mulSumInt.u) + annotation (Line(points={{102,80},{120,80},{120,40},{-80,40},{-80,0},{-62,0}}, + color={255,127,0})); + connect(con4.y, add2.u2) + annotation (Line(points={{-98,0},{-90,0},{-90,94},{-82,94}}, color={0,0,127})); + connect(con5.y, conWatPumOn1.u) + annotation (Line(points={{2,-60},{18,-60}}, color={0,0,127})); + connect(conWatPumOn1.y, reaToInt1.u) + annotation (Line(points={{42,-60},{58,-60}}, color={0,0,127})); + connect(reaToInt1.y, yConWatPumNum) annotation (Line(points={{82,-60},{120,-60}, + {120,-20},{160,-20}}, color={255,127,0})); + connect(reaRep.y, sub1.u1) annotation (Line(points={{-18,100},{-10,100},{-10,86}, + {-2,86}}, color={0,0,127})); + connect(con3.y, sub1.u2) annotation (Line(points={{-18,60},{-10,60},{-10,74},{ + -2,74}}, color={0,0,127})); + + connect(addPar.y, conWatPumOn1.index) + annotation (Line(points={{-58,-80},{30,-80},{30,-72}}, color={255,127,0})); + connect(uChiSta, addPar.u) annotation (Line(points={{-160,100},{-130,100},{-130, + -80},{-82,-80}}, color={255,127,0})); +annotation ( + defaultComponentName="conPumSpe", + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Text( + extent={{-100,150},{100,110}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{36,74},{96,50}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yConWatPumSpe"), + Text( + extent={{-98,-32},{-54,-48}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uWSE"), + Text( + extent={{36,14},{96,-10}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="yConWatPumNum"), + Text( + extent={{-96,52},{-36,28}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="uChiSta")}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-140,-100},{140,120}})), + Documentation(info=" +

                      +Block that outputs number of operating condenser water pumps and design pump speed +for current stage, according to ASHRAE Guideline36-2021, +section 5.20.9 Condenser water pumps, part 5.20.9.5 and 5.20.9.6. +

                      +

                      If the plant has fixed speed condenser water pump (fixSpe=true) and +does not have wateside economizer (have_WSE=false):

                      +
                        +
                      • +The number of operating condenser water pumps shall match the number of operating chillers. +
                      • +
                      +

                      Otherwise:

                      +
                        +
                      • +The number of operating condenser water pumps yConWatPumNum and design +condenser water pump speed yDesConWatPumSpe shall be set by chiller +stage per the table below. +
                      • +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      Chiller stage Number of pump ONDesign pump speed setpoint for current stage
                      00N/A, Off
                      0+WSE1Per TAB to provide design flow through HX
                      11Per TAB to provide design flow through chiller
                      1+WSE2Per TAB to provide at least design flow through both chiller and WSE
                      22Per TAB to provide at least design flow through both chillers
                      2+WSE2Per TAB to provide at least design flow through both chillers and WSE, +or 100% speed if design flow cannot be achieved.
                      +
                      +

                      +Note that this sequence is for plants with the condenser water pumps are equally sized. +

                      +", revisions=" +
                        +
                      • +January 28, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Speed; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_dedicated.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_dedicated.mo new file mode 100644 index 00000000000..7bdceb29820 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_dedicated.mo @@ -0,0 +1,101 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation; +model EnableLead_dedicated + "Validate sequence for enabling lead pump of plants with dedicated condenser water pumps" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.EnableLead_dedicated + enaLeaConPum + "Enable lead condenser water pump when the lead chiller is enabled" + annotation (Placement(transformation(extent={{40,10},{60,30}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.EnableLead_dedicated + disLeaConPum + "Disable lead pump due to that the lead chiller has been proven off" + annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final period=3600, + final shift=300) "Lead chiller enabling status" + annotation (Placement(transformation(extent={{-20,40},{0,60}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "Maintains a true signal until conditions changes" + annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=false) "Constant false" + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1( + final k=false) + "Constant false" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + +equation + connect(booPul.y,enaLeaConPum. uLeaChiEna) + annotation (Line(points={{2,50},{20,50},{20,24},{38,24}}, color={255,0,255})); + connect(booPul.y, enaLeaConPum.uLeaChiSta) + annotation (Line(points={{2,50},{20,50},{20,16},{38,16}}, color={255,0,255})); + connect(booPul.y,disLeaConPum. uLeaChiEna) + annotation (Line(points={{2,50},{20,50},{20,-16},{38,-16}}, color={255,0,255})); + connect(booPul.y, disLeaConPum.uLeaChiSta) + annotation (Line(points={{2,50},{20,50},{20,-24},{38,-24}}, color={255,0,255})); + connect(booPul.y, lat.u) + annotation (Line(points={{2,50},{20,50},{20,-20},{-40,-20},{-40,-40},{-22,-40}}, + color={255,0,255})); + connect(booPul.y, enaLeaConPum.uLeaConWatReq) + annotation (Line(points={{2,50},{20,50},{20,12},{38,12}}, color={255,0,255})); + connect(lat.y,disLeaConPum. uLeaConWatReq) + annotation (Line(points={{2,-40},{20,-40},{20,-28},{38,-28}}, color={255,0,255})); + connect(con.y, lat.clr) + annotation (Line(points={{-38,-60},{-30,-60},{-30,-46},{-22,-46}}, + color={255,0,255})); + connect(con1.y, enaLeaConPum.uEnaPla) annotation (Line(points={{-38,20},{10,20}, + {10,28},{38,28}}, color={255,0,255})); + connect(con1.y, disLeaConPum.uEnaPla) annotation (Line(points={{-38,20},{10,20}, + {10,-12},{38,-12}}, color={255,0,255})); + +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_dedicated.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.EnableLead_dedicated. +

                      +

                      +It shows the process of enabling and disabling lead condenser water pump +of the plants with dedicated condenser water pumps. +

                      +
                        +
                      • +The instance enaLeaConPum shows that the lead pump +is enabled at 300 seconds when the lead chiller is enabled. The pump +becomes disabled at 2100 seconds when the lead chiller becomes not requiring +condenser water flow. +
                      • +
                      • +The instance disLeaConPum shows that the lead pump is enabled at 300 +seconds when the lead chiller is enabled. The pump becomes disabled at 2280 seconds, +which is 3 minutes after the lead chiller becomes disabled at 2100 seconds. +
                      • +
                      +", revisions=" +
                        +
                      • +August 4, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end EnableLead_dedicated; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_headered.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_headered.mo new file mode 100644 index 00000000000..23a3aa86f06 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_headered.mo @@ -0,0 +1,75 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation; +model EnableLead_headered + "Validate sequence for enabling lead pump of plants with headered condenser water pumps" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.EnableLead_headered + enaLeaConPum + "Enable lead chilled water pump based on status of chilled water isolation valve status" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiConWatIsoVal[2]( + final period=fill(3600, 2), + final shift=fill(300, 2)) + "Chiller condenser water isolation valve status" + annotation (Placement(transformation(extent={{-20,20},{0,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse WSEConWatIsoVal( + final period=3600, + final shift=800) "Water side economizer condenser water isolation valve status" + annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1( + final k=false) + "Constant false" + annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); + +equation + connect(WSEConWatIsoVal.y, enaLeaConPum.uWseConIsoVal) + annotation (Line(points={{2,-30},{20,-30},{20,0},{38,0}}, color={255,0,255})); + connect(chiConWatIsoVal.y, enaLeaConPum.uChiConIsoVal) annotation (Line( + points={{2,30},{20,30},{20,6},{38,6}}, color={255,0,255})); + connect(con1.y, enaLeaConPum.uEnaPla) annotation (Line(points={{2,-70},{30,-70}, + {30,-6},{38,-6}}, color={255,0,255})); + +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_headered.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.EnableLead_headered. +

                      +

                      +It shows the process of enabling and disabling lead condenser water pump +of the plants with headered condenser water pumps. +

                      +

                      +The instance enaLeaConPum shows that the lead pump is enabled at 300 +seconds when there is chiller condenser water isolation valve being enabled. The pump +becomes disabled when both the chiller condenser water isolation valve and the waterside +economizer condenser water isolation valve are disabled. +

                      +", revisions=" +
                        +
                      • +August 4, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end EnableLead_headered; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/Speed.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/Speed.mo new file mode 100644 index 00000000000..65900655cc3 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/Speed.mo @@ -0,0 +1,107 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation; +model Speed + "Validate sequence for generating design speed of condenser water pump at current stage" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Speed + conPumSpe( + final desConWatPumSpe={0,0.5,0.75,0.6,0.75,0.9}, + final desConWatPumNum={0,1,1,2,2,2}) "Condenser water pump speed" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp( + final duration=1, + final height=2.5) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + Buildings.Controls.OBC.CDL.Reals.Round round(final 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.Logical.Sources.Pulse wseSta( + final period=0.75, + final shift=0) "Waterside economizer status" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + +equation + connect(ramp.y, round.u) + annotation (Line(points={{-58,20},{-42,20}}, color={0,0,127})); + connect(round.y, reaToInt.u) + annotation (Line(points={{-18,20},{-2,20}}, color={0,0,127})); + connect(reaToInt.y, conPumSpe.uChiSta) + annotation (Line(points={{22,20},{40,20},{40,4},{58,4}}, color={255,127,0})); + connect(wseSta.y, conPumSpe.uWSE) + annotation (Line(points={{22,-20},{40,-20},{40,-4},{58,-4}}, color={255,0,255})); + +annotation ( + experiment(StopTime=1.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/Speed.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Speed. +

                      +

                      +The example shows a chiller plant has 3 chiller stages and 6 plant stages. The plant +stage means the stage that considers both chiller stage and waterside economizer +status. The plant stage is specified by the parameter staVec, which +in this exmple is {0, 0.5, 1, 1.5, 2, 2.5}. The element like x.5 +means chiller stage x plus enabled waterside economizer. +At different plant stage, the number of enabled condenser water pumps and the speed +are specified by parameter desConWatPumNum ({0, 1, 1, 2, 2, 2}) +and desConWatPumSpe ({0, 0.5, 0.75, 0.6, 0.75, 0.9}). +

                      +

                      +The process of setting the condenser water pump speed and the pump number are +demonstrated as below: +

                      +
                        +
                      • +Before 0.2 seconds, the chiller stage is 0 and waterside economizer is enabled. +Thus, the plant stage is 0.5 (2nd stage), the number of enabled pumps is 1 and the +pump speed is 0.5. +
                      • +
                      • +In the period between 0.2 seconds and 0.375 seconds, the chiller stage is 1 and +waterside economizer is enabled. Thus, the plant stage is 1.5 (4th stage), the +number of enabled pumps is 2 and the pump speed is 0.6. +
                      • +
                      • +In the period between 0.375 seconds and 0.6 seconds, the chiller stage is 1 and +waterside economizer is disabled. Thus, the plant stage is 1 (3th stage), the +number of enabled pumps is 1 and the pump speed is 0.75. +
                      • +
                      • +In the period between 0.6 seconds and 0.75 seconds, the chiller stage is 2 and +waterside economizer is disabled. Thus, the plant stage is 2 (5th stage), the +number of enabled pumps is 2 and the pump speed is 0.75. +
                      • +
                      • +After 0.75 seconds, the chiller stage is 2 and waterside economizer is enabled. Thus, +the plant stage is 2.5 (6th stage), the number of enabled pumps is 2 and the pump +speed is 0.9. +
                      • +
                      +", revisions=" +
                        +
                      • +August 4, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false))); +end Speed; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/package.mo new file mode 100644 index 00000000000..34db91503b4 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/package.mo @@ -0,0 +1,36 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences; +package Validation "Collection of validation models" + + annotation (preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +"), Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/package.order new file mode 100644 index 00000000000..e77950db8de --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/package.order @@ -0,0 +1,3 @@ +EnableLead_dedicated +EnableLead_headered +Speed diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/package.mo new file mode 100644 index 00000000000..1f4b888a1f5 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/package.mo @@ -0,0 +1,43 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater; +package Subsequences "Condenser water pump control sequences" + + annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains subsequences for condenser water pumps control.

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end Subsequences; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/package.order new file mode 100644 index 00000000000..8bf4f395688 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/package.order @@ -0,0 +1,4 @@ +EnableLead_dedicated +EnableLead_headered +Speed +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Validation/Controller.mo new file mode 100644 index 00000000000..ad92a064947 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Validation/Controller.mo @@ -0,0 +1,195 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Validation; +model Controller "Validate condenser water pump control sequence" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Controller + heaHavWse + "Condenser water pumps controller for plant with headered condenser water pump and have waterside economizer" + annotation (Placement(transformation(extent={{60,90},{80,110}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Controller + dedHavWse( + final have_heaPum=false) + "Condenser water pumps controller for plant with dedicated condenser water pump and have waterside economizer" + annotation (Placement(transformation(extent={{60,60},{80,80}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Controller + heaNoWse( + final have_WSE=false, + final totSta=4, + final staVec={0,1,2,3}, + final desConWatPumSpe={0,0.5,0.5,0.75}, + final desConWatPumNum={0,1,1,2}) + "Condenser water pumps controller for plant with headered condenser water pump and without waterside economizer" + annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pumSpe( + final amplitude=0.2, + final period=900, + final offset=0.3) "Measured pump speed" + annotation (Placement(transformation(extent={{-80,-36},{-60,-16}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + final duration=3600, + final height=2.4) "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-90,80},{-70,100}}))); + Buildings.Controls.OBC.CDL.Reals.Round round1(final n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-50,80},{-30,100}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger chiSta + "Convert real to integer" + annotation (Placement(transformation(extent={{-10,80},{10,100}}))); + Buildings.Controls.OBC.CDL.Integers.GreaterThreshold chiOn "Chiller status" + annotation (Placement(transformation(extent={{-10,50},{10,70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse wseSta( + final period=1800) + "Waterside economizer status" + annotation (Placement(transformation(extent={{-10,14},{10,34}}))); + Buildings.Controls.OBC.CDL.Reals.Switch meaPumSpe "Measured pump speed" + annotation (Placement(transformation(extent={{-10,-46},{10,-26}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) + "Zero pump speed" + annotation (Placement(transformation(extent={{-80,-66},{-60,-46}}))); + Buildings.Controls.OBC.CDL.Reals.Switch pumSpeSet "Pump speed setpoint" + annotation (Placement(transformation(extent={{-10,-16},{10,4}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pumSpeSetVal( + final amplitude=0.2, + final period=900, + final offset=0.3, + final shift=100) "Pump speed setpoint" + annotation (Placement(transformation(extent={{-80,4},{-60,24}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant fal( + final k=false) "Logical false" + annotation (Placement(transformation(extent={{-80,34},{-60,54}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final period=3600) "Output boolean pulse" + annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt( + final integerTrue=2) "Convert boolean to integer" + annotation (Placement(transformation(extent={{-50,-110},{-30,-90}}))); + Buildings.Controls.OBC.CDL.Integers.Add addInt "Add two integer inputs" + annotation (Placement(transformation(extent={{-10,-110},{10,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1(final k=false) + "Constant false" + annotation (Placement(transformation(extent={{-10,-74},{10,-54}}))); + +equation + connect(ramp1.y,round1. u) + annotation (Line(points={{-68,90},{-52,90}}, color={0,0,127})); + connect(round1.y, chiSta.u) + annotation (Line(points={{-28,90},{-12,90}}, color={0,0,127})); + connect(chiSta.y, chiOn.u) + annotation (Line(points={{12,90},{20,90},{20,76},{-20,76},{-20,60},{-12,60}}, + color={255,127,0})); + connect(chiSta.y, heaHavWse.uChiSta) + annotation (Line(points={{12,90},{20,90},{20,99},{58,99}}, color={255,127,0})); + connect(chiSta.y, dedHavWse.uChiSta) + annotation (Line(points={{12,90},{20,90},{20,69},{58,69}}, color={255,127,0})); + connect(wseSta.y, heaHavWse.uWSE) + annotation (Line(points={{12,24},{32,24},{32,97},{58,97}}, color={255,0,255})); + connect(wseSta.y, dedHavWse.uWSE) + annotation (Line(points={{12,24},{32,24},{32,67},{58,67}}, color={255,0,255})); + connect(heaHavWse.yLeaPum, meaPumSpe.u2) + annotation (Line(points={{82,109},{90,109},{90,36},{-40,36},{-40,-36},{-12,-36}}, + color={255,0,255})); + connect(pumSpe.y, meaPumSpe.u1) + annotation (Line(points={{-58,-26},{-20,-26},{-20,-28},{-12,-28}}, + color={0,0,127})); + connect(zer.y, meaPumSpe.u3) + annotation (Line(points={{-58,-56},{-30,-56},{-30,-44},{-12,-44}}, + color={0,0,127})); + connect(meaPumSpe.y, heaHavWse.uConWatPumSpe) + annotation (Line(points={{12,-36},{46,-36},{46,93},{58,93}}, color={0,0,127})); + connect(meaPumSpe.y, dedHavWse.uConWatPumSpe) + annotation (Line(points={{12,-36},{46,-36},{46,63},{58,63}}, color={0,0,127})); + connect(meaPumSpe.y, heaNoWse.uConWatPumSpe) + annotation (Line(points={{12,-36},{46,-36},{46,-67},{58,-67}}, color={0,0,127})); + connect(pumSpeSet.u2, heaHavWse.yLeaPum) + annotation (Line(points={{-12,-6},{-40,-6},{-40,36},{90,36},{90,109},{82,109}}, + color={255,0,255})); + connect(pumSpeSetVal.y, pumSpeSet.u1) + annotation (Line(points={{-58,14},{-20,14},{-20,2},{-12,2}}, color={0,0,127})); + connect(zer.y, pumSpeSet.u3) + annotation (Line(points={{-58,-56},{-30,-56},{-30,-14},{-12,-14}}, + color={0,0,127})); + connect(pumSpeSet.y, heaHavWse.uConWatPumSpeSet) + annotation (Line(points={{12,-6},{40,-6},{40,95},{58,95}}, color={0,0,127})); + connect(pumSpeSet.y, dedHavWse.uConWatPumSpeSet) + annotation (Line(points={{12,-6},{40,-6},{40,65},{58,65}}, color={0,0,127})); + connect(pumSpeSet.y, heaNoWse.uConWatPumSpeSet) + annotation (Line(points={{12,-6},{40,-6},{40,-65},{58,-65}}, color={0,0,127})); + connect(chiOn.y, heaHavWse.uLeaChiSta) + annotation (Line(points={{12,60},{26,60},{26,106},{58,106}}, color={255,0,255})); + connect(chiOn.y, heaHavWse.uLeaConWatReq) + annotation (Line(points={{12,60},{26,60},{26,104},{58,104}}, color={255,0,255})); + connect(chiOn.y, dedHavWse.uLeaChiSta) + annotation (Line(points={{12,60},{26,60},{26,76},{58,76}}, color={255,0,255})); + connect(chiOn.y, dedHavWse.uLeaConWatReq) + annotation (Line(points={{12,60},{26,60},{26,74},{58,74}}, color={255,0,255})); + connect(chiOn.y, heaNoWse.uLeaChiSta) + annotation (Line(points={{12,60},{26,60},{26,-54},{58,-54}}, color={255,0,255})); + connect(chiOn.y, heaNoWse.uLeaConWatReq) + annotation (Line(points={{12,60},{26,60},{26,-56},{58,-56}}, color={255,0,255})); + connect(booPul.y, booToInt.u) + annotation (Line(points={{-58,-100},{-52,-100}}, color={255,0,255})); + connect(booToInt.y, addInt.u2) + annotation (Line(points={{-28,-100},{-20,-100},{-20,-106},{-12,-106}}, + color={255,127,0})); + connect(chiSta.y, addInt.u1) + annotation (Line(points={{12,90},{20,90},{20,-80},{-20,-80},{-20,-94}, + {-12,-94}}, color={255,127,0})); + connect(addInt.y, heaNoWse.uChiSta) + annotation (Line(points={{12,-100},{26,-100},{26,-61},{58,-61}}, color={255,127,0})); + connect(chiOn.y, heaHavWse.uLeaChiEna) + annotation (Line(points={{12,60},{28,60},{28,108},{58,108}}, color={255,0,255})); + connect(chiOn.y, dedHavWse.uLeaChiEna) + annotation (Line(points={{12,60},{28,60},{28,78},{58,78}}, color={255,0,255})); + connect(chiOn.y, heaNoWse.uLeaChiEna) + annotation (Line(points={{12,60},{28,60},{28,-52},{58,-52}}, color={255,0,255})); + connect(chiOn.y, heaHavWse.uChiConIsoVal[1]) + annotation (Line(points={{12,60},{28,60},{28,110},{58,110}}, color={255,0,255})); + connect(chiOn.y, dedHavWse.uChiConIsoVal[1]) + annotation (Line(points={{12,60},{28,60},{28,80},{58,80}}, color={255,0,255})); + connect(chiOn.y, heaNoWse.uChiConIsoVal[1]) + annotation (Line(points={{12,60},{28,60},{28,-50},{58,-50}}, color={255,0,255})); + connect(fal.y, heaHavWse.uChiConIsoVal[2]) + annotation (Line(points={{-58,44},{30,44},{30,110},{58,110}}, color={255,0,255})); + connect(fal.y, dedHavWse.uChiConIsoVal[2]) + annotation (Line(points={{-58,44},{30,44},{30,80},{58,80}}, color={255,0,255})); + connect(fal.y, heaNoWse.uChiConIsoVal[2]) + annotation (Line(points={{-58,44},{30,44},{30,-50},{58,-50}}, color={255,0,255})); + connect(con1.y, heaHavWse.uEnaPla) annotation (Line(points={{12,-64},{36,-64}, + {36,102},{58,102}}, color={255,0,255})); + connect(con1.y, dedHavWse.uEnaPla) annotation (Line(points={{12,-64},{36,-64}, + {36,72},{58,72}}, color={255,0,255})); + connect(con1.y, heaNoWse.uEnaPla) annotation (Line(points={{12,-64},{36,-64},{ + 36,-58},{58,-58}}, color={255,0,255})); +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Validation/Controller.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Controller. +

                      +", revisions=" +
                        +
                      • +August 4, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-120},{100,120}}))); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Validation/package.mo new file mode 100644 index 00000000000..3e7ed99cc2d --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Validation/package.mo @@ -0,0 +1,36 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater; +package Validation "Collection of validation models" + + annotation (preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +"), Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Validation/package.order new file mode 100644 index 00000000000..8cba75e31a7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Validation/package.order @@ -0,0 +1 @@ +Controller diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/package.mo new file mode 100644 index 00000000000..e9e03f624da --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/package.mo @@ -0,0 +1,30 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps; +package CondenserWater "Sequences for condenser water pump control" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains control sequences for condenser water pumps. +The implementations are based on section 5.20.9 Condener water water pumps, +in ASHRAE Guideline36-2021. +

                      +"), Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + extent={{-66,66},{68,-68}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), Polygon( + points={{0,66},{0,-68},{68,0},{0,66}}, + lineColor={0,0,0}, + fillColor={238,46,47}, + fillPattern=FillPattern.Solid)})); +end CondenserWater; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/package.order new file mode 100644 index 00000000000..9ffbffcb990 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/package.order @@ -0,0 +1,3 @@ +Controller +Subsequences +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/package.mo new file mode 100644 index 00000000000..5444f42705a --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/package.mo @@ -0,0 +1,46 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant; +package Pumps "Sequences for condenser water and chiller water pumps control" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains control sequences for condenser and chilled water pumps. +The implementations are based on section 5.20.9 Condenser water pumps and +section 5.20.6 Primary chilled water pumps, in ASHRAE Guideline36-2021. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end Pumps; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/package.order new file mode 100644 index 00000000000..6648c541436 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/package.order @@ -0,0 +1,2 @@ +ChilledWater +CondenserWater diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/ChilledWaterPlantReset.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/ChilledWaterPlantReset.mo new file mode 100644 index 00000000000..d1950bb9f26 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/ChilledWaterPlantReset.mo @@ -0,0 +1,252 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints; +block ChilledWaterPlantReset + "Sequences to generate chilled water plant reset" + + parameter Integer nPum = 2 "Total number of chilled water pumps"; + parameter Real holTim( + final unit="s", + final quantity="Time")=900 + "Time to fix plant reset value"; + parameter Real iniSet = 0 "Initial setpoint" + annotation (Dialog(group="Trim and respond parameters")); + parameter Real minSet = 0 "Minimum setpoint" + annotation (Dialog(group="Trim and respond parameters")); + parameter Real maxSet = 1 "Maximum setpoint" + annotation (Dialog(group="Trim and respond parameters")); + parameter Real delTim( + final unit="s", + final quantity="Time")=900 + "Delay time after which trim and respond is activated" + annotation (Dialog(group="Trim and respond parameters")); + parameter Real samplePeriod( + final unit="s", + final quantity="Time")=300 + "Sample period time" + annotation (Dialog(group="Trim and respond parameters")); + parameter Integer numIgnReq = 2 + "Number of ignored requests" + annotation (Dialog(group="Trim and respond parameters")); + parameter Real triAmo = -0.02 "Trim amount" + annotation (Dialog(group="Trim and respond parameters")); + parameter Real resAmo = 0.03 + "Respond amount (must be opposite in to triAmo)" + annotation (Dialog(group="Trim and respond parameters")); + parameter Real maxRes = 0.07 + "Maximum response per time interval (same sign as resAmo)" + annotation (Dialog(group="Trim and respond parameters")); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput TChiWatSupResReq + "Chilled water supply temperature setpoint reset request" + annotation (Placement(transformation(extent={{-160,0},{-120,40}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput chaPro + "Plant staging status that indicates if the plant is in the staging process" + annotation (Placement(transformation(extent={{-160,-60},{-120,-20}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum[nPum] + "Chilled water pump status" + annotation (Placement(transformation(extent={{-160,40},{-120,80}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatPlaRes( + final min=minSet, + final max=maxSet, + final unit="1") "Chilled water plant reset" + annotation (Placement(transformation(extent={{120,-80},{160,-40}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.ASHRAE.G36.Generic.TrimAndRespond triRes( + final iniSet=iniSet, + final minSet=minSet, + final maxSet=maxSet, + final delTim=delTim, + final samplePeriod=samplePeriod, + final numIgnReq=numIgnReq, + final triAmo=triAmo, + final resAmo=resAmo, + final maxRes=maxRes) "Calculate chilled water plant reset" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam + "Sample last reset value when there is chiller stage change" + annotation (Placement(transformation(extent={{-20,10},{0,30}}))); + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truHol( + final trueHoldDuration=holTim, + final falseHoldDuration=0) + "Hold the true input with given time" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Edge edg + "Check if the input changes from false to true" + annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi + "Switch plant reset value depends on if there is chiller stage change" + annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1[nPum] "Logical not" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); + Buildings.Controls.OBC.CDL.Logical.MultiAnd mulAnd( + final nin=nPum) "Logical and" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 + "Check if these is any CHW pump is proven on" + annotation (Placement(transformation(extent={{-20,50},{0,70}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1 + "Set reset value to zero when device is disabled" + annotation (Placement(transformation(extent={{80,-70},{100,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( + final k=0) + "Zero request when device is OFF" + annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); + +equation + connect(not1.y, mulAnd.u) + annotation (Line(points={{-78,60},{-62,60}}, color={255,0,255})); + connect(mulAnd.y, not2.u) + annotation (Line(points={{-38,60},{-22,60}}, color={255,0,255})); + connect(uChiWatPum, not1.u) + annotation (Line(points={{-140,60},{-102,60}}, color={255,0,255})); + connect(triRes.y, triSam.u) + annotation (Line(points={{-38,20},{-22,20}}, color={0,0,127})); + connect(truHol.y, swi.u2) + annotation (Line(points={{-58,-40},{38,-40}}, color={255,0,255})); + connect(triRes.y, swi.u3) + annotation (Line(points={{-38,20},{-30,20},{-30,-48},{38,-48}}, + color={0,0,127})); + connect(triSam.y, swi.u1) + annotation (Line(points={{2,20},{10,20},{10,-32},{38,-32}}, + color={0,0,127})); + connect(edg.y, triSam.trigger) + annotation (Line(points={{-58,-10},{-10,-10},{-10,8}}, color={255,0,255})); + connect(chaPro, truHol.u) + annotation (Line(points={{-140,-40},{-82,-40}},color={255,0,255})); + connect(chaPro, edg.u) + annotation (Line(points={{-140,-40},{-100,-40},{-100,-10},{-82,-10}}, + color={255,0,255})); + connect(TChiWatSupResReq, triRes.numOfReq) annotation (Line(points={{-140,20}, + {-80,20},{-80,12},{-62,12}}, color={255,127,0})); + connect(not2.y, triRes.uDevSta) annotation (Line(points={{2,60},{20,60},{20,40}, + {-80,40},{-80,28},{-62,28}}, color={255,0,255})); + connect(not2.y, swi1.u2) annotation (Line(points={{2,60},{20,60},{20,-60},{78, + -60}}, color={255,0,255})); + connect(swi.y, swi1.u1) annotation (Line(points={{62,-40},{70,-40},{70,-52},{78, + -52}}, color={0,0,127})); + connect(con1.y, swi1.u3) annotation (Line(points={{-18,-80},{70,-80},{70,-68}, + {78,-68}}, color={0,0,127})); + connect(swi1.y, yChiWatPlaRes) + annotation (Line(points={{102,-60},{140,-60}}, color={0,0,127})); + +annotation ( + defaultComponentName="chiWatPlaRes", + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-120,-100},{120,100}}),graphics={Rectangle( + extent={{-118,98},{78,-18}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-108,96},{44,80}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,255}, + horizontalAlignment=TextAlignment.Left, + textString="Calculate the plant reset, hold its last value when there is chiller stage change")}), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={Text( + extent={{-100,150},{100,110}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-94,68},{-36,56}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChiWatPum"), + Text( + extent={{-94,12},{-10,-10}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="TChiWatSupResReq"), + Text( + extent={{-94,-52},{-56,-66}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="chaPro"), + Text( + extent={{38,12},{96,-12}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiWatPlaRes")}), +Documentation(info=" +

                      +Block that output chilled water plant reset yChiWatPlaRes according +to ASHRAE Guideline36-2021, section 5.20.5.2. +

                      +

                      +Following implementation is for plants with primary-only and primary-secondary +systems serving differential pressure controlled pumps. +

                      +
                        +
                      • +Chilled water plant reset yChiWatPlaRes shall be reset +using trim-respond logic with following parameters: +
                      • +
                      + + + + + + + + + + + + + +
                      Variable Value Definition
                      DeviceAny chilled water pump Associated device
                      SP0iniSetInitial setpoint
                      SPminminSetMinimum setpoint
                      SPmaxmaxSetMaximum setpoint
                      TddelTimDelay timer
                      TsamplePeriodTime step
                      InumIgnReqNumber of ignored requests
                      RTChiWatSupResReqNumber of requests
                      SPtrimtriAmoTrim amount
                      SPresresAmoRespond amount
                      SPres_maxmaxResMaximum response per time interval
                      +
                      +
                        +
                      • +Plant reset loop shall be enabled when the plant is enabled (any chilled water +pump is enabled, uChiWatPum = true) and disabled when +the plant is disabled (all chilled water pumps are disabled, uChiWatPum = false). +
                      • +
                      +
                        +
                      • +When the plant stage change is initiated (uStaCha=true), the plant +reset yChiWatPlaRes shall be disabled and value fixed at its last +value for the longer of holTim and the time it takes for the plant +to successfully stage. +
                      • +
                      +

                      +For primary-secondary plants serving more than one set of differential pressure +controlled pumps, an unique instance of the reset shall be used for each set of +differential pressure controlled secondary pumps. +

                      +
                        +
                      • +Chilled water reset requests from all loads served by a set of pumps shall be +directed to those pumps reset loop only. +
                      • +
                      • +The differential pressure setpoint output from each reset shall be used in the +pressure control loop for the associated set of pumps only. +
                      • +
                      + +", revisions=" +
                        +
                      • +April 15, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end ChilledWaterPlantReset; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/ChilledWaterSupply.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/ChilledWaterSupply.mo new file mode 100644 index 00000000000..32868759683 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/ChilledWaterSupply.mo @@ -0,0 +1,234 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints; +block ChilledWaterSupply + "Sequences to generate setpoints of chilled water supply temperature and the pump differential static pressure" + + parameter Integer nRemDpSen=1 + "Total number of remote pressure differential sensor"; + parameter Real dpChiWatPumMin( + final min=0, + final unit="Pa", + final quantity="PressureDifference", + displayUnit="Pa") = 34473.8 + "Minimum chilled water pump differential static pressure, default 5 psi"; + parameter Real dpChiWatPumMax[nRemDpSen]( + final min=fill(dpChiWatPumMin,nRemDpSen), + final unit=fill("Pa",nRemDpSen), + final quantity=fill("PressureDifference",nRemDpSen), + displayUnit=fill("Pa",nRemDpSen)) + "Maximum chilled water pump differential static pressure"; + parameter Real TChiWatSupMin( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC") + "Minimum chilled water supply temperature. This is the lowest minimum chilled water supply temperature of chillers in the plant"; + parameter Real TChiWatSupMax( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC") = 288.706 + "Maximum chilled water supply temperature, default 60 degF"; + parameter Real minSet = 0 "Minimum plant reset value"; + parameter Real maxSet = 1 "Maximum plant reset value"; + parameter Real halSet = 0.5 "Half plant reset value"; + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiWatPlaRes( + final min=minSet, + final max=maxSet, + final unit="1") + "Chilled water plant reset" + annotation (Placement(transformation(extent={{-120,-20},{-80,20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput dpChiWatPumSet[nRemDpSen]( + final unit=fill("Pa", nRemDpSen), + final quantity=fill("PressureDifference",nRemDpSen)) + "Chilled water pump differential static pressure setpoint" + annotation (Placement(transformation(extent={{80,30},{120,70}}), + iconTransformation(extent={{100,40},{140,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TChiWatSupSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{80,-70},{120,-30}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Line chiWatPumPre[nRemDpSen] + "Chilled water pump differential pressure setpoint" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerRes[nRemDpSen]( + final k=fill(minSet, nRemDpSen)) "Minimum plant reset" + annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant halRes[nRemDpSen]( + final k=fill(halSet, nRemDpSen)) "Half one plant reset" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant oneRes( + final k=maxSet) "Maximum plant reset" + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minChiWatPumPre[nRemDpSen]( + final k=fill(dpChiWatPumMin, nRemDpSen)) + "Minimum chilled water pump differential pressure setpoint" + annotation (Placement(transformation(extent={{-20,60},{0,80}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxChiWatPumPre[nRemDpSen]( + final k=dpChiWatPumMax) + "Maximum chilled water pump differential pressure setpoint" + annotation (Placement(transformation(extent={{-20,18},{0,38}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxChiWatTem( + final k=TChiWatSupMax) + "Maximum chilled water supply temperature" + annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minChiWatTem( + final k=TChiWatSupMin) + "Minimum chilled water supply temperature" + annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Line chiWatTem + "Chilled water temperature setpoint" + annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep( + final nout=nRemDpSen) + "Distribute reset value to each remote sensor" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + +equation + connect(zerRes.y, chiWatPumPre.x1) + annotation (Line(points={{-38,90},{20,90},{20,58},{38,58}}, + color={0,0,127})); + connect(minChiWatPumPre.y, chiWatPumPre.f1) + annotation (Line(points={{2,70},{14,70},{14,54},{38,54}}, + color={0,0,127})); + connect(halRes.y, chiWatPumPre.x2) + annotation (Line(points={{-38,0},{20,0},{20,46},{38,46}}, + color={0,0,127})); + connect(maxChiWatPumPre.y, chiWatPumPre.f2) + annotation (Line(points={{2,28},{14,28},{14,42},{38,42}}, + color={0,0,127})); + connect(maxChiWatTem.y, chiWatTem.f1) + annotation (Line(points={{2,-30},{14,-30},{14,-46},{38,-46}}, + color={0,0,127})); + connect(oneRes.y, chiWatTem.x2) + annotation (Line(points={{-38,-90},{14,-90},{14,-54},{38,-54}}, + color={0,0,127})); + connect(minChiWatTem.y, chiWatTem.f2) + annotation (Line(points={{2,-70},{20,-70},{20,-58},{38,-58}}, + color={0,0,127})); + connect(chiWatPumPre.y, dpChiWatPumSet) + annotation (Line(points={{62,50},{100,50}},color={0,0,127})); + connect(chiWatTem.y, TChiWatSupSet) + annotation (Line(points={{62,-50},{100,-50}},color={0,0,127})); + connect(uChiWatPlaRes, chiWatTem.u) annotation (Line(points={{-100,0},{-70,0}, + {-70,-50},{38,-50}}, color={0,0,127})); + connect(uChiWatPlaRes, reaRep.u) annotation (Line(points={{-100,0},{-70,0},{-70, + 50},{-62,50}}, color={0,0,127})); + connect(halRes[1].y, chiWatTem.x1) annotation (Line(points={{-38,0},{20,0},{20, + -42},{38,-42}}, color={0,0,127})); + connect(reaRep.y, chiWatPumPre.u) + annotation (Line(points={{-38,50},{38,50}}, color={0,0,127})); + +annotation ( + defaultComponentName="chiWatSupSet", + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-80,-120},{80,120}}), graphics={Rectangle( + extent={{-78,118},{78,2}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), Rectangle( + extent={{-78,-2},{78,-118}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-26,118},{74,106}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,255}, + horizontalAlignment=TextAlignment.Left, + textString="Chilled water pump differential pressure setpoint"), + Text( + extent={{-22,-104},{74,-116}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,255}, + horizontalAlignment=TextAlignment.Left, + textString="Chilled water supply temperature setpoint")}), + Icon(graphics={Text( + extent={{-100,150},{100,110}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line(points={{-80,72},{-80,-54},{80,-54},{80,72}}, color={95,95,95}), + Line( + points={{-80,64},{-2,64},{80,-54}}, + color={0,0,0}, + thickness=0.5), + Line( + points={{-80,-54},{-2,64},{80,64}}, + color={28,108,200}, + pattern=LinePattern.Dash, + thickness=0.5), + Line( + points={{-2,64},{-2,-54}}, + color={215,215,215}, + pattern=LinePattern.Dash), + Polygon( + points={{-72,-66},{-50,-60},{-50,-72},{-72,-66}}, + lineColor={95,95,95}, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Line(points={{-10,-66},{-68,-66}},color={95,95,95}), + Line(points={{8,-66},{70,-66}}, color={95,95,95}), + Polygon( + points={{72,-66},{50,-60},{50,-72},{72,-66}}, + lineColor={95,95,95}, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Text( + extent={{-20,-66},{22,-82}}, + textColor={95,95,95}, + textString="Plant reset"), + Text( + extent={{14,26},{68,6}}, + textColor={95,95,95}, + horizontalAlignment=TextAlignment.Right, + textString="Temperature +setpoint"), + Text( + extent={{-76,22},{-42,8}}, + textColor={95,95,95}, + horizontalAlignment=TextAlignment.Right, + textString="DP +setpoint"), + Text( + extent={{-14,-56},{12,-62}}, + textColor={95,95,95}, + textString="0.5")}), +Documentation(info=" +

                      +Block that output setpoints for the chilled water supply of primary-only and +primary-secondary systems serving differential pressure controlled pumps. +The outputs include supply temperature setpoint TChiWatSupSet +and pump differential pressure setpoint dpChiWatPumSet, according +to ASHRAE Guideline36-2021, section 5.20.5.2. +

                      +

                      +Chilled water supply temperature setpoint TChiWatSupSet and pump +differential pressure setpoint dpChiWatPumSet shall be reset based on +the current value of chilled water plant reset uChiWatPlaRes. +

                      +

                      +\"Image +

                      +", revisions=" +
                        +
                      • +April 15, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end ChilledWaterSupply; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterPlantReset.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterPlantReset.mo new file mode 100644 index 00000000000..8e35e0785ce --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterPlantReset.mo @@ -0,0 +1,156 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.Validation; +model ChilledWaterPlantReset + "Validate model of generating chilled water plant reset" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.ChilledWaterPlantReset + plaRes "Chilled water plant reset" + annotation (Placement(transformation(extent={{60,80},{80,100}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.ChilledWaterPlantReset + devRes "Validate chilled water plant reset affected by device status" + annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant uChiWatPum[2]( + final k={true,false}) "Plant status" + annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{0,70},{20,90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final period=9500, + final width=0.3, + shift=-2000) + "Generate pulse signal of type Boolean" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi + "Switch between two Real signals" + annotation (Placement(transformation(extent={{-30,-90},{-10,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1(final k=0) + "Zero request when device is OFF" + annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 + "Convert real to integer" + annotation (Placement(transformation(extent={{10,-90},{30,-70}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator chiWatPum(nout=2) + "Chilled water pump status" + annotation (Placement(transformation(extent={{10,-50},{30,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin1( + smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[0,0;150,1; 300,2; 450,3; 600,4; 750,5; 900,6; + 1050,5; 1200,4; 1350,3; 1500,2; 1650,1; 1800,0]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin2( + smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[0,0;150,1; 300,2; 450,3; 600,4; 750,5; 900,6; + 1050,5; 1200,4; 1350,3; 1500,2; 1650,1; 1800,0]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + period=3600) + "Generate pulse signal of type Boolean" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + Buildings.Controls.OBC.CDL.Logical.Switch staPro "Staging process" + annotation (Placement(transformation(extent={{0,0},{20,20}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + k=false) "Constant false" + annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul2(width=0.4, + period=4800) + "Generate pulse signal of type Boolean" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + +equation + connect(uChiWatPum.y, plaRes.uChiWatPum) + annotation (Line(points={{-58,100},{40,100},{40,96},{58,96}}, color={255,0,255})); + connect(con1.y,swi. u1) + annotation (Line(points={{-58,-70},{-40,-70},{-40,-72},{-32,-72}}, + color={0,0,127})); + connect(booPul.y,swi. u2) + annotation (Line(points={{-58,-40},{-50,-40},{-50,-80},{-32,-80}}, + color={255,0,255})); + connect(booPul.y,not1. u) + annotation (Line(points={{-58,-40},{-42,-40}},color={255,0,255})); + connect(not1.y, chiWatPum.u) + annotation (Line(points={{-18,-40},{8,-40}}, color={255,0,255})); + connect(chiWatPum.y, devRes.uChiWatPum) annotation (Line(points={{32,-40},{40, + -40},{40,-44},{58,-44}}, color={255,0,255})); + connect(reaToInt1.y, plaRes.TChiWatSupResReq) + annotation (Line(points={{22,80},{40,80},{40,90},{58,90}}, color={255,127,0})); + connect(reaToInt3.y, devRes.TChiWatSupResReq) + annotation (Line(points={{32,-80},{40,-80},{40,-50},{58,-50}}, color={255,127,0})); + connect(timTabLin1.y[1], reaToInt1.u) + annotation (Line(points={{-18,80},{-2,80}}, color={0,0,127})); + connect(timTabLin2.y[1], swi.u3) + annotation (Line(points={{-58,-100},{-40,-100},{-40,-88},{-32,-88}}, + color={0,0,127})); + connect(swi.y, reaToInt3.u) + annotation (Line(points={{-8,-80},{8,-80}}, color={0,0,127})); + connect(booPul1.y, plaRes.chaPro) + annotation (Line(points={{-58,60},{50,60},{50,84},{58,84}},color={255,0,255})); + connect(staPro.y, devRes.chaPro) annotation (Line(points={{22,10},{50,10},{50, + -56},{58,-56}}, color={255,0,255})); + connect(con.y, staPro.u3) annotation (Line(points={{-58,-10},{-30,-10},{-30,2}, + {-2,2}}, color={255,0,255})); + connect(not1.y, staPro.u2) annotation (Line(points={{-18,-40},{-10,-40},{-10,10}, + {-2,10}}, color={255,0,255})); + connect(booPul2.y, staPro.u1) annotation (Line(points={{-38,30},{-10,30},{-10, + 18},{-2,18}}, color={255,0,255})); + +annotation ( + experiment(StopTime=9000.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterPlantReset.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.ChilledWaterPlantReset. +

                      +

                      +The instance plaRes shows the process of calculating the plant reset. +It also shows that when the plant is in staging process, the reset value will be fixed +at the value when the staging process just starts. +

                      +
                        +
                      • +At the initial 1800 seconds, the plant is in the staging process. Thus the chilled +water plant reset equals 0, which is the reset initial value. +
                      • +
                      • +In the period between 1800 seconds and 3600 seconds, the plant is not in the staging +process. Thus the plant reset equals the trim-respond output. +
                      • +
                      • +At the 3600 seconds, the staging process starts again and thus the plant reset +holds its value at 3600 seconds. +
                      • +
                      +

                      +The process of calculating the reset value follows the same steps. +For the instance devRes, besides the same process as showing in the +instance plaRes, the devRes also shows that the reset +value will be zero when the device is disabled (uDevSta=false). +

                      +", revisions=" +
                        +
                      • +March 14, 2018, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-120},{100,120}}))); +end ChilledWaterPlantReset; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterSupply.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterSupply.mo new file mode 100644 index 00000000000..58f9a5810d0 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterSupply.mo @@ -0,0 +1,49 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.Validation; +model ChilledWaterSupply + "Validate model of generating setpoints for chilled water supply control" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.ChilledWaterSupply + chiWatSupSet( + final dpChiWatPumMin=60, + final dpChiWatPumMax={150}, + final TChiWatSupMin=280.15, + final TChiWatSupMax=291.15) "Generate setpoint for chilled water supply control" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp plaRes(final duration=3600) + "Chilled water plant reset" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + +equation + connect(plaRes.y, chiWatSupSet.uChiWatPlaRes) + annotation (Line(points={{-18,0},{18,0}}, color={0,0,127})); + +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterSupply.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.ChilledWaterSupply. +

                      +", revisions=" +
                        +
                      • +March 15, 2018, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false))); +end ChilledWaterSupply; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/package.mo new file mode 100644 index 00000000000..f594d9ea7c9 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/package.mo @@ -0,0 +1,38 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints; +package Validation "Collection of validation models" + +annotation ( +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})}), +preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Setpoints. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +")); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/package.order new file mode 100644 index 00000000000..6ae8b2ac697 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/package.order @@ -0,0 +1,2 @@ +ChilledWaterPlantReset +ChilledWaterSupply diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/package.mo new file mode 100644 index 00000000000..fd43d92aa4e --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/package.mo @@ -0,0 +1,25 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant; +package SetPoints "Sequences for setting the setpoints for chilled water control " + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains chilled water plant reset control sequences. +The implementation is based on section 5.20.5.2. in ASHRAE Guideline36-2021. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Text( + extent={{-100,100},{100,-100}}, + textColor={0,0,0}, + textString="S")})); +end SetPoints; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/package.order new file mode 100644 index 00000000000..f3e4cf99024 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/package.order @@ -0,0 +1,3 @@ +ChilledWaterPlantReset +ChilledWaterSupply +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Down.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Down.mo new file mode 100644 index 00000000000..2392f8db7fa --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Down.mo @@ -0,0 +1,952 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes; +block Down + "Sequence for controlling devices when there is a stage-down command" + + parameter Integer nChi = 2 "Total number of chillers in the plant"; + parameter Integer nConWatPum=2 "Total number of condenser water pumps"; + parameter Integer totSta = 3 + "Total number of plant stages, including stage zero and the stages with a WSE, if applicable"; + parameter Integer nChiSta=3 + "Total number of chiller stages, including stage zero but not the stages with a WSE, if applicable"; + parameter Boolean have_WSE=true + "True: have waterside economizer"; + parameter Boolean have_ponyChiller=false + "True: have pony chiller"; + parameter Boolean have_parChi=true + "True: the plant has parallel chillers"; + parameter Boolean have_heaConWatPum=true + "True: headered condenser water pumps"; + parameter Boolean have_fixSpeConWatPum=false + "True: fixed speed condenser water pump"; + parameter Boolean need_reduceChillerDemand=false + "True: need limit chiller demand when chiller staging"; + parameter Real chiDemRedFac=0.75 + "Demand reducing factor of current operating chillers" + annotation (Dialog(group="Disable last chiller", enable=have_ponyChiller and need_reduceChillerDemand)); + parameter Real holChiDemTim( + unit="s", + displayUnit="s")=300 + "Maximum time to wait for the actual demand less than percentage of current load" + annotation (Dialog(group="Disable last chiller", enable=have_ponyChiller and need_reduceChillerDemand)); + parameter Real waiTim( + unit="s", + displayUnit="s")=30 + "Waiting time after enabling next head pressure control" + annotation (Dialog(group="Disable last chiller", enable=have_ponyChiller)); + parameter Real proOnTim( + unit="s", + displayUnit="s")=300 + "Enabled chiller operation time to indicate if it is proven on" + annotation (Dialog(group="Disable last chiller", enable=have_ponyChiller)); + parameter Real chaChiWatIsoTim(unit="s", displayUnit="s") + "Time to slowly change isolation valve, should be determined in the field" + annotation (Dialog(group="Disable CHW isolation valve")); + parameter Real staVec[totSta] + "Chiller stage vector, element value like x.5 means chiller stage x plus WSE" + annotation (Dialog(group="Disable condenser water pump")); + parameter Real desConWatPumSpe[totSta] + "Design condenser water pump speed setpoints, according to current chiller stage and WSE status" + annotation (Dialog(group="Disable condenser water pump")); + parameter Real desConWatPumNum[totSta] + "Design number of condenser water pumps that should be ON, according to current chiller stage and WSE status" + annotation (Dialog(group="Disable condenser water pump")); + parameter Real desChiNum[nChiSta]={0,1,2} + "Design number of chiller that should be ON, according to current chiller stage" + annotation (Dialog(group="Disable condenser water pump", enable=have_fixSpeConWatPum)); + parameter Real byPasSetTim(unit="s", displayUnit="s") + "Time to reset minimum by-pass flow" + annotation (Dialog(group="Reset CHW minimum flow setpoint")); + parameter Real minFloSet[nChi]( + unit=fill("m3/s",nChi), + displayUnit=fill("m3/s",nChi)) + "Minimum chilled water flow through each chiller" + annotation (Dialog(group="Reset CHW minimum flow setpoint")); + parameter Real maxFloSet[nChi]( + unit=fill("m3/s",nChi), + displayUnit=fill("m3/s",nChi)) + "Maximum chilled water flow through each chiller" + annotation (Dialog(group="Reset CHW minimum flow setpoint")); + parameter Real aftByPasSetTim( + unit="s", + displayUnit="s")=60 + "Time to allow loop to stabilize after resetting minimum chilled water flow setpoint" + annotation (Dialog(group="Reset bypass")); + parameter Real pumSpeChe = 0.05 + "Lower threshold value to check if condenser water pump has achieved setpoint" + annotation (Dialog(tab="Advanced", group="Disable condenser water pump")); + parameter Real relFloDif=0.05 + "Relative error to the setpoint for checking if it has achieved flow rate setpoint" + annotation (Dialog(tab="Advanced", group="Reset bypass")); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uStaSet + "Chiller stage setpoint index" + annotation (Placement(transformation(extent={{-320,360},{-280,400}}), + iconTransformation(extent={{-140,170},{-100,210}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiSet[nChi] + "Vector of chillers status setpoint" + annotation (Placement(transformation(extent={{-320,320},{-280,360}}), + iconTransformation(extent={{-140,150},{-100,190}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput yOpeParLoaRatMin( + final min=0, + final max=1, + final unit="1") if need_reduceChillerDemand + "Current stage minimum cycling operative partial load ratio" + annotation (Placement(transformation(extent={{-320,260},{-280,300}}), + iconTransformation(extent={{-140,110},{-100,150}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiLoa[nChi]( + final quantity=fill("ElectricCurrent", nChi), + final unit=fill("A", nChi)) if need_reduceChillerDemand + "Current chiller load" + annotation (Placement(transformation(extent={{-320,230},{-280,270}}), + iconTransformation(extent={{-140,90},{-100,130}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller status: true=ON" + annotation (Placement(transformation(extent={{-320,200},{-280,240}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( + final min=0, + final unit="m3/s", + final quantity="VolumeFlowRate") + "Measured chilled water flow rate" + annotation (Placement(transformation(extent={{-320,170},{-280,210}}), + iconTransformation(extent={{-140,50},{-100,90}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiSta + "Current chiller stage, it would be the same as chiller stage setpoint when it is not in staging process" + annotation (Placement(transformation(extent={{-320,140},{-280,180}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiHeaCon[nChi] + "Chillers head pressure control status" + annotation (Placement(transformation(extent={{-320,110},{-280,150}}), + iconTransformation(extent={{-140,-10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiWatIsoVal[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Chilled water isolation valve position" + annotation (Placement(transformation(extent={{-320,80},{-280,120}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatReq[nChi] + "Chilled water requst status for each chiller" + annotation (Placement(transformation(extent={{-320,-30},{-280,10}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uConWatReq[nChi] + "Condenser water requst status for each chiller" + annotation (Placement(transformation(extent={{-320,-140},{-280,-100}}), + iconTransformation(extent={{-140,-90},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiConIsoVal[nChi] + if have_heaConWatPum + "Chiller condenser water isolation valve status" + annotation (Placement(transformation(extent={{-320,-200},{-280,-160}}), + iconTransformation(extent={{-140,-120},{-100,-80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWSE if have_WSE + "Water side economizer status: true = ON, false = OFF" + annotation (Placement(transformation(extent={{-320,-260},{-280,-220}}), + iconTransformation(extent={{-140,-150},{-100,-110}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpeSet( + final min=0, + final max=1, + final unit="1") if not have_fixSpeConWatPum + "Condenser water pump speed setpoint" + annotation (Placement(transformation(extent={{-320,-300},{-280,-260}}), + iconTransformation(extent={{-140,-170},{-100,-130}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpe( + final min=0, + final max=1, + final unit="1") if not have_fixSpeConWatPum + "Current condenser water pump speed" + annotation (Placement(transformation(extent={{-320,-360},{-280,-320}}), + iconTransformation(extent={{-140,-190},{-100,-150}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uConWatPum[nConWatPum] if have_fixSpeConWatPum + "Status indicating if condenser water pump is running" + annotation (Placement(transformation(extent={{-320,-400},{-280,-360}}), + iconTransformation(extent={{-140,-210},{-100,-170}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yStaPro + "Indicate stage-down status: true=in stage-down process" + annotation (Placement(transformation(extent={{280,340},{320,380}}), + iconTransformation(extent={{100,170},{140,210}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiDem[nChi]( + final quantity=fill("ElectricCurrent", nChi), + final unit=fill("A", nChi)) if need_reduceChillerDemand + "Chiller demand setpoint" + annotation (Placement(transformation(extent={{280,240},{320,280}}), + iconTransformation(extent={{100,130},{140,170}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChi[nChi] + "Chiller enabling status" + annotation (Placement(transformation(extent={{280,200},{320,240}}), + iconTransformation(extent={{100,100},{140,140}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yReaDemLim + if need_reduceChillerDemand + "Release demand limit" + annotation (Placement(transformation(extent={{280,160},{320,200}}), + iconTransformation(extent={{100,60},{140,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatIsoVal[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Chiller chilled water isolation valve position" + annotation (Placement(transformation(extent={{280,20},{320,60}}), + iconTransformation(extent={{100,20},{140,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yTowStaDow + "Tower stage down status: true=stage down cooling tower" + annotation (Placement(transformation(extent={{280,-80},{320,-40}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChiHeaCon[nChi] + "Chiller head pressure control enabling status" + annotation (Placement(transformation(extent={{280,-120},{320,-80}}), + iconTransformation(extent={{100,-50},{140,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLeaPum + "Lead condenser water pump status" + annotation (Placement(transformation(extent={{280,-170},{320,-130}}), + iconTransformation(extent={{100,-90},{140,-50}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yDesConWatPumSpe( + final min=0, + final max=1, + final unit="1") if not have_fixSpeConWatPum + "Condenser water pump design speed at current stage" + annotation (Placement(transformation(extent={{280,-200},{320,-160}}), + iconTransformation(extent={{100,-130},{140,-90}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yConWatPumNum + "Number of operating condenser water pumps" + annotation (Placement(transformation(extent={{280,-240},{320,-200}}), + iconTransformation(extent={{100,-150},{140,-110}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatMinFloSet( + final min=0, + final unit="m3/s", + final quantity="VolumeFlowRate") + "Chilled water minimum flow setpoint" + annotation (Placement(transformation(extent={{280,-350},{320,-310}}), + iconTransformation(extent={{100,-180},{140,-140}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yEndStaTri + "Staging end trigger" + annotation (Placement(transformation(extent={{280,-390},{320,-350}}), + iconTransformation(extent={{100,-210},{140,-170}}))); + +protected + Buildings.Controls.OBC.CDL.Integers.Change cha + "Check if stage setpoint dicreases" + annotation (Placement(transformation(extent={{-240,350},{-220,370}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.NextChiller + nexChi(final nChi=nChi) "Identify next enabling chiller" + annotation (Placement(transformation(extent={{-40,330},{-20,350}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.DownStart + dowSta( + final nChi=nChi, + final have_parChi=have_parChi, + final need_reduceChillerDemand=need_reduceChillerDemand, + final chiDemRedFac=chiDemRedFac, + final holChiDemTim=holChiDemTim, + final minFloSet=minFloSet, + final maxFloSet=maxFloSet, + final aftByPasSetTim=aftByPasSetTim, + final relFloDif=relFloDif, + final byPasSetTim=byPasSetTim, + final waiTim=waiTim, + final chaChiWatIsoTim=chaChiWatIsoTim, + final proOnTim=proOnTim) "Start stage-down process" + annotation (Placement(transformation(extent={{60,220},{80,240}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.CHWIsoVal + disChiIsoVal( + final nChi=nChi, + final chaChiWatIsoTim=chaChiWatIsoTim, + final iniValPos=1, + final endValPos=0) "Disable isolation valve of the chiller being disabled" + annotation (Placement(transformation(extent={{200,50},{220,70}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.HeadControl + disHeaCon( + final nChi=nChi, + final thrTimEnb=0, + final waiTim=0, + final heaStaCha=false) + "Disable head pressure control of the chiller being disabled" + annotation (Placement(transformation(extent={{200,-110},{220,-90}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.EnableCWPump + disNexCWP + "Identify correct stage number for disabling next condenser water pump" + annotation (Placement(transformation(extent={{100,-170},{120,-150}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Controller + conWatPumCon( + final have_heaPum=have_heaConWatPum, + final have_WSE=have_WSE, + final fixSpe=have_fixSpeConWatPum, + final nChi=nChi, + final nConWatPum=nConWatPum, + final totSta=totSta, + final nChiSta=nChiSta, + final staVec=staVec, + final desConWatPumSpe=desConWatPumSpe, + final desConWatPumNum=desConWatPumNum, + final desChiNum=desChiNum, + final pumSpeChe=pumSpeChe) + "Enabling next condenser water pump or change pump speed" + annotation (Placement(transformation(extent={{140,-192},{160,-172}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.FlowSetpoint + minChiWatFlo( + final nChi=nChi, + final have_parChi=have_parChi, + final maxFloSet=maxFloSet, + final byPasSetTim=byPasSetTim, + final minFloSet=minFloSet) "Minimum chilled water flow setpoint" + annotation (Placement(transformation(extent={{100,-330},{120,-310}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=false) + "False constant" + annotation (Placement(transformation(extent={{-160,190},{-140,210}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1[nChi] + "Convert boolean input to real output" + annotation (Placement(transformation(extent={{-240,-20},{-220,0}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor curDisChi( + final nin=nChi) + "Current disabling chiller" + annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesEquThr( + final t=0.5) "Check if the disabled chiller has not chilled water request" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi2 "Logical switch" + annotation (Placement(transformation(extent={{60,10},{80,30}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and" + annotation (Placement(transformation(extent={{140,10},{160,30}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep4( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{60,70},{80,90}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[nChi] + "Chilled water isolvation valve position" + annotation (Placement(transformation(extent={{140,70},{160,90}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea2[nChi] + "Convert boolean input to real output" + annotation (Placement(transformation(extent={{-240,-130},{-220,-110}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor curDisChi1( + final nin=nChi) + "Current disabling chiller" + annotation (Placement(transformation(extent={{-100,-130},{-80,-110}}))); + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesEquThr1( + final t=0.5) + "Check if the disabled chiller is not requiring condenser water" + annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); + Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and" + annotation (Placement(transformation(extent={{80,-130},{100,-110}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep1( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi [nChi] + "Chillers head pressure control status" + annotation (Placement(transformation(extent={{140,-80},{160,-60}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr( + final nin=nChi) "Multiple or" + annotation (Placement(transformation(extent={{-80,-210},{-60,-190}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr1(final nin=nChi) "Multiple or" + annotation (Placement(transformation(extent={{-40,-230},{-20,-210}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "Logical latch, maintain ON signal until condition changes" + annotation (Placement(transformation(extent={{-180,350},{-160,370}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and" + annotation (Placement(transformation(extent={{200,-250},{220,-230}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg1 + "Rising edge, output true at the moment when input turns from false to true" + annotation (Placement(transformation(extent={{220,-380},{240,-360}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre + "Break algebraic loop" + annotation (Placement(transformation(extent={{180,-380},{200,-360}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat1 + "Maintain ON signal when condenser water pump has been disabled" + annotation (Placement(transformation(extent={{240,-270},{260,-250}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat2 + "Maintain ON signal when chiller demand has been limited" + annotation (Placement(transformation(extent={{120,150},{140,170}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiWatMinSet + "Chilled water minimum flow set" + annotation (Placement(transformation(extent={{200,-340},{220,-320}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat3 + "Maintain ON signal when chilled water isolation valve has been disabled" + annotation (Placement(transformation(extent={{200,-40},{220,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat4 + "Maintain ON signal when chiller head pressure control has been disabled" + annotation (Placement(transformation(extent={{200,-140},{220,-120}}))); + Buildings.Controls.OBC.CDL.Logical.And and3 + "Logical and" + annotation (Placement(transformation(extent={{120,-130},{140,-110}}))); + Buildings.Controls.OBC.CDL.Logical.And and6 "Logical and" + annotation (Placement(transformation(extent={{60,-20},{80,0}}))); + Buildings.Controls.OBC.CDL.Logical.And and7 "Logical and" + annotation (Placement(transformation(extent={{-26,-130},{-6,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Not notInPro + "True: it is not in the setpoint changing process" + annotation (Placement(transformation(extent={{140,-380},{160,-360}}))); +equation + connect(nexChi.yEnaSmaChi,dowSta. nexEnaChi) + annotation (Line(points={{-18,331},{30,331},{30,226},{58,226}}, + color={255,127,0})); + connect(dowSta.uChiWatIsoVal, uChiWatIsoVal) + annotation (Line(points={{58,222},{-60,222},{-60,100},{-300,100}}, + color={0,0,127})); + connect(nexChi.yLasDisChi,dowSta. nexDisChi) + annotation (Line(points={{-18,334},{20,334},{20,220},{58,220}}, + color={255,127,0})); + connect(uChiWatReq, booToRea1.u) + annotation (Line(points={{-300,-10},{-242,-10}}, color={255,0,255})); + connect(booToRea1.y, curDisChi.u) + annotation (Line(points={{-218,-10},{-102,-10}},color={0,0,127})); + connect(curDisChi.y, lesEquThr.u) + annotation (Line(points={{-78,-10},{-62,-10}}, color={0,0,127})); + connect(nexChi.yOnOff, logSwi2.u2) + annotation (Line(points={{-18,337},{0,337},{0,20},{58,20}}, + color={255,0,255})); + connect(and4.y, logSwi2.u1) + annotation (Line(points={{-18,30},{40,30},{40,28},{58,28}}, + color={255,0,255})); + connect(nexChi.yLasDisChi, curDisChi.index) + annotation (Line(points={{-18,334},{20,334},{20,120},{-140,120},{-140,-30}, + {-90,-30},{-90,-22}}, + color={255,127,0})); + connect(logSwi2.y, and1.u1) + annotation (Line(points={{82,20},{138,20}}, color={255,0,255})); + connect(nexChi.yLasDisChi, disChiIsoVal.nexChaChi) + annotation (Line(points={{-18,334},{20,334},{20,68},{198,68}}, + color={255,127,0})); + connect(and1.y,disChiIsoVal.uUpsDevSta) + annotation (Line(points={{162,20},{180,20},{180,55},{198,55}}, + color={255,0,255})); + connect(nexChi.yOnOff, booRep4.u) + annotation (Line(points={{-18,337},{0,337},{0,80},{58,80}}, color={255,0,255})); + connect(booRep4.y, swi.u2) + annotation (Line(points={{82,80},{138,80}}, color={255,0,255})); + connect(uChiWatIsoVal, swi.u3) + annotation (Line(points={{-300,100},{88,100},{88,72},{138,72}}, + color={0,0,127})); + connect(dowSta.yChiWatIsoVal, swi.u1) + annotation (Line(points={{82,228},{96,228},{96,88},{138,88}}, + color={0,0,127})); + connect(swi.y, disChiIsoVal.uChiWatIsoVal) + annotation (Line(points={{162,80},{180,80},{180,65},{198,65}}, + color={0,0,127})); + connect(uConWatReq, booToRea2.u) + annotation (Line(points={{-300,-120},{-242,-120}}, color={255,0,255})); + connect(booToRea2.y, curDisChi1.u) + annotation (Line(points={{-218,-120},{-102,-120}}, + color={0,0,127})); + connect(curDisChi1.y, lesEquThr1.u) + annotation (Line(points={{-78,-120},{-62,-120}}, color={0,0,127})); + connect(logSwi2.y, and5.u1) + annotation (Line(points={{82,20},{90,20},{90,-50},{50,-50},{50,-120},{78, + -120}}, + color={255,0,255})); + connect(uChi,dowSta. uChi) + annotation (Line(points={{-300,220},{-200,220},{-200,234},{58,234}}, + color={255,0,255})); + connect(nexChi.yLasDisChi, curDisChi1.index) + annotation (Line(points={{-18,334},{20,334},{20,120},{-140,120},{-140,-140}, + {-90,-140},{-90,-132}}, + color={255,127,0})); + connect(nexChi.yOnOff, booRep1.u) + annotation (Line(points={{-18,337},{0,337},{0,-70},{58,-70}}, + color={255,0,255})); + connect(booRep1.y, logSwi.u2) + annotation (Line(points={{82,-70},{138,-70}}, color={255,0,255})); + connect(dowSta.yChiHeaCon, logSwi.u1) + annotation (Line(points={{82,232},{100,232},{100,-62},{138,-62}}, + color={255,0,255})); + connect(nexChi.yLasDisChi, disHeaCon.nexChaChi) + annotation (Line(points={{-18,334},{20,334},{20,-104},{198,-104}}, + color={255,127,0})); + connect(logSwi.y, disHeaCon.uChiHeaCon) + annotation (Line(points={{162,-70},{180,-70},{180,-108},{198,-108}}, + color={255,0,255})); + connect(con.y,disNexCWP. uStaUp) + annotation (Line(points={{-138,200},{-120,200},{-120,-158},{98,-158}}, + color={255,0,255})); + connect(disNexCWP.yChiSta, conWatPumCon.uChiSta) + annotation (Line(points={{122,-160},{130,-160},{130,-183},{138,-183}}, + color={255,127,0})); + connect(mulOr1.y, conWatPumCon.uLeaConWatReq) + annotation (Line(points={{-18,-220},{46,-220},{46,-178},{138,-178}}, + color={255,0,255})); + connect(uChi, mulOr.u) + annotation (Line(points={{-300,220},{-200,220},{-200,-200},{-82,-200}}, + color={255,0,255})); + connect(uConWatReq, mulOr1.u) + annotation (Line(points={{-300,-120},{-250,-120},{-250,-220},{-42,-220}}, + color={255,0,255})); + connect(conWatPumCon.uWSE, uWSE) + annotation (Line(points={{138,-185},{52,-185},{52,-240},{-300,-240}}, + color={255,0,255})); + connect(conWatPumCon.uConWatPumSpe, uConWatPumSpe) + annotation (Line(points={{138,-189},{64,-189},{64,-340},{-300,-340}}, + color={0,0,127})); + connect(con.y, minChiWatFlo.uStaUp) + annotation (Line(points={{-138,200},{-120,200},{-120,-311},{98,-311}}, + color={255,0,255})); + connect(nexChi.yOnOff, minChiWatFlo.uOnOff) + annotation (Line(points={{-18,337},{0,337},{0,-327},{98,-327}}, + color={255,0,255})); + connect(dowSta.yChiDem, yChiDem) + annotation (Line(points={{82,239},{179.5,239},{179.5,260},{300,260}}, + color={0,0,127})); + connect(dowSta.yChi, yChi) + annotation (Line(points={{82,224},{180,224},{180,220},{300,220}}, + color={255,0,255})); + connect(disChiIsoVal.yChiWatIsoVal, yChiWatIsoVal) + annotation (Line(points={{222,54},{250,54},{250,40},{300,40}}, + color={0,0,127})); + connect(VChiWat_flow, dowSta.VChiWat_flow) + annotation (Line(points={{-300,190},{-170,190},{-170,232},{58,232}}, + color={0,0,127})); + connect(uChiLoa,dowSta. uChiLoa) + annotation (Line(points={{-300,250},{-170,250},{-170,236},{58,236}}, + color={0,0,127})); + connect(lat.y,dowSta. uStaDow) + annotation (Line(points={{-158,360},{-140,360},{-140,328},{-260,328},{-260,240}, + {58,240}}, color={255,0,255})); + connect(lat.y, disChiIsoVal.uStaPro) annotation (Line(points={{-158,360},{-140, + 360},{-140,328},{-260,328},{-260,52},{198,52}}, color={255,0,255})); + connect(lat.y, and4.u2) + annotation (Line(points={{-158,360},{-140,360},{-140,328},{-260,328},{-260,22}, + {-42,22}}, color={255,0,255})); + connect(lat.y, logSwi2.u3) + annotation (Line(points={{-158,360},{-140,360},{-140,328},{-260,328},{-260,12}, + {58,12}}, color={255,0,255})); + connect(lat.y, disHeaCon.uStaPro) annotation (Line(points={{-158,360},{-140, + 360},{-140,328},{-260,328},{-260,-100},{198,-100}}, color={255,0,255})); + connect(lat.y, minChiWatFlo.uStaDow) + annotation (Line(points={{-158,360},{-140,360},{-140,328},{-260,328},{-260,-329}, + {98,-329}}, color={255,0,255})); + connect(lat.y,disNexCWP. uStaDow) + annotation (Line(points={{-158,360},{-140,360},{-140,328},{-260,328},{-260,-162}, + {98,-162}}, color={255,0,255})); + connect(lat.y, yStaPro) + annotation (Line(points={{-158,360},{300,360}},color={255,0,255})); + connect(dowSta.yOpeParLoaRatMin, yOpeParLoaRatMin) + annotation (Line(points={{58,238},{40,238},{40,280},{-300,280}}, + color={0,0,127})); + connect(conWatPumCon.uChiConIsoVal, uChiConIsoVal) + annotation (Line(points={{138,-172},{-140,-172},{-140,-180},{-300,-180}}, + color={255,0,255})); + connect(mulOr.y, conWatPumCon.uLeaChiEna) + annotation (Line(points={{-58,-200},{40,-200},{40,-174},{138,-174}}, + color={255,0,255})); + connect(mulOr.y, conWatPumCon.uLeaChiSta) + annotation (Line(points={{-58,-200},{40,-200},{40,-176},{138,-176}}, + color={255,0,255})); + connect(conWatPumCon.yDesConWatPumSpe, yDesConWatPumSpe) + annotation (Line(points={{162,-179},{240,-179},{240,-180},{300,-180}}, + color={0,0,127})); + connect(conWatPumCon.uConWatPumSpeSet, uConWatPumSpeSet) + annotation (Line(points={{138,-187},{58,-187},{58,-280},{-300,-280}}, + color={0,0,127})); + connect(uChi, minChiWatFlo.uChi) + annotation (Line(points={{-300,220},{-200,220},{-200,-316},{98,-316}}, + color={255,0,255})); + connect(nexChi.yLasDisChi, minChiWatFlo.nexDisChi) + annotation (Line(points={{-18,334},{20,334},{20,-321},{98,-321}}, + color={255,127,0})); + connect(nexChi.yEnaSmaChi, minChiWatFlo.nexEnaChi) + annotation (Line(points={{-18,331},{30,331},{30,-319},{98,-319}}, + color={255,127,0})); + connect(con.y, minChiWatFlo.uSubCha) + annotation (Line(points={{-138,200},{-120,200},{-120,-324},{98,-324}}, + color={255,0,255})); + connect(edg1.y, lat.clr) + annotation (Line(points={{242,-370},{260,-370},{260,-390},{-190,-390},{-190, + 354},{-182,354}}, color={255,0,255})); + connect(conWatPumCon.yConWatPumNum, yConWatPumNum) + annotation (Line(points={{162,-185},{220,-185},{220,-220},{300,-220}}, + color={255,127,0})); + connect(conWatPumCon.yLeaPum, yLeaPum) + annotation (Line(points={{162,-173},{220,-173},{220,-150},{300,-150}}, + color={255,0,255})); + connect(disHeaCon.yChiHeaCon, yChiHeaCon) + annotation (Line(points={{222,-106},{260,-106},{260,-100},{300,-100}}, + color={255,0,255})); + connect(pre.y, edg1.u) + annotation (Line(points={{202,-370},{218,-370}}, color={255,0,255})); + connect(dowSta.yReaDemLim, yReaDemLim) + annotation (Line(points={{82,221},{92,221},{92,180},{300,180}}, + color={255,0,255})); + connect(dowSta.yReaDemLim, lat2.u) + annotation (Line(points={{82,221},{92,221},{92,160},{118,160}}, + color={255,0,255})); + connect(edg1.y, lat2.clr) + annotation (Line(points={{242,-370},{260,-370},{260,-390},{-190,-390},{-190, + 154},{118,154}}, color={255,0,255})); + connect(lat2.y, and4.u1) + annotation (Line(points={{142,160},{160,160},{160,140},{-80,140},{-80,30}, + {-42,30}}, color={255,0,255})); + connect(conWatPumCon.yPumSpeChe, and2.u1) + annotation (Line(points={{162,-191},{180,-191},{180,-240},{198,-240}}, + color={255,0,255})); + connect(and2.y, lat1.u) + annotation (Line(points={{222,-240},{230,-240},{230,-260},{238,-260}}, + color={255,0,255})); + connect(edg1.y, lat1.clr) + annotation (Line(points={{242,-370},{260,-370},{260,-390},{-190,-390},{-190, + -266},{238,-266}}, color={255,0,255})); + connect(lat1.y, minChiWatFlo.uUpsDevSta) + annotation (Line(points={{262,-260},{270,-260},{270,-290},{-40,-290}, + {-40,-313},{98,-313}}, color={255,0,255})); + connect(dowSta.yChiWatMinFloSet, chiWatMinSet.u3) + annotation (Line(points={{82,236},{170,236},{170,-338},{198,-338}}, + color={0,0,127})); + connect(minChiWatFlo.yChiWatMinFloSet, chiWatMinSet.u1) + annotation (Line(points={{122,-320},{140,-320},{140,-322},{198,-322}}, + color={0,0,127})); + connect(lat1.y, chiWatMinSet.u2) + annotation (Line(points={{262,-260},{270,-260},{270,-290},{160,-290}, + {160,-330},{198,-330}}, color={255,0,255})); + connect(chiWatMinSet.y, yChiWatMinFloSet) + annotation (Line(points={{222,-330},{300,-330}}, color={0,0,127})); + connect(nexChi.yOnOff, dowSta.uOnOff) + annotation (Line(points={{-18,337},{0,337},{0,228},{58,228}}, + color={255,0,255})); + connect(edg1.y, dowSta.clr) + annotation (Line(points={{242,-370},{260,-370},{260,-390},{-190,-390},{-190, + 230},{58,230}}, color={255,0,255})); + connect(disChiIsoVal.yEnaChiWatIsoVal, lat3.u) + annotation (Line(points={{222,66},{240,66},{240,0},{180,0},{180,-30}, + {198,-30}}, color={255,0,255})); + connect(edg1.y, lat3.clr) + annotation (Line(points={{242,-370},{260,-370},{260,-390},{-190,-390},{-190, + -36},{198,-36}}, color={255,0,255})); + connect(disHeaCon.yEnaHeaCon, lat4.u) + annotation (Line(points={{222,-94},{240,-94},{240,-114},{180,-114},{180, + -130},{198,-130}}, color={255,0,255})); + connect(lat4.y, yTowStaDow) + annotation (Line(points={{222,-130},{250,-130},{250,-60},{300,-60}}, + color={255,0,255})); + connect(lat4.y, disNexCWP.uUpsDevSta) + annotation (Line(points={{222,-130},{250,-130},{250,-142},{80,-142},{80,-152}, + {98,-152}}, color={255,0,255})); + connect(lat4.y, and2.u2) + annotation (Line(points={{222,-130},{250,-130},{250,-142},{80,-142},{80,-248}, + {198,-248}}, color={255,0,255})); + connect(edg1.y, lat4.clr) + annotation (Line(points={{242,-370},{260,-370},{260,-390},{-190,-390},{-190, + -136},{198,-136}}, color={255,0,255})); + connect(uStaSet, nexChi.uStaSet) + annotation (Line(points={{-300,380},{-60,380},{-60,347},{-42,347}}, + color={255,127,0})); + connect(nexChi.uChiSet, uChiSet) + annotation (Line(points={{-42,340},{-300,340}}, color={255,0,255})); + connect(uStaSet, cha.u) + annotation (Line(points={{-300,380},{-260,380},{-260,360},{-242,360}}, + color={255,127,0})); + connect(cha.down, lat.u) + annotation (Line(points={{-218,354},{-200,354},{-200,360},{-182,360}}, + color={255,0,255})); + connect(uStaSet, disNexCWP.uStaSet) + annotation (Line(points={{-300,380},{-130,380},{-130,-169},{98,-169}}, + color={255,127,0})); + connect(uChiSta, disNexCWP.uChiSta) + annotation (Line(points={{-300,160},{-150,160},{-150,-165},{98,-165}}, + color={255,127,0})); + connect(dowSta.uChiHeaCon, uChiHeaCon) annotation (Line(points={{58,224},{ + -110,224},{-110,130},{-300,130}}, + color={255,0,255})); + connect(uChiHeaCon, logSwi.u3) annotation (Line(points={{-300,130},{-110,130}, + {-110,-86},{120,-86},{120,-78},{138,-78}}, color={255,0,255})); + connect(conWatPumCon.uConWatPum, uConWatPum) annotation (Line(points={{138,-191}, + {70,-191},{70,-380},{-300,-380}}, color={255,0,255})); + connect(con.y, disHeaCon.uEnaPla) annotation (Line(points={{-138,200},{-120, + 200},{-120,-92},{198,-92}}, + color={255,0,255})); + connect(con.y, conWatPumCon.uEnaPla) annotation (Line(points={{-138,200},{ + -120,200},{-120,-180},{138,-180}}, color={255,0,255})); + connect(and5.y, and3.u1) + annotation (Line(points={{102,-120},{118,-120}},color={255,0,255})); + connect(and3.y, disHeaCon.uUpsDevSta) annotation (Line(points={{142,-120},{ + 160,-120},{160,-96},{198,-96}}, color={255,0,255})); + connect(lat3.y, and3.u2) annotation (Line(points={{222,-30},{240,-30},{240, + -50},{110,-50},{110,-128},{118,-128}}, color={255,0,255})); + connect(edg1.y, yEndStaTri) + annotation (Line(points={{242,-370},{300,-370}}, color={255,0,255})); + connect(edg1.y, nexChi.endPro) annotation (Line(points={{242,-370},{260,-370}, + {260,-390},{-190,-390},{-190,333},{-42,333}}, color={255,0,255})); + connect(lesEquThr.y, and6.u1) + annotation (Line(points={{-38,-10},{58,-10}}, color={255,0,255})); + connect(and6.y, and1.u2) annotation (Line(points={{82,-10},{120,-10},{120,12}, + {138,12}}, color={255,0,255})); + connect(nexChi.yDow, and6.u2) annotation (Line(points={{-18,347},{10,347},{10, + -18},{58,-18}}, color={255,0,255})); + connect(and7.y, and5.u2) annotation (Line(points={{-4,-120},{40,-120},{40, + -128},{78,-128}}, color={255,0,255})); + connect(lesEquThr1.y, and7.u1) + annotation (Line(points={{-38,-120},{-28,-120}}, color={255,0,255})); + connect(nexChi.yDow, and7.u2) annotation (Line(points={{-18,347},{10,347},{10, + -18},{-32,-18},{-32,-128},{-28,-128}}, color={255,0,255})); + connect(minChiWatFlo.yChaSet, notInPro.u) annotation (Line(points={{122,-328}, + {130,-328},{130,-370},{138,-370}}, color={255,0,255})); + connect(notInPro.y, pre.u) + annotation (Line(points={{162,-370},{178,-370}}, color={255,0,255})); +annotation ( + defaultComponentName="dowProCon", + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-280,-400},{280,400}})), + Icon(coordinateSystem(extent={{-100,-200},{100,200}}), graphics={ + Rectangle( + extent={{-100,-200},{100,200}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-120,240},{120,200}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-10,140},{10,-120}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,-120},{-42,-120},{0,-160},{40,-120},{0,-120}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,198},{-58,186}}, + textColor={255,127,0}, + textString="uStaSet"), + Text( + extent={{-96,138},{-26,124}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yOpeParLoaRatMin", + visible=need_reduceChillerDemand), + Text( + extent={{-96,116},{-60,104}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uChiLoa", + visible=need_reduceChillerDemand), + Text( + extent={{-100,96},{-70,84}}, + textColor={255,0,255}, + textString="uChi"), + Text( + extent={{-98,76},{-44,62}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="VChiWat_flow"), + Text( + extent={{-100,-14},{-40,-26}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uChiWatIsoVal"), + Text( + extent={{-100,-44},{-50,-56}}, + textColor={255,0,255}, + textString="uChiWatReq"), + Text( + extent={{-98,-62},{-48,-76}}, + textColor={255,0,255}, + textString="uConWatReq"), + Text( + extent={{-98,-92},{-44,-108}}, + textColor={255,0,255}, + textString="uChiConIsoVal"), + Text( + extent={{-104,-124},{-68,-136}}, + textColor={255,0,255}, + textString="uWSE", + visible=have_WSE), + Text( + extent={{-98,-162},{-32,-176}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uConWatPumSpe", + visible=not have_fixSpeConWatPum), + Text( + extent={{-98,-140},{-26,-158}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uConWatPumSpeSet", + visible=not have_fixSpeConWatPum), + Text( + extent={{60,198},{100,186}}, + textColor={255,0,255}, + textString="yStaPro"), + Text( + extent={{60,158},{96,146}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiDem", + visible=need_reduceChillerDemand), + Text( + extent={{72,126},{96,114}}, + textColor={255,0,255}, + textString="yChi"), + Text( + extent={{36,50},{96,34}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiWatIsoVal"), + Text( + extent={{42,8},{96,-4}}, + textColor={255,0,255}, + textString="yTowStaDow"), + Text( + extent={{48,-22},{96,-36}}, + textColor={255,0,255}, + textString="yChiHeaCon"), + Text( + extent={{58,-62},{96,-74}}, + textColor={255,0,255}, + textString="yLeaPum"), + Text( + extent={{18,-104},{98,-114}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yDesConWatPumSpe", + visible=not have_fixSpeConWatPum), + Text( + extent={{34,-122},{96,-136}}, + textColor={255,127,0}, + textString="yConWatPumNum"), + Text( + extent={{28,-150},{98,-164}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiWatMinFloSet"), + Text( + extent={{40,88},{96,74}}, + textColor={255,0,255}, + textString="yReaDemLim", + visible=need_reduceChillerDemand), + Text( + extent={{-100,178},{-60,166}}, + textColor={255,0,255}, + textString="uChiSet"), + Text( + extent={{-100,46},{-58,34}}, + textColor={255,127,0}, + textString="uChiSta"), + Text( + extent={{-98,16},{-44,4}}, + textColor={255,0,255}, + textString="uChiHeaCon"), + Text( + extent={{-98,-182},{-42,-196}}, + textColor={255,0,255}, + textString="uConWatPum", + visible=have_fixSpeConWatPum), + Text( + extent={{50,-180},{98,-194}}, + textColor={255,0,255}, + textString="yEndStaTri")}), +Documentation(info=" +

                      +Block that controls devices when there is a stage-down command. This sequence is for +water-cooled primary-only parallel chiller plants with headered chilled water pumps +and headered condenser water pumps, or air-cooled primary-only parallel chiller +plants with headered chilled water pumps. +This development is based on ASHRAE Guideline 36-2021, +section 5.20.4.17, which specifies the step-by-step control of +devices during chiller staging down process. +

                      +
                        +
                      1. +Identify the chiller(s) that should be enabled (and disabled, if have_ponyChiller=true). +This is implemented in block nexChi. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.NextChiller +for more decriptions. +
                      2. +
                      3. +Start the staging down process, +
                          +
                        • +For any stage change during which a smaller chiller is enabled and a larger chller +is disabled: +
                            +
                          1. +Command operating chillers to reduce demand to 75% (chiDemRedFac) of +their current load (uChiLoa) or a percentage equal to current stage +minimum cycling operative partial load ratio yOpeParLoaRatMin, whichever is greater. +Wait until actual demand < 80% of current load up to a maximum of 5 minutes +(holChiDemTim) before proceeding. +
                          2. +
                          3. +Slowly change the minimum flow bypass setpoint to the one that includes both +chillers are enabled. After new setpoint is achieved, wait 1 minute +(aftByPasSetTim) to allow loop stabilize. +
                          4. +
                          5. +Enable head pressure control for the chiller being enabled. Wait 30 seconds (waiTim). +
                          6. +
                          7. +Slowly (chaChiWatIsoTim) open chilled water isolation valve of the smaller +chiller being enabled. The valve timing should be determind in the field. +
                          8. +
                          9. +Start the smaller chiller after its chilled water isolation valve is fully open. +
                          10. +
                          11. +Wait 5 minutes (proOnTim) for the newly enabled chiller to prove that +it is operating correctly, then shut off the larger chiller and release the +demand limit. +
                          12. +
                          +
                        • +
                        • +If staging down from any other stage, shut off the last stage chiller. +
                        • +
                        +These are implemented in block dowSta. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.DownStart +for more decriptions. +
                      4. +
                      5. +When the controller of the chiller being shut off indicates no request for chilled +water flow (uChiWatReq=false), slowly (chaChiWatIsoTim) +close the chiller's chilled water isolation valve to avoid a sudden change in flow +through other operating chillers. +This is implemented in block disChiIsoVal. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.CHWIsoVal +for more decriptions. +
                      6. + +
                      7. +When the controller of the chiller being shut off indicates no request for condenser +water flow (uConWatReq=false), disable the chiller's head pressure control +loop. +This is implemented in block disHeaCon. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.HeadControl +for more decriptions. +
                      8. + +
                      9. +When the condenser water head pressure control valve is fully closed, shut off +the last lag condenser water pump or change the pump speed to that required of +the new stage. +Block disNexCWP identifies chiller stage for the condenser water pump +control +( +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.EnableCWPump) +and block conWatPumCon checks if the condenser water pumps have been reset +( +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Controller). +
                      10. + +
                      11. +Change the chilled water minimum flow setpoint to that appropriate for the new +stage. +The minimum flow setpoint is reset in block minChiWatFlo +( +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.FlowSetpoint). +Block minBypSet checks if the new setpoint is achieved +( +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ResetMinBypass). +
                      12. +
                      +", revisions=" +
                        +
                      • +September 23, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Down; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/CHWIsoVal.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/CHWIsoVal.mo new file mode 100644 index 00000000000..ece625302fa --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/CHWIsoVal.mo @@ -0,0 +1,394 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences; +block CHWIsoVal "Sequence of enable or disable chilled water isolation valve" + + parameter Integer nChi=2 + "Total number of chiller, which is also the total number of chilled water isolation valve"; + parameter Real chaChiWatIsoTim( + final unit="s", + final quantity="Time") + "Time to slowly change isolation valve, should be determined in the field"; + parameter Real iniValPos + "Initial valve position, if it needs to turn on chiller, the value should be 0"; + parameter Real endValPos + "Ending valve position, if it needs to turn on chiller, the value should be 1"; + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexChaChi + "Index of next chiller that should change status" + annotation (Placement(transformation(extent={{-200,-20},{-160,20}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiWatIsoVal[nChi]( + final unit=fill("1", nChi), + final min=fill(0, nChi), + final max=fill(1, nChi)) "Chilled water isolation valve position" + annotation (Placement(transformation(extent={{-200,-120},{-160,-80}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uUpsDevSta + "Status of resetting status of device before enabling or disabling isolation valve" + annotation (Placement(transformation(extent={{-200,-160},{-160,-120}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaPro + "Indicate if there is a stage up or stage down command" + annotation (Placement(transformation(extent={{-200,-198},{-160,-158}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatIsoVal[nChi]( + final unit=fill("1", nChi), + final min=fill(0, nChi), + final max=fill(1, nChi)) "Chiller chilled water isolation valve position" + annotation (Placement(transformation(extent={{180,-60},{220,-20}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yEnaChiWatIsoVal + "Status of chilled water isolation valve control: true=enabled valve is fully open" + annotation (Placement(transformation(extent={{180,120},{220,160}}), + iconTransformation(extent={{100,40},{140,80}}))); + +protected + final parameter Integer chiInd[nChi]={i for i in 1:nChi} + "Chiller index, {1,2,...,n}"; + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con7( + final k=chaChiWatIsoTim) "Time to change chilled water isolation valve" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con8( + final k=endValPos) + "Ending valve position" + annotation (Placement(transformation(extent={{0,20},{20,40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con6( + final k=iniValPos) + "Initial isolation valve position" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con9( + final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{0,70},{20,90}}))); + Buildings.Controls.OBC.CDL.Reals.Line lin1 + "Chilled water isolation valve setpoint" + annotation (Placement(transformation(extent={{40,50},{60,70}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim( + final t=chaChiWatIsoTim) + "Count the time after changing up-stream device status" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg + "Rising edge, output true at the moment when input turns from false to true" + annotation (Placement(transformation(extent={{-100,-150},{-80,-130}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "Logical latch, maintain ON signal until condition changes" + annotation (Placement(transformation(extent={{20,-180},{40,-160}}))); + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam[nChi] + "Record the old chiller chilled water isolation valve status" + annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{20,-150},{40,-130}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 + "Check if it is time to change isolation valve position" + annotation (Placement(transformation(extent={{-40,-180},{-20,-160}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-40,-210},{-20,-190}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[nChi] "Logical switch" + annotation (Placement(transformation(extent={{120,-50},{140,-30}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep1( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{60,-180},{80,-160}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2[nChi] "Logical not" + annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1[nChi] "Logical switch" + annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi2[nChi] "Logical switch" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu[nChi] + "Check next enabling isolation valve" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep( + final nout=nChi) + "Replicate integer input" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep( + final nout=nChi) + "Replicate real input" + annotation (Placement(transformation(extent={{80,50},{100,70}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys3[nChi]( + final uLow=fill(0.025, nChi), + final uHigh=fill(0.05, nChi)) "Check if isolation valve is enabled" + annotation (Placement(transformation(extent={{-120,210},{-100,230}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys4[nChi]( + final uLow=fill(0.925, nChi), + final uHigh=fill(0.975, nChi)) "Check if isolation valve is open more than 95%" + annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); + Buildings.Controls.OBC.CDL.Logical.Not not3[nChi] "Logical not" + annotation (Placement(transformation(extent={{-40,180},{-20,200}}))); + Buildings.Controls.OBC.CDL.Logical.Not not4[nChi] "Logical not" + annotation (Placement(transformation(extent={{-40,150},{-20,170}}))); + Buildings.Controls.OBC.CDL.Logical.And and4[nChi] "Logical and" + annotation (Placement(transformation(extent={{0,180},{20,200}}))); + Buildings.Controls.OBC.CDL.Logical.And and3[nChi] "Logical and" + annotation (Placement(transformation(extent={{0,210},{20,230}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2[nChi] "Logicla or" + annotation (Placement(transformation(extent={{40,210},{60,230}}))); + Buildings.Controls.OBC.CDL.Logical.MultiAnd mulAnd1( + final nin=nChi) + "Logical and" + annotation (Placement(transformation(extent={{80,210},{100,230}}))); + Buildings.Controls.OBC.CDL.Logical.And and5 + "Check if the isolation valve has been fully open" + annotation (Placement(transformation(extent={{120,130},{140,150}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt[nChi]( + final k=chiInd) "Chiller index array" + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat1 + "Logical latch, maintain ON signal until condition changes" + annotation (Placement(transformation(extent={{-70,130},{-50,150}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat2 + "Logical latch, maintain ON signal until condition changes" + annotation (Placement(transformation(extent={{-40,110},{-20,130}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=5) "Delay the true input" + annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 + "Logical and" + annotation (Placement(transformation(extent={{150,130},{170,150}}))); + +equation + connect(uChiWatIsoVal, triSam.u) + annotation (Line(points={{-180,-100},{-82,-100}}, color={0,0,127})); + connect(con9.y, lin1.x1) + annotation (Line(points={{22,80},{30,80},{30,68},{38,68}}, + color={0,0,127})); + connect(con6.y, lin1.f1) + annotation (Line(points={{-18,80},{-10,80},{-10,64},{38,64}}, + color={0,0,127})); + connect(con7.y, lin1.x2) + annotation (Line(points={{-18,30},{-10,30},{-10,56},{38,56}}, + color={0,0,127})); + connect(con8.y, lin1.f2) + annotation (Line(points={{22,30},{30,30},{30,52},{38,52}}, color={0,0,127})); + connect(tim.y, lin1.u) + annotation (Line(points={{-78,60},{38,60}}, color={0,0,127})); + connect(uUpsDevSta, edg.u) + annotation (Line(points={{-180,-140},{-102,-140}}, color={255,0,255})); + connect(uStaPro, and2.u2) + annotation (Line(points={{-180,-178},{-42,-178}}, color={255,0,255})); + connect(edg.y, and2.u1) + annotation (Line(points={{-78,-140},{-60,-140},{-60,-170},{-42,-170}}, + color={255,0,255})); + connect(and2.y, lat.u) + annotation (Line(points={{-18,-170},{18,-170}}, color={255,0,255})); + connect(uStaPro, not1.u) annotation (Line(points={{-180,-178},{-80,-178},{-80, + -200},{-42,-200}}, color={255,0,255})); + connect(not1.y, lat.clr) + annotation (Line(points={{-18,-200},{0,-200},{0,-176},{18,-176}}, + color={255,0,255})); + connect(lat.y, booRep1.u) + annotation (Line(points={{42,-170},{58,-170}}, color={255,0,255})); + connect(booRep1.y, swi.u2) + annotation (Line(points={{82,-170},{100,-170},{100,-40},{118,-40}}, + color={255,0,255})); + connect(swi.y, yChiWatIsoVal) + annotation (Line(points={{142,-40},{200,-40}}, color={0,0,127})); + connect(booRep.y, triSam.trigger) + annotation (Line(points={{42,-140},{60,-140},{60,-120},{-70,-120},{-70,-112}}, + color={255,0,255})); + connect(and2.y, booRep.u) + annotation (Line(points={{-18,-170},{0,-170},{0,-140},{18,-140}}, + color={255,0,255})); + connect(booRep1.y, not2.u) + annotation (Line(points={{82,-170},{100,-170},{100,-110},{-40,-110}, + {-40,-80},{-22,-80}}, color={255,0,255})); + connect(not2.y, swi1.u2) + annotation (Line(points={{2,-80},{20,-80},{20,-60},{58,-60}}, + color={255,0,255})); + connect(triSam.y, swi1.u3) + annotation (Line(points={{-58,-100},{40,-100},{40,-68},{58,-68}}, + color={0,0,127})); + connect(swi1.y, swi.u3) + annotation (Line(points={{82,-60},{110,-60},{110,-48},{118,-48}}, + color={0,0,127})); + connect(uChiWatIsoVal, swi1.u1) + annotation (Line(points={{-180,-100},{-140,-100},{-140,-52},{58,-52}}, + color={0,0,127})); + connect(swi2.y, swi.u1) + annotation (Line(points={{82,0},{100,0},{100,-32},{118,-32}}, + color={0,0,127})); + connect(nexChaChi, intRep.u) + annotation (Line(points={{-180,0},{-82,0}}, color={255,127,0})); + connect(intRep.y, intEqu.u1) + annotation (Line(points={{-58,0},{-22,0}}, color={255,127,0})); + connect(intEqu.y, swi2.u2) + annotation (Line(points={{2,0},{58,0}}, color={255,0,255})); + connect(lin1.y, reaRep.u) + annotation (Line(points={{62,60},{78,60}}, color={0,0,127})); + connect(lat.y, tim.u) + annotation (Line(points={{42,-170},{50,-170},{50,-220},{-110,-220},{-110,60}, + {-102,60}}, color={255,0,255})); + connect(reaRep.y, swi2.u1) + annotation (Line(points={{102,60},{120,60},{120,30},{40,30},{40,8},{58,8}}, + color={0,0,127})); + connect(triSam.y, swi2.u3) + annotation (Line(points={{-58,-100},{40,-100},{40,-8},{58,-8}}, + color={0,0,127})); + connect(uChiWatIsoVal, hys4.u) + annotation (Line(points={{-180,-100},{-140,-100},{-140,160},{-122,160}}, + color={0,0,127})); + connect(uChiWatIsoVal, hys3.u) + annotation (Line(points={{-180,-100},{-140,-100},{-140,220},{-122,220}}, + color={0,0,127})); + connect(hys3.y, and3.u1) + annotation (Line(points={{-98,220},{-2,220}}, color={255,0,255})); + connect(hys4.y, and3.u2) + annotation (Line(points={{-98,160},{-80,160},{-80,212},{-2,212}}, + color={255,0,255})); + connect(hys4.y, not4.u) + annotation (Line(points={{-98,160},{-42,160}}, color={255,0,255})); + connect(hys3.y, not3.u) + annotation (Line(points={{-98,220},{-60,220},{-60,190},{-42,190}}, + color={255,0,255})); + connect(not4.y, and4.u2) + annotation (Line(points={{-18,160},{-12,160},{-12,182},{-2,182}}, + color={255,0,255})); + connect(not3.y, and4.u1) + annotation (Line(points={{-18,190},{-2,190}}, color={255,0,255})); + connect(and3.y, or2.u1) + annotation (Line(points={{22,220},{38,220}}, color={255,0,255})); + connect(and4.y, or2.u2) + annotation (Line(points={{22,190},{30,190},{30,212},{38,212}}, + color={255,0,255})); + connect(mulAnd1.y, and5.u1) + annotation (Line(points={{102,220},{110,220},{110,140},{118,140}}, + color={255,0,255})); + connect(or2.y, mulAnd1.u) + annotation (Line(points={{62,220},{78,220}}, color={255,0,255})); + connect(conInt.y, intEqu.u2) + annotation (Line(points={{-58,-30},{-40,-30},{-40,-8},{-22,-8}}, + color={255,127,0})); + connect(lat1.y, and5.u2) + annotation (Line(points={{-48,140},{46,140},{46,132},{118,132}}, + color={255,0,255})); + connect(uUpsDevSta, lat1.u) annotation (Line(points={{-180,-140},{-130,-140},{ + -130,140},{-72,140}}, color={255,0,255})); + connect(not1.y, truDel.u) annotation (Line(points={{-18,-200},{0,-200},{0,-230}, + {-120,-230},{-120,100},{-102,100}}, color={255,0,255})); + connect(truDel.y, lat1.clr) annotation (Line(points={{-78,100},{-74,100},{-74, + 134},{-72,134}}, color={255,0,255})); + connect(tim.passed, lat2.u) annotation (Line(points={{-78,52},{-60,52},{-60,120}, + {-42,120}}, color={255,0,255})); + connect(truDel.y, lat2.clr) annotation (Line(points={{-78,100},{-74,100},{-74, + 114},{-42,114}}, color={255,0,255})); + connect(and5.y, and1.u1) + annotation (Line(points={{142,140},{148,140}}, color={255,0,255})); + connect(and1.y, yEnaChiWatIsoVal) + annotation (Line(points={{172,140},{200,140}}, color={255,0,255})); + connect(lat2.y, and1.u2) annotation (Line(points={{-18,120},{144,120},{144, + 132},{148,132}}, color={255,0,255})); +annotation ( + defaultComponentName="enaChiIsoVal", + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-160,-240},{180,240}}), + graphics={ + Rectangle( + extent={{-158,238},{178,122}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-38,184},{172,150}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Check if all enabled CHW isolation valves +have been fully open")}), + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text(extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-96,-74},{-60,-86}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uStaPro"), + Text( + extent={{-96,-42},{-46,-56}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uUpsDevSta"), + Text( + extent={{-96,86},{-48,74}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="nexChaChi"), + Text( + extent={{-96,58},{-42,46}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uChiWatIsoVal"), + Text( + extent={{32,70},{96,54}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yEnaChiWatIsoVal"), + Polygon( + points={{-60,40},{-60,-40},{0,0},{-60,40}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Polygon( + points={{60,40},{60,-40},{0,0},{60,40}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Text( + extent={{44,-54},{98,-66}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiWatIsoVal")}), + Documentation(info=" +

                      +Block updates chiller chilled water isolation valve enabling-disabling status when +there is stage change command (uStaPro=true). It will also generate +status to indicate if the valve reset process has finished. +This development is based on ASHRAE Guideline 36-2021, +section 5.20.4.16, item e and section 5.20.4.17, item c, which specifies when +and how the isolation valve should be controlled when it is in stage changing process. +

                      +
                        +
                      • +When there is stage up command (uStaPro=true) and next chiller +head pressure control has been enabled (uUpsDevSta=true), +the chilled water isolation valve of next enabling chiller indicated +by nexChaChi will be enabled (iniValPos=0, +endValPos=1). +
                      • +
                      • +When there is stage down command (uStaPro=true) and the disabling chiller +(nexChaChi) has been shut off (uUpsDevSta=true), +the chiller's isolation valve will be disabled (iniValPos=1, +endValPos=0). +
                      • +
                      +

                      +The valve should open or close slowly. For example, this could be accomplished by +resetting the valve position X /seconds, where X = (endValPos - +iniValPos) / chaChiWatIsoTim. +The valve time chaChiWatIsoTim should be determined in the field. +

                      +

                      +This sequence will generate array yChiWatIsoVal which indicates +chilled water isolation valve position setpoint. yEnaChiWatIsoVal +will be true when all the enabled valves are fully open and all the disabled valves +are fully closed. +

                      +", revisions=" +
                        +
                      • +February 4, 2020, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end CHWIsoVal; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/DisableChiller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/DisableChiller.mo new file mode 100644 index 00000000000..181b63ea62c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/DisableChiller.mo @@ -0,0 +1,456 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences; +block DisableChiller "Sequence for disabling chiller in stage-down process" + + parameter Integer nChi=2 "Total number of chillers"; + parameter Real proOnTim( + final unit="s", + final quantity="Time") = 300 + "Enabled chiller operation time to indicate if it is proven on"; + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexEnaChi + "Index of next enabling chiller" + annotation (Placement(transformation(extent={{-240,180},{-200,220}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaDow + "Stage-down command" + annotation (Placement(transformation(extent={{-240,120},{-200,160}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEnaChiWatIsoVal + "Status of chiller chilled water isolation valve control: true=enabled valve is fully open" + annotation (Placement(transformation(extent={{-240,90},{-200,130}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller status: true=ON" + annotation (Placement(transformation(extent={{-240,60},{-200,100}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexDisChi + "Next disabling chiller when there is any stage up that need one chiller on and another off" + annotation (Placement(transformation(extent={{-240,-100},{-200,-60}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOnOff + "Indicate if the stage require one chiller to be enabled while another is disabled" + annotation (Placement(transformation(extent={{-240,-140},{-200,-100}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChi[nChi] + "Chiller enabling status" + annotation (Placement(transformation(extent={{200,-140},{240,-100}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yRelDemLim + "Release demand limit" + annotation (Placement(transformation(extent={{200,-70},{240,-30}}), + iconTransformation(extent={{100,-100},{140,-60}}))); + +protected + final parameter Integer chiInd[nChi]={i for i in 1:nChi} + "Chiller index, {1,2,...,n}"; + Buildings.Controls.OBC.CDL.Logical.Switch logSwi[nChi] "Logical switch" + annotation (Placement(transformation(extent={{100,190},{120,210}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 + "In staging down process and the chilled water isolation valve has open" + annotation (Placement(transformation(extent={{-160,130},{-140,150}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-100,130},{-80,150}}))); + Buildings.Controls.OBC.CDL.Logical.And and1[nChi] "Logical and" + annotation (Placement(transformation(extent={{-40,190},{-20,210}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con[nChi]( + final k=fill(true, nChi)) "True constant" + annotation (Placement(transformation(extent={{-40,220},{-20,240}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChi] + "Convert boolean input to real output" + annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greEquThr[nChi]( + final t=fill(0.5, nChi)) + "Convert real input to boolean output" + annotation (Placement(transformation(extent={{20,90},{40,110}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi1[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{100,0},{120,20}}))); + Buildings.Controls.OBC.CDL.Logical.And and3[nChi] "Logical and" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1[nChi]( + final k=fill(false, nChi)) "False constant" + annotation (Placement(transformation(extent={{40,20},{60,40}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi2[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{160,40},{180,60}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep(final nout=nChi) + "Replicate integer input" + annotation (Placement(transformation(extent={{-160,190},{-140,210}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu[nChi] + "Check next enabling isolation valve" + annotation (Placement(transformation(extent={{-100,190},{-80,210}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim(final t=proOnTim) + "Count the time after new chiller has been enabled" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam[nChi] + "Record the old chiller chilled water isolation valve status" + annotation (Placement(transformation(extent={{-20,90},{0,110}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep1(final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg + "Rising edge, output true at the moment when input turns from false to true" + annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep2(final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep3(final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{80,40},{100,60}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-20,40},{0,60}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt[nChi]( + final k=chiInd) "Chiller index array" + annotation (Placement(transformation(extent={{-160,160},{-140,180}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep1(final nout=nChi) + "Replicate integer input" + annotation (Placement(transformation(extent={{-160,-90},{-140,-70}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu1[nChi] + "Check next enabling isolation valve" + annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep4(final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-160,-170},{-140,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg1 + "Rising edge, output true at the moment when input turns from false to true" + annotation (Placement(transformation(extent={{-160,-250},{-140,-230}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1[nChi] + "Convert boolean input to real output" + annotation (Placement(transformation(extent={{-160,-220},{-140,-200}}))); + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam1[nChi] + "Record the old chiller chilled water isolation valve status" + annotation (Placement(transformation(extent={{-80,-220},{-60,-200}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep5(final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-120,-250},{-100,-230}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greEquThr1[nChi]( + final t=fill(0.5, nChi)) + "Convert real input to boolean output" + annotation (Placement(transformation(extent={{40,-220},{60,-200}}))); + Buildings.Controls.OBC.CDL.Logical.And and4[nChi] "Logical and" + annotation (Placement(transformation(extent={{40,-190},{60,-170}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con2[nChi]( + final k=fill(false, nChi)) + "False constant" + annotation (Placement(transformation(extent={{40,-160},{60,-140}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi3[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{100,-190},{120,-170}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi4[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{160,-130},{180,-110}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep6( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{100,-130},{120,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi5[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{100,-100},{120,-80}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi6[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{100,-250},{120,-230}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi7 + "Logical switch" + annotation (Placement(transformation(extent={{160,-62},{180,-42}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con3( + final k=true) + "When the process does not require chiller on-off, there is no need to limit chiller demand" + annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); + +equation + connect(nexEnaChi, intRep.u) + annotation (Line(points={{-220,200},{-162,200}}, color={255,127,0})); + connect(intRep.y, intEqu.u1) + annotation (Line(points={{-138,200},{-102,200}}, color={255,127,0})); + connect(uEnaChiWatIsoVal, and2.u2) + annotation (Line(points={{-220,110},{-170,110},{-170,132},{-162,132}}, + color={255,0,255})); + connect(uStaDow, and2.u1) + annotation (Line(points={{-220,140},{-162,140}}, color={255,0,255})); + connect(and2.y, booRep.u) + annotation (Line(points={{-138,140},{-102,140}}, color={255,0,255})); + connect(intEqu.y, and1.u1) + annotation (Line(points={{-78,200},{-42,200}}, color={255,0,255})); + connect(booRep.y, and1.u2) + annotation (Line(points={{-78,140},{-70,140},{-70,192},{-42,192}}, + color={255,0,255})); + connect(and1.y, logSwi.u2) + annotation (Line(points={{-18,200},{98,200}}, color={255,0,255})); + connect(con.y, logSwi.u1) + annotation (Line(points={{-18,230},{0,230},{0,208},{98,208}}, color={255,0,255})); + connect(uChi, booToRea.u) + annotation (Line(points={{-220,80},{-170,80},{-170,100},{-102,100}}, + color={255,0,255})); + connect(and2.y, edg.u) + annotation (Line(points={{-138,140},{-120,140},{-120,70},{-102,70}}, + color={255,0,255})); + connect(booToRea.y, triSam.u) + annotation (Line(points={{-78,100},{-22,100}}, color={0,0,127})); + connect(edg.y, booRep1.u) + annotation (Line(points={{-78,70},{-62,70}}, color={255,0,255})); + connect(booRep1.y, triSam.trigger) + annotation (Line(points={{-38,70},{-10,70},{-10,88}}, color={255,0,255})); + connect(triSam.y, greEquThr.u) + annotation (Line(points={{2,100},{18,100}}, color={0,0,127})); + connect(greEquThr.y, logSwi.u3) + annotation (Line(points={{42,100},{60,100},{60,192},{98,192}}, + color={255,0,255})); + connect(and2.y, tim.u) + annotation (Line(points={{-138,140},{-120,140},{-120,0},{-102,0}}, + color={255,0,255})); + connect(booRep2.y, and3.u1) + annotation (Line(points={{2,0},{38,0}}, color={255,0,255})); + connect(and3.y, logSwi1.u2) + annotation (Line(points={{62,0},{80,0},{80,10},{98,10}}, + color={255,0,255})); + connect(con1.y, logSwi1.u1) + annotation (Line(points={{62,30},{80,30},{80,18},{98,18}}, + color={255,0,255})); + connect(uChi, logSwi1.u3) + annotation (Line(points={{-220,80},{-170,80},{-170,-20},{90,-20},{90,2}, + {98,2}}, color={255,0,255})); + connect(booRep3.y, logSwi2.u2) + annotation (Line(points={{102,50},{158,50}}, color={255,0,255})); + connect(logSwi1.y, logSwi2.u3) + annotation (Line(points={{122,10},{140,10},{140,42},{158,42}}, + color={255,0,255})); + connect(logSwi.y, logSwi2.u1) + annotation (Line(points={{122,200},{140,200},{140,58},{158,58}}, + color={255,0,255})); + connect(conInt.y, intEqu.u2) + annotation (Line(points={{-138,170},{-110,170},{-110,192},{-102,192}}, + color={255,127,0})); + connect(nexDisChi, intRep1.u) + annotation (Line(points={{-220,-80},{-162,-80}}, color={255,127,0})); + connect(intRep1.y, intEqu1.u1) + annotation (Line(points={{-138,-80},{-102,-80}}, color={255,127,0})); + connect(conInt.y, intEqu1.u2) + annotation (Line(points={{-138,170},{-110,170},{-110,-88},{-102,-88}}, + color={255,127,0})); + connect(intEqu1.y, and3.u2) + annotation (Line(points={{-78,-80},{10,-80},{10,-8},{38,-8}}, + color={255,0,255})); + connect(not1.y, booRep3.u) + annotation (Line(points={{2,50},{78,50}}, color={255,0,255})); + connect(uStaDow, booRep4.u) + annotation (Line(points={{-220,140},{-180,140},{-180,-160},{-162,-160}}, + color={255,0,255})); + connect(uChi, booToRea1.u) + annotation (Line(points={{-220,80},{-170,80},{-170,-210},{-162,-210}}, + color={255,0,255})); + connect(uStaDow, edg1.u) + annotation (Line(points={{-220,140},{-180,140},{-180,-240},{-162,-240}}, + color={255,0,255})); + connect(booToRea1.y, triSam1.u) + annotation (Line(points={{-138,-210},{-82,-210}},color={0,0,127})); + connect(edg1.y, booRep5.u) + annotation (Line(points={{-138,-240},{-122,-240}}, color={255,0,255})); + connect(triSam1.y, greEquThr1.u) + annotation (Line(points={{-58,-210},{38,-210}}, color={0,0,127})); + connect(booRep4.y, and4.u2) + annotation (Line(points={{-138,-160},{0,-160},{0,-188},{38,-188}}, + color={255,0,255})); + connect(intEqu1.y, and4.u1) + annotation (Line(points={{-78,-80},{10,-80},{10,-180},{38,-180}}, + color={255,0,255})); + connect(and4.y, logSwi3.u2) + annotation (Line(points={{62,-180},{98,-180}}, color={255,0,255})); + connect(con2.y, logSwi3.u1) + annotation (Line(points={{62,-150},{72,-150},{72,-172},{98,-172}}, + color={255,0,255})); + connect(greEquThr1.y, logSwi3.u3) + annotation (Line(points={{62,-210},{80,-210},{80,-188},{98,-188}}, + color={255,0,255})); + connect(uOnOff, booRep6.u) + annotation (Line(points={{-220,-120},{98,-120}}, color={255,0,255})); + connect(booRep6.y, logSwi4.u2) + annotation (Line(points={{122,-120},{158,-120}},color={255,0,255})); + connect(logSwi4.y, yChi) + annotation (Line(points={{182,-120},{220,-120}}, color={255,0,255})); + connect(booRep.y, logSwi5.u2) + annotation (Line(points={{-78,140},{-70,140},{-70,-90},{98,-90}}, + color={255,0,255})); + connect(uChi, logSwi5.u3) + annotation (Line(points={{-220,80},{-170,80},{-170,-98},{98,-98}}, + color={255,0,255})); + connect(logSwi2.y, logSwi5.u1) + annotation (Line(points={{182,50},{190,50},{190,-28},{60,-28},{60,-82},{98,-82}}, + color={255,0,255})); + connect(logSwi5.y, logSwi4.u1) + annotation (Line(points={{122,-90},{140,-90},{140,-112},{158,-112}}, + color={255,0,255})); + connect(booRep5.y, triSam1.trigger) + annotation (Line(points={{-98,-240},{-70,-240},{-70,-222}}, color={255,0,255})); + connect(booRep4.y, logSwi6.u2) + annotation (Line(points={{-138,-160},{0,-160},{0,-240},{98,-240}}, color={255,0,255})); + connect(logSwi3.y, logSwi6.u1) + annotation (Line(points={{122,-180},{130,-180},{130,-220},{80,-220}, + {80,-232},{98,-232}}, color={255,0,255})); + connect(uChi, logSwi6.u3) + annotation (Line(points={{-220,80},{-170,80},{-170,-180},{-40,-180}, + {-40,-248},{98,-248}}, color={255,0,255})); + connect(logSwi6.y, logSwi4.u3) + annotation (Line(points={{122,-240},{140,-240},{140,-128},{158,-128}}, + color={255,0,255})); + connect(uOnOff, logSwi7.u2) + annotation (Line(points={{-220,-120},{80,-120},{80,-52},{158,-52}}, + color={255,0,255})); + connect(logSwi7.y,yRelDemLim) + annotation (Line(points={{182,-52},{202,-52},{202,-50},{220,-50}}, + color={255,0,255})); + connect(tim.passed, not1.u) + annotation (Line(points={{-78,-8},{-40,-8},{-40,50},{-22,50}}, + color={255,0,255})); + connect(tim.passed, booRep2.u) + annotation (Line(points={{-78,-8},{-40,-8},{-40,0},{-22,0}}, + color={255,0,255})); + connect(tim.passed, logSwi7.u1) + annotation (Line(points={{-78,-8},{-40,-8},{-40,-44},{158,-44}}, + color={255,0,255})); + connect(con3.y, logSwi7.u3) annotation (Line(points={{42,-70},{90,-70},{90,-60}, + {158,-60}}, color={255,0,255})); +annotation ( + defaultComponentName="disChi", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text(extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-60,0},{60,-80}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-52,20},{-40,0}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,20},{52,0}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,60},{60,20}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Text( + extent={{-98,98},{-44,82}}, + textColor={255,127,0}, + textString="nexEnaChi"), + Text( + extent={{-98,70},{-52,56}}, + textColor={255,0,255}, + textString="uStaDow"), + Text( + extent={{-96,30},{-24,10}}, + textColor={255,0,255}, + textString="uEnaChiWatIsoVal"), + Text( + extent={{-100,-14},{-78,-24}}, + textColor={255,0,255}, + textString="uChi"), + Text( + extent={{-98,-82},{-70,-94}}, + textColor={255,0,255}, + textString="uOnOff"), + Text( + extent={{-98,-40},{-44,-56}}, + textColor={255,127,0}, + textString="nexDisChi"), + Text( + extent={{74,6},{98,-6}}, + textColor={255,0,255}, + textString="yChi"), + Text( + extent={{44,-72},{96,-84}}, + textColor={255,0,255}, + textString="yRelDemLim")}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-200,-260},{200,260}}), + graphics={ + Rectangle( + extent={{-198,-142},{198,-258}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-198,258},{198,-98}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{100,188},{170,168}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Enable small chiller"), + Text( + extent={{102,-6},{172,-24}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Disable large chiller"), + Text( + extent={{-164,-244},{190,-286}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Disable chiller when the down-process does not require any other chiller being enabled"), + Text( + extent={{-144,278},{166,258}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Disable chiller when the down-process requires small chiller being enabled")}), +Documentation(info=" +

                      +Block that controlles chiller when there is staging down command uStaDow=true. +This implementation is based on ASHRAE Guideline36-2021, section 5.20.4.17, +item a.5 and a.6. These two sections specify how to start the smaller chiller and shut +off larger chiller when the stage change requires large chiller off and small chill on. +In other stage change, when it does not require chiller on/off, the chiller will then +be shut off as specified in section 5.20.4.17, item b. +

                      +

                      +When the stage-down process requires a smaller chiller being staged on and a larger +chiller being staged off: +

                      +
                        +
                      • +Start the smaller chiller after its chilled water isolation valve is fully open ( +uEnaChiWatIsoVal becomes true). +
                      • +
                      • +Wait 5 minutes (proOnTim) for the newly enabled chiller to prove that +it is operating correctly, then shut off the larger chiller and release the demand limit. +
                      • +
                      +

                      +If staging-down from any other stage that does not require one chiller off and another +chiller on, then shut off the last stage chiller. +

                      +", revisions=" +
                        +
                      • +September 15, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end DisableChiller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/DownStart.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/DownStart.mo new file mode 100644 index 00000000000..342c216340f --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/DownStart.mo @@ -0,0 +1,599 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences; +block DownStart "Sequence for starting stage-down process" + + parameter Integer nChi "Total number of chillers"; + parameter Boolean have_parChi=true + "Flag: true means that the plant has parallel chillers"; + parameter Boolean need_reduceChillerDemand=false + "True: need limit chiller demand when chiller staging"; + parameter Real chiDemRedFac=0.75 + "Demand reducing factor of current operating chillers" + annotation (Dialog(group="Demand limit", enable=need_reduceChillerDemand)); + parameter Real holChiDemTim( + final unit="s", + final quantity="Time")=300 + "Maximum time to wait for the actual demand less than percentage of current load" + annotation (Dialog(group="Demand limit", enable=need_reduceChillerDemand)); + parameter Real byPasSetTim( + final unit="s", + final quantity="Time") + "Time constant for resetting minimum bypass flow" + annotation (Dialog(group="Reset CHW minimum flow setpoint")); + parameter Real minFloSet[nChi]( + final unit=fill("m3/s", nChi), + final quantity=fill("VolumeFlowRate", nChi), + displayUnit=fill("m3/s", nChi)) + "Minimum chilled water flow through each chiller" + annotation (Dialog(group="Reset CHW minimum flow setpoint")); + parameter Real maxFloSet[nChi]( + final unit=fill("m3/s", nChi), + final quantity=fill("VolumeFlowRate", nChi), + displayUnit=fill("m3/s", nChi)) + "Maximum chilled water flow through each chiller" + annotation (Dialog(group="Reset CHW minimum flow setpoint")); + parameter Real aftByPasSetTim( + final unit="s", + final quantity="Time")=60 + "Time after setpoint achieved" + annotation (Dialog(group="Reset bypass")); + parameter Real waiTim( + final unit="s", + final quantity="Time")=30 + "Waiting time after enabling next head pressure control" + annotation (Dialog(group="Head pressure control")); + parameter Real chaChiWatIsoTim( + final unit="s", + final quantity="Time") + "Time to slowly change isolation valve, should be determined in the field" + annotation (Dialog(group="Chilled water isolation valve")); + parameter Real proOnTim( + final unit="s", + final quantity="Time")=300 + "Enabled chiller operation time to indicate if it is proven on" + annotation (Dialog(group="Disable last chiller")); + parameter Real relFloDif=0.05 + "Relative error to the setpoint for checking if it has achieved flow rate setpoint" + annotation (Dialog(tab="Advanced", group="Reset bypass")); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaDow + "Stage down status: true=stage-down" + annotation (Placement(transformation(extent={{-200,190},{-160,230}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput yOpeParLoaRatMin( + final min=0, + final max=1, + final unit="1") if need_reduceChillerDemand + "Current stage minimum cycling operative partial load ratio" + annotation (Placement(transformation(extent={{-200,160},{-160,200}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiLoa[nChi]( + final quantity=fill("ElectricCurrent", nChi), + final unit=fill("A", nChi)) + if need_reduceChillerDemand "Current chiller load" + annotation (Placement(transformation(extent={{-200,130},{-160,170}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller status: true=ON" + annotation (Placement(transformation(extent={{-200,100},{-160,140}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( + final min=0, + final unit="m3/s", + final quantity="VolumeFlowRate") + "Measured chilled water flow rate" + annotation (Placement(transformation(extent={{-200,70},{-160,110}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput clr + "Clear stage down process" + annotation (Placement(transformation(extent={{-200,30},{-160,70}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOnOff + "True: if the stage change require enabling one chiller and disable another one" + annotation (Placement(transformation(extent={{-200,0},{-160,40}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexEnaChi + "Index of next enabling chiller" + annotation (Placement(transformation(extent={{-200,-50},{-160,-10}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiHeaCon[nChi] + "Chillers head pressure control status" + annotation (Placement(transformation(extent={{-200,-80},{-160,-40}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiWatIsoVal[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) "Chilled water isolation valve position" + annotation (Placement(transformation(extent={{-200,-120},{-160,-80}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexDisChi + "Next disabling chiller when there is any stage up that need one chiller on and another off" + annotation (Placement(transformation(extent={{-200,-190},{-160,-150}}), + iconTransformation(extent={{-140,-120},{-100,-80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiDem[nChi]( + final quantity=fill("ElectricCurrent", nChi), + final unit=fill("A", nChi)) + if need_reduceChillerDemand "Chiller demand setpoint" + annotation (Placement(transformation(extent={{180,120},{220,160}}), + iconTransformation(extent={{100,70},{140,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatMinFloSet + "Chilled water minimum flow setpoint" + annotation (Placement(transformation(extent={{180,50},{220,90}}), + iconTransformation(extent={{100,40},{140,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChiHeaCon[nChi] + "Chiller head pressure control enabling status" + annotation (Placement(transformation(extent={{180,-30},{220,10}}), + iconTransformation(extent={{100,0},{140,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatIsoVal[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Chiller chilled water isolation valve position" + annotation (Placement(transformation(extent={{180,-90},{220,-50}}), + iconTransformation(extent={{100,-40},{140,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChi[nChi] + "Chiller enabling status" + annotation (Placement(transformation(extent={{180,-120},{220,-80}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yReaDemLim + "Release demand limit" + annotation (Placement(transformation(extent={{180,-160},{220,-120}}), + iconTransformation(extent={{100,-110},{140,-70}}))); + +protected + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ReduceDemand + chiDemRed( + final nChi=nChi, + final chiDemRedFac=chiDemRedFac, + final holChiDemTim=holChiDemTim) if need_reduceChillerDemand + "Reduce chiller demand" + annotation (Placement(transformation(extent={{-20,160},{0,180}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ResetMinBypass + minBypRes( + final aftByPasSetTim=aftByPasSetTim, + final relFloDif=relFloDif) + "Slowly change the minimum flow bypass setpoint" + annotation (Placement(transformation(extent={{60,100},{80,120}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.HeadControl + enaHeaCon( + final nChi=nChi, + final thrTimEnb=0, + final waiTim=waiTim, + final heaStaCha=true) + "Enable head pressure control of the chiller being enabled" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.CHWIsoVal + enaChiIsoVal( + final nChi=nChi, + final chaChiWatIsoTim=chaChiWatIsoTim, + final iniValPos=0, + final endValPos=1) "Enable chiller chilled water isolation valve " + annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.DisableChiller + disChi( + final nChi=nChi, + final proOnTim=proOnTim) "Disable last chiller" + annotation (Placement(transformation(extent={{0,-160},{20,-140}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and" + annotation (Placement(transformation(extent={{-100,190},{-80,210}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.FlowSetpoint + minChiWatSet( + final nChi=nChi, + final have_parChi=have_parChi, + final maxFloSet=maxFloSet, + final byPasSetTim=byPasSetTim, + final minFloSet=minFloSet) "Reset minimum chilled water flow setpoint" + annotation (Placement(transformation(extent={{0,60},{20,80}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con3(final k=false) + "False constant" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + Buildings.Controls.OBC.CDL.Logical.Switch heaPreCon[nChi] "Logical switch" + annotation (Placement(transformation(extent={{140,-20},{160,0}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiDem[nChi] + if need_reduceChillerDemand "Chiller demand" + annotation (Placement(transformation(extent={{140,130},{160,150}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep4(final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{60,10},{80,30}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiWatIsoVal[nChi] + "Chilled water isolation valve" + annotation (Placement(transformation(extent={{140,-80},{160,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{120,-180},{140,-160}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre(final pre_u_start=false) + "Break algebraic loop" + annotation (Placement(transformation(extent={{80,-180},{100,-160}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat1 + "Maintain ON signal when minimum chilled water setpoint has been set" + annotation (Placement(transformation(extent={{60,40},{80,60}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat2 if need_reduceChillerDemand + "Maintain ON signal when chiller demand has been limited" + annotation (Placement(transformation(extent={{20,140},{40,160}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat3 + "Maintain ON signal when chiller head control has been enabled" + annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat4 + "Maintain ON signal when chilled water isolation valve has been enabled" + annotation (Placement(transformation(extent={{60,-120},{80,-100}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2 if not need_reduceChillerDemand + "Dummy or" + annotation (Placement(transformation(extent={{20,190},{40,210}}))); + +equation + connect(chiDemRed.uChiLoa, uChiLoa) + annotation (Line(points={{-22,175},{-100,175},{-100,150},{-180,150}}, + color={0,0,127})); + connect(chiDemRed.uChi, uChi) + annotation (Line(points={{-22,161},{-40,161},{-40,120},{-180,120}},color={255,0,255})); + connect(con3.y, minChiWatSet.uStaUp) + annotation (Line(points={{-78,90},{-60,90},{-60,79},{-2,79}}, color={255,0,255})); + connect(minChiWatSet.uStaDow, uStaDow) + annotation (Line(points={{-2,61},{-140,61},{-140,210},{-180,210}}, + color={255,0,255})); + connect(minChiWatSet.uOnOff, uOnOff) + annotation (Line(points={{-2,63},{-110,63},{-110,20},{-180,20}}, + color={255,0,255})); + connect(uStaDow, minBypRes.uStaPro) annotation (Line(points={{-180,210},{-140, + 210},{-140,114},{58,114}}, color={255,0,255})); + connect(VChiWat_flow, minBypRes.VChiWat_flow) + annotation (Line(points={{-180,90},{-150,90},{-150,110},{58,110}}, + color={0,0,127})); + connect(uStaDow, enaHeaCon.uStaPro) annotation (Line(points={{-180,210},{-140, + 210},{-140,0},{-2,0}}, color={255,0,255})); + connect(enaHeaCon.nexChaChi, nexEnaChi) + annotation (Line(points={{-2,-4},{-60,-4},{-60,-30},{-180,-30}}, + color={255,127,0})); + connect(enaHeaCon.uChiHeaCon, uChiHeaCon) + annotation (Line(points={{-2,-8},{-30,-8},{-30,-60},{-180,-60}}, + color={255,0,255})); + connect(nexEnaChi, enaChiIsoVal.nexChaChi) + annotation (Line(points={{-180,-30},{-60,-30},{-60,-92},{-2,-92}}, + color={255,127,0})); + connect(enaChiIsoVal.uChiWatIsoVal, uChiWatIsoVal) + annotation (Line(points={{-2,-95},{-100,-95},{-100,-100},{-180,-100}}, + color={0,0,127})); + connect(uStaDow, enaChiIsoVal.uStaPro) annotation (Line(points={{-180,210},{-140, + 210},{-140,-108},{-2,-108}}, color={255,0,255})); + connect(nexEnaChi, disChi.nexEnaChi) + annotation (Line(points={{-180,-30},{-60,-30},{-60,-141},{-2,-141}}, + color={255,127,0})); + connect(uStaDow, disChi.uStaDow) + annotation (Line(points={{-180,210},{-140,210},{-140,-144},{-2,-144}}, + color={255,0,255})); + connect(uChi, disChi.uChi) + annotation (Line(points={{-180,120},{-40,120},{-40,-152},{-2,-152}}, + color={255,0,255})); + connect(uOnOff, disChi.uOnOff) + annotation (Line(points={{-180,20},{-110,20},{-110,-159},{-2,-159}}, + color={255,0,255})); + connect(disChi.nexDisChi, nexDisChi) + annotation (Line(points={{-2,-155},{-80,-155},{-80,-170},{-180,-170}}, + color={255,127,0})); + connect(uStaDow, and2.u1) + annotation (Line(points={{-180,210},{-140,210},{-140,200},{-102,200}}, + color={255,0,255})); + connect(and2.y, chiDemRed.uDemLim) + annotation (Line(points={{-78,200},{-40,200},{-40,179},{-22,179}}, + color={255,0,255})); + connect(uOnOff, booRep4.u) + annotation (Line(points={{-180,20},{58,20}}, color={255,0,255})); + connect(booRep4.y, chiDem.u2) + annotation (Line(points={{82,20},{120,20},{120,140},{138,140}}, + color={255,0,255})); + connect(chiDemRed.yChiDem, chiDem.u1) + annotation (Line(points={{2,174},{120,174},{120,148},{138,148}}, + color={0,0,127})); + connect(uChiLoa, chiDem.u3) + annotation (Line(points={{-180,150},{-100,150},{-100,132},{138,132}}, + color={0,0,127})); + connect(booRep4.y, heaPreCon.u2) + annotation (Line(points={{82,20},{120,20},{120,-10},{138,-10}}, + color={255,0,255})); + connect(enaHeaCon.yChiHeaCon, heaPreCon.u1) + annotation (Line(points={{22,-6},{80,-6},{80,-2},{138,-2}}, + color={255,0,255})); + connect(uChiHeaCon, heaPreCon.u3) + annotation (Line(points={{-180,-60},{-30,-60},{-30,-18},{138,-18}}, + color={255,0,255})); + connect(booRep4.y, chiWatIsoVal.u2) + annotation (Line(points={{82,20},{120,20},{120,-70},{138,-70}}, + color={255,0,255})); + connect(enaChiIsoVal.yChiWatIsoVal, chiWatIsoVal.u1) + annotation (Line(points={{22,-106},{40,-106},{40,-62},{138,-62}}, + color={0,0,127})); + connect(uChiWatIsoVal, chiWatIsoVal.u3) + annotation (Line(points={{-180,-100},{-100,-100},{-100,-78},{138,-78}}, + color={0,0,127})); + connect(chiDem.y, yChiDem) + annotation (Line(points={{162,140},{200,140}}, color={0,0,127})); + connect(heaPreCon.y, yChiHeaCon) + annotation (Line(points={{162,-10},{200,-10}}, color={255,0,255})); + connect(chiWatIsoVal.y, yChiWatIsoVal) + annotation (Line(points={{162,-70},{200,-70}}, color={0,0,127})); + connect(disChi.yChi, yChi) + annotation (Line(points={{22,-150},{140,-150},{140,-100},{200,-100}}, + color={255,0,255})); + connect(disChi.yRelDemLim, yReaDemLim) + annotation (Line(points={{22,-158},{60,-158},{60,-140},{200,-140}}, + color={255,0,255})); + connect(yOpeParLoaRatMin, chiDemRed.yOpeParLoaRatMin) + annotation (Line(points={{-180,180},{-110,180},{-110,171},{-22,171}}, + color={0,0,127})); + connect(uStaDow, chiDemRed.uStaDow) + annotation (Line(points={{-180,210},{-140,210},{-140,168},{-22,168}}, + color={255,0,255})); + connect(uOnOff, chiDemRed.uOnOff) + annotation (Line(points={{-180,20},{-110,20},{-110,165},{-22,165}}, + color={255,0,255})); + connect(uChi, minChiWatSet.uChi) + annotation (Line(points={{-180,120},{-40,120},{-40,74},{-2,74}}, + color={255,0,255})); + connect(nexEnaChi, minChiWatSet.nexEnaChi) + annotation (Line(points={{-180,-30},{-60,-30},{-60,71},{-2,71}}, + color={255,127,0})); + connect(nexDisChi, minChiWatSet.nexDisChi) + annotation (Line(points={{-180,-170},{-80,-170},{-80,69},{-2,69}}, + color={255,127,0})); + connect(minChiWatSet.yChiWatMinFloSet, minBypRes.VMinChiWat_setpoint) + annotation (Line(points={{22,70},{40,70},{40,106},{58,106}}, + color={0,0,127})); + connect(con3.y, minChiWatSet.uUpsDevSta) + annotation (Line(points={{-78,90},{-60,90},{-60,77},{-2,77}}, + color={255,0,255})); + connect(minBypRes.yMinBypRes, lat1.u) + annotation (Line(points={{82,110},{100,110},{100,80},{50,80},{50,50},{58,50}}, + color={255,0,255})); + connect(lat1.y, enaHeaCon.uUpsDevSta) + annotation (Line(points={{82,50},{100,50},{100,36},{-20,36},{-20,4},{-2,4}}, + color={255,0,255})); + connect(chiDemRed.yChiDemRed, lat2.u) + annotation (Line(points={{2,166},{10,166},{10,150},{18,150}}, + color={255,0,255})); + connect(lat2.y, minBypRes.uUpsDevSta) + annotation (Line(points={{42,150},{50,150},{50,118},{58,118}}, + color={255,0,255})); + connect(lat2.y, minChiWatSet.uSubCha) + annotation (Line(points={{42,150},{50,150},{50,120},{-20,120},{-20,66},{-2, + 66}}, + color={255,0,255})); + connect(disChi.yRelDemLim, pre.u) + annotation (Line(points={{22,-158},{60,-158},{60,-170},{78,-170}}, + color={255,0,255})); + connect(pre.y, not1.u) + annotation (Line(points={{102,-170},{118,-170}}, color={255,0,255})); + connect(not1.y, and2.u2) + annotation (Line(points={{142,-170},{160,-170},{160,-192},{-120,-192}, + {-120,192},{-102,192}}, color={255,0,255})); + connect(minChiWatSet.yChiWatMinFloSet, yChiWatMinFloSet) + annotation (Line(points={{22,70},{200,70}}, color={0,0,127})); + connect(clr, lat2.clr) + annotation (Line(points={{-180,50},{-130,50},{-130,144},{18,144}}, + color={255,0,255})); + connect(clr, lat1.clr) + annotation (Line(points={{-180,50},{-130,50},{-130,44},{58,44}}, + color={255,0,255})); + connect(enaHeaCon.yEnaHeaCon, lat3.u) + annotation (Line(points={{22,6},{30,6},{30,-40},{58,-40}}, color={255,0,255})); + connect(lat3.y, enaChiIsoVal.uUpsDevSta) + annotation (Line(points={{82,-40},{100,-40},{100,-56},{-20,-56},{-20,-105}, + {-2,-105}}, + color={255,0,255})); + connect(clr, lat3.clr) + annotation (Line(points={{-180,50},{-130,50},{-130,-46},{58,-46}}, + color={255,0,255})); + connect(enaChiIsoVal.yEnaChiWatIsoVal, lat4.u) + annotation (Line(points={{22,-94},{50,-94},{50,-110},{58,-110}}, + color={255,0,255})); + connect(lat4.y, disChi.uEnaChiWatIsoVal) + annotation (Line(points={{82,-110},{120,-110},{120,-130},{-20,-130}, + {-20,-148},{-2,-148}}, color={255,0,255})); + connect(clr, lat4.clr) + annotation (Line(points={{-180,50},{-130,50},{-130,-116},{58,-116}}, + color={255,0,255})); + connect(and2.y, or2.u1) + annotation (Line(points={{-78,200},{18,200}}, color={255,0,255})); + connect(con3.y, or2.u2) annotation (Line(points={{-78,90},{-60,90},{-60,192},{ + 18,192}}, color={255,0,255})); + connect(or2.y, minBypRes.uUpsDevSta) annotation (Line(points={{42,200},{50, + 200},{50,118},{58,118}}, + color={255,0,255})); + connect(or2.y, minChiWatSet.uSubCha) annotation (Line(points={{42,200},{50, + 200},{50,120},{-20,120},{-20,66},{-2,66}}, + color={255,0,255})); + connect(con3.y, enaHeaCon.uEnaPla) annotation (Line(points={{-78,90},{-70,90}, + {-70,8},{-2,8}}, color={255,0,255})); + connect(minChiWatSet.yChaSet, minBypRes.uSetChaPro) annotation (Line(points={ + {22,62},{30,62},{30,102},{58,102}}, color={255,0,255})); +annotation ( + defaultComponentName="staStaDow", + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-160,-200},{180,220}})), + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-40,6},{40,-6}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-2,-6},{2,-72}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,-72},{-20,-72},{0,-90},{20,-72},{0,-72}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Text( + extent={{-98,-90},{-58,-102}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="nexDisChi"), + Text( + extent={{-98,-72},{-46,-86}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uChiWatIsoVal"), + Text( + extent={{-98,28},{-46,16}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="vChiWat_flow"), + Text( + extent={{-98,86},{-58,74}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yOpeParLoaRatMin", + visible=need_reduceChillerDemand), + Text( + extent={{-100,66},{-64,56}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uChiLoa", + visible=need_reduceChillerDemand), + Text( + extent={{-102,46},{-74,36}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChi"), + Text( + extent={{-98,102},{-64,90}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uStaDow"), + Text( + extent={{-100,-12},{-66,-22}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uOnOff"), + Text( + extent={{-98,-32},{-54,-44}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="nexEnaChi"), + Text( + extent={{-98,-54},{-52,-64}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChiHeaCon"), + Text( + extent={{64,98},{100,88}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiDem", + visible=need_reduceChillerDemand), + Text( + extent={{60,-14},{96,-24}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiIsoVal"), + Text( + extent={{54,26},{96,14}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yChiHeaCon"), + Text( + extent={{66,-54},{104,-64}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yChi"), + Text( + extent={{54,-82},{96,-94}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yReaDemLim", + visible=need_reduceChillerDemand), + Text( + extent={{32,66},{98,56}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiWatMinFloSet"), + Text( + extent={{-100,6},{-84,-4}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="clr")}), +Documentation(info=" +

                      +Block that controls devices at the first step of chiller staging down process. +This development is based on ASHRAE Guideline 36-2021, +section 5.20.4.17, item a and b. The sections specifies the first step of +staging down process. +

                      +

                      +For the stage-down process that requires a smaller chiller being enabled and a +larger chiller being disabled (uOnOff=true): +

                      +
                        +
                      1. +Command operating chilers to reduce demand to 75% (chiDemRedFac) of +their current load or a percentage equal to current stage minimum cycling operative +partial load ratio (yOpeParLoaRatMin), whichever is greater. Wait until acutal +demand < 80% of current load up to a maximum of 5 minutes (holChiDemTim) +before proceeding. This is implemented in block chiDemRed. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ReduceDemand +for more decriptions. +
                      2. +
                      3. +Slowly change the minimum chilled water flow setpoint to that approriate for the +stage transition (minChiWatSet). After new setpoint is achieved, wait +1 minutes (aftByPasSetTim) to allow loop to stabilize (minBypRes). +See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.FlowSetpoint +and + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ResetMinBypass +for more decriptions. +
                      4. +
                      5. +Enable head pressure control for the chiller being enabled. Wait 30 seconds (waiTim). +It is implemented in block enaHeaCon, see + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.HeadControl +for more decriptions. +
                      6. +
                      7. +Slowly open chilled water isolation valve of the smaller chiller being enabled. +Determine valve timing chaChiWatIsoTim in the field as that required +to prevent nuisance trips. +It is implemented in block enaChiIsoVal, see + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.CHWIsoVal +for more decriptions. +
                      8. +
                      9. +Start the smaller chiller after its chilled water isolation valve is fully open. +Wait 5 minutes (proOnTim) after the newly enabled chiller to prove that +it is operating correctly, then shut off the larger chiller and release the demand +limit (yReaDemLim=true). +It is implemented in block disChi, see + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.DisableChiller +for more decriptions. +
                      10. +
                      +

                      +For staging down from any other stage (uOnOff=false), just shut off +the last stage chiller. This is implemented in block disChi, see + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.DisableChiller +for more decriptions. +

                      +", revisions=" +
                        +
                      • +September 19, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end DownStart; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/EnableCWPump.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/EnableCWPump.mo new file mode 100644 index 00000000000..bfb0c81a0eb --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/EnableCWPump.mo @@ -0,0 +1,185 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences; +block EnableCWPump + "Generate staging index for condenser water pump control" + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uUpsDevSta + "Status of resetting status of device before enabling or disabling condenser water pump" + annotation (Placement(transformation(extent={{-160,60},{-120,100}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaUp "Stage-up command" + annotation (Placement(transformation(extent={{-160,20},{-120,60}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaDow + "Stage-down command" + annotation (Placement(transformation(extent={{-160,-30},{-120,10}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiSta + "Current chiller stage, does not include stages like X + WSE" + annotation (Placement(transformation(extent={{-160,-60},{-120,-20}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uStaSet + "Current chiller stage setpoint, does not include stages like X + WSE" + annotation (Placement(transformation(extent={{-160,-100},{-120,-60}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yChiSta + "Stage for condenser water pumps control" + annotation (Placement(transformation(extent={{120,20},{160,60}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + Buildings.Controls.OBC.CDL.Integers.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{80,30},{100,50}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Buildings.Controls.OBC.CDL.Integers.Switch swi1 "Logical switch" + annotation (Placement(transformation(extent={{-20,70},{0,90}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 "Logicla and" + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + Buildings.Controls.OBC.CDL.Integers.Switch swi2 "Logical switch" + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + Buildings.Controls.OBC.CDL.Integers.Switch swi3 "Logical switch" + annotation (Placement(transformation(extent={{40,-20},{60,0}}))); + +equation + connect(uUpsDevSta, and2.u1) + annotation (Line(points={{-140,80},{-82,80}}, color={255,0,255})); + connect(uStaUp, and2.u2) + annotation (Line(points={{-140,40},{-100,40},{-100,72},{-82,72}}, + color={255,0,255})); + connect(and2.y, swi1.u2) + annotation (Line(points={{-58,80},{-22,80}},color={255,0,255})); + connect(uUpsDevSta, and1.u1) + annotation (Line(points={{-140,80},{-110,80},{-110,10},{-82,10}}, + color={255,0,255})); + connect(uStaDow, and1.u2) + annotation (Line(points={{-140,-10},{-100,-10},{-100,2},{-82,2}}, + color={255,0,255})); + connect(and1.y, swi2.u2) + annotation (Line(points={{-58,10},{-22,10}},color={255,0,255})); + connect(uStaUp, swi.u2) + annotation (Line(points={{-140,40},{78,40}}, color={255,0,255})); + connect(uStaDow, swi3.u2) + annotation (Line(points={{-140,-10},{38,-10}}, color={255,0,255})); + connect(uStaSet, swi3.u3) annotation (Line(points={{-140,-80},{-40,-80},{-40,-18}, + {38,-18}}, color={255,127,0})); + connect(uStaSet, swi2.u1) annotation (Line(points={{-140,-80},{-40,-80},{-40,18}, + {-22,18}}, color={255,127,0})); + connect(uStaSet, swi1.u1) annotation (Line(points={{-140,-80},{-40,-80},{-40,88}, + {-22,88}}, color={255,127,0})); + connect(uChiSta, swi2.u3) annotation (Line(points={{-140,-40},{-30,-40},{-30,2}, + {-22,2}}, color={255,127,0})); + connect(uChiSta, swi1.u3) annotation (Line(points={{-140,-40},{-30,-40},{-30,72}, + {-22,72}}, color={255,127,0})); + connect(swi.y, yChiSta) + annotation (Line(points={{102,40},{140,40}}, color={255,127,0})); + connect(swi2.y, swi3.u1) annotation (Line(points={{2,10},{20,10},{20,-2},{38,-2}}, + color={255,127,0})); + connect(swi3.y, swi.u3) annotation (Line(points={{62,-10},{70,-10},{70,32},{78, + 32}}, color={255,127,0})); + connect(swi1.y, swi.u1) annotation (Line(points={{2,80},{70,80},{70,48},{78,48}}, + color={255,127,0})); +annotation ( + defaultComponentName="enaNexCWP", + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-120,-100},{120,100}})), + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text(extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-96,-82},{-62,-94}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="uStaSet"), + Text( + extent={{-98,88},{-50,72}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uUpsDevSta"), + Text( + extent={{-98,28},{-64,16}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uStaUp"), + Text( + extent={{68,8},{98,-8}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="yChiSta"), + Text( + extent={{-98,-12},{-60,-24}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uStaDow"), + Ellipse( + extent={{-60,60},{60,-60}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,60},{0,-60},{60,0},{0,60}}, + lineColor={0,0,0}, + fillColor={238,46,47}, + fillPattern=FillPattern.Solid), + Text( + extent={{-96,-46},{-62,-58}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="uChiSta")}), + Documentation(info=" +

                      +This block generates stage signal as input for condenser water pump control. +

                      +
                        +
                      • +When there is no stage change command (uStaUp=false, +uStaDow=false), it outputs current stage setpoint uStaSet. +
                      • +
                      • +When there is stage up command (uStaUp=true, uStaDow=false) +which means stage setpoint uStaSet has changed up to new stage, +
                          +
                        1. +When the minimum bypass flow has not been reset (uUpsDevSta=false), +the stage index for condenser water pump control should still be the old stage +(yChiSta = uChiSta). +
                        2. +
                        3. +When the minimum bypass flow has been reset (uUpsDevSta=true), +the stage index for condenser water pump control should be the stage setpoint +uStaSet. +
                        4. +
                        +
                      • +
                      • +When there is stage down command (uStaUp=false, uStaDow=true) +which means stage setpoint uStaSet has changed down to new stage, +
                          +
                        1. +When the head pressure control of the chiller being shut off has not been disabled +(uUpsDevSta=false), the stage index for condenser water pump control +should still be the old stage (yChiSta = uChiSta). +
                        2. +
                        3. +When the head pressure control of the chiller being shut off has been disabled +(uUpsDevSta=true), the stage index for condenser water pump control +should be the current stage setpoint uStaSet. +
                        4. +
                        +
                      • +
                      +", +revisions=" +
                        +
                      • +February 4, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end EnableCWPump; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/EnableChiller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/EnableChiller.mo new file mode 100644 index 00000000000..7764b4ed979 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/EnableChiller.mo @@ -0,0 +1,411 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences; +block EnableChiller "Sequence for enabling chiller" + + parameter Integer nChi=2 "Total number of chillers"; + parameter Real proOnTim( + final unit="s", + final quantity="Time") = 300 + "Enabled chiller operation time to indicate if it is proven on"; + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexEnaChi + "Index of next enabling chiller" + annotation (Placement(transformation(extent={{-240,100},{-200,140}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaUp + "Stage-up command" + annotation (Placement(transformation(extent={{-240,40},{-200,80}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEnaChiWatIsoVal + "Status of chilled water isolation valve control: true=enabled valve is fully open" + annotation (Placement(transformation(extent={{-240,10},{-200,50}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller status: true=ON" + annotation (Placement(transformation(extent={{-240,-20},{-200,20}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOnOff + "Indicate if the stage require one chiller to be enabled while another is disabled" + annotation (Placement(transformation(extent={{-240,-70},{-200,-30}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexDisChi + "Next disabling chiller when there is any stage up that need one chiller on and another off" + annotation (Placement(transformation(extent={{-240,-170},{-200,-130}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChi[nChi] + "Chiller enabling status" + annotation (Placement(transformation(extent={{200,-70},{240,-30}}), + iconTransformation(extent={{100,60},{140,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yNewChiEna + "Newly enabled chiller has been proven on by more than 5 minutes" + annotation (Placement(transformation(extent={{200,-190},{240,-150}}), + iconTransformation(extent={{100,-100},{140,-60}}))); + +protected + final parameter Integer chiInd[nChi]={i for i in 1:nChi} + "Chiller index, {1,2,...,n}"; + Buildings.Controls.OBC.CDL.Logical.Switch logSwi[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{100,110},{120,130}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 + "In staging up process and the chilled water isolation valve has open" + annotation (Placement(transformation(extent={{-160,50},{-140,70}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep(final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); + Buildings.Controls.OBC.CDL.Logical.And and1[nChi] "Logical and" + annotation (Placement(transformation(extent={{-40,110},{-20,130}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con[nChi]( + final k=fill(true, nChi)) "True constant" + annotation (Placement(transformation(extent={{-40,140},{-20,160}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChi] + "Convert boolean input to real output" + annotation (Placement(transformation(extent={{-160,-10},{-140,10}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greEquThr[nChi]( + final t=fill(0.5, nChi)) + "Convert real input to boolean output" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi1[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{100,-120},{120,-100}}))); + Buildings.Controls.OBC.CDL.Logical.And and3[nChi] "Logical and" + annotation (Placement(transformation(extent={{40,-120},{60,-100}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1[nChi]( + final k=fill(false, nChi)) "False constant" + annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi2[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{160,-60},{180,-40}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2 "Logical or" + annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep(final nout=nChi) + "Replicate integer input" + annotation (Placement(transformation(extent={{-160,110},{-140,130}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu[nChi] + "Check next enabling isolation valve" + annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim(final t=proOnTim) + "Count the time after new chiller has been enabled" + annotation (Placement(transformation(extent={{-100,-120},{-80,-100}}))); + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam[nChi] + "Record the old chiller status" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep1( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg + "Rising edge, output true at the moment when input turns from false to true" + annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep2( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-20,-120},{0,-100}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep3( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{80,-60},{100,-40}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" + annotation (Placement(transformation(extent={{-160,-60},{-140,-40}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt[nChi]( + final k=chiInd) "Chiller index array" + annotation (Placement(transformation(extent={{-160,80},{-140,100}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep1( + final nout=nChi) + "Replicate integer input" + annotation (Placement(transformation(extent={{-160,-160},{-140,-140}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu1[nChi] + "Check next enabling isolation valve" + annotation (Placement(transformation(extent={{-100,-160},{-80,-140}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi3[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{60,30},{80,50}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep4( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi4 "Logical switch" + annotation (Placement(transformation(extent={{160,-180},{180,-160}}))); + +equation + connect(nexEnaChi, intRep.u) + annotation (Line(points={{-220,120},{-162,120}}, color={255,127,0})); + connect(intRep.y, intEqu.u1) + annotation (Line(points={{-138,120},{-102,120}}, color={255,127,0})); + connect(uEnaChiWatIsoVal,and2. u2) + annotation (Line(points={{-220,30},{-180,30},{-180,52},{-162,52}}, + color={255,0,255})); + connect(uStaUp, and2.u1) + annotation (Line(points={{-220,60},{-162,60}}, color={255,0,255})); + connect(and2.y, booRep.u) + annotation (Line(points={{-138,60},{-102,60}}, color={255,0,255})); + connect(intEqu.y, and1.u1) + annotation (Line(points={{-78,120},{-42,120}}, color={255,0,255})); + connect(booRep.y, and1.u2) + annotation (Line(points={{-78,60},{-60,60},{-60,112},{-42,112}}, + color={255,0,255})); + connect(and1.y, logSwi.u2) + annotation (Line(points={{-18,120},{98,120}}, color={255,0,255})); + connect(con.y, logSwi.u1) + annotation (Line(points={{-18,150},{0,150},{0,128},{98,128}}, color={255,0,255})); + connect(uChi, booToRea.u) + annotation (Line(points={{-220,0},{-162,0}}, color={255,0,255})); + connect(booToRea.y, triSam.u) + annotation (Line(points={{-138,0},{-22,0}}, color={0,0,127})); + connect(edg.y, booRep1.u) + annotation (Line(points={{-78,-20},{-62,-20}}, color={255,0,255})); + connect(booRep1.y, triSam.trigger) + annotation (Line(points={{-38,-20},{-10,-20},{-10,-12}}, color={255,0,255})); + connect(triSam.y, greEquThr.u) + annotation (Line(points={{2,0},{18,0}}, color={0,0,127})); + connect(and2.y, tim.u) + annotation (Line(points={{-138,60},{-120,60},{-120,-110},{-102,-110}}, + color={255,0,255})); + connect(booRep2.y, and3.u1) + annotation (Line(points={{2,-110},{38,-110}}, color={255,0,255})); + connect(and3.y, logSwi1.u2) + annotation (Line(points={{62,-110},{98,-110}}, color={255,0,255})); + connect(con1.y, logSwi1.u1) + annotation (Line(points={{62,-80},{80,-80},{80,-102},{98,-102}}, + color={255,0,255})); + connect(uChi, logSwi1.u3) + annotation (Line(points={{-220,0},{-180,0},{-180,-130},{80,-130},{80,-118}, + {98,-118}}, color={255,0,255})); + connect(booRep3.y, logSwi2.u2) + annotation (Line(points={{102,-50},{158,-50}}, color={255,0,255})); + connect(uOnOff, not2.u) + annotation (Line(points={{-220,-50},{-162,-50}}, color={255,0,255})); + connect(logSwi1.y, logSwi2.u3) + annotation (Line(points={{122,-110},{140,-110},{140,-58},{158,-58}}, + color={255,0,255})); + connect(logSwi.y, logSwi2.u1) + annotation (Line(points={{122,120},{140,120},{140,-42},{158,-42}}, + color={255,0,255})); + connect(logSwi2.y,yChi) + annotation (Line(points={{182,-50},{220,-50}}, color={255,0,255})); + connect(not2.y, or2.u1) + annotation (Line(points={{-138,-50},{38,-50}},color={255,0,255})); + connect(not1.y, or2.u2) + annotation (Line(points={{2,-70},{20,-70},{20,-58},{38,-58}}, + color={255,0,255})); + connect(or2.y, booRep3.u) + annotation (Line(points={{62,-50},{78,-50}},color={255,0,255})); + connect(conInt.y, intEqu.u2) + annotation (Line(points={{-138,90},{-110,90},{-110,112},{-102,112}}, + color={255,127,0})); + connect(nexDisChi, intRep1.u) + annotation (Line(points={{-220,-150},{-162,-150}}, color={255,127,0})); + connect(intRep1.y, intEqu1.u1) + annotation (Line(points={{-138,-150},{-102,-150}}, color={255,127,0})); + connect(conInt.y, intEqu1.u2) + annotation (Line(points={{-138,90},{-110,90},{-110,-158},{-102,-158}}, + color={255,127,0})); + connect(intEqu1.y, and3.u2) + annotation (Line(points={{-78,-150},{20,-150},{20,-118},{38,-118}}, + color={255,0,255})); + connect(uStaUp, edg.u) + annotation (Line(points={{-220,60},{-190,60},{-190,-20},{-102,-20}}, + color={255,0,255})); + connect(uStaUp, booRep4.u) + annotation (Line(points={{-220,60},{-190,60},{-190,40},{-42,40}}, + color={255,0,255})); + connect(booRep4.y, logSwi3.u2) + annotation (Line(points={{-18,40},{58,40}}, color={255,0,255})); + connect(uChi, logSwi3.u3) + annotation (Line(points={{-220,0},{-180,0},{-180,20},{40,20},{40,32}, + {58,32}}, color={255,0,255})); + connect(greEquThr.y, logSwi3.u1) + annotation (Line(points={{42,0},{50,0},{50,48},{58,48}}, color={255,0,255})); + connect(logSwi3.y, logSwi.u3) + annotation (Line(points={{82,40},{90,40},{90,112},{98,112}}, + color={255,0,255})); + connect(not2.y, logSwi4.u2) + annotation (Line(points={{-138,-50},{-130,-50},{-130,-170},{158,-170}}, + color={255,0,255})); + connect(and2.y, logSwi4.u1) + annotation (Line(points={{-138,60},{-120,60},{-120,-162},{158,-162}}, + color={255,0,255})); + connect(logSwi4.y, yNewChiEna) + annotation (Line(points={{182,-170},{220,-170}}, color={255,0,255})); + connect(tim.passed, not1.u) + annotation (Line(points={{-78,-118},{-40,-118},{-40,-70},{-22,-70}}, + color={255,0,255})); + connect(tim.passed, booRep2.u) + annotation (Line(points={{-78,-118},{-40,-118},{-40,-110},{-22,-110}}, + color={255,0,255})); + connect(tim.passed, logSwi4.u3) + annotation (Line(points={{-78,-118},{-40,-118},{-40,-178},{158,-178}}, + color={255,0,255})); + +annotation ( + defaultComponentName="enaChi", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text(extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-60,60},{60,20}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-52,20},{-40,0}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,20},{52,0}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,0},{60,-80}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Text( + extent={{-98,96},{-50,84}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="nexEnaChi"), + Text( + extent={{-98,-84},{-50,-96}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="nexDisChi"), + Text( + extent={{-100,66},{-68,56}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uStaUp"), + Text( + extent={{-98,26},{-34,14}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uEnaChiWatIsoVal"), + Text( + extent={{-100,-14},{-78,-24}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChi"), + Text( + extent={{-98,-54},{-72,-66}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uOnOff"), + Text( + extent={{74,86},{100,76}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yChi"), + Text( + extent={{60,-72},{98,-84}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yNewChiEna")}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-200,-180},{200,180}}), + graphics={ + Rectangle( + extent={{-198,-62},{198,-178}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-198,178},{198,-38}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{14,174},{94,166}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Output new chiller status array:"), + Text( + extent={{40,-72},{120,-88}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Disable +small chiller"), + Text( + extent={{16,168},{208,148}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Left, + textString= + "1. When the stage change does not require one chiller off and another chiller on."), + Text( + extent={{16,154},{208,136}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Left, + textString="2. When the stage change does require one chiller off and another chiller on, +but the enabled chiller has not yet finished starting."), + Text( + extent={{-24,-132},{56,-140}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Output new chiller status array:"), + Text( + extent={{-20,-142},{152,-158}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Left, + textString="When the stage change does require one chiller off +and another chiller on, and the enabled chiller has finished starting.")}), +Documentation(info=" +

                      +Block that controlles chiller when there is staging up command uStaUp=true. +This implementation is based on ASHRAE Guideline36-2021, section 5.20.4.16, +item f and item g.1. These sections specify when the next chiller should be enabled +and when the running smaller chiller should be diabled. +

                      +

                      +When the stage-up process does not requires a smaller chiller being staged off and +a larger chiller being staged on (uOnOff=false): +

                      +
                        +
                      • +Start the next stage chiller after the chilled water isolation valve is fully open +uEnaChiWatIsoVal=true. +
                      • +
                      +

                      +For any stage change during which a smaller chiller is diabled and a larger chiller +is enabled (uOnOff=true): +

                      +
                        +
                      • +Wait 5 minutes (proOnTim) for the newly enabled chiller to prove that is +operating correctly yNewChiEna=true, then shut off the smaller chiller. +
                      • +
                      +", revisions=" +
                        +
                      • +September 15, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end EnableChiller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/HeadControl.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/HeadControl.mo new file mode 100644 index 00000000000..28ce359ea47 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/HeadControl.mo @@ -0,0 +1,361 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences; +block HeadControl + "Sequences for enabling or disabling head pressure control for the chiller being enabled or disabled" + + parameter Integer nChi=2 "Total number of chiller"; + parameter Real thrTimEnb( + final unit="s", + final quantity="Time")=10 + "Threshold time to enable head pressure control after condenser water pump being reset"; + parameter Real waiTim( + final unit="s", + final quantity="Time") = 30 + "Waiting time after enabling next head pressure control"; + parameter Boolean heaStaCha = true + "Flag to indicate if head pressure control of next chiller should be ON or OFF: true = in stage-up process so it should be ON"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEnaPla + "True: plant is just enabled" + annotation(Placement(transformation(extent={{-220,140},{-180,180}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexChaChi + "Index of next enabling or disabling chiller" + annotation (Placement(transformation(extent={{-220,-50},{-180,-10}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uUpsDevSta + "Status of resetting status of device before enabling or disabling head pressure control" + annotation (Placement(transformation(extent={{-220,110},{-180,150}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiHeaCon[nChi] + "Chillers head pressure control status" + annotation (Placement(transformation(extent={{-220,-130},{-180,-90}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaPro + "Indicate if there is stage change" + annotation (Placement(transformation(extent={{-220,32},{-180,72}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChiHeaCon[nChi] + "Chiller head pressure control enabling status" + annotation (Placement(transformation(extent={{180,-100},{220,-60}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yEnaHeaCon + "Status of heat pressure control: true=enabled head pressure control" + annotation (Placement(transformation(extent={{180,80},{220,120}}), + iconTransformation(extent={{100,40},{140,80}}))); + +protected + final parameter Integer chiInd[nChi]={i for i in 1:nChi} + "Chiller index, {1,2,...,n}"; + Buildings.Controls.OBC.CDL.Logical.Timer tim + "Count the time after condenser water pump being reset" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg + "Rising edge, output true at the moment when input turns from false to true" + annotation (Placement(transformation(extent={{-160,90},{-140,110}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "Logical latch, maintain ON signal until condition changes" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( + final t=thrTimEnb) + "Check if it has been threhold time after condenser water pump achieves its new setpoint" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam[nChi] + "Record the old chiller head pressure control status" + annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChi] + "Convert boolean input to real output" + annotation (Placement(transformation(extent={{-160,-120},{-140,-100}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep(final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-100,-140},{-80,-120}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and" + annotation (Placement(transformation(extent={{-160,50},{-140,70}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-160,10},{-140,30}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[nChi] "Logical switch" + annotation (Placement(transformation(extent={{100,-30},{120,-10}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( + final t=thrTimEnb + waiTim) + "Check if it has been threshold time after condenser water pump achieves its new setpoint and have waited for another amount of time" + annotation (Placement(transformation(extent={{0,90},{20,110}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep1( + final nout=nChi) "Replicate boolean input" + annotation (Placement(transformation(extent={{40,50},{60,70}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greEquThr[nChi]( + final t=fill(0.5, nChi)) + "Convert real input to boolean output" + annotation (Placement(transformation(extent={{140,-30},{160,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1[nChi] "Logical switch" + annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep2( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep( + final nout=nChi) + "Replicate integer input" + annotation (Placement(transformation(extent={{-160,-40},{-140,-20}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu[nChi] + "Check next enabling isolation valve" + annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi2[nChi] "Logical switch" + annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1[nChi] + "Convert boolean input to real output" + annotation (Placement(transformation(extent={{40,0},{60,20}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep3( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{0,0},{20,20}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi "Logical switch" + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con(final k=false) + "False constant" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1( + final k=heaStaCha) + "Head control status change" + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt[nChi]( + final k=chiInd) "Chiller index array" + annotation (Placement(transformation(extent={{-160,-70},{-140,-50}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and" + annotation (Placement(transformation(extent={{100,90},{120,110}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi1[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{140,-90},{160,-70}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep4( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{40,-160},{60,-140}}))); + Buildings.Controls.OBC.CDL.Logical.Or or1 + "Plant just enabeld or it is in the chiller staging process" + annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); + +equation + connect(lat.y, tim.u) + annotation (Line(points={{-78,60},{-62,60}}, color={255,0,255})); + connect(tim.y, greThr.u) + annotation (Line(points={{-38,60},{-2,60}}, color={0,0,127})); + connect(uChiHeaCon, booToRea.u) + annotation (Line(points={{-200,-110},{-162,-110}}, color={255,0,255})); + connect(booToRea.y, triSam.u) + annotation (Line(points={{-138,-110},{-62,-110}}, color={0,0,127})); + connect(edg.y, and2.u1) + annotation (Line(points={{-138,100},{-120,100},{-120,80},{-170,80},{-170,60}, + {-162,60}}, color={255,0,255})); + connect(uStaPro, and2.u2) + annotation (Line(points={{-200,52},{-162,52}}, color={255,0,255})); + connect(and2.y, lat.u) + annotation (Line(points={{-138,60},{-102,60}}, color={255,0,255})); + connect(uStaPro, not1.u) annotation (Line(points={{-200,52},{-170,52},{-170,20}, + {-162,20}}, color={255,0,255})); + connect(not1.y, lat.clr) + annotation (Line(points={{-138,20},{-110,20},{-110,54},{-102,54}}, + color={255,0,255})); + connect(booRep.y, triSam.trigger) + annotation (Line(points={{-78,-130},{-50,-130},{-50,-122}}, + color={255,0,255})); + connect(tim.y, greThr1.u) + annotation (Line(points={{-38,60},{-20,60},{-20,100},{-2,100}}, color={0,0,127})); + connect(booRep1.y, swi.u2) + annotation (Line(points={{62,60},{80,60},{80,-20},{98,-20}}, + color={255,0,255})); + connect(greThr.y, booRep1.u) + annotation (Line(points={{22,60},{38,60}}, color={255,0,255})); + connect(swi.y, greEquThr.u) + annotation (Line(points={{122,-20},{138,-20}}, color={0,0,127})); + connect(not2.y, booRep2.u) + annotation (Line(points={{-38,-60},{-22,-60}}, color={255,0,255})); + connect(booRep2.y, swi1.u2) + annotation (Line(points={{2,-60},{38,-60}}, color={255,0,255})); + connect(triSam.y, swi1.u3) + annotation (Line(points={{-38,-110},{20,-110},{20,-68},{38,-68}}, + color={0,0,127})); + connect(swi1.y, swi.u3) + annotation (Line(points={{62,-60},{80,-60},{80,-28},{98,-28}}, + color={0,0,127})); + connect(lat.y, not2.u) + annotation (Line(points={{-78,60},{-70,60},{-70,-60},{-62,-60}}, + color={255,0,255})); + connect(nexChaChi, intRep.u) + annotation (Line(points={{-200,-30},{-162,-30}}, color={255,127,0})); + connect(intRep.y, intEqu.u1) + annotation (Line(points={{-138,-30},{-102,-30}}, color={255,127,0})); + connect(booToRea.y, swi1.u1) + annotation (Line(points={{-138,-110},{-100,-110},{-100,-80},{10,-80},{10,-52}, + {38,-52}}, color={0,0,127})); + connect(intEqu.y, swi2.u2) + annotation (Line(points={{-78,-30},{38,-30}}, color={255,0,255})); + connect(swi2.y, swi.u1) + annotation (Line(points={{62,-30},{70,-30},{70,-12},{98,-12}}, + color={0,0,127})); + connect(triSam.y, swi2.u3) + annotation (Line(points={{-38,-110},{20,-110},{20,-38},{38,-38}}, + color={0,0,127})); + connect(con1.y, logSwi.u1) + annotation (Line(points={{-78,30},{-60,30},{-60,18},{-42,18}}, + color={255,0,255})); + connect(con.y, logSwi.u3) + annotation (Line(points={{-78,0},{-60,0},{-60,2},{-42,2}}, + color={255,0,255})); + connect(greThr.y, logSwi.u2) + annotation (Line(points={{22,60},{30,60},{30,40},{-50,40},{-50,10},{-42,10}}, + color={255,0,255})); + connect(logSwi.y, booRep3.u) + annotation (Line(points={{-18,10},{-2,10}},color={255,0,255})); + connect(booRep3.y, booToRea1.u) + annotation (Line(points={{22,10},{38,10}}, color={255,0,255})); + connect(booToRea1.y, swi2.u1) + annotation (Line(points={{62,10},{70,10},{70,-10},{20,-10},{20,-22},{38,-22}}, + color={0,0,127})); + connect(conInt.y, intEqu.u2) + annotation (Line(points={{-138,-60},{-130,-60},{-130,-38},{-102,-38}}, + color={255,127,0})); + connect(greThr1.y, and1.u1) + annotation (Line(points={{22,100},{98,100}}, color={255,0,255})); + connect(and1.y, yEnaHeaCon) + annotation (Line(points={{122,100},{200,100}}, color={255,0,255})); + connect(and2.y, booRep.u) + annotation (Line(points={{-138,60},{-120,60},{-120,-130},{-102,-130}}, + color={255,0,255})); + connect(uStaPro, booRep4.u) annotation (Line(points={{-200,52},{-170,52},{-170, + -150},{38,-150}}, color={255,0,255})); + connect(uChiHeaCon, logSwi1.u3) + annotation (Line(points={{-200,-110},{-166,-110},{-166,-88},{138,-88}}, + color={255,0,255})); + connect(booRep4.y, logSwi1.u2) + annotation (Line(points={{62,-150},{80,-150},{80,-80},{138,-80}}, + color={255,0,255})); + connect(greEquThr.y, logSwi1.u1) + annotation (Line(points={{162,-20},{170,-20},{170,-50},{120,-50},{120,-72},{ + 138,-72}}, color={255,0,255})); + connect(logSwi1.y, yChiHeaCon) + annotation (Line(points={{162,-80},{200,-80}}, color={255,0,255})); + connect(uEnaPla, or1.u1) + annotation (Line(points={{-200,160},{-142,160}}, color={255,0,255})); + connect(or1.y, and1.u2) annotation (Line(points={{-118,160},{80,160},{80,92}, + {98,92}}, color={255,0,255})); + connect(uUpsDevSta, or1.u2) annotation (Line(points={{-200,130},{-160,130},{-160, + 152},{-142,152}}, color={255,0,255})); + connect(or1.y, edg.u) annotation (Line(points={{-118,160},{-100,160},{-100, + 120},{-170,120},{-170,100},{-162,100}}, color={255,0,255})); +annotation ( + defaultComponentName="enaHeaCon", + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-180,-180},{180,180}})), + Icon(coordinateSystem(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={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-98,-34},{-54,-46}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="nexChaChi"), + Text( + extent={{-96,52},{-44,38}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uUpsDevSta"), + Text( + extent={{-100,6},{-66,-6}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="chaPro"), + Text( + extent={{-98,-72},{-46,-86}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChiHeaCon"), + Text( + extent={{44,68},{96,54}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yEnaHeaCon"), + Text( + extent={{44,-50},{96,-64}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yChiHeaCon"), + Polygon( + points={{-60,40},{-60,-40},{0,0},{-60,40}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Polygon( + points={{60,40},{60,-40},{0,0},{60,40}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,88},{-48,74}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uEnaPla")}), + Documentation(info=" +

                      +Block that generates chiller head pressure control enabling status array when +there is stage change command (chaPro=true). It also generates status +to indicate if the head pressure control status change process has finished. +This development is based on ASHRAE Guideline 36-2021. +

                      +

                      +In stage-up process, section 5.20.4.16, item d: +

                      +
                        +
                      • +After the condenser water pumps speed or number has been changed by thrTimEnb, +e.g. 10 seconds, enable head pressure control for the chiller being enabled. +Wait 30 seconds (waiTim=30). +
                      • +
                      +

                      +In stage-up process when requires smaller chiller being shut off and larger chiller +being enabled, section 5.20.4.16, item g.3: +

                      +
                        +
                      • +When the controller of the smaller chiller being shut off indicates no request for +condenser water flow, disable the chiller's head pressure control loop, +(thrTimEnb=0 and waiTim=0). +
                      • +
                      +

                      +In stage-down process, section 5.20.4.17, item d: +

                      +
                        +
                      • +When the controller of the chiller being shut off indicates no request for condenser +water flow, disable the chiller's head pressure control loop, +(thrTimEnb=0 and waiTim=0). +
                      • +
                      +

                      +In stage-down process when requires smaller chiller being enabled and larger chiller +being disabled, section 5.20.4.17, item a.3: +

                      +
                        +
                      • +After minimum flow bypass has been changed, enable head pressure control for +the chiller being enabled. Wait 30 seconds. +(thrTimEnb=0 and waiTim=30). +
                      • +
                      +", revisions=" +
                        +
                      • +February 4, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end HeadControl; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/NextChiller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/NextChiller.mo new file mode 100644 index 00000000000..910d10f4953 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/NextChiller.mo @@ -0,0 +1,409 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences; +block NextChiller "Identify next enable and disable chillers" + + parameter Integer nChi=2 "Total number of chillers"; + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uStaSet + "Chiller stage setpoint" + annotation (Placement(transformation(extent={{-300,110},{-260,150}}), + iconTransformation(extent={{-140,50},{-100,90}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiSet[nChi] + "Vector of chillers status setpoint" + annotation (Placement(transformation(extent={{-300,-40},{-260,0}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput endPro + "True: the staging process is end" + annotation (Placement(transformation(extent={{-300,-210},{-260,-170}}), + iconTransformation(extent={{-140,-90},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yUp + "True if it is in staging up process" + annotation (Placement(transformation(extent={{280,180},{320,220}}), + iconTransformation(extent={{100,70},{140,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yDow + "True if it is in staging down process" + annotation (Placement(transformation(extent={{280,120},{320,160}}), + iconTransformation(extent={{100,50},{140,90}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yNexEnaChi + "Next enabling chiller index" + annotation (Placement(transformation(extent={{280,70},{320,110}}), + iconTransformation(extent={{100,20},{140,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yDisSmaChi + "Smaller chiller to be disabled in staging-up process" + annotation (Placement(transformation(extent={{280,20},{320,60}}), + iconTransformation(extent={{100,-12},{140,28}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yOnOff + "True: if the stage change require one chiller to be enabled while another is disabled" + annotation (Placement(transformation(extent={{280,-40},{320,0}}), + iconTransformation(extent={{100,-50},{140,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yLasDisChi + "Disable last chiller when it is in stage-down process" + annotation (Placement(transformation(extent={{280,-120},{320,-80}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yEnaSmaChi + "Smaller chiller to be enabled in stage-down process" + annotation (Placement(transformation(extent={{280,-170},{320,-130}}), + iconTransformation(extent={{100,-110},{140,-70}}))); + +protected + parameter Integer chiInd[nChi]={i for i in 1:nChi} + "Chiller index, {1,2,...,n}"; + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[nChi] + "Boolean to integer" + annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1[nChi] + "Boolean to integer" + annotation (Placement(transformation(extent={{-60,-150},{-40,-130}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt2 + "Boolean to integer" + annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt3 + "Boolean to integer" + annotation (Placement(transformation(extent={{-60,150},{-40,170}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt4 + "Boolean to integer" + annotation (Placement(transformation(extent={{-60,100},{-40,120}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant chiIndVec[nChi]( + final k=chiInd) "Vector of chiller index" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-140,-200},{-120,-180}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant one( + final k=1) "Constant 1" + annotation (Placement(transformation(extent={{120,-50},{140,-30}}))); + Buildings.Controls.OBC.CDL.Integers.Change cha + "Check if it is stage up or stage down" + annotation (Placement(transformation(extent={{-240,120},{-220,140}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg[nChi] + "Check if the chiller is being enabled" + annotation (Placement(transformation(extent={{-240,30},{-220,50}}))); + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg[nChi] + "Check if the chiller is being disabled" + annotation (Placement(transformation(extent={{-240,-30},{-220,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Latch enaChi[nChi] + "True when the chiller should be enabled" + annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); + Buildings.Controls.OBC.CDL.Logical.Latch disChi[nChi] + "True when the chiller should be disabled" + annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr anyEnaChi(final nin=nChi) + "Check if there is any enabling chiller" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr anyDisChi(final nin=nChi) + "Check if there is any disabling chiller" + annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); + Buildings.Controls.OBC.CDL.Logical.And enaDis + "Check if enabling and disabling chillers at the same process" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + Buildings.Controls.OBC.CDL.Integers.Multiply proInt[nChi] + "Find out the index of enabling chiller" + annotation (Placement(transformation(extent={{0,30},{20,50}}))); + Buildings.Controls.OBC.CDL.Integers.Multiply proInt1[nChi] + "Find out the index of disabling chiller" + annotation (Placement(transformation(extent={{0,-140},{20,-120}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum enaChiInd(final nin = nChi) + "Enabling chiller index" + annotation (Placement(transformation(extent={{40,30},{60,50}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum disChiInd(final nin = nChi) + "Disabling chiller index" + annotation (Placement(transformation(extent={{40,-140},{60,-120}}))); + Buildings.Controls.OBC.CDL.Logical.Latch upPro + "True when it is in stage up process" + annotation (Placement(transformation(extent={{-100,150},{-80,170}}))); + Buildings.Controls.OBC.CDL.Logical.Latch dowPro + "True when it is in stage down process" + annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); + Buildings.Controls.OBC.CDL.Integers.Multiply proInt2 + "Find out the index of enabling chiller" + annotation (Placement(transformation(extent={{120,80},{140,100}}))); + Buildings.Controls.OBC.CDL.Integers.Multiply proInt3 + "Staging up process and it requires chiller on and off" + annotation (Placement(transformation(extent={{120,30},{140,50}}))); + Buildings.Controls.OBC.CDL.Integers.Multiply proInt4 + "Disabling chiller during stage up process" + annotation (Placement(transformation(extent={{160,10},{180,30}}))); + Buildings.Controls.OBC.CDL.Integers.Multiply proInt5 + "Find out the index of disabling chiller" + annotation (Placement(transformation(extent={{120,-140},{140,-120}}))); + Buildings.Controls.OBC.CDL.Integers.Multiply proInt6 + "Staging down process and it requires chiller on and off" + annotation (Placement(transformation(extent={{120,-190},{140,-170}}))); + Buildings.Controls.OBC.CDL.Integers.Multiply proInt7 + "Enabling chiller during stage down process" + annotation (Placement(transformation(extent={{160,-210},{180,-190}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi + "Output 1 when it is not in the staging up process" + annotation (Placement(transformation(extent={{240,30},{260,50}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi1 + "Output 1 when it is not in the staging up process" + annotation (Placement(transformation(extent={{240,80},{260,100}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi2 + "Output 1 when it is not in the staging down process" + annotation (Placement(transformation(extent={{240,-160},{260,-140}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi3 + "Output 1 when it is not in the staging down process" + annotation (Placement(transformation(extent={{240,-110},{260,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con[nChi]( + final k=fill(false, nChi)) + "False constant" + annotation (Placement(transformation(extent={{-240,-130},{-220,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con2[nChi]( + final k=fill(true, nChi)) + "Constant true" + annotation (Placement(transformation(extent={{-240,-90},{-220,-70}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel[nChi]( + final delayTime=fill(1, nChi), + final delayOnInit=fill(true, nChi)) + "Check if it has passed initial time" + annotation (Placement(transformation(extent={{-200,-90},{-180,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi1[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{-140,-90},{-120,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi2[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{-140,30},{-120,50}}))); +equation + connect(uChiSet, edg.u) annotation (Line(points={{-280,-20},{-250,-20},{-250,40}, + {-242,40}}, color={255,0,255})); + connect(booRep.y, enaChi.clr) annotation (Line(points={{-118,-190},{-110,-190}, + {-110,34},{-102,34}}, color={255,0,255})); + connect(booRep.y, disChi.clr) annotation (Line(points={{-118,-190},{-110,-190}, + {-110,-86},{-102,-86}}, color={255,0,255})); + connect(enaChi.y, anyEnaChi.u) annotation (Line(points={{-78,40},{-70,40},{-70, + -20},{-62,-20}}, color={255,0,255})); + connect(anyEnaChi.y, enaDis.u1) annotation (Line(points={{-38,-20},{-2,-20}}, + color={255,0,255})); + connect(disChi.y, anyDisChi.u) annotation (Line(points={{-78,-80},{-70,-80},{-70, + -100},{-62,-100}}, color={255,0,255})); + connect(anyDisChi.y, enaDis.u2) annotation (Line(points={{-38,-100},{-10,-100}, + {-10,-28},{-2,-28}}, color={255,0,255})); + connect(enaDis.y, yOnOff) annotation (Line(points={{22,-20},{300,-20}}, + color={255,0,255})); + connect(uStaSet, cha.u) + annotation (Line(points={{-280,130},{-242,130}}, color={255,127,0})); + connect(disChi.y, booToInt1.u) + annotation (Line(points={{-78,-80},{-70,-80},{-70,-140},{-62,-140}}, + color={255,0,255})); + connect(enaChi.y, booToInt.u) + annotation (Line(points={{-78,40},{-62,40}}, color={255,0,255})); + connect(booToInt.y, proInt.u1) annotation (Line(points={{-38,40},{-20,40},{-20, + 46},{-2,46}}, color={255,127,0})); + connect(booToInt1.y, proInt1.u2) annotation (Line(points={{-38,-140},{-20,-140}, + {-20,-136},{-2,-136}}, color={255,127,0})); + connect(chiIndVec.y, proInt.u2) annotation (Line(points={{-78,0},{-20,0},{-20, + 34},{-2,34}}, color={255,127,0})); + connect(proInt.y, enaChiInd.u) + annotation (Line(points={{22,40},{38,40}}, color={255,127,0})); + connect(chiIndVec.y, proInt1.u1) annotation (Line(points={{-78,0},{-20,0},{-20, + -124},{-2,-124}}, color={255,127,0})); + connect(proInt1.y, disChiInd.u) + annotation (Line(points={{22,-130},{38,-130}}, color={255,127,0})); + connect(cha.down, dowPro.u) annotation (Line(points={{-218,124},{-120,124},{-120, + 110},{-102,110}}, color={255,0,255})); + connect(enaDis.y, booToInt2.u) annotation (Line(points={{22,-20},{30,-20},{30, + -60},{38,-60}}, color={255,0,255})); + connect(upPro.y, booToInt3.u) + annotation (Line(points={{-78,160},{-62,160}}, color={255,0,255})); + connect(booToInt3.y, proInt2.u1) annotation (Line(points={{-38,160},{110,160}, + {110,96},{118,96}}, color={255,127,0})); + connect(enaChiInd.y, proInt2.u2) annotation (Line(points={{62,40},{80,40},{80, + 84},{118,84}},color={255,127,0})); + connect(booToInt3.y, proInt3.u1) annotation (Line(points={{-38,160},{110,160}, + {110,46},{118,46}},color={255,127,0})); + connect(booToInt2.y, proInt3.u2) annotation (Line(points={{62,-60},{100,-60},{ + 100,34},{118,34}}, color={255,127,0})); + connect(proInt3.y, proInt4.u1) annotation (Line(points={{142,40},{150,40},{150, + 26},{158,26}}, color={255,127,0})); + connect(disChiInd.y, proInt4.u2) annotation (Line(points={{62,-130},{90,-130}, + {90,14},{158,14}}, color={255,127,0})); + connect(dowPro.y, booToInt4.u) + annotation (Line(points={{-78,110},{-62,110}}, color={255,0,255})); + connect(booToInt4.y, proInt5.u1) annotation (Line(points={{-38,110},{70,110},{ + 70,-124},{118,-124}}, color={255,127,0})); + connect(disChiInd.y, proInt5.u2) annotation (Line(points={{62,-130},{90,-130}, + {90,-136},{118,-136}}, color={255,127,0})); + connect(booToInt2.y, proInt6.u2) annotation (Line(points={{62,-60},{100,-60},{ + 100,-186},{118,-186}}, color={255,127,0})); + connect(booToInt4.y, proInt6.u1) annotation (Line(points={{-38,110},{70,110},{ + 70,-174},{118,-174}}, color={255,127,0})); + connect(proInt6.y, proInt7.u1) annotation (Line(points={{142,-180},{150,-180}, + {150,-194},{158,-194}}, color={255,127,0})); + connect(enaChiInd.y, proInt7.u2) annotation (Line(points={{62,40},{80,40},{80, + -206},{158,-206}}, color={255,127,0})); + connect(endPro, dowPro.clr) annotation (Line(points={{-280,-190},{-210,-190},{ + -210,104},{-102,104}}, color={255,0,255})); + connect(endPro, upPro.clr) annotation (Line(points={{-280,-190},{-210,-190},{-210, + 154},{-102,154}}, color={255,0,255})); + connect(endPro, booRep.u) + annotation (Line(points={{-280,-190},{-142,-190}}, color={255,0,255})); + connect(uChiSet, falEdg.u) annotation (Line(points={{-280,-20},{-242,-20}}, + color={255,0,255})); + connect(upPro.y, yUp) annotation (Line(points={{-78,160},{-70,160},{-70,200},{ + 300,200}}, color={255,0,255})); + connect(dowPro.y, yDow) annotation (Line(points={{-78,110},{-70,110},{-70,140}, + {300,140}},color={255,0,255})); + connect(upPro.y, intSwi1.u2) annotation (Line(points={{-78,160},{-70,160},{-70, + 200},{200,200},{200,90},{238,90}}, color={255,0,255})); + connect(proInt2.y, intSwi1.u1) annotation (Line(points={{142,90},{180,90},{180, + 98},{238,98}}, color={255,127,0})); + connect(one.y, intSwi1.u3) annotation (Line(points={{142,-40},{220,-40},{220,82}, + {238,82}}, color={255,127,0})); + connect(intSwi1.y, yNexEnaChi) + annotation (Line(points={{262,90},{300,90}}, color={255,127,0})); + connect(upPro.y, intSwi.u2) annotation (Line(points={{-78,160},{-70,160},{-70, + 200},{200,200},{200,40},{238,40}}, color={255,0,255})); + connect(proInt4.y, intSwi.u1) annotation (Line(points={{182,20},{210,20},{210, + 48},{238,48}}, color={255,127,0})); + connect(one.y, intSwi.u3) annotation (Line(points={{142,-40},{220,-40},{220,32}, + {238,32}}, color={255,127,0})); + connect(intSwi.y, yDisSmaChi) + annotation (Line(points={{262,40},{300,40}}, color={255,127,0})); + connect(intSwi3.y, yLasDisChi) + annotation (Line(points={{262,-100},{300,-100}}, color={255,127,0})); + connect(dowPro.y, intSwi3.u2) annotation (Line(points={{-78,110},{-70,110},{-70, + 140},{190,140},{190,-100},{238,-100}}, color={255,0,255})); + connect(dowPro.y, intSwi2.u2) annotation (Line(points={{-78,110},{-70,110},{-70, + 140},{190,140},{190,-150},{238,-150}}, color={255,0,255})); + connect(proInt5.y, intSwi3.u1) annotation (Line(points={{142,-130},{180,-130}, + {180,-92},{238,-92}}, color={255,127,0})); + connect(proInt7.y, intSwi2.u1) annotation (Line(points={{182,-200},{200,-200}, + {200,-142},{238,-142}}, color={255,127,0})); + connect(intSwi2.y, yEnaSmaChi) + annotation (Line(points={{262,-150},{300,-150}}, color={255,127,0})); + connect(one.y, intSwi3.u3) annotation (Line(points={{142,-40},{220,-40},{220,-108}, + {238,-108}}, color={255,127,0})); + connect(one.y, intSwi2.u3) annotation (Line(points={{142,-40},{220,-40},{220,-158}, + {238,-158}}, color={255,127,0})); + connect(cha.up, upPro.u) annotation ( + Line(points={{-218,136},{-120,136},{-120,160},{-102,160}}, color = {255, 0, 255})); + connect(con2.y, truDel.u) + annotation (Line(points={{-218,-80},{-202,-80}}, color={255,0,255})); + connect(truDel.y, logSwi1.u2) + annotation (Line(points={{-178,-80},{-142,-80}}, color={255,0,255})); + connect(falEdg.y, logSwi1.u1) annotation (Line(points={{-218,-20},{-150,-20},{ + -150,-72},{-142,-72}}, color={255,0,255})); + connect(con.y, logSwi1.u3) annotation (Line(points={{-218,-120},{-160,-120},{-160, + -88},{-142,-88}}, color={255,0,255})); + connect(logSwi1.y, disChi.u) annotation (Line(points={{-118,-80},{-102,-80}}, + color={255,0,255})); + connect(truDel.y, logSwi2.u2) annotation (Line(points={{-178,-80},{-170,-80},{ + -170,40},{-142,40}}, color={255,0,255})); + connect(logSwi2.y, enaChi.u) + annotation (Line(points={{-118,40},{-102,40}}, color={255,0,255})); + connect(con.y, logSwi2.u3) annotation (Line(points={{-218,-120},{-160,-120},{-160, + 32},{-142,32}}, color={255,0,255})); + connect(edg.y, logSwi2.u1) annotation (Line(points={{-218,40},{-180,40},{-180, + 48},{-142,48}}, color={255,0,255})); +annotation ( + defaultComponentName="nexChi", + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-260,-220},{280,220}})), + Icon(coordinateSystem(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={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-100,76},{-64,66}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="uStaSet"), + Text( + extent={{-100,8},{-58,-4}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChiSet"), + Text( + extent={{50,50},{98,30}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="yNexEnaChi"), + Text( + extent={{-98,-62},{-64,-74}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="endPro"), + Text( + extent={{50,20},{98,0}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="yDisSmaChi"), + Text( + extent={{50,-48},{98,-68}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="yDisLasChi"), + Text( + extent={{44,-78},{98,-100}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="yEnaSmaChi"), + Text( + extent={{54,-22},{96,-34}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yOnOff"), + Text( + extent={{-100,100},{100,-100}}, + textColor={0,0,0}, + textString="?"), + Text( + extent={{60,96},{102,84}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yUp"), + Text( + extent={{60,76},{102,64}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yDow")}), +Documentation(info=" +

                      +This block identifies index of next enabling (yNexEnaChi and +yEnaSmaChi) or disabling chiller (yDisSmaChi and +yLasDisChi) based on current chiller stage setpoint +uStaSet and the chiller status setpoint uChiSet. +

                      +

                      +This implementation assumes that the stage-up process (increased uStaSet) +will enable only one more chiller (yOnOff=false), or enable a larger +chiller and disable a smaller chiller (yOnOff=true); the stage-down +process (dicreased uStaSet) will disable only one existing chiller +(yOnOff=false), or disable a larger chiller and enable a smaller +chiller (yOnOff=true). +

                      +

                      +Note that when applying the sequence: +

                      +
                        +
                      • +If it is not in the staging process, the outputs yNexEnaChi, +yDisSmaChi, yLasDisChi, yEnaSmaChi equal 1. +The yOnOff is false. +
                      • +
                      • +If it is in the staging up process (yUp=true), the outputs +yLasDisChi and yEnaSmaChi, which becomes valid only when +it is in staging down process, equal to the default 1. +
                      • +
                      • +If it is in the staging down process (yDow=true), the outputs +yNexEnaChi and yDisSmaChi, which becomes valid only when +it is in staging up process, equal to the default 1. +
                      • +
                      +", revisions=" +
                        +
                      • +May 06, 2020, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end NextChiller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/ReduceDemand.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/ReduceDemand.mo new file mode 100644 index 00000000000..5eeb9daa4f4 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/ReduceDemand.mo @@ -0,0 +1,358 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences; +block ReduceDemand "Sequence for reducing operating chiller demand" + + parameter Integer nChi=2 "Total number of chillers in the plant"; + parameter Real chiDemRedFac = 0.75 + "Demand reducing factor of current operating chillers"; + parameter Real holChiDemTim( + final unit="s", + final quantity="Time") = 300 + "Maximum time to wait for the actual demand less than percentage of current load"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uDemLim + "Demand limit: true=limit chiller demand" + annotation (Placement(transformation(extent={{-200,170},{-160,210}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiLoa[nChi]( + final quantity=fill("ElectricCurrent", nChi), + final unit=fill("A", nChi)) + "Current chiller load" + annotation (Placement(transformation(extent={{-200,140},{-160,180}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput yOpeParLoaRatMin( + final min=0, + final max=1, + final unit="1") + "Current stage minimum cycling operative partial load ratio" + annotation (Placement(transformation(extent={{-200,0},{-160,40}}), + iconTransformation(extent={{-140,-10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaDow "Stage down status: true=stage-down" + annotation (Placement(transformation(extent={{-200,-50},{-160,-10}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOnOff + "True: if the stage change require one chiller to be enabled while another is disabled" + annotation (Placement(transformation(extent={{-200,-90},{-160,-50}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller status: true=ON" + annotation (Placement(transformation(extent={{-200,-160},{-160,-120}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiDem[nChi]( + final quantity=fill("ElectricCurrent", nChi), + final unit=fill("A", nChi)) + "Chiller demand setpoint" + annotation (Placement(transformation(extent={{160,100},{200,140}}), + iconTransformation(extent={{100,20},{140,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChiDemRed + "Flag: true if it is not requiring reducing demand or the chiller demand reduction process has finished" + annotation (Placement(transformation(extent={{160,60},{200,100}}), + iconTransformation(extent={{100,-60},{140,-20}}))); + +protected + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam[nChi]( + final y_start=fill(1e-6,nChi)) + "Triggered sampler to sample current chiller demand" + annotation (Placement(transformation(extent={{0,150},{20,170}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-60,180},{-40,200}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi4[nChi] + "Current setpoint to chillers" + annotation (Placement(transformation(extent={{120,110},{140,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con[nChi]( + final k=fill(0.2, nChi)) "Constant value to avoid zero as the denominator" + annotation (Placement(transformation(extent={{-140,-200},{-120,-180}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[nChi] + "Change zero input to a given constant if the chiller is not enabled" + annotation (Placement(transformation(extent={{-80,-150},{-60,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys[nChi]( + final uLow=fill(chiDemRedFac + 0.05 - 0.01, nChi), + final uHigh=fill(chiDemRedFac + 0.05 + 0.01, nChi)) + "Check if actual demand has already reduced at instant when receiving stage change signal" + annotation (Placement(transformation(extent={{0,-150},{20,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Divide div[nChi] + "Output result of first input divided by second input" + annotation (Placement(transformation(extent={{-40,-150},{-20,-130}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1[nChi] "Logical not" + annotation (Placement(transformation(extent={{40,-150},{60,-130}}))); + Buildings.Controls.OBC.CDL.Logical.MultiAnd mulAnd(final nin=nChi) + "Current chillers demand have been lower than 80%" + annotation (Placement(transformation(extent={{80,-150},{100,-130}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg + "Rising edge, output true at the moment when input turns from false to true" + annotation (Placement(transformation(extent={{-100,180},{-80,200}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep1( + final nout=nChi) + "Replicate boolean input " + annotation (Placement(transformation(extent={{-100,120},{-80,140}}))); + Buildings.Controls.OBC.CDL.Logical.And finRedDem + "Demand reducing process is done" + annotation (Placement(transformation(extent={{120,20},{140,40}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and" + annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1 + "Minimum cycling operative partial load ratio" + annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( + final k=0) "Constant zero" + annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2( + final k=chiDemRedFac) + "Demand reducing factor of current operating chillers" + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + Buildings.Controls.OBC.CDL.Reals.Max max "Maximum value of two real inputs" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep(final nout=nChi) + "Replicate real input" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply pro[nChi] + "Percentage of the current load" + annotation (Placement(transformation(extent={{80,150},{100,170}}))); + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar[nChi]( + final p=fill(1e-6, nChi)) + "Add a small value to avoid potentially zero denominator" + annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim( + final t=holChiDemTim) + "Check if the demand limit has been 5 minutes" + annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2 "Logical or" + annotation (Placement(transformation(extent={{120,-110},{140,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "Not requiring reducing demand" + annotation (Placement(transformation(extent={{120,70},{140,90}}))); + Buildings.Controls.OBC.CDL.Logical.Not notReqRed + "Not requiring reduce demand" + annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); + Buildings.Controls.OBC.CDL.Logical.Or notRed + "Not requiring reducing demand" + annotation (Placement(transformation(extent={{0,80},{20,100}}))); + +equation + connect(booRep.y, triSam.trigger) + annotation (Line(points={{-38,190},{-20,190},{-20,140},{10,140},{10,148}}, + color={255,0,255})); + connect(uChiLoa, triSam.u) + annotation (Line(points={{-180,160},{-2,160}}, color={0,0,127})); + connect(uChiLoa, swi4.u3) + annotation (Line(points={{-180,160},{-140,160},{-140,112},{118,112}}, color={0,0,127})); + connect(uChi, swi.u2) + annotation (Line(points={{-180,-140},{-82,-140}}, color={255,0,255})); + connect(con.y, swi.u3) + annotation (Line(points={{-118,-190},{-100,-190},{-100,-148},{-82,-148}}, + color={0,0,127})); + connect(swi.y, div.u2) + annotation (Line(points={{-58,-140},{-50,-140},{-50,-146},{-42,-146}}, + color={0,0,127})); + connect(uChiLoa, div.u1) + annotation (Line(points={{-180,160},{-140,160},{-140,-110},{-50,-110},{-50,-134}, + {-42,-134}}, color={0,0,127})); + connect(div.y, hys.u) + annotation (Line(points={{-18,-140},{-2,-140}}, color={0,0,127})); + connect(hys.y, not1.u) + annotation (Line(points={{22,-140},{38,-140}}, color={255,0,255})); + connect(not1.y, mulAnd.u) + annotation (Line(points={{62,-140},{78,-140}}, color={255,0,255})); + connect(swi4.y,yChiDem) + annotation (Line(points={{142,120},{180,120}}, color={0,0,127})); + connect(uDemLim, edg.u) + annotation (Line(points={{-180,190},{-102,190}}, color={255,0,255})); + connect(edg.y, booRep.u) + annotation (Line(points={{-78,190},{-62,190}}, color={255,0,255})); + connect(uDemLim, booRep1.u) + annotation (Line(points={{-180,190},{-120,190},{-120,130},{-102,130}}, + color={255,0,255})); + connect(booRep1.y, swi4.u2) + annotation (Line(points={{-78,130},{-40,130},{-40,120},{118,120}}, + color={255,0,255})); + connect(uDemLim, finRedDem.u1) annotation (Line(points={{-180,190},{-120,190}, + {-120,30},{118,30}}, color={255,0,255})); + connect(uStaDow, and1.u1) + annotation (Line(points={{-180,-30},{-102,-30}}, color={255,0,255})); + connect(uOnOff, and1.u2) + annotation (Line(points={{-180,-70},{-130,-70},{-130,-38},{-102,-38}}, + color={255,0,255})); + connect(yOpeParLoaRatMin, swi1.u1) + annotation (Line(points={{-180,20},{-60,20},{-60,-22},{-42,-22}}, + color={0,0,127})); + connect(and1.y, swi1.u2) + annotation (Line(points={{-78,-30},{-42,-30}}, color={255,0,255})); + connect(con1.y, swi1.u3) + annotation (Line(points={{-78,-60},{-60,-60},{-60,-38},{-42,-38}}, + color={0,0,127})); + connect(swi1.y, max.u2) + annotation (Line(points={{-18,-30},{-10,-30},{-10,-6},{-2,-6}}, color={0,0,127})); + connect(con2.y, max.u1) + annotation (Line(points={{-18,10},{-10,10},{-10,6},{-2,6}}, + color={0,0,127})); + connect(max.y, reaRep.u) + annotation (Line(points={{22,0},{58,0}}, color={0,0,127})); + connect(triSam.y, pro.u1) + annotation (Line(points={{22,160},{40,160},{40,166},{78,166}}, + color={0,0,127})); + connect(reaRep.y, pro.u2) + annotation (Line(points={{82,0},{90,0},{90,130},{60,130},{60,154},{78,154}}, + color={0,0,127})); + connect(pro.y, swi4.u1) + annotation (Line(points={{102,160},{110,160},{110,128},{118,128}}, + color={0,0,127})); + connect(triSam.y, addPar.u) + annotation (Line(points={{22,160},{40,160},{40,-50},{58,-50}}, + color={0,0,127})); + connect(addPar.y, swi.u1) + annotation (Line(points={{82,-50},{100,-50},{100,-82},{-100,-82},{-100,-132}, + {-82,-132}}, color={0,0,127})); + connect(uDemLim, tim.u) + annotation (Line(points={{-180,190},{-120,190},{-120,-100},{-42,-100}}, + color={255,0,255})); + connect(mulAnd.y, or2.u2) + annotation (Line(points={{102,-140},{110,-140},{110,-108},{118,-108}}, + color={255,0,255})); + connect(or2.y, finRedDem.u2) annotation (Line(points={{142,-100},{150,-100},{150, + -30},{100,-30},{100,22},{118,22}}, color={255,0,255})); + connect(tim.passed, or2.u1) + annotation (Line(points={{-18,-108},{40,-108},{40,-100},{118,-100}}, + color={255,0,255})); + connect(edg.y, lat.clr) annotation (Line(points={{-78,190},{-70,190},{-70,74}, + {118,74}}, color={255,0,255})); + connect(uDemLim, notReqRed.u) annotation (Line(points={{-180,190},{-120,190},{ + -120,90},{-62,90}}, color={255,0,255})); + connect(notReqRed.y, notRed.u1) + annotation (Line(points={{-38,90},{-2,90}}, color={255,0,255})); + connect(finRedDem.y, notRed.u2) annotation (Line(points={{142,30},{150,30},{150, + 50},{-20,50},{-20,82},{-2,82}}, color={255,0,255})); + connect(notRed.y, lat.u) annotation (Line(points={{22,90},{60,90},{60,80},{118, + 80}}, color={255,0,255})); + connect(lat.y, yChiDemRed) + annotation (Line(points={{142,80},{180,80}}, color={255,0,255})); +annotation ( + defaultComponentName="chiDemRed", + Icon(coordinateSystem(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={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-60,60},{60,20}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-52,20},{-40,0}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,20},{52,0}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,0},{60,-80}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Text( + extent={{-15,9.5},{15,-9.5}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + origin={-83,49.5}, + rotation=0, + textString="uChiLoa"), + Text( + extent={{-98,98},{-66,86}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uDemLim"), + Text( + extent={{-18,6.5},{18,-6.5}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + origin={78,42.5}, + rotation=0, + textString="yChiDem"), + Text( + extent={{46,-34},{96,-46}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yChiDemRed"), + Text( + extent={{-100,-84},{-76,-94}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChi"), + Text( + extent={{-98,-42},{-74,-56}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uOnOff"), + Text( + extent={{-98,-12},{-64,-28}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uStaDow"), + Text( + extent={{-23,8.5},{23,-8.5}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + origin={-75,10.5}, + rotation=0, + textString="yOpeParLoaRatMin")}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-160,-220},{160,220}})), + Documentation(info=" +

                      +Block that reduces demand of current operating chillers when there is a stage-up +command, according to ASHRAE Guideline36-2021, +section 5.20.4.16, item a which specifies how to start the stage-up +process of the current operating chillers; and section 5.20.4.17, item a.1 which specifies +how to start the stage-down process of the current operating chiller when the +stage-down process requires one chiller off and another chiller on. +

                      +

                      +When there is a stage-up command, +

                      +
                        +
                      • +Command operating chillers to reduce demand to chiDemRedFac of +their current load, e.g. 75%. +
                      • +
                      • +Wait until actual demand < 80% of current load up to a maximum of +holChiDemTim (e.g. 5 minutes) before proceeding. +
                      • +
                      +

                      +When there is a stage-down command (uStaDow=true) and the process +requires a smaller chiller being enabled and a larger chiller being disabled +(uOnOff=true), +

                      +
                        +
                      • +Command operating chillers to reduce demand to chiDemRedFac of +their current load, e.g. 75% or a percentage equal to current stage +minimum cycling operative partial load ratio yOpeParLoaRatMin, whichever is +greater. +
                      • +
                      • +Wait until actual demand < 80% of current load up to a maximum of +holChiDemTim (e.g. 5 minutes) before proceeding. +
                      • +
                      +", +revisions=" +
                        +
                      • +September 17, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end ReduceDemand; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/ResetMinBypass.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/ResetMinBypass.mo new file mode 100644 index 00000000000..634ecbf2e73 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/ResetMinBypass.mo @@ -0,0 +1,256 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences; +block ResetMinBypass + "Sequence for minimum chilled water flow setpoint reset" + + parameter Real aftByPasSetTim( + final unit="s", + final quantity="Time") = 60 + "Time after setpoint achieved"; + parameter Real relFloDif=0.01 + "Relative error to the setpoint for checking if it has achieved flow rate setpoint" + annotation (Dialog(tab="Advanced")); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uUpsDevSta + "Status of resetting status of device before reset minimum flow setpoint" + annotation (Placement(transformation(extent={{-200,100},{-160,140}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaPro + "Indicate if there is stage change" + annotation (Placement(transformation(extent={{-200,60},{-160,100}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( + final min=0, + final unit="m3/s", + final quantity="VolumeFlowRate") + "Measured chilled water flow rate" + annotation (Placement(transformation(extent={{-200,0},{-160,40}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput VMinChiWat_setpoint( + final min=0, + final unit="m3/s", + final quantity="VolumeFlowRate") + "Minimum chiller water flow setpoint" + annotation (Placement(transformation(extent={{-200,-90},{-160,-50}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSetChaPro + "True: it is in the setpoint change process" + annotation (Placement(transformation(extent={{-200,-130},{-160,-90}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yMinBypRes + "True: minimum chilled water flow bypass valve has been resetted successfully" + annotation (Placement(transformation(extent={{160,-120},{200,-80}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and" + annotation (Placement(transformation(extent={{120,110},{140,130}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim( + final t=aftByPasSetTim) + "Check if it has been over threshold time after new setpoint achieved" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and" + annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "Logical latch, maintain ON signal until condition changes" + annotation (Placement(transformation(extent={{80,70},{100,90}}))); + Buildings.Controls.OBC.CDL.Reals.Divide div + "Flow rate error divided by its setpoint" + annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( + final p=1e-6) + "Add a small positive to avoid zero output" + annotation (Placement(transformation(extent={{-140,-80},{-120,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg1 + "Rising edge, output true at the moment when input turns from false to true" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + Buildings.Controls.OBC.CDL.Logical.And and3 "Logical and" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg2 + "Rising edge, output true at the moment when input turns from false to true" + annotation (Placement(transformation(extent={{40,70},{60,90}}))); + Buildings.Controls.OBC.CDL.Reals.Abs abs "Absolute value" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract floDif + "Checkout the flow rate difference" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); + Buildings.Controls.OBC.CDL.Logical.And and4 + "Logical and" + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + Buildings.Controls.OBC.CDL.Logical.Not notChaSet + "Not in the setpoint changing process" + annotation (Placement(transformation(extent={{-120,-120},{-100,-100}}))); + Buildings.Controls.OBC.CDL.Logical.And and6 "Logical and" + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Not notChaSet1 + "Not in the setpoint changing process" + annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2 + "Minimum flow valve should not be changed" + annotation (Placement(transformation(extent={{80,-110},{100,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat1 + "Check if the valve is being changed" + annotation (Placement(transformation(extent={{120,-110},{140,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg + "Edge when the valve has been resetted successfully" + annotation (Placement(transformation(extent={{120,-10},{140,10}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg3 + "Edge when it starts changing the minimum bypass flow valve" + annotation (Placement(transformation(extent={{40,-140},{60,-120}}))); + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( + final t=relFloDif, + final h=0.5*relFloDif) + "Check if chiller water flow rate achieves the minimum flow setpoint" + annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg4 + "Not in the setpoint changing process" + annotation (Placement(transformation(extent={{80,-50},{100,-30}}))); + +equation + connect(uUpsDevSta, and2.u1) + annotation (Line(points={{-180,120},{-82,120}}, color={255,0,255})); + connect(uStaPro, and2.u2) annotation (Line(points={{-180,80},{-140,80},{-140,112}, + {-82,112}}, color={255,0,255})); + connect(and2.y, and1.u1) + annotation (Line(points={{-58,120},{118,120}}, + color={255,0,255})); + connect(uStaPro, not1.u) annotation (Line(points={{-180,80},{-140,80},{-140,60}, + {-122,60}}, color={255,0,255})); + connect(lat.y, and1.u2) + annotation (Line(points={{102,80},{108,80},{108,112},{118,112}}, + color={255,0,255})); + connect(VMinChiWat_setpoint, addPar.u) + annotation (Line(points={{-180,-70},{-142,-70}}, color={0,0,127})); + connect(not1.y, edg1.u) + annotation (Line(points={{-98,60},{-82,60}}, color={255,0,255})); + connect(edg1.y, lat.clr) + annotation (Line(points={{-58,60},{70,60},{70,74},{78,74}}, + color={255,0,255})); + connect(and3.y, tim.u) + annotation (Line(points={{22,0},{38,0}}, color={255,0,255})); + connect(addPar.y, div.u2) + annotation (Line(points={{-118,-70},{-110,-70},{-110,-56},{-102,-56}}, + color={0,0,127})); + connect(and3.y, edg2.u) + annotation (Line(points={{22,0},{30,0},{30,80},{38,80}}, + color={255,0,255})); + connect(edg2.y, lat.u) + annotation (Line(points={{62,80},{78,80}}, color={255,0,255})); + connect(VChiWat_flow, floDif.u1) + annotation (Line(points={{-180,20},{-140,20},{-140,6},{-122,6}}, color={0,0,127})); + connect(floDif.y, abs.u) + annotation (Line(points={{-98,0},{-82,0}}, color={0,0,127})); + connect(and2.y, and3.u1) + annotation (Line(points={{-58,120},{-10,120},{-10,0},{-2,0}}, + color={255,0,255})); + connect(VMinChiWat_setpoint, floDif.u2) annotation (Line(points={{-180,-70},{-150, + -70},{-150,-6},{-122,-6}}, color={0,0,127})); + connect(tim.passed, and4.u2) + annotation (Line(points={{62,-8},{78,-8}}, color={255,0,255})); + connect(uSetChaPro, notChaSet.u) + annotation (Line(points={{-180,-110},{-122,-110}}, color={255,0,255})); + connect(and2.y, and6.u1) annotation (Line(points={{-58,120},{-10,120},{-10,-40}, + {-2,-40}}, color={255,0,255})); + connect(notChaSet.y, and6.u2) annotation (Line(points={{-98,-110},{-10,-110},{ + -10,-48},{-2,-48}}, color={255,0,255})); + connect(and6.y, notChaSet1.u) + annotation (Line(points={{22,-40},{38,-40}}, color={255,0,255})); + connect(and1.y, and4.u1) annotation (Line(points={{142,120},{150,120},{150,40}, + {70,40},{70,0},{78,0}}, color={255,0,255})); + connect(and4.y, edg.u) + annotation (Line(points={{102,0},{118,0}}, color={255,0,255})); + connect(or2.y, lat1.u) + annotation (Line(points={{102,-100},{118,-100}}, color={255,0,255})); + connect(edg3.y, lat1.clr) annotation (Line(points={{62,-130},{110,-130},{110,-106}, + {118,-106}},color={255,0,255})); + connect(lat1.y, yMinBypRes) + annotation (Line(points={{142,-100},{180,-100}}, color={255,0,255})); + connect(abs.y, div.u1) annotation (Line(points={{-58,0},{-50,0},{-50,-20},{-110, + -20},{-110,-44},{-102,-44}}, color={0,0,127})); + connect(div.y, lesThr.u) + annotation (Line(points={{-78,-50},{-62,-50}}, color={0,0,127})); + connect(lesThr.y, and3.u2) annotation (Line(points={{-38,-50},{-20,-50},{-20,-8}, + {-2,-8}}, color={255,0,255})); + connect(uStaPro, edg3.u) annotation (Line(points={{-180,80},{-30,80},{-30, + -130},{38,-130}}, color={255,0,255})); + connect(notChaSet1.y, edg4.u) + annotation (Line(points={{62,-40},{78,-40}}, color={255,0,255})); + connect(edg4.y, or2.u2) annotation (Line(points={{102,-40},{110,-40},{110,-60}, + {60,-60},{60,-108},{78,-108}}, color={255,0,255})); + connect(edg.y, or2.u1) annotation (Line(points={{142,0},{150,0},{150,-70},{70, + -70},{70,-100},{78,-100}}, color={255,0,255})); +annotation ( + defaultComponentName="minBypRes", + Icon(coordinateSystem(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={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{50,8},{98,-8}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yMinBypRes"), + Text( + extent={{-98,8},{-50,-6}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="VChiWat_flow"), + Text( + extent={{-98,-32},{-30,-48}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="VMinChiWat_setpoint"), + Text( + extent={{-98,46},{-66,36}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uStaPro"), + Text( + extent={{-100,100},{100,-100}}, + textColor={0,0,0}, + textString="S"), + Text( + extent={{-98,88},{-52,76}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uUpsDevSta"), + Text( + extent={{-96,-72},{-54,-86}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uSetChaPro")}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-160,-160},{160,160}})), + Documentation(info=" +

                      +Block that generates minimum bypass flow reset status when there is +stage-change command. +This development is based on ASHRAE Guideline36-2021, section 5.20.4.16, item b. +

                      +

                      +When there is stage-change command (uStaPro = true) and the upstream +device has finished its adjustment process (uUpsDevSta = true), +like in the stage-up process the operating chillers have reduced the demand, +check if the minimum chilled water flow rate VChiWat_flow has achieved +its new set point VMinChiWat_setpoint. +After new setpoint is achieved, wait for 1 minute (byPasSetTim) to +allow loop to stabilize. It will then set yMinBypRes to true. +

                      +", +revisions=" +
                        +
                      • +September 17, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end ResetMinBypass; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/UpEnd.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/UpEnd.mo new file mode 100644 index 00000000000..b1bfa4f486c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/UpEnd.mo @@ -0,0 +1,750 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences; +block UpEnd "Sequence for ending stage-up process" + + parameter Integer nChi=2 "Total number of chillers"; + parameter Boolean have_parChi=true + "True: the plant has parallel chillers"; + + parameter Real proOnTim( + final unit="s", + final quantity="Time") = 300 + "Threshold time to check if newly enabled chiller being operated by more than 5 minutes" + annotation (Dialog(group="Enable next chiller")); + parameter Real chaChiWatIsoTim( + final unit="s", + final quantity="Time") + "Time to slowly change isolation valve, should be determined in the field" + annotation (Dialog(group="Chilled water isolation valve")); + parameter Real byPasSetTim( + final unit="s", + final quantity="Time") + "Time to slowly reset minimum bypass flow" + annotation (Dialog(group="Reset CHW minimum flow setpoint")); + parameter Real minFloSet[nChi]( + final unit=fill("m3/s", nChi), + final quantity=fill("VolumeFlowRate", nChi), + displayUnit=fill("m3/s", nChi)) + "Minimum chilled water flow through each chiller" + annotation (Dialog(group="Reset CHW minimum flow setpoint")); + parameter Real maxFloSet[nChi]( + final unit=fill("m3/s", nChi), + final quantity=fill("VolumeFlowRate", nChi), + displayUnit=fill("m3/s", nChi)) + "Maximum chilled water flow through each chiller" + annotation (Dialog(group="Reset CHW minimum flow setpoint")); + parameter Real aftByPasSetTim( + final unit="s", + final quantity="Time")=60 + "Time after minimum bypass flow being resetted to new setpoint" + annotation (Dialog(group="Reset bypass")); + parameter Real relFloDif=0.05 + "Relative error to the setpoint for checking if it has achieved flow rate setpoint" + annotation (Dialog(tab="Advanced", group="Reset bypass")); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexEnaChi + "Index of next enabling chiller" + annotation (Placement(transformation(extent={{-260,260},{-220,300}}), + iconTransformation(extent={{-140,100},{-100,140}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaUp "Stage-up command" + annotation (Placement(transformation(extent={{-260,230},{-220,270}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEnaChiWatIsoVal + "Status of chiller chilled water isolation valve control: true=enabled valve is fully open" + annotation (Placement(transformation(extent={{-260,200},{-220,240}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller status: true=ON" + annotation (Placement(transformation(extent={{-260,170},{-220,210}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOnOff + "Indicate if the stage require one chiller to be enabled while another is disabled" + annotation (Placement(transformation(extent={{-260,130},{-220,170}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexDisChi + "Next disabling chiller when there is any stage up that need one chiller on and another off" + annotation (Placement(transformation(extent={{-260,90},{-220,130}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatReq[nChi] + "Chilled water request status for each chiller" + annotation (Placement(transformation(extent={{-260,50},{-220,90}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiWatIsoVal[nChi]( + final unit=fill("1", nChi), + final min=fill(0, nChi), + final max=fill(1, nChi)) "Chilled water isolation valve position" + annotation (Placement(transformation(extent={{-260,10},{-220,50}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uConWatReq[nChi] + "Condenser water request status for each chiller" + annotation (Placement(transformation(extent={{-260,-50},{-220,-10}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiHeaCon[nChi] + "Chillers head pressure control status" + annotation (Placement(transformation(extent={{-260,-80},{-220,-40}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( + final unit="m3/s") + "Measured chilled water flow rate" + annotation (Placement(transformation(extent={{-260,-220},{-220,-180}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput VMinChiWat_setpoint( + final unit="m3/s") + "Minimum chiller water flow setpoint calculated from upstream process" + annotation (Placement(transformation(extent={{-260,-250},{-220,-210}}), + iconTransformation(extent={{-140,-120},{-100,-80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChi[nChi] + "Chiller enabling status" + annotation (Placement(transformation(extent={{220,240},{260,280}}), + iconTransformation(extent={{100,70},{140,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatIsoVal[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Chiller chilled water isolation valve position" + annotation (Placement(transformation(extent={{220,80},{260,120}}), + iconTransformation(extent={{100,30},{140,70}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChiHeaCon[nChi] + "Chiller head pressure control enabling status" + annotation (Placement(transformation(extent={{220,-20},{260,20}}), + iconTransformation(extent={{100,-10},{140,30}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatMinSet( + final unit="m3/s") "Chilled water minimum flow setpoint" + annotation (Placement(transformation(extent={{220,-100},{260,-60}}), + iconTransformation(extent={{100,-50},{140,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yEndSta + "Flag to indicate if the staging process is finished" + annotation (Placement(transformation(extent={{220,-240},{260,-200}}), + iconTransformation(extent={{100,-90},{140,-50}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput endStaTri + "Staging end trigger" + annotation (Placement(transformation(extent={{220,-280},{260,-240}}), + iconTransformation(extent={{100,-110},{140,-70}}))); + +protected + parameter Integer chiInd[nChi]={i for i in 1:nChi} + "Chiller index, {1,2,...,n}"; + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.EnableChiller + enaChi( + final nChi=nChi, + final proOnTim=proOnTim) "Enable next chiller" + annotation (Placement(transformation(extent={{-80,220},{-60,240}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.CHWIsoVal + disChiIsoVal( + final nChi=nChi, + final chaChiWatIsoTim=chaChiWatIsoTim, + final iniValPos=1, + final endValPos=0) + "Disable isolation valve of the chiller being disabled" + annotation (Placement(transformation(extent={{80,30},{100,50}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.HeadControl + disHeaCon( + final nChi=nChi, + final thrTimEnb=0, + final waiTim=0, + final heaStaCha=false) + "Disable head pressure control of the chiller being disabled" + annotation (Placement(transformation(extent={{60,-20},{80,0}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.FlowSetpoint + minChiWatSet( + final nChi=nChi, + final have_parChi=have_parChi, + final byPasSetTim=byPasSetTim, + final minFloSet=minFloSet, + final maxFloSet=maxFloSet) "Reset minimum chilled water flow setpoint" + annotation (Placement(transformation(extent={{60,-100},{80,-80}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ResetMinBypass + minBypSet( + final aftByPasSetTim=aftByPasSetTim, + final relFloDif=relFloDif) + "Check if minimum bypass flow has been resetted" + annotation (Placement(transformation(extent={{60,-220},{80,-200}}))); + Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" + annotation (Placement(transformation(extent={{0,70},{20,90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con2( + final k=true) "True constant" + annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); + Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and" + annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con3(final k=false) + "False constant" + annotation (Placement(transformation(extent={{-160,-120},{-140,-100}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" + annotation (Placement(transformation(extent={{-140,140},{-120,160}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanExtractor curDisChi(final nin=nChi) + "Current disabling chiller" + annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanExtractor curDisChi1(final nin=nChi) + "Current disabling chiller" + annotation (Placement(transformation(extent={{-140,-40},{-120,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi3[nChi] + "Logical switch" + annotation (Placement(transformation(extent={{180,-10},{200,10}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep4(final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{40,90},{60,110}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiWatIso[nChi] + "Chilled water isolation valve" + annotation (Placement(transformation(extent={{180,90},{200,110}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi4 + "Logical switch" + annotation (Placement(transformation(extent={{180,-200},{200,-180}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiWatByp + "Chilled water bypass flow setpoint" + annotation (Placement(transformation(extent={{180,-90},{200,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi5 "Logical switch" + annotation (Placement(transformation(extent={{80,-270},{100,-250}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiWatByp1 + "Chilled water bypass flow setpoint" + annotation (Placement(transformation(extent={{120,-100},{140,-80}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat1 + "Maintain ON signal when the chiller has been proven on" + annotation (Placement(transformation(extent={{-40,200},{-20,220}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre + "Break algebraic loop" + annotation (Placement(transformation(extent={{140,-270},{160,-250}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg1 + "Rising edge, output true at the moment when input turns from false to true" + annotation (Placement(transformation(extent={{180,-270},{200,-250}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat2 + "Maintain ON signal when the chilled water isolation valve has been closed" + annotation (Placement(transformation(extent={{140,20},{160,40}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat3 + "Maintain ON signal when the chiller head pressure control has been disabled" + annotation (Placement(transformation(extent={{120,-50},{140,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 + "Check if the disabled chiller is not requiring chilled water" + annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); + Buildings.Controls.OBC.CDL.Logical.Not not3 + "Check if the disabled chiller is not requiring condenser water" + annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and" + annotation (Placement(transformation(extent={{-60,68},{-40,88}}))); + Buildings.Controls.OBC.CDL.Logical.And and3 "Logical and" + annotation (Placement(transformation(extent={{-58,-40},{-38,-20}}))); + Buildings.Controls.OBC.CDL.Integers.LessEqualThreshold intLesEquThr( + final t=nChi) "Check if index is in the range" + annotation (Placement(transformation(extent={{20,130},{40,150}}))); + Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold intGreEquThr( + final t=1) "Check if index is in the range" + annotation (Placement(transformation(extent={{20,180},{40,200}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 "Check if index is in the range" + annotation (Placement(transformation(extent={{60,180},{80,200}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi "Valid index" + annotation (Placement(transformation(extent={{120,150},{140,170}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=1) + "Dummy index so the extractor will not have out of range index" + annotation (Placement(transformation(extent={{60,130},{80,150}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat4 "Use the new setpoint" + annotation (Placement(transformation(extent={{60,-140},{80,-120}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg "Staging up process starts" + annotation (Placement(transformation(extent={{-100,-180},{-80,-160}}))); + Buildings.Controls.OBC.CDL.Logical.And and6 "Upstream step is done" + annotation (Placement(transformation(extent={{-60,-140},{-40,-120}}))); + Buildings.Controls.OBC.CDL.Logical.And and7 "Check if the process requires chillers ON and OFF" + annotation (Placement(transformation(extent={{120,-160},{140,-140}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat5 + "Use the setpoint when the process requires chiller ON and OFF" + annotation (Placement(transformation(extent={{180,-160},{200,-140}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "Indicate if the stage require one chiller to be enabled while another is disabled" + annotation (Placement(transformation(extent={{-200,140},{-180,160}}))); + +equation + connect(lat.y, not2.u) + annotation (Line(points={{-178,150},{-142,150}}, color={255,0,255})); + connect(nexDisChi, disChiIsoVal.nexChaChi) + annotation (Line(points={{-240,110},{-180,110},{-180,48},{78,48}}, + color={255,127,0})); + connect(uChiWatIsoVal,disChiIsoVal. uChiWatIsoVal) + annotation (Line(points={{-240,30},{70,30},{70,45},{78,45}}, + color={0,0,127})); + connect(and4.y,disChiIsoVal.uUpsDevSta) + annotation (Line(points={{22,80},{50,80},{50,35},{78,35}}, color={255,0,255})); + connect(and5.y, disHeaCon.uUpsDevSta) + annotation (Line(points={{22,-30},{26,-30},{26,-6},{58,-6}}, + color={255,0,255})); + connect(nexDisChi, disHeaCon.nexChaChi) + annotation (Line(points={{-240,110},{-180,110},{-180,-50},{40,-50},{40,-14}, + {58,-14}}, color={255,127,0})); + connect(disHeaCon.uChiHeaCon, uChiHeaCon) + annotation (Line(points={{58,-18},{50,-18},{50,-60},{-240,-60}}, + color={255,0,255})); + connect(con3.y, minChiWatSet.uStaDow) + annotation (Line(points={{-138,-110},{36,-110},{36,-99},{58,-99}}, + color={255,0,255})); + connect(minBypSet.VChiWat_flow, VChiWat_flow) + annotation (Line(points={{58,-210},{0,-210},{0,-200},{-240,-200}}, + color={0,0,127})); + connect(not2.y, booRep4.u) + annotation (Line(points={{-118,150},{-110,150},{-110,100},{38,100}}, + color={255,0,255})); + connect(uChiHeaCon, logSwi3.u1) + annotation (Line(points={{-240,-60},{170,-60},{170,8},{178,8}}, + color={255,0,255})); + connect(disHeaCon.yChiHeaCon, logSwi3.u3) + annotation (Line(points={{82,-16},{140,-16},{140,-8},{178,-8}}, + color={255,0,255})); + connect(logSwi3.y, yChiHeaCon) + annotation (Line(points={{202,0},{240,0}}, color={255,0,255})); + connect(booRep4.y, logSwi3.u2) + annotation (Line(points={{62,100},{130,100},{130,0},{178,0}}, + color={255,0,255})); + connect(booRep4.y, chiWatIso.u2) + annotation (Line(points={{62,100},{178,100}}, color={255,0,255})); + connect(uChiWatIsoVal, chiWatIso.u1) + annotation (Line(points={{-240,30},{70,30},{70,108},{178,108}}, + color={0,0,127})); + connect(disChiIsoVal.yChiWatIsoVal, chiWatIso.u3) + annotation (Line(points={{102,34},{110,34},{110,92},{178,92}}, + color={0,0,127})); + connect(chiWatIso.y, yChiWatIsoVal) + annotation (Line(points={{202,100},{240,100}}, color={0,0,127})); + connect(not2.y, logSwi4.u2) + annotation (Line(points={{-118,150},{-110,150},{-110,-190},{178,-190}}, + color={255,0,255})); + connect(con2.y, logSwi4.u1) + annotation (Line(points={{-38,10},{30,10},{30,-182},{178,-182}}, + color={255,0,255})); + connect(minBypSet.yMinBypRes, logSwi4.u3) + annotation (Line(points={{82,-210},{140,-210},{140,-198},{178,-198}}, + color={255,0,255})); + connect(chiWatByp.y,yChiWatMinSet) + annotation (Line(points={{202,-80},{240,-80}}, color={0,0,127})); + connect(not2.y, logSwi5.u2) + annotation (Line(points={{-118,150},{-110,150},{-110,-260},{78,-260}}, + color={255,0,255})); + connect(logSwi4.y, logSwi5.u3) + annotation (Line(points={{202,-190},{210,-190},{210,-240},{60,-240},{60,-268}, + {78,-268}}, color={255,0,255})); + connect(logSwi5.y, yEndSta) + annotation (Line(points={{102,-260},{120,-260},{120,-220},{240,-220}}, + color={255,0,255})); + connect(nexEnaChi, enaChi.nexEnaChi) + annotation (Line(points={{-240,280},{-106,280},{-106,239},{-82,239}}, + color={255,127,0})); + connect(uStaUp, enaChi.uStaUp) + annotation (Line(points={{-240,250},{-116,250},{-116,236},{-82,236}}, + color={255,0,255})); + connect(uEnaChiWatIsoVal, enaChi.uEnaChiWatIsoVal) + annotation (Line(points={{-240,220},{-180,220},{-180,232},{-82,232}}, + color={255,0,255})); + connect(uChi, enaChi.uChi) + annotation (Line(points={{-240,190},{-150,190},{-150,228},{-82,228}}, + color={255,0,255})); + connect(lat.y, enaChi.uOnOff) annotation (Line(points={{-178,150},{-170,150},{ + -170,224},{-82,224}}, color={255,0,255})); + connect(nexDisChi, enaChi.nexDisChi) + annotation (Line(points={{-240,110},{-90,110},{-90,221},{-82,221}}, + color={255,127,0})); + connect(enaChi.yChi, yChi) + annotation (Line(points={{-58,238},{-20,238},{-20,260},{240,260}}, + color={255,0,255})); + connect(uChi, minChiWatSet.uChi) + annotation (Line(points={{-240,190},{-150,190},{-150,-86},{58,-86}}, + color={255,0,255})); + connect(nexDisChi, minChiWatSet.nexDisChi) + annotation (Line(points={{-240,110},{-180,110},{-180,-91},{58,-91}}, + color={255,127,0})); + connect(lat.y, minChiWatSet.uOnOff) annotation (Line(points={{-178,150},{-170, + 150},{-170,-97},{58,-97}}, color={255,0,255})); + connect(minChiWatSet.yChiWatMinFloSet, minBypSet.VMinChiWat_setpoint) + annotation (Line(points={{82,-90},{96,-90},{96,-112},{50,-112},{50,-214},{58, + -214}}, color={0,0,127})); + connect(con3.y, minChiWatSet.uUpsDevSta) + annotation (Line(points={{-138,-110},{36,-110},{36,-83},{58,-83}}, + color={255,0,255})); + connect(minChiWatSet.yChiWatMinFloSet, chiWatByp1.u1) + annotation (Line(points={{82,-90},{96,-90},{96,-82},{118,-82}}, + color={0,0,127})); + connect(VMinChiWat_setpoint, chiWatByp1.u3) + annotation (Line(points={{-240,-230},{112,-230},{112,-98},{118,-98}}, + color={0,0,127})); + connect(nexEnaChi, minChiWatSet.nexEnaChi) + annotation (Line(points={{-240,280},{-106,280},{-106,-89},{58,-89}}, + color={255,127,0})); + connect(enaChi.yNewChiEna, lat1.u) + annotation (Line(points={{-58,222},{-50,222},{-50,210},{-42,210}}, + color={255,0,255})); + connect(lat1.y, and4.u1) + annotation (Line(points={{-18,210},{-10,210},{-10,80},{-2,80}}, + color={255,0,255})); + connect(lat1.y, minChiWatSet.uStaUp) + annotation (Line(points={{-18,210},{-10,210},{-10,-81},{58,-81}}, + color={255,0,255})); + connect(lat1.y, logSwi5.u1) + annotation (Line(points={{-18,210},{-10,210},{-10,-252},{78,-252}}, + color={255,0,255})); + connect(logSwi5.y, pre.u) + annotation (Line(points={{102,-260},{138,-260}},color={255,0,255})); + connect(pre.y, edg1.u) + annotation (Line(points={{162,-260},{178,-260}}, color={255,0,255})); + connect(edg1.y, endStaTri) + annotation (Line(points={{202,-260},{240,-260}}, color={255,0,255})); + connect(edg1.y, lat1.clr) + annotation (Line(points={{202,-260},{210,-260},{210,-280},{-30,-280},{-30,180}, + {-50,180},{-50,204},{-42,204}}, color={255,0,255})); + connect(disChiIsoVal.yEnaChiWatIsoVal, lat2.u) + annotation (Line(points={{102,46},{120,46},{120,30},{138,30}}, + color={255,0,255})); + connect(lat2.y, and5.u2) + annotation (Line(points={{162,30},{180,30},{180,14},{-20,14},{-20,-38},{-2,-38}}, + color={255,0,255})); + connect(edg1.y, lat2.clr) + annotation (Line(points={{202,-260},{210,-260},{210,-280},{-30,-280},{-30,24}, + {138,24}}, color={255,0,255})); + connect(disHeaCon.yEnaHeaCon, lat3.u) + annotation (Line(points={{82,-4},{110,-4},{110,-40},{118,-40}}, color={255,0,255})); + connect(lat3.y, minChiWatSet.uSubCha) + annotation (Line(points={{142,-40},{160,-40},{160,-54},{40,-54},{40,-94},{58, + -94}}, color={255,0,255})); + connect(lat3.y, minBypSet.uUpsDevSta) + annotation (Line(points={{142,-40},{160,-40},{160,-54},{40,-54},{40,-202},{58, + -202}}, color={255,0,255})); + connect(con3.y, disHeaCon.uEnaPla) + annotation (Line(points={{-138,-110},{36,-110},{36,-2},{58,-2}}, + color={255,0,255})); + connect(uChiWatReq, curDisChi.u) + annotation (Line(points={{-240,70},{-142,70}}, color={255,0,255})); + connect(uConWatReq, curDisChi1.u) + annotation (Line(points={{-240,-30},{-142,-30}}, color={255,0,255})); + connect(curDisChi.y, not1.u) + annotation (Line(points={{-118,70},{-102,70}}, color={255,0,255})); + connect(curDisChi1.y, not3.u) + annotation (Line(points={{-118,-30},{-102,-30}}, color={255,0,255})); + connect(nexDisChi, intLesEquThr.u) annotation (Line(points={{-240,110},{-90,110}, + {-90,140},{18,140}}, color={255,127,0})); + connect(nexDisChi, intGreEquThr.u) annotation (Line(points={{-240,110},{-90,110}, + {-90,190},{18,190}}, color={255,127,0})); + connect(intGreEquThr.y, and2.u1) + annotation (Line(points={{42,190},{58,190}}, color={255,0,255})); + connect(intLesEquThr.y, and2.u2) annotation (Line(points={{42,140},{50,140},{50, + 182},{58,182}}, color={255,0,255})); + connect(and2.y, intSwi.u2) annotation (Line(points={{82,190},{100,190},{100,160}, + {118,160}},color={255,0,255})); + connect(nexDisChi, intSwi.u1) annotation (Line(points={{-240,110},{-90,110},{-90, + 168},{118,168}},color={255,127,0})); + connect(conInt.y, intSwi.u3) annotation (Line(points={{82,140},{110,140},{110, + 152},{118,152}}, color={255,127,0})); + connect(intSwi.y, curDisChi.index) annotation (Line(points={{142,160},{150,160}, + {150,120},{-160,120},{-160,40},{-130,40},{-130,58}}, color={255,127,0})); + connect(intSwi.y, curDisChi1.index) annotation (Line(points={{142,160},{150,160}, + {150,120},{-160,120},{-160,-46},{-130,-46},{-130,-42}}, color={255,127,0})); + connect(not1.y, and1.u2) + annotation (Line(points={{-78,70},{-62,70}}, color={255,0,255})); + connect(and1.y, and4.u2) annotation (Line(points={{-38,78},{-10,78},{-10,72},{ + -2,72}}, color={255,0,255})); + connect(not3.y, and3.u1) + annotation (Line(points={{-78,-30},{-60,-30}}, color={255,0,255})); + connect(and3.y, and5.u1) + annotation (Line(points={{-36,-30},{-2,-30}}, color={255,0,255})); + connect(and2.y, and1.u1) annotation (Line(points={{82,190},{100,190},{100,160}, + {-70,160},{-70,78},{-62,78}},color={255,0,255})); + connect(and2.y, and3.u2) annotation (Line(points={{82,190},{100,190},{100,160}, + {-70,160},{-70,-38},{-60,-38}},color={255,0,255})); + connect(minChiWatSet.yChaSet, minBypSet.uSetChaPro) annotation (Line(points={{82,-98}, + {88,-98},{88,-106},{44,-106},{44,-218},{58,-218}}, color={255,0,255})); + connect(uStaUp, minBypSet.uStaPro) annotation (Line(points={{-240,250},{-116,250}, + {-116,-206},{58,-206}}, color={255,0,255})); + connect(uStaUp, disChiIsoVal.uStaPro) annotation (Line(points={{-240,250},{-116, + 250},{-116,32},{78,32}}, color={255,0,255})); + connect(uStaUp, disHeaCon.uStaPro) annotation (Line(points={{-240,250},{-116,250}, + {-116,-10},{58,-10}}, color={255,0,255})); + connect(uOnOff, lat.u) annotation (Line(points={{-240,150},{-202,150}}, + color={255,0,255})); + connect(edg1.y, lat.clr) annotation (Line(points={{202,-260},{210,-260},{210,-280}, + {-210,-280},{-210,144},{-202,144}}, color={255,0,255})); + connect(edg.y, lat4.clr) annotation (Line(points={{-78,-170},{20,-170},{20,-136}, + {58,-136}}, color={255,0,255})); + connect(edg1.y, lat3.clr) annotation (Line(points={{202,-260},{210,-260},{210, + -280},{-30,-280},{-30,-46},{118,-46}}, color={255,0,255})); + connect(uStaUp, edg.u) annotation (Line(points={{-240,250},{-116,250},{-116,-170}, + {-102,-170}}, color={255,0,255})); + connect(uStaUp, and6.u2) annotation (Line(points={{-240,250},{-116,250},{-116, + -138},{-62,-138}}, color={255,0,255})); + connect(lat3.y, and6.u1) annotation (Line(points={{142,-40},{160,-40},{160,-54}, + {-80,-54},{-80,-130},{-62,-130}}, color={255,0,255})); + connect(and6.y, lat4.u) + annotation (Line(points={{-38,-130},{58,-130}}, color={255,0,255})); + connect(lat4.y, chiWatByp1.u2) annotation (Line(points={{82,-130},{104,-130},{ + 104,-90},{118,-90}}, color={255,0,255})); + connect(and7.y, lat5.u) + annotation (Line(points={{142,-150},{178,-150}}, color={255,0,255})); + connect(edg.y, lat5.clr) annotation (Line(points={{-78,-170},{160,-170},{160,-156}, + {178,-156}}, color={255,0,255})); + connect(lat.y, and7.u1) annotation (Line(points={{-178,150},{-170,150},{-170,-150}, + {118,-150}}, color={255,0,255})); + connect(and6.y, and7.u2) annotation (Line(points={{-38,-130},{0,-130},{0,-158}, + {118,-158}}, color={255,0,255})); + connect(chiWatByp1.y, chiWatByp.u1) annotation (Line(points={{142,-90},{150,-90}, + {150,-72},{178,-72}}, color={0,0,127})); + connect(lat5.y, chiWatByp.u2) annotation (Line(points={{202,-150},{210,-150},{ + 210,-120},{160,-120},{160,-80},{178,-80}}, color={255,0,255})); + connect(VMinChiWat_setpoint, chiWatByp.u3) annotation (Line(points={{-240,-230}, + {170,-230},{170,-88},{178,-88}}, color={0,0,127})); +annotation ( + defaultComponentName="endUp", + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-220,-300},{220,300}}), graphics={ + Rectangle( + extent={{-218,78},{218,2}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{72,72},{214,54}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Close chilled water +isolation valve"), + Rectangle( + extent={{-218,-22},{218,-58}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{100,-24},{216,-40}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Disable head +pressure control"), + Rectangle( + extent={{-218,-202},{218,-298}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-130,-100},{-12,-116}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Reset minimum +bypass setpoint"), + Rectangle( + extent={{-218,-62},{218,-198}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-148,-172},{-32,-180}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="End stage-up process"), + Rectangle( + extent={{-218,278},{218,102}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{68,238},{210,230}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Enable next chiller")}), + Icon(coordinateSystem(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={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-40,6},{40,-6}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-2,72},{2,6}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,90},{-20,72},{0,72},{20,72},{0,90}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Text( + extent={{-98,122},{-66,112}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="nexEnaChi"), + Text( + extent={{-98,104},{-76,92}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uStaUp"), + Text( + extent={{-98,86},{-46,72}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uEnaChiWatIsoVal"), + Text( + extent={{-98,62},{-84,54}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChi"), + Text( + extent={{-98,42},{-76,34}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uOnOff"), + Text( + extent={{-98,24},{-68,14}}, + textColor={255,127,0}, + pattern=LinePattern.Dash, + textString="nexDisChi"), + Text( + extent={{-98,4},{-64,-10}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChiWatReq"), + Text( + extent={{-98,-14},{-56,-26}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uChiWatIsoVal"), + Text( + extent={{-98,-34},{-64,-48}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uConWatReq"), + Text( + extent={{-98,-56},{-64,-70}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="uChiHeaCon"), + Text( + extent={{-98,-74},{-56,-86}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="VChiWat_flow"), + Text( + extent={{56,-22},{98,-34}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiWatMinSet"), + Text( + extent={{72,-62},{96,-74}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yEndSta"), + Text( + extent={{64,18},{98,4}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yChiHeaCon"), + Text( + extent={{56,58},{98,46}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiWatIsoVal"), + Text( + extent={{82,96},{96,88}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="yChi"), + Text( + extent={{-98,-90},{-30,-100}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="VMinChiWat_setpoint"), + Text( + extent={{68,-82},{96,-96}}, + textColor={255,0,255}, + pattern=LinePattern.Dash, + textString="endStaTri")}), +Documentation(info=" +

                      +Block that controls devices at the ending step of chiller staging up process. +This development is based on ASHRAE Guideline 36-2021, +section 5.20.4.16, item f and g. These sections specify the controls of +devices at the ending step of staging up process. +

                      +

                      +For the stage-up process that does not require a smaller chiller being disabled +and a larger chiller being enabled (uOnOff=false), +

                      + +

                      +For any stage change during which a smaller chiller is diabled and a larger chiller +is enabled (uOnOff=true), after starting the next stage chiller +specified above, do following: +

                      +
                        +
                      1. +Wait 5 minutes (proOnTim) for the newly enabled chiller to prove that +is operating correctly, then shut off the small chiller (nexDisChi). +This is implemented in block enaChi. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.EnableChiller +for more decriptions. +
                      2. +
                      3. +When the controller of the smaller chiller being shut off indicates no request +for chilled water flow (uChiWatReq=false), slowly close the chiller's +chilled water isolation valve to avoid a sudden change in flow through other +operating chillers. +This is implemented in block disChiIsoVal. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.CHWIsoVal +for more decriptions. +
                      4. +
                      5. +When the controller of the smaller chiller being shut off indicates no request for +condenser water flow (uConWatReq=false), disable the chiller's head +pressure control loop. +This is implemented in block disHeaCon. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.HeadControl +for more decriptions. +
                      6. +
                      7. +Change the minimum flow bypass setpoint to that appropriate for the new stage. +This is implemented in block minChiWatSet. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.FlowSetpoint +for more decriptions. +
                      8. +
                      9. +Block minBypSet will then check if the new chilled water flow setpoint +has been achieved. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ResetMinBypass +for more decriptions. +
                      10. +
                      +", revisions=" +
                        +
                      • +September 22, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end UpEnd; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/CHWIsoVal.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/CHWIsoVal.mo new file mode 100644 index 00000000000..fd0a996e131 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/CHWIsoVal.mo @@ -0,0 +1,197 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation; +model CHWIsoVal + "Validate isolation valve enable and disable sequence" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.CHWIsoVal + enaChiIsoVal( + final nChi=2, + final chaChiWatIsoTim=300, + final iniValPos=0, + final endValPos=1) "Enable isolation valve" + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.CHWIsoVal + disChiIsoVal( + final nChi=2, + final chaChiWatIsoTim=300, + final iniValPos=1, + final endValPos=0) "Disable isolation valve" + annotation (Placement(transformation(extent={{120,-10},{140,10}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.15, + final period=3600) "Boolean pulse" + annotation (Placement(transformation(extent={{-200,-80},{-180,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Not staCha "Stage change command" + annotation (Placement(transformation(extent={{-160,-80},{-140,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.20, + final period=3600) "Boolean pulse" + annotation (Placement(transformation(extent={{-200,-40},{-180,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Not upsDevSta "Upstream device status" + annotation (Placement(transformation(extent={{-160,-40},{-140,-20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant valOne( + final k=1) "Valve one position, fully open" + annotation (Placement(transformation(extent={{-200,10},{-180,30}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant enaChi( + final k=2) "Enabling chiller index" + annotation (Placement(transformation(extent={{-160,70},{-140,90}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol( + final samplePeriod=2) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant valOne1( + final k=1) + "Valve one position, fully open" + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant disChi( + final k=2) + "Disabling chiller index" + annotation (Placement(transformation(extent={{60,70},{80,90}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol1( + final samplePeriod=2) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{160,-20},{180,0}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi + "Second chiller isolation valve position" + annotation (Placement(transformation(extent={{160,30},{180,50}}))); + +equation + connect(booPul.y, staCha.u) + annotation (Line(points={{-178,-70},{-162,-70}}, color={255,0,255})); + connect(booPul1.y, upsDevSta.u) + annotation (Line(points={{-178,-30},{-162,-30}}, color={255,0,255})); + connect(enaChi.y, enaChiIsoVal.nexChaChi) + annotation (Line(points={{-138,80},{-120,80},{-120,18},{-102,18}}, + color={255,127,0})); + connect(valOne.y, enaChiIsoVal.uChiWatIsoVal[1]) + annotation (Line(points={{-178,20},{-160,20},{-160,14.5},{-102,14.5}}, + color={0,0,127})); + connect(upsDevSta.y, enaChiIsoVal.uUpsDevSta) + annotation (Line(points={{-138,-30},{-120,-30},{-120,5},{-102,5}}, + color={255,0,255})); + connect(staCha.y, enaChiIsoVal.uStaPro) annotation (Line(points={{-138,-70},{-110, + -70},{-110,2},{-102,2}}, color={255,0,255})); + connect(enaChiIsoVal.yChiWatIsoVal[2], zerOrdHol.u) + annotation (Line(points={{-78,4.5},{-70,4.5},{-70,0},{-62,0}}, color={0,0,127})); + connect(zerOrdHol.y, enaChiIsoVal.uChiWatIsoVal[2]) + annotation (Line(points={{-38,0},{-20,0},{-20,60},{-140,60},{-140,15.5},{-102, + 15.5}}, color={0,0,127})); + connect(disChi.y, disChiIsoVal.nexChaChi) + annotation (Line(points={{82,80},{110,80},{110,8},{118,8}}, + color={255,127,0})); + connect(valOne1.y, disChiIsoVal.uChiWatIsoVal[1]) + annotation (Line(points={{42,20},{60,20},{60,4.5},{118,4.5}}, color={0,0,127})); + connect(disChiIsoVal.yChiWatIsoVal[2], zerOrdHol1.u) + annotation (Line(points={{142,-5.5},{150,-5.5},{150,-10},{158,-10}}, + color={0,0,127})); + connect(valOne1.y, swi.u3) + annotation (Line(points={{42,20},{60,20},{60,32},{158,32}}, color={0,0,127})); + connect(zerOrdHol1.y, swi.u1) + annotation (Line(points={{182,-10},{200,-10},{200,20},{150,20},{150,48}, + {158,48}}, color={0,0,127})); + connect(swi.y, disChiIsoVal.uChiWatIsoVal[2]) + annotation (Line(points={{182,40},{200,40},{200,60},{80,60},{80,5.5},{118,5.5}}, + color={0,0,127})); + connect(upsDevSta.y, disChiIsoVal.uUpsDevSta) + annotation (Line(points={{-138,-30},{100,-30},{100,-5},{118,-5}}, + color={255,0,255})); + connect(staCha.y, disChiIsoVal.uStaPro) annotation (Line(points={{-138,-70},{110, + -70},{110,-8},{118,-8}}, color={255,0,255})); + connect(upsDevSta.y, swi.u2) + annotation (Line(points={{-138,-30},{100,-30},{100,40},{158,40}}, + color={255,0,255})); + +annotation ( + experiment(StopTime=3600, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/CHWIsoVal.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.CHWIsoVal. +

                      +

                      +It has two instances enaChiIsoVal and disChiIsoVal that +shows the process of controlling chiller chilled water isolation valves during the +chiller staging process. +

                      +

                      +Note that when using the subsequences, +

                      +
                        +
                      • +specify the parameter iniValPos=0 and endValPos=1 +if instantiates the class in the staging up process controller, and +
                      • +
                      • +specify the parameter iniValPos=1 and endValPos=0 +if instantiates the class in the staging down process controller. +
                      • +
                      +

                      +For instance enaChiIsoVal, +

                      +
                        +
                      • +Before 540 seconds, the plant is not in staging up process. The isolation value 1 +is fully open (yChiWatIsoVal[1]=1) and the valve 2 is closed +(yChiWatIsoVal[2]=0). +
                      • +
                      • +Between 540 seconds and 720 seconds, the plant is in staging process. However, the +process is not yet requiring the chilled water isolation values changing their +status, as the uUpsDevSta=false. +
                      • +
                      • +Since 720 seconds, the plant staging process requires the isolation valve changing +their status (uUpsDevSta=true), and the chiller 2 is being enabled. +Thus the process starts opening the isolation valve 2. As specified by +chaChiWatIsoTim=300 seconds, it takes 5 minutes to fully open isolation +valve 2 at 1020 seconds, and yEnaChiWatIsoVal becomes true. +
                      • +
                      +

                      +For instance disChiIsoVal, +

                      +
                        +
                      • +Before 540 seconds, the plant is not in staging down process. Both the isolation +value 1 and 2 are fully open (yChiWatIsoVal[1]=1, +yChiWatIsoVal[2]=1). +
                      • +
                      • +Between 540 seconds and 720 seconds, the plant is in staging process. However, +the process is not yet requiring the chilled water isolation values changing their +status, as the uUpsDevSta=false. +
                      • +
                      • +Since 720 seconds, the plant staging process requires the isolation valve changing +their status (uUpsDevSta=true), and the chiller 2 is being disabled. +Thus the process starts closing the isolation valve 2. As specified by +chaChiWatIsoTim=300 seconds, it takes 5 minutes to fully close isolation +valve 2 at 1020 seconds, and yEnaChiWatIsoVal becomes true. +
                      • +
                      +", revisions=" +
                        +
                      • +September 24, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-220,-120},{220,120}}))); +end CHWIsoVal; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DisableChiller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DisableChiller.mo new file mode 100644 index 00000000000..32dff437abd --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DisableChiller.mo @@ -0,0 +1,217 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation; +model DisableChiller + "Validate sequence of disabling chiller during stage-down process" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.DisableChiller + chiOnOff( + final nChi=3, + final proOnTim=300) "Disable a chiller and enable another chiller" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.DisableChiller + chiOff( + final nChi=3, + final proOnTim=300) "Disable chiller" + annotation (Placement(transformation(extent={{102,70},{122,90}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.15, + final period=3600) "Boolean pulse" + annotation (Placement(transformation(extent={{-200,50},{-180,70}}))); + Buildings.Controls.OBC.CDL.Logical.Not staCha "Stage change command" + annotation (Placement(transformation(extent={{-160,50},{-140,70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.20, + final period=3600) "Boolean pulse" + annotation (Placement(transformation(extent={{-200,10},{-180,30}}))); + Buildings.Controls.OBC.CDL.Logical.Not upsDevSta "Upstream device status" + annotation (Placement(transformation(extent={{-160,10},{-140,30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiOne( + final k=true) "Operating chiller one" + annotation (Placement(transformation(extent={{-160,-30},{-140,-10}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant enaChi(final k=3) + "Enabling chiller index" + annotation (Placement(transformation(extent={{-160,90},{-140,110}}))); + Buildings.Controls.OBC.CDL.Logical.Switch chiTwo "Chiller two status" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant onOff(final k=true) + "Requires one chiller on and another chiller off" + annotation (Placement(transformation(extent={{-160,-110},{-140,-90}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant disChi( + final k=2) "Disabling chiller index" + annotation (Placement(transformation(extent={{-160,-70},{-140,-50}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant enaChi1(final k=0) + "No Chiller needs to be enabled" + annotation (Placement(transformation(extent={{20,90},{40,110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant noOnOff(final k=false) + "Does not requires one chiller on and another chiller off" + annotation (Placement(transformation(extent={{20,-110},{40,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Switch chiTwo1 "Chiller two status" + annotation (Placement(transformation(extent={{140,-50},{160,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant noUpDev(final k=false) + "Constant false" + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiStaRet[2] + "Chiller status return value" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiStaRet1[2] + "Chiller status return value" + annotation (Placement(transformation(extent={{140,70},{160,90}}))); + +equation + connect(booPul.y, staCha.u) + annotation (Line(points={{-178,60},{-162,60}}, color={255,0,255})); + connect(booPul1.y, upsDevSta.u) + annotation (Line(points={{-178,20},{-162,20}}, color={255,0,255})); + connect(enaChi.y, chiOnOff.nexEnaChi) + annotation (Line(points={{-138,100},{-100,100},{-100,89},{-82,89}}, + color={255,127,0})); + connect(staCha.y, chiOnOff.uStaDow) + annotation (Line(points={{-138,60},{-124,60},{-124,86},{-82,86}}, + color={255,0,255})); + connect(upsDevSta.y, chiOnOff.uEnaChiWatIsoVal) + annotation (Line(points={{-138,20},{-116,20},{-116,82},{-82,82}}, + color={255,0,255})); + connect(chiOne.y, chiOnOff.uChi[1]) + annotation (Line(points={{-138,-20},{-108,-20},{-108,77.3333},{-82,77.3333}}, + color={255,0,255})); + connect(upsDevSta.y, chiTwo.u2) + annotation (Line(points={{-138,20},{-116,20},{-116,-40},{-42,-40}}, + color={255,0,255})); + connect(chiOne.y, chiTwo.u3) + annotation (Line(points={{-138,-20},{-108,-20},{-108,-48},{-42,-48}}, + color={255,0,255})); + connect(chiOnOff.yChi[2], chiStaRet[1].u) + annotation (Line(points={{-58,80},{-42,80}}, color={255,0,255})); + connect(chiOnOff.yChi[3], chiStaRet[2].u) annotation (Line(points={{-58, + 80.6667},{-50,80.6667},{-50,80},{-42,80}}, color={255,0,255})); + connect(chiStaRet[1].y, chiTwo.u1) annotation (Line(points={{-18,80},{-10,80}, + {-10,0},{-50,0},{-50,-32},{-42,-32}}, color={255,0,255})); + connect(chiStaRet[2].y, chiOnOff.uChi[3]) annotation (Line(points={{-18,80},{ + -10,80},{-10,40},{-112,40},{-112,78.6667},{-82,78.6667}}, color={255, + 0,255})); + connect(chiTwo.y, chiOnOff.uChi[2]) + annotation (Line(points={{-18,-40},{-10,-40},{-10,-70},{-120,-70},{-120,78}, + {-82,78}}, color={255,0,255})); + connect(disChi.y, chiOnOff.nexDisChi) + annotation (Line(points={{-138,-60},{-104,-60},{-104,75},{-82,75}}, + color={255,127,0})); + connect(onOff.y, chiOnOff.uOnOff) + annotation (Line(points={{-138,-100},{-100,-100},{-100,71},{-82,71}}, + color={255,0,255})); + connect(enaChi1.y, chiOff.nexEnaChi) + annotation (Line(points={{42,100},{80,100},{80,89},{100,89}}, + color={255,127,0})); + connect(staCha.y, chiOff.uStaDow) + annotation (Line(points={{-138,60},{56,60},{56,86},{100,86}}, + color={255,0,255})); + connect(chiOne.y, chiOff.uChi[1]) + annotation (Line(points={{-138,-20},{64,-20},{64,77.3333},{100,77.3333}}, + color={255,0,255})); + connect(disChi.y, chiOff.nexDisChi) + annotation (Line(points={{-138,-60},{76,-60},{76,75},{100,75}}, + color={255,127,0})); + connect(noOnOff.y, chiOff.uOnOff) + annotation (Line(points={{42,-100},{80,-100},{80,71},{100,71}}, + color={255,0,255})); + connect(chiOff.yChi[2], chiStaRet1[1].u) + annotation (Line(points={{124,80},{138,80}}, color={255,0,255})); + connect(chiOff.yChi[3], chiStaRet1[2].u) annotation (Line(points={{124, + 80.6667},{132,80.6667},{132,80},{138,80}}, color={255,0,255})); + connect(staCha.y, chiTwo1.u2) + annotation (Line(points={{-138,60},{56,60},{56,-40},{138,-40}}, + color={255,0,255})); + connect(chiOne.y, chiTwo1.u3) + annotation (Line(points={{-138,-20},{64,-20},{64,-48},{138,-48}}, + color={255,0,255})); + connect(chiStaRet1[1].y, chiTwo1.u1) annotation (Line(points={{162,80},{170, + 80},{170,-20},{130,-20},{130,-32},{138,-32}}, color={255,0,255})); + connect(chiTwo1.y, chiOff.uChi[2]) + annotation (Line(points={{162,-40},{170,-40},{170,-70},{68,-70}, + {68,78},{100,78}}, color={255,0,255})); + connect(chiStaRet1[2].y, chiOff.uChi[3]) annotation (Line(points={{162,80},{ + 170,80},{170,40},{72,40},{72,78.6667},{100,78.6667}}, color={255,0, + 255})); + connect(noUpDev.y, chiOff.uEnaChiWatIsoVal) + annotation (Line(points={{42,20},{60,20},{60,82},{100,82}}, + color={255,0,255})); + +annotation ( + experiment(StopTime=3600, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DisableChiller.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.DisableChiller. +It shows the substeps of disabling chillers when the plant is in staging down process. +

                      +

                      +The instance chiOnOff shows how to enable and disable chillers when +the staging down process requires one chiller being enabled and another chiller +being disabled. The instance chiOff shows how the chiller being +disable when the staging down process does not require other chiller being enabled. +

                      +

                      +For the instance chiOnOff, initially the plant has chiller 1 and 2 +operating. When staging down, it requires chiller 3 being enabled and chiller 2 +being disabled. +

                      +
                        +
                      • +Before 540 seconds, it does not require the plant staging down (uStaDow=false). +The chiller 1 and 2 are operating, and chiller 3 is not operating. +
                      • +
                      • +At period between 540 seconds and 720 seconds, the plant is in staing down process. +However, the process is not yet requiring the chiller being enabled or disabled, +as uEnaChiWatIsoVal=false. +
                      • +
                      • +At 720 seconds, the staging down process requires chiller 2 being diabled and chiller +3 being enabled (nexEnaChi=3, nexDisChi=2). The chiller +3 becomes enabled. +
                      • +
                      • +At 1020 seconds, which is 5 mintes after enabling chiller 3 (specified by +proOnTim), chiller 2 becomes disabled and the chiller demand limit +can be released (yRelDemLim=true). +
                      • +
                      +

                      +For the instance chiOff, initially the plant has chiller 1 and 2 +operating. When staging down, it disables chiller 2. +

                      +
                        +
                      • +Before 540 seconds, it does not require the plant staging down +(uStaDow=false). The chiller 1 and 2 are operating, and chiller 3 +is not operating. +
                      • +
                      • +At 540 seconds, the plant starts staging down (uStaDow=true). +The chiller 2 is disabled immediately. +
                      • +
                      +", revisions=" +
                        +
                      • +September 24, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-220,-120},{220,120}}))); +end DisableChiller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithOn.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithOn.mo new file mode 100644 index 00000000000..4d0c6ca8787 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithOn.mo @@ -0,0 +1,354 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation; +model DownStartWithOn + "Validate sequence of starting the staging down process which requires enabling a chiller" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.DownStart + staStaDow1( + final nChi=2, + need_reduceChillerDemand=true, + final byPasSetTim=300, + final minFloSet={1,1}, + final maxFloSet={1.5,1.5}, + final chaChiWatIsoTim=300) + "Chiller stage down when the process does require one chiller on and another chiller off" + annotation (Placement(transformation(extent={{0,130},{20,150}}))); + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler demLimRel + "To indicate if the demand limit has been released" + annotation (Placement(transformation(extent={{20,190},{40,210}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.15, + final period=1200) "Boolean pulse" + annotation (Placement(transformation(extent={{-180,210},{-160,230}}))); + Buildings.Controls.OBC.CDL.Logical.Not staDow1 "Stage down command" + annotation (Placement(transformation(extent={{-140,210},{-120,230}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Logical switch" + annotation (Placement(transformation(extent={{-100,-250},{-80,-230}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerLoa( + final k=0) "Zero load" + annotation (Placement(transformation(extent={{-180,100},{-160,120}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yOpeParLoaRatMin1(final k=0.7) + "Minimum cycling operative partial load ratio" + annotation (Placement(transformation(extent={{-180,170},{-160,190}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant onOff1( + final k=true) "Chiller on-off command" + annotation (Placement(transformation(extent={{-180,-30},{-160,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiFlo1( + final k=2) "Chilled water flow" + annotation (Placement(transformation(extent={{-180,10},{-160,30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant nexDisChi1( + final k=2) "Next disable chiller" + annotation (Placement(transformation(extent={{-180,-230},{-160,-210}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer2( + final k=0) "Constant zero" + annotation (Placement(transformation(extent={{-180,-270},{-160,-250}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real input to integer output" + annotation (Placement(transformation(extent={{-60,-250},{-40,-230}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiOneSta( + final pre_u_start=false) "Break algebraic loop" + annotation (Placement(transformation(extent={{80,50},{100,70}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiOneLoa "Chiller one" + annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiLoa2(final k=20) + "Chiller load" + annotation (Placement(transformation(extent={{-180,60},{-160,80}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiTwoLoa "Chiller two load" + annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiTwoSta( + final pre_u_start=true) "Break algebraic loop" + annotation (Placement(transformation(extent={{80,20},{100,40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant nexEnaChi3( + final k=1) "Next enable chiller" + annotation (Placement(transformation(extent={{-180,-70},{-160,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer4(final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{-180,-110},{-160,-90}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "Logical switch" + annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 + "Convert real input to integer output" + annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant fulOpe( + final k=1) "Full open" + annotation (Placement(transformation(extent={{-180,-190},{-160,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerOpe( + final k=0) "Zero open" + annotation (Placement(transformation(extent={{-180,-150},{-160,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiIsoVal2 + "Chilled water isolation valve one" + annotation (Placement(transformation(extent={{-100,-190},{-80,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiIsoVal1 + "Chilled water isolation valve one" + annotation (Placement(transformation(extent={{-100,-150},{-80,-130}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol( + final samplePeriod=10) "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{60,150},{80,170}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol1[2]( + final samplePeriod=fill(10,2)) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{120,-120},{140,-100}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiLoa1[2] "Chiller load" + annotation (Placement(transformation(extent={{120,150},{140,170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer3[2]( + final k=fill(0,2)) "Constant zero" + annotation (Placement(transformation(extent={{60,100},{80,120}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiLoa3(final k=20) + "Chiller load" + annotation (Placement(transformation(extent={{60,190},{80,210}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol2( + final samplePeriod=10) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{160,190},{180,210}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiOneHea( + final pre_u_start=false) "Break algebraic loop" + annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiTwoHea( + final pre_u_start=true) "Break algebraic loop" + annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( + final k=1) "Constant one" + annotation (Placement(transformation(extent={{-20,190},{0,210}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + final width=0.95, + final period=1200) "Boolean pulse" + annotation (Placement(transformation(extent={{-180,130},{-160,150}}))); + Buildings.Controls.OBC.CDL.Logical.Not staDow2 "Stage down command" + annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol3( + final samplePeriod=10) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{160,140},{180,160}}))); + +equation + connect(booPul1.y, staDow1.u) + annotation (Line(points={{-158,220},{-142,220}}, color={255,0,255})); + connect(staDow1.y, swi3.u2) + annotation (Line(points={{-118,220},{-110,220},{-110,-240},{-102,-240}}, + color={255,0,255})); + connect(nexDisChi1.y, swi3.u1) + annotation (Line(points={{-158,-220},{-140,-220},{-140,-232},{-102,-232}}, + color={0,0,127})); + connect(zer2.y, swi3.u3) + annotation (Line(points={{-158,-260},{-140,-260},{-140,-248},{-102,-248}}, + color={0,0,127})); + connect(swi3.y, reaToInt1.u) + annotation (Line(points={{-78,-240},{-62,-240}}, color={0,0,127})); + connect(staDow1.y, chiOneLoa.u2) + annotation (Line(points={{-118,220},{-110,220},{-110,110},{-102,110}}, + color={255,0,255})); + connect(zerLoa.y, chiOneLoa.u3) + annotation (Line(points={{-158,110},{-140,110},{-140,102},{-102,102}}, + color={0,0,127})); + connect(staDow1.y, chiTwoLoa.u2) + annotation (Line(points={{-118,220},{-110,220},{-110,70},{-102,70}}, + color={255,0,255})); + connect(chiLoa2.y, chiTwoLoa.u3) + annotation (Line(points={{-158,70},{-140,70},{-140,62},{-102,62}}, + color={0,0,127})); + connect(staStaDow1.yChi[1], chiOneSta.u) + annotation (Line(points={{22,133.5},{52,133.5},{52,60},{78,60}}, + color={255,0,255})); + connect(staStaDow1.yChi[2], chiTwoSta.u) + annotation (Line(points={{22,134.5},{48,134.5},{48,30},{78,30}}, + color={255,0,255})); + connect(staDow1.y, staStaDow1.uStaDow) + annotation (Line(points={{-118,220},{-110,220},{-110,150},{-2,150}}, + color={255,0,255})); + connect(yOpeParLoaRatMin1.y, staStaDow1.yOpeParLoaRatMin) + annotation (Line(points={{-158,180},{-100,180},{-100,148},{-2,148}}, + color={0,0,127})); + connect(chiOneLoa.y, staStaDow1.uChiLoa[1]) + annotation (Line(points={{-78,110},{-56,110},{-56,145.5},{-2,145.5}}, + color={0,0,127})); + connect(chiTwoLoa.y, staStaDow1.uChiLoa[2]) + annotation (Line(points={{-78,70},{-60,70},{-60,146.5},{-2,146.5}}, + color={0,0,127})); + connect(chiOneSta.y, staStaDow1.uChi[1]) + annotation (Line(points={{102,60},{180,60},{180,0},{-52,0},{-52,143.5},{-2,143.5}}, + color={255,0,255})); + connect(chiTwoSta.y, staStaDow1.uChi[2]) + annotation (Line(points={{102,30},{110,30},{110,4},{-48,4},{-48,144.5},{-2,144.5}}, + color={255,0,255})); + connect(onOff1.y, staStaDow1.uOnOff) + annotation (Line(points={{-158,-20},{-40,-20},{-40,138},{-2,138}}, + color={255,0,255})); + connect(zer4.y, swi4.u3) + annotation (Line(points={{-158,-100},{-140,-100},{-140,-88},{-102,-88}}, + color={0,0,127})); + connect(nexEnaChi3.y, swi4.u1) + annotation (Line(points={{-158,-60},{-140,-60},{-140,-72},{-102,-72}}, + color={0,0,127})); + connect(swi4.y, reaToInt2.u) + annotation (Line(points={{-78,-80},{-62,-80}}, color={0,0,127})); + connect(staDow1.y, swi4.u2) + annotation (Line(points={{-118,220},{-110,220},{-110,-80},{-102,-80}}, + color={255,0,255})); + connect(reaToInt2.y, staStaDow1.nexEnaChi) + annotation (Line(points={{-38,-80},{-36,-80},{-36,136},{-2,136}}, + color={255,127,0})); + connect(fulOpe.y, chiIsoVal2.u3) + annotation (Line(points={{-158,-180},{-140,-180},{-140,-188},{-102,-188}}, + color={0,0,127})); + connect(zerOpe.y, chiIsoVal1.u3) + annotation (Line(points={{-158,-140},{-140,-140},{-140,-148},{-102,-148}}, + color={0,0,127})); + connect(staDow1.y, chiIsoVal1.u2) + annotation (Line(points={{-118,220},{-110,220},{-110,-140},{-102,-140}}, + color={255,0,255})); + connect(staDow1.y, chiIsoVal2.u2) + annotation (Line(points={{-118,220},{-110,220},{-110,-180},{-102,-180}}, + color={255,0,255})); + connect(staStaDow1.yChiWatIsoVal, zerOrdHol1.u) + annotation (Line(points={{22,138},{44,138},{44,-110},{118,-110}}, + color={0,0,127})); + connect(zerOrdHol1[1].y, chiIsoVal1.u1) + annotation (Line(points={{142,-110},{160,-110},{160,-160},{-120,-160}, + {-120,-132},{-102,-132}}, color={0,0,127})); + connect(zerOrdHol1[2].y, chiIsoVal2.u1) + annotation (Line(points={{142,-110},{160,-110},{160,-200},{-120,-200}, + {-120,-172},{-102,-172}}, color={0,0,127})); + connect(chiIsoVal1.y, staStaDow1.uChiWatIsoVal[1]) + annotation (Line(points={{-78,-140},{-24,-140},{-24,131.5},{-2,131.5}}, + color={0,0,127})); + connect(chiIsoVal2.y, staStaDow1.uChiWatIsoVal[2]) + annotation (Line(points={{-78,-180},{-20,-180},{-20,132.5},{-2,132.5}}, + color={0,0,127})); + connect(reaToInt1.y, staStaDow1.nexDisChi) + annotation (Line(points={{-38,-240},{-16,-240},{-16,130},{-2,130}}, + color={255,127,0})); + connect(chiOneSta.y, chiLoa1[1].u2) + annotation (Line(points={{102,60},{180,60},{180,130},{110,130},{110,160}, + {118,160}}, color={255,0,255})); + connect(chiTwoSta.y, chiLoa1[2].u2) + annotation (Line(points={{102,30},{110,30},{110,160},{118,160}}, + color={255,0,255})); + connect(zer3.y, chiLoa1.u3) + annotation (Line(points={{82,110},{100,110},{100,152},{118,152}}, + color={0,0,127})); + connect(staStaDow1.yChiDem[2], zerOrdHol.u) + annotation (Line(points={{22,149.5},{52,149.5},{52,160},{58,160}}, + color={0,0,127})); + connect(zerOrdHol.y, chiLoa1[2].u1) + annotation (Line(points={{82,160},{100,160},{100,168},{118,168}}, + color={0,0,127})); + connect(chiLoa3.y, chiLoa1[1].u1) + annotation (Line(points={{82,200},{100,200},{100,168},{118,168}}, + color={0,0,127})); + connect(chiLoa1[1].y, zerOrdHol2.u) + annotation (Line(points={{142,160},{150,160},{150,200},{158,200}}, + color={0,0,127})); + connect(chiLoa1[2].y, chiTwoLoa.u1) + annotation (Line(points={{142,160},{150,160},{150,10},{-120,10},{-120,78}, + {-102,78}}, color={0,0,127})); + connect(zerOrdHol2.y, chiOneLoa.u1) + annotation (Line(points={{182,200},{190,200},{190,90},{-120,90},{-120,118}, + {-102,118}}, color={0,0,127})); + connect(staStaDow1.yChiHeaCon[1], chiOneHea.u) + annotation (Line(points={{22,141.5},{36,141.5},{36,-20},{58,-20}}, + color={255,0,255})); + connect(staStaDow1.yChiHeaCon[2], chiTwoHea.u) + annotation (Line(points={{22,142.5},{40,142.5},{40,-50},{58,-50}}, + color={255,0,255})); + connect(chiOneHea.y, staStaDow1.uChiHeaCon[1]) + annotation (Line(points={{82,-20},{90,-20},{90,-36},{-32,-36},{-32,133.5},{-2, + 133.5}}, color={255,0,255})); + connect(chiTwoHea.y, staStaDow1.uChiHeaCon[2]) + annotation (Line(points={{82,-50},{90,-50},{90,-70},{-28,-70},{-28,134.5},{-2, + 134.5}},color={255,0,255})); + connect(one.y, demLimRel.u) + annotation (Line(points={{2,200},{18,200}}, color={0,0,127})); + connect(staStaDow1.yReaDemLim, demLimRel.trigger) + annotation (Line(points={{22,131},{30,131},{30,188}}, color={255,0,255})); + connect(booPul2.y, staDow2.u) + annotation (Line(points={{-158,140},{-142,140}}, color={255,0,255})); + connect(staDow2.y, staStaDow1.clr) + annotation (Line(points={{-118,140},{-2,140}}, + color={255,0,255})); + connect(staStaDow1.yChiWatMinFloSet, zerOrdHol3.u) annotation (Line(points={{22, + 146},{154,146},{154,150},{158,150}}, color={0,0,127})); + connect(zerOrdHol3.y, staStaDow1.VChiWat_flow) annotation (Line(points={{182,150}, + {196,150},{196,180},{-20,180},{-20,142},{-2,142}}, color={0,0,127})); +annotation ( + experiment(StopTime=1200, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithOn.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.DownStart. +It shows the begining steps when the plant starts staging down. In this example, +the staging down process requires enabling one chiller and disabling another chiller. +

                      +

                      +It stages from stage 2, which only has larger chiller enabled (chiller 2), down to +stage 1 which only has smaller chiller enabled (chiller 1). +

                      +
                        +
                      • +The staging process begins at 180 seconds. Before the moment, the chiller 1 is +disabled and the chiller 2 is enabled. +
                      • +
                      • +Since 180 seconds, the operating chiller load is reduced from 20 A to 15 A (75% +of command load). +
                      • +
                      • +From 180 seconds to 480 seconds, the minimum flow setpoint (yChiWatMinFlowSet) +changes from 1 m3/s to 2 m3/s, which are the minimal flow setpoints for 1 chiller +operation and 2 chillers operation. +
                      • +
                      • +After the minimum chilled water flow setpoint being changed at 480 seconds, the +head pressure control for the chiller 1 becomes enabled +(yChiHeaCon[1]=true). +
                      • +
                      • +After 30 seconds at the 510 seconds, the isolation valve of chiller 1 starts +open and becomes fully open at 810 seconds. +
                      • +
                      • +At 810 seconds, the chiller 1 becomes enabled. +
                      • +
                      • +After 300 seconds at the 1110 seconds, the chiller 2 becomes disabled. The chiller +demand limit is released and the minimum chiller water flow setpoint then changes +to the one for only chiller 1 operating. +
                      • +
                      +", revisions=" +
                        +
                      • +September 26, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-200,-300},{200,300}}), + graphics={ + Text( + extent={{-176,264},{14,248}}, + textColor={0,0,127}, + textString="to stage 1 which only has small chiller enabled (chiller 1)."), + Text( + extent={{-174,276},{14,266}}, + textColor={0,0,127}, + textString="from stage 2 which only has large chiller enabled (chiller 2), "), + Text( + extent={{-184,288},{-136,280}}, + textColor={0,0,127}, + textString="Stage down:")})); +end DownStartWithOn; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithoutOn.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithoutOn.mo new file mode 100644 index 00000000000..12176c600d3 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithoutOn.mo @@ -0,0 +1,218 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation; +model DownStartWithoutOn + "Validate sequence of starting the staging down process which does not require enabling a chiller" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.DownStart + staStaDow( + final nChi=2, + need_reduceChillerDemand=true, + final byPasSetTim=300, + final minFloSet={1,1}, + final maxFloSet={1.5,1.5}, + final chaChiWatIsoTim=300) + "Chiller stage down when the process does not require one chiller on and another chiller off" + annotation (Placement(transformation(extent={{60,190},{80,210}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.15, + final period=1200) "Boolean pulse" + annotation (Placement(transformation(extent={{-120,210},{-100,230}}))); + Buildings.Controls.OBC.CDL.Logical.Not staDow "Stage down command" + annotation (Placement(transformation(extent={{-80,210},{-60,230}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiOn[2]( + final k=fill(true,2)) + "Operating chiller one" + annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{-40,-250},{-20,-230}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiLoa[2]( + final k=fill(1000,2)) "Chiller load" + annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant nexEnaChi( + final k=0) "Next enabling chiller" + annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yOpeParLoaRatMin( + final k=0.7) + "Minimum cycling operative partial load ratio" + annotation (Placement(transformation(extent={{-120,170},{-100,190}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant onOff( + final k=false) "Chiller on-off command" + annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiFlo( + final k=2) "Chilled water flow" + annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiHea[2]( + final k=fill(true,2)) + "Chiller head pressure control" + annotation (Placement(transformation(extent={{-120,-150},{-100,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiIsoVal[2]( + final k=fill(1,2)) "Chilled water isolation valve" + annotation (Placement(transformation(extent={{-120,-190},{-100,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant nexDisChi( + final k=2) "Next disable chiller" + annotation (Placement(transformation(extent={{-120,-230},{-100,-210}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( + final k=0) "Constant zero" + annotation (Placement(transformation(extent={{-120,-270},{-100,-250}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1[2]( + final k=fill(0,2)) "Constant zero" + annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant fal[2]( + final k=fill(false,2)) "Constant false" + annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real input to integer output" + annotation (Placement(transformation(extent={{0,-250},{20,-230}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiStaRet[2]( + final pre_u_start=fill(true, 2)) + "Chiller status return value" + annotation (Placement(transformation(extent={{100,170},{120,190}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi[2] "Logical switch" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1[2] "Logical switch" + annotation (Placement(transformation(extent={{-40,130},{-20,150}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + final width=0.95, + final period=1200) "Boolean pulse" + annotation (Placement(transformation(extent={{60,90},{80,110}}))); + Buildings.Controls.OBC.CDL.Logical.Not staDow2 + "Stage down command" + annotation (Placement(transformation(extent={{100,90},{120,110}}))); + +equation + connect(booPul.y,staDow. u) + annotation (Line(points={{-98,220},{-82,220}}, color={255,0,255})); + connect(staDow.y, swi.u2) + annotation (Line(points={{-58,220},{-50,220},{-50,-240},{-42,-240}}, + color={255,0,255})); + connect(nexDisChi.y, swi.u1) + annotation (Line(points={{-98,-220},{-60,-220},{-60,-232},{-42,-232}}, + color={0,0,127})); + connect(zer.y, swi.u3) + annotation (Line(points={{-98,-260},{-60,-260},{-60,-248},{-42,-248}}, + color={0,0,127})); + connect(staDow.y, staStaDow.uStaDow) + annotation (Line(points={{-58,220},{-50,220},{-50,210},{58,210}}, + color={255,0,255})); + connect(yOpeParLoaRatMin.y, staStaDow.yOpeParLoaRatMin) + annotation (Line(points={{-98,180},{12,180},{12,208},{58,208}}, + color={0,0,127})); + connect(chiFlo.y, staStaDow.VChiWat_flow) + annotation (Line(points={{-98,-20},{24,-20},{24,202},{58,202}}, + color={0,0,127})); + connect(onOff.y, staStaDow.uOnOff) + annotation (Line(points={{-98,-60},{32,-60},{32,198},{58,198}}, + color={255,0,255})); + connect(nexEnaChi.y, staStaDow.nexEnaChi) + annotation (Line(points={{-98,-100},{36,-100},{36,196},{58,196}}, + color={255,127,0})); + connect(swi.y, reaToInt.u) + annotation (Line(points={{-18,-240},{-2,-240}}, color={0,0,127})); + connect(reaToInt.y, staStaDow.nexDisChi) + annotation (Line(points={{22,-240},{48,-240},{48,190},{58,190}}, + color={255,127,0})); + connect(staStaDow.yChi, chiStaRet.u) + annotation (Line(points={{82,194},{90,194},{90,180},{98,180}}, color={255,0,255})); + connect(chiStaRet.y, swi1.u2) + annotation (Line(points={{122,180},{130,180},{130,160},{-60,160},{-60,140}, + {-42,140}}, color={255,0,255})); + connect(chiLoa.y, swi1.u1) + annotation (Line(points={{-98,140},{-90,140},{-90,148},{-42,148}}, + color={0,0,127})); + connect(zer1.y, swi1.u3) + annotation (Line(points={{-98,100},{-80,100},{-80,132},{-42,132}}, + color={0,0,127})); + connect(chiStaRet.y, logSwi.u2) + annotation (Line(points={{122,180},{130,180},{130,160},{-60,160},{-60,60}, + {-42,60}}, color={255,0,255})); + connect(chiOn.y, logSwi.u1) + annotation (Line(points={{-98,60},{-90,60},{-90,68},{-42,68}}, + color={255,0,255})); + connect(fal.y, logSwi.u3) + annotation (Line(points={{-98,20},{-70,20},{-70,52},{-42,52}}, + color={255,0,255})); + connect(swi1.y, staStaDow.uChiLoa) + annotation (Line(points={{-18,140},{16,140},{16,206},{58,206}}, + color={0,0,127})); + connect(logSwi.y, staStaDow.uChi) + annotation (Line(points={{-18,60},{20,60},{20,204},{58,204}}, + color={255,0,255})); + connect(chiHea.y, staStaDow.uChiHeaCon) + annotation (Line(points={{-98,-140},{40,-140},{40,194},{58,194}}, + color={255,0,255})); + connect(chiIsoVal.y, staStaDow.uChiWatIsoVal) + annotation (Line(points={{-98,-180},{44,-180},{44,192},{58,192}}, + color={0,0,127})); + connect(booPul2.y, staDow2.u) + annotation (Line(points={{82,100},{98,100}}, color={255,0,255})); + connect(staDow2.y, staStaDow.clr) + annotation (Line(points={{122,100},{130,100},{130,150},{28,150},{28,200}, + {58,200}}, color={255,0,255})); + +annotation ( + experiment(StopTime=1200, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithoutOn.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.DownStart. +It shows the begining steps when the plant starts staging down. In this example, +the staging down process does not require enabling one chiller and disabling +another chiller. +

                      +

                      +It stages from stage 2, which has both chiller 1 and chiller 2 enabled, down to +stage 1 which only has chiller 1 enabled. +

                      +
                        +
                      • +The staging process begins at 180 seconds. Before the moment, the chiller 1 and 2 +are enabled. +
                      • +
                      • +Since 180 seconds, the staging down process starts. The chiller 2 becomes disabled +and its demand becomes 0. +
                      • +
                      +

                      +The chiller head pressure control, the chilled water isolation valve and the +chilled water minimum flow setpoint will be controlled in the down process after +this down begining process. +

                      +", revisions=" +
                        +
                      • +September 26, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-140,-300},{140,300}}), + graphics={ + Text( + extent={{-122,288},{-74,280}}, + textColor={0,0,127}, + textString="Stage down:"), + Text( + extent={{-114,276},{46,266}}, + textColor={0,0,127}, + textString="from stage 2 which has chiller one and two enabled, "), + Text( + extent={{-116,264},{-14,250}}, + textColor={0,0,127}, + textString="to stage 1 which only has chiller 1.")})); +end DownStartWithoutOn; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableCWPump.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableCWPump.mo new file mode 100644 index 00000000000..49b70d706b9 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableCWPump.mo @@ -0,0 +1,184 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation; +model EnableCWPump + "Validate sequence of generating stage index for CW pump control" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.EnableCWPump + staUpInd "Generating chiller stage index when there is stage up command" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.EnableCWPump + staDowInd "Generating chiller stage index when there is stage down command" + annotation (Placement(transformation(extent={{80,50},{100,70}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Switch curSta + "Current chiller stage setpoint" + annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt[2] + "Real input to integer output" + annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Switch curSta1 + "Current chiller stage setpoint" + annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1[2] + "Real input to integer output" + annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.15, + final period=3600) "Boolean pulse" + annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); + Buildings.Controls.OBC.CDL.Logical.Not staCha "Stage change command" + annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.20, + final period=3600) "Boolean pulse" + annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); + Buildings.Controls.OBC.CDL.Logical.Not upsDevSta "Upstream device status" + annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant fal( + final k=false) + "No stage change" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant staTwo( + final k=2) "Chiller stage index" + annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant staOne( + final k=1) "Chiller stage index" + annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); + +equation + connect(booPul.y, staCha.u) + annotation (Line(points={{-78,40},{-62,40}}, color={255,0,255})); + connect(booPul1.y, upsDevSta.u) + annotation (Line(points={{-78,80},{-62,80}}, color={255,0,255})); + connect(upsDevSta.y, staUpInd.uUpsDevSta) + annotation (Line(points={{-38,80},{-20,80},{-20,68},{-2,68}}, + color={255,0,255})); + connect(staCha.y, staUpInd.uStaUp) + annotation (Line(points={{-38,40},{-30,40},{-30,62},{-2,62}}, + color={255,0,255})); + connect(fal.y, staUpInd.uStaDow) + annotation (Line(points={{-38,0},{-20,0},{-20,58},{-2,58}}, + color={255,0,255})); + connect(upsDevSta.y, staDowInd.uUpsDevSta) + annotation (Line(points={{-38,80},{60,80},{60,68},{78,68}}, + color={255,0,255})); + connect(fal.y, staDowInd.uStaUp) + annotation (Line(points={{-38,0},{60,0},{60,62},{78,62}}, + color={255,0,255})); + connect(staCha.y, staDowInd.uStaDow) + annotation (Line(points={{-38,40},{66,40},{66,58},{78,58}}, + color={255,0,255})); + connect(staCha.y, curSta.u2) + annotation (Line(points={{-38,40},{-30,40},{-30,-40},{-22,-40}}, + color={255,0,255})); + connect(staTwo.y, curSta.u1) + annotation (Line(points={{-78,-60},{-60,-60},{-60,-32},{-22,-32}}, + color={0,0,127})); + connect(staOne.y, curSta.u3) + annotation (Line(points={{-78,-20},{-40,-20},{-40,-48},{-22,-48}}, + color={0,0,127})); + connect(staCha.y, curSta1.u2) + annotation (Line(points={{-38,40},{-30,40},{-30,-80},{-22,-80}}, + color={255,0,255})); + connect(staTwo.y, curSta1.u3) + annotation (Line(points={{-78,-60},{-60,-60},{-60,-88},{-22,-88}}, + color={0,0,127})); + connect(staOne.y, curSta1.u1) + annotation (Line(points={{-78,-20},{-40,-20},{-40,-72},{-22,-72}}, + color={0,0,127})); + connect(staOne.y, reaToInt[1].u) + annotation (Line(points={{-78,-20},{18,-20}}, color={0,0,127})); + connect(curSta.y, reaToInt[2].u) + annotation (Line(points={{2,-40},{10,-40},{10,-20},{18,-20}}, color={0,0,127})); + connect(reaToInt[1].y, staUpInd.uChiSta) + annotation (Line(points={{42,-20},{50,-20},{50,20},{-10,20},{-10,55},{-2,55}}, + color={255,127,0})); + connect(reaToInt[2].y, staUpInd.uStaSet) + annotation (Line(points={{42,-20},{50,-20},{50,20},{-10,20},{-10,51},{-2,51}}, + color={255,127,0})); + connect(staTwo.y, reaToInt1[1].u) + annotation (Line(points={{-78,-60},{18,-60}}, color={0,0,127})); + connect(curSta1.y, reaToInt1[2].u) + annotation (Line(points={{2,-80},{10,-80},{10,-60},{18,-60}}, color={0,0,127})); + connect(reaToInt1[1].y, staDowInd.uChiSta) + annotation (Line(points={{42,-60},{72,-60},{72,55},{78,55}}, color={255,127,0})); + connect(reaToInt1[2].y, staDowInd.uStaSet) + annotation (Line(points={{42,-60},{72,-60},{72,51},{78,51}}, color={255,127,0})); + +annotation ( + experiment(StopTime=3600, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableCWPump.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.EnableCWPump. +

                      +

                      +It has two instances staUpInd and staDowInd, which shows +the calculation of the chiller stage index in the staging up and staging down process. +

                      +

                      +For the instance staUpInd, +

                      +
                        +
                      • +Before 540 seconds, the plant is not in staging up process. The chiller stage +yChiSta equals previous stage setpoint, which is 1. +
                      • +
                      • +In the period from 540 seconds to 720 seconds, the plant is in staging up process +but the process is not yet requiring changing the condenser water pumps +(uUpsDevSta=false). The chiller stage yChiSta still +equals previous stage setpoint (1) but not yet equals the new setpoint +uStaSet (2). +
                      • +
                      • +Since the 720 seconds, the process requires changing the condenser water pumps +(uUpsDevSta=true). The chiller stage yChiSta equals the +new setpoint uStaSet (2). +
                      • +
                      +

                      +For the instance staDowInd, +

                      +
                        +
                      • +Before 540 seconds, the plant is not in staging down process. The chiller stage +yChiSta equals previous stage setpoint, which is 2. +
                      • +
                      • +In the period from 540 seconds to 720 seconds, the plant is in staging down process +but the process is not yet requiring changing the condenser water pumps +(uUpsDevSta=false). The chiller stage yChiSta still +equals previous stage setpoint (2) but not yet equals the new setpoint +uStaSet (1). +
                      • +
                      • +Since the 720 seconds, the process requires changing the condenser water pumps +(uUpsDevSta=true). The chiller stage yChiSta equals the +new setpoint uStaSet (1). +
                      • +
                      +", revisions=" +
                        +
                      • +September 24, 2019 by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-120,-100},{120,100}}))); +end EnableCWPump; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableChiller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableChiller.mo new file mode 100644 index 00000000000..620aebe71c7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableChiller.mo @@ -0,0 +1,204 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation; +model EnableChiller + "Validate sequence of enabling and disabling chiller" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.EnableChiller + enaDisChi(final nChi=3) "Enable larger chiller and disable smaller chiller" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.EnableChiller + enaOneChi(final nChi=3) "Enable additional chiller" + annotation (Placement(transformation(extent={{100,70},{120,90}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.15, + final period=3600) "Boolean pulse" + annotation (Placement(transformation(extent={{-200,50},{-180,70}}))); + Buildings.Controls.OBC.CDL.Logical.Not staUp "Stage up command" + annotation (Placement(transformation(extent={{-160,50},{-140,70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.20, + final period=3600) "Boolean pulse" + annotation (Placement(transformation(extent={{-200,10},{-180,30}}))); + Buildings.Controls.OBC.CDL.Logical.Not chiIsoVal + "Chilled water isolation valve resetting status" + annotation (Placement(transformation(extent={{-160,10},{-140,30}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant enaChi(final k=3) + "Enabling chiller index" + annotation (Placement(transformation(extent={{-160,90},{-140,110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiOne(final k=true) + "Operating chiller one" + annotation (Placement(transformation(extent={{-160,-30},{-140,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant onOff(final k=true) + "Requires one chiller on and another chiller off" + annotation (Placement(transformation(extent={{-160,-70},{-140,-50}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant disChi(final k=2) + "Disabling chiller index" + annotation (Placement(transformation(extent={{-160,-110},{-140,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiStaRet[2] + "Chiller status return value" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + Buildings.Controls.OBC.CDL.Logical.Switch chiTwo "Chiller two status" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiStaRet1 + "Chiller status return value" + annotation (Placement(transformation(extent={{140,70},{160,90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant noOnOff(final k=false) + "Does not requires one chiller on and another chiller off" + annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant disChi1(final k=0) + "Disabling chiller index" + annotation (Placement(transformation(extent={{20,-110},{40,-90}}))); + +equation + connect(booPul.y, staUp.u) + annotation (Line(points={{-178,60},{-162,60}}, color={255,0,255})); + connect(booPul1.y,chiIsoVal. u) + annotation (Line(points={{-178,20},{-162,20}}, color={255,0,255})); + connect(enaChi.y, enaDisChi.nexEnaChi) + annotation (Line(points={{-138,100},{-120,100},{-120,89},{-82,89}}, + color={255,127,0})); + connect(staUp.y, enaDisChi.uStaUp) + annotation (Line(points={{-138,60},{-120,60},{-120,86},{-82,86}}, + color={255,0,255})); + connect(chiIsoVal.y, enaDisChi.uEnaChiWatIsoVal) + annotation (Line(points={{-138,20},{-116,20},{-116,82},{-82,82}}, + color={255,0,255})); + connect(chiOne.y, enaDisChi.uChi[1]) + annotation (Line(points={{-138,-20},{-112,-20},{-112,77.3333},{-82,77.3333}}, + color={255,0,255})); + connect(chiIsoVal.y, chiTwo.u2) + annotation (Line(points={{-138,20},{-116,20},{-116,-40},{-42,-40}}, + color={255,0,255})); + connect(chiStaRet[1].y, chiTwo.u1) + annotation (Line(points={{-18,80},{0,80},{0,0},{-60,0},{-60,-32},{-42,-32}}, + color={255,0,255})); + connect(chiOne.y, chiTwo.u3) + annotation (Line(points={{-138,-20},{-112,-20},{-112,-48},{-42,-48}}, + color={255,0,255})); + connect(chiTwo.y, enaDisChi.uChi[2]) + annotation (Line(points={{-18,-40},{0,-40},{0,-70},{-108,-70},{-108,78}, + {-82,78}}, color={255,0,255})); + connect(enaDisChi.yChi[2], chiStaRet[1].u) + annotation (Line(points={{-58,88},{-50,88},{-50,80},{-42,80}}, + color={255,0,255})); + connect(enaDisChi.yChi[3], chiStaRet[2].u) + annotation (Line(points={{-58,88.6667},{-50,88.6667},{-50,80},{-42,80}}, + color={255,0,255})); + connect(chiStaRet[2].y, enaDisChi.uChi[3]) + annotation (Line(points={{-18,80},{0,80},{0,40},{-104,40},{-104,78.6667},{ + -82,78.6667}}, + color={255,0,255})); + connect(onOff.y, enaDisChi.uOnOff) + annotation (Line(points={{-138,-60},{-100,-60},{-100,74},{-82,74}}, + color={255,0,255})); + connect(disChi.y, enaDisChi.nexDisChi) + annotation (Line(points={{-138,-100},{-96,-100},{-96,71},{-82,71}}, + color={255,127,0})); + connect(enaChi.y, enaOneChi.nexEnaChi) + annotation (Line(points={{-138,100},{40,100},{40,89},{98,89}}, + color={255,127,0})); + connect(staUp.y, enaOneChi.uStaUp) + annotation (Line(points={{-138,60},{40,60},{40,86},{98,86}}, + color={255,0,255})); + connect(chiIsoVal.y, enaOneChi.uEnaChiWatIsoVal) + annotation (Line(points={{-138,20},{44,20},{44,82},{98,82}}, + color={255,0,255})); + connect(chiOne.y, enaOneChi.uChi[1]) + annotation (Line(points={{-138,-20},{48,-20},{48,77.3333},{98,77.3333}}, + color={255,0,255})); + connect(chiOne.y, enaOneChi.uChi[2]) + annotation (Line(points={{-138,-20},{48,-20},{48,78},{98,78}}, + color={255,0,255})); + connect(noOnOff.y, enaOneChi.uOnOff) + annotation (Line(points={{42,-60},{56,-60},{56,74},{98,74}}, + color={255,0,255})); + connect(disChi1.y, enaOneChi.nexDisChi) + annotation (Line(points={{42,-100},{60,-100},{60,71},{98,71}}, + color={255,127,0})); + connect(enaOneChi.yChi[3], chiStaRet1.u) + annotation (Line(points={{122,88.6667},{130,88.6667},{130,80},{138,80}}, + color={255,0,255})); + connect(chiStaRet1.y, enaOneChi.uChi[3]) + annotation (Line(points={{162,80},{180,80},{180,40},{52,40},{52,78.6667},{ + 98,78.6667}}, + color={255,0,255})); + +annotation ( + experiment(StopTime=3600, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableChiller.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.EnableChiller. +

                      +

                      +The example has two instances enaDisChi and enaOneChi, +which shows the sub-processes of enabling chillers when the plant is in staging up +process. For the instance enaDisChi, the process requires chiller 3 +being enabled and chiller 2 being disabled, while for the instance +enaOneChi, the process just requires chiller 3 being enabled. +

                      +

                      +For the instance enaDisChi, +

                      +
                        +
                      • +Before 540 seconds, the plant is not in staging up process. Chiller 1 and 2 are +operating. +
                      • +
                      • +For period from 540 seconds to 720 seconds, it is in process up process. However, +it does not yet require enabling chiller (uEnaChiWatIsoVal=false). +
                      • +
                      • +Since 720 seconds, the process requires new chiller being enabled and the chiller +3 is enabled. +
                      • +
                      • +After 5 minutes at 1020 seconds, the chiller 2 becomes disabled. The output +yNewChiEna becomes true, indicates that the chiller enabling process +is finished. +
                      • +
                      + +

                      +For the instance enaOneChi, +

                      +
                        +
                      • +Before 540 seconds, the plant is not in staging up process. Chiller 1 and 2 are operating. +
                      • +
                      • +For period from 540 seconds to 720 seconds, it is in process up process. However, +it does not yet require enabling chiller (uEnaChiWatIsoVal=false). +
                      • +
                      • +Since 720 seconds, the process requires new chiller being enabled and the chiller +3 is enabled. The output yNewChiEna becomes true, indicates that the +chiller enabling process is finished. +
                      • +
                      +", revisions=" +
                        +
                      • +September 24, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-220,-140},{220,140}}))); +end EnableChiller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/HeadControl.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/HeadControl.mo new file mode 100644 index 00000000000..51a08ade5bc --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/HeadControl.mo @@ -0,0 +1,355 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation; +model HeadControl + "Validate sequence of enabling and disabling head pressure control loop" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.HeadControl + enaHeaCon( + final nChi=2) + "Enable head pressure control after condenser water pump reset" + annotation (Placement(transformation(extent={{-40,130},{-20,150}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.HeadControl + disHeaCon( + final nChi=2, + final thrTimEnb=0, + final waiTim=0, + final heaStaCha=false) + "Disable head pressure control of smaller chiller when the stage-up requires large chiller on and small chiller off" + annotation (Placement(transformation(extent={{60,130},{80,150}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.HeadControl + disHeaCon1( + final nChi=2, + final thrTimEnb=0, + final waiTim=0, + final heaStaCha=false) + "Disable head pressure control of the chiller being disabled" + annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.HeadControl + enaHeaCon1( + final nChi=2, + final thrTimEnb=0, + final waiTim=30, + final heaStaCha=true) + "Disable head pressure control of smaller chiller when the stage-up requires large chiller on and small chiller off" + annotation (Placement(transformation(extent={{100,-90},{120,-70}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.15, + final period=120) "Boolean pulse" + annotation (Placement(transformation(extent={{-140,110},{-120,130}}))); + Buildings.Controls.OBC.CDL.Logical.Not staUp "Stage up command" + annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.20, + final period=120) "Boolean pulse" + annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); + Buildings.Controls.OBC.CDL.Logical.Not upStrDev + "Upstream device reset status" + annotation (Placement(transformation(extent={{-100,150},{-80,170}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiOne( + final k=true) "Operating chiller one" + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant enaChi(final k=2) + "Enabling chiller index" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); + Buildings.Controls.OBC.CDL.Logical.Pre heaPreConRet + "Return value of chiller head pressure control status" + annotation (Placement(transformation(extent={{0,90},{20,110}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant disChi(final k=2) + "Disabling small chiller" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + Buildings.Controls.OBC.CDL.Logical.Pre heaPreConRet1 + "Return value of chiller head pressure control status" + annotation (Placement(transformation(extent={{100,90},{120,110}}))); + Buildings.Controls.OBC.CDL.Logical.Switch chiTwo "Chiller two status" + annotation (Placement(transformation(extent={{140,70},{160,90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + final width=0.15, + final period=120) "Boolean pulse" + annotation (Placement(transformation(extent={{-140,-110},{-120,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Not staUp1 "Stage up command" + annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul3( + final width=0.20, + final period=120) "Boolean pulse" + annotation (Placement(transformation(extent={{-140,-70},{-120,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Not upStrDev1 "Upstream device reset status" + annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiOne1(final k=true) + "Operating chiller one" + annotation (Placement(transformation(extent={{-100,-190},{-80,-170}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant disChi1(final k=2) + "Disabling chiller index" + annotation (Placement(transformation(extent={{-100,-160},{-80,-140}}))); + Buildings.Controls.OBC.CDL.Logical.Pre heaPreConRet2 + "Return value of chiller head pressure control status" + annotation (Placement(transformation(extent={{0,-130},{20,-110}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant enaChi1( + final k=2) "Enabling small chiller" + annotation (Placement(transformation(extent={{60,-126},{80,-106}}))); + Buildings.Controls.OBC.CDL.Logical.Pre heaPreConRet3 + "Return value of chiller head pressure control status" + annotation (Placement(transformation(extent={{140,-130},{160,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Switch chiTwo1 "Chiller two status" + annotation (Placement(transformation(extent={{40,-150},{60,-130}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant enaPla( + final k=false) + "Plant is just enabled" + annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant enaPla1( + final k=false) + "Plant is just enabled" + annotation (Placement(transformation(extent={{-140,-210},{-120,-190}}))); +equation + connect(booPul.y, staUp.u) + annotation (Line(points={{-118,120},{-102,120}}, color={255,0,255})); + connect(booPul1.y, upStrDev.u) + annotation (Line(points={{-118,160},{-102,160}}, color={255,0,255})); + connect(upStrDev.y, enaHeaCon.uUpsDevSta) + annotation (Line(points={{-78,160},{-60,160},{-60,144},{-42,144}}, + color={255,0,255})); + connect(staUp.y, enaHeaCon.uStaPro) annotation (Line(points={{-78,120},{-60,120}, + {-60,140},{-42,140}}, color={255,0,255})); + connect(enaChi.y, enaHeaCon.nexChaChi) + annotation (Line(points={{-78,60},{-56,60},{-56,136},{-42,136}}, + color={255,127,0})); + connect(chiOne.y, enaHeaCon.uChiHeaCon[1]) + annotation (Line(points={{-78,30},{-52,30},{-52,131.5},{-42,131.5}}, + color={255,0,255})); + connect(enaHeaCon.yChiHeaCon[2], heaPreConRet.u) annotation (Line(points={{-18, + 134.5},{-10,134.5},{-10,100},{-2,100}}, color={255,0,255})); + connect(heaPreConRet.y, enaHeaCon.uChiHeaCon[2]) annotation (Line(points={{22,100}, + {30,100},{30,84},{-48,84},{-48,132.5},{-42,132.5}}, color={255,0,255})); + connect(upStrDev.y, disHeaCon.uUpsDevSta) + annotation (Line(points={{-78,160},{40,160},{40,144},{58,144}}, + color={255,0,255})); + connect(staUp.y, disHeaCon.uStaPro) annotation (Line(points={{-78,120},{40,120}, + {40,140},{58,140}}, color={255,0,255})); + connect(disChi.y, disHeaCon.nexChaChi) + annotation (Line(points={{22,60},{44,60},{44,136},{58,136}}, + color={255,127,0})); + connect(chiOne.y, disHeaCon.uChiHeaCon[1]) + annotation (Line(points={{-78,30},{48,30},{48,131.5},{58,131.5}}, + color={255,0,255})); + connect(disHeaCon.yChiHeaCon[2], heaPreConRet1.u) annotation (Line(points={{82, + 134.5},{90,134.5},{90,100},{98,100}}, color={255,0,255})); + connect(staUp.y, chiTwo.u2) + annotation (Line(points={{-78,120},{-60,120},{-60,80},{138,80}}, + color={255,0,255})); + connect(heaPreConRet1.y, chiTwo.u1) annotation (Line(points={{122,100},{130,100}, + {130,88},{138,88}}, color={255,0,255})); + connect(chiOne.y, chiTwo.u3) + annotation (Line(points={{-78,30},{120,30},{120,72},{138,72}}, + color={255,0,255})); + connect(chiTwo.y, disHeaCon.uChiHeaCon[2]) + annotation (Line(points={{162,80},{170,80},{170,60},{52,60},{52,132.5},{58,132.5}}, + color={255,0,255})); + connect(booPul2.y, staUp1.u) + annotation (Line(points={{-118,-100},{-102,-100}}, color={255,0,255})); + connect(booPul3.y, upStrDev1.u) + annotation (Line(points={{-118,-60},{-102,-60}}, color={255,0,255})); + connect(upStrDev1.y, disHeaCon1.uUpsDevSta) + annotation (Line(points={{-78,-60},{-60,-60},{-60,-76},{-42,-76}}, + color={255,0,255})); + connect(staUp1.y, disHeaCon1.uStaPro) annotation (Line(points={{-78,-100},{-60, + -100},{-60,-80},{-42,-80}}, color={255,0,255})); + connect(disChi1.y, disHeaCon1.nexChaChi) + annotation (Line(points={{-78,-150},{-56,-150},{-56,-84},{-42,-84}}, + color={255,127,0})); + connect(chiOne1.y, disHeaCon1.uChiHeaCon[1]) + annotation (Line(points={{-78,-180},{-52,-180},{-52,-88.5},{-42,-88.5}}, + color={255,0,255})); + connect(disHeaCon1.yChiHeaCon[2], heaPreConRet2.u) annotation (Line(points={{-18, + -85.5},{-10,-85.5},{-10,-120},{-2,-120}}, color={255,0,255})); + connect(enaHeaCon1.yChiHeaCon[2], heaPreConRet3.u) annotation (Line(points={{122, + -85.5},{130,-85.5},{130,-120},{138,-120}}, color={255,0,255})); + connect(staUp1.y, chiTwo1.u2) + annotation (Line(points={{-78,-100},{-60,-100},{-60,-140},{38,-140}}, + color={255,0,255})); + connect(heaPreConRet2.y, chiTwo1.u1) annotation (Line(points={{22,-120},{30,-120}, + {30,-132},{38,-132}}, color={255,0,255})); + connect(chiOne1.y, chiTwo1.u3) + annotation (Line(points={{-78,-180},{-52,-180},{-52,-148},{38,-148}}, + color={255,0,255})); + connect(chiTwo1.y, disHeaCon1.uChiHeaCon[2]) + annotation (Line(points={{62,-140},{70,-140},{70,-170},{-48,-170},{-48,-87.5}, + {-42,-87.5}}, color={255,0,255})); + connect(upStrDev1.y, enaHeaCon1.uUpsDevSta) + annotation (Line(points={{-78,-60},{80,-60},{80,-76},{98,-76}}, + color={255,0,255})); + connect(staUp1.y, enaHeaCon1.uStaPro) annotation (Line(points={{-78,-100},{80, + -100},{80,-80},{98,-80}}, color={255,0,255})); + connect(enaChi1.y, enaHeaCon1.nexChaChi) + annotation (Line(points={{82,-116},{84,-116},{84,-84},{98,-84}}, + color={255,127,0})); + connect(chiOne1.y, enaHeaCon1.uChiHeaCon[1]) + annotation (Line(points={{-78,-180},{88,-180},{88,-88.5},{98,-88.5}}, + color={255,0,255})); + connect(heaPreConRet3.y, enaHeaCon1.uChiHeaCon[2]) + annotation (Line(points={{162,-120},{170,-120},{170,-150},{92,-150},{92,-87.5}, + {98,-87.5}}, color={255,0,255})); + connect(enaPla.y, enaHeaCon.uEnaPla) annotation (Line(points={{-118,10},{-64,10}, + {-64,148},{-42,148}}, color={255,0,255})); + connect(enaPla.y, disHeaCon.uEnaPla) annotation (Line(points={{-118,10},{36,10}, + {36,148},{58,148}}, color={255,0,255})); + connect(enaPla1.y, disHeaCon1.uEnaPla) annotation (Line(points={{-118,-200},{-64, + -200},{-64,-72},{-42,-72}}, color={255,0,255})); + connect(enaPla1.y, enaHeaCon1.uEnaPla) annotation (Line(points={{-118,-200},{34, + -200},{34,-72},{98,-72}}, color={255,0,255})); +annotation ( + experiment(StopTime=120, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/HeadControl.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.HeadControl. +It has four instances as below to demonstrate the process of chiller head pressure +control when the plant is in staging process. +

                      +

                      +The instance enaHeaCon shows the head pressure control when the plant +is in staging up process and it will enable chiller 2 (nexChaChi=2). +

                      +
                        +
                      • +Before 18 seconds, the plant is not in the staging process, uStaPro=false. +There is no change on the chiller head pressure control. +
                      • +
                      • +At 24 seconds, the condenser water pump speed (or number) has been changed +(uUpsDevSta=true). However, it is still not the time to change +the chiller head pressure control. +
                      • +
                      • +After the threshold time (thrTimEna=10 seconds) at 34 seconds, it +enables the head pressure control of the enabling chiller 2. +
                      • +
                      • +After the waiting time (waiTim=30 seconds) at 64 seconds, the head +pressure control process is done (yEnaHeaCon=true). +
                      • +
                      +

                      +The instance disHeaCon shows the head pressure control when the plant +is in staging up process and it requires enabling a large chiller and disabling a +small chiller. In this case, it disables chiller 2 (nexChaChi=2). +

                      +
                        +
                      • +Before 18 seconds, the plant is not in the staging process, uStaPro=false. +There is no change on the chiller head pressure control. +
                      • +
                      • +At 24 seconds, the chiller 2 becomes not requesting for condenser water flow +(uUpsDevSta=true). It disables the head pressure control of chiller 2 +and the head pressure control process is done (yEnaHeaCon=true). +
                      • +
                      +

                      +The instance disHeaCon1 shows the head pressure control when the plant +is in staging down process and it requires disabling chiller 2 +(nexChaChi=2). +

                      +
                        +
                      • +Before 18 seconds, the plant is not in the staging process, uStaPro=false. +There is no change on the chiller head pressure control. +
                      • +
                      • +At 24 seconds, the chiller 2 becomes not requesting for condenser water flow +(uUpsDevSta=true). It disables the head pressure control of chiller 2 +and the head pressure control process is done (yEnaHeaCon=true). +
                      • +
                      +

                      +The instance enaHeaCon1 shows the head pressure control when the plant +is in staging down process and it requires disabling a large chiller and enabling +a small chiller. In this case, it enables chiller 2 (nexChaChi=2). +

                      +
                        +
                      • +Before 18 seconds, the plant is not in the staging process, uStaPro=false. +There is no change on the chiller head pressure control. +
                      • +
                      • +At 24 seconds, the minimum flow bypass valve has changed the position +(uUpsDevSta=true). It enables the head pressure control of the +enabling chiller 2. +
                      • +
                      • +After the waiting time (waiTim=30 seconds) at 54 seconds, the head +pressure control process is done (yEnaHeaCon=true). +
                      • +
                      +", revisions=" +
                        +
                      • +September 24, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-160,-220},{180,220}}), + graphics={ + Text( + extent={{-138,194},{-4,174}}, + textColor={0,0,127}, + textString="enable head pressure control of the chiler being enabled."), + Text( + extent={{-140,202},{-52,186}}, + textColor={0,0,127}, + textString="after resetting condenser water pump,"), + Text( + extent={{44,190},{124,176}}, + textColor={0,0,127}, + textString="disable its head pressure control."), + Text( + extent={{44,200},{122,186}}, + textColor={0,0,127}, + textString="after small chiller being shut off,"), + Text( + extent={{-140,210},{-92,200}}, + textColor={0,0,127}, + textString="In stage up process,"), + Text( + extent={{44,210},{166,200}}, + textColor={0,0,127}, + textString="In stage up process that requires chillers on and off,"), + Text( + extent={{-146,-8},{-98,-18}}, + textColor={0,0,127}, + textString="In stage down process,"), + Text( + extent={{-146,-16},{-58,-32}}, + textColor={0,0,127}, + textString="after the disabling chiller being shut off,"), + Text( + extent={{-146,-28},{-72,-38}}, + textColor={0,0,127}, + textString="disable its head pressure control."), + Text( + extent={{42,-18},{120,-32}}, + textColor={0,0,127}, + textString="after minimum bypass being reset,"), + Text( + extent={{42,-8},{164,-18}}, + textColor={0,0,127}, + textString="In stage down process that requires chillers on and off,"), + Text( + extent={{44,-26},{174,-44}}, + textColor={0,0,127}, + textString="enable head pressure control of the chiler being enabled.")})); +end HeadControl; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/NextChiller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/NextChiller.mo new file mode 100644 index 00000000000..dc1a275fb8a --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/NextChiller.mo @@ -0,0 +1,481 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation; +model NextChiller + "Validate sequence of identifying next enable or disable chillers" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.NextChiller + nexChi + "Identify next enabling and disabling chiller during the staging up process" + annotation (Placement(transformation(extent={{-60,170},{-40,190}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.NextChiller + nexChi1 "Identify next enabling during the staging up process" + annotation (Placement(transformation(extent={{240,170},{260,190}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.NextChiller + nexChi2 + "Identify next enabling and disabling chiller during the staging down process" + annotation (Placement(transformation(extent={{-60,-150},{-40,-130}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.NextChiller + nexChi3 "Identify next disabling chiller during the staging down process" + annotation (Placement(transformation(extent={{240,-150},{260,-130}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Switch chiSet[2] + "Chiller status setpoint" + annotation (Placement(transformation(extent={{-140,90},{-120,110}}))); + Buildings.Controls.OBC.CDL.Logical.Switch inPro + "Check if it is in the staging process" + annotation (Placement(transformation(extent={{-140,30},{-120,50}}))); + Buildings.Controls.OBC.CDL.Logical.Switch chiSet1[2] + "Chiller status setpoint" + annotation (Placement(transformation(extent={{160,90},{180,110}}))); + Buildings.Controls.OBC.CDL.Logical.Switch inPro1 + "Check if it is in the staging process" + annotation (Placement(transformation(extent={{160,30},{180,50}}))); + Buildings.Controls.OBC.CDL.Logical.Switch chiSet2[2] + "Chiller status setpoint" + annotation (Placement(transformation(extent={{-140,-230},{-120,-210}}))); + Buildings.Controls.OBC.CDL.Logical.Switch inPro2 + "Check if it is in the staging process" + annotation (Placement(transformation(extent={{-140,-290},{-120,-270}}))); + Buildings.Controls.OBC.CDL.Logical.Switch chiSet3[2] + "Chiller status setpoint" + annotation (Placement(transformation(extent={{160,-230},{180,-210}}))); + Buildings.Controls.OBC.CDL.Logical.Switch inPro3 + "Check if it is in the staging process" + annotation (Placement(transformation(extent={{160,-290},{180,-270}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.15, + final period=120) "Boolean pulse" + annotation (Placement(transformation(extent={{-260,150},{-240,170}}))); + Buildings.Controls.OBC.CDL.Logical.Not staUp "Stage up command" + annotation (Placement(transformation(extent={{-220,150},{-200,170}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staOneChi[2]( + final k={true,false}) "Vector of chillers status setpoint at stage one" + annotation (Placement(transformation(extent={{-260,70},{-240,90}}))); + CDL.Integers.Sources.Constant upSta( + final k=2) "Stage two" + annotation (Placement(transformation(extent={{-260,230},{-240,250}}))); + CDL.Integers.Sources.Constant dowSta( + final k=1) "Stage one" + annotation (Placement(transformation(extent={{-260,190},{-240,210}}))); + CDL.Integers.Switch intSwi + "Logical switch" + annotation (Placement(transformation(extent={{-180,210},{-160,230}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staTwoChi[2]( + final k={false,true}) + "Vector of chillers status setpoint at stage two" + annotation (Placement(transformation(extent={{-260,110},{-240,130}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=2) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-180,90},{-160,110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul4( + final width=0.5, + final period=120) "Boolean pulse" + annotation (Placement(transformation(extent={{-260,30},{-240,50}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant endPro(final k=true) + "Not in the process" + annotation (Placement(transformation(extent={{-220,10},{-200,30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.15, + final period=120) "Boolean pulse" + annotation (Placement(transformation(extent={{40,150},{60,170}}))); + Buildings.Controls.OBC.CDL.Logical.Not staUp1 "Stage up command" + annotation (Placement(transformation(extent={{80,150},{100,170}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staOneChi1[2]( + final k={true,false}) + "Vector of chillers status setpoint at stage one" + annotation (Placement(transformation(extent={{40,70},{60,90}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant upSta1( + final k=2) + "Stage two" + annotation (Placement(transformation(extent={{40,230},{60,250}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant dowSta1( + final k=1) + "Stage one" + annotation (Placement(transformation(extent={{40,190},{60,210}}))); + CDL.Integers.Switch intSwi3 + "Logical switch" + annotation (Placement(transformation(extent={{120,210},{140,230}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staTwoChi1[2]( + final k={true,true}) + "Vector of chillers status setpoint at stage two" + annotation (Placement(transformation(extent={{40,110},{60,130}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep1( + final nout=2) + "Replicate boolean input" + annotation (Placement(transformation(extent={{120,90},{140,110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul5( + final width=0.5, + final period=120) "Boolean pulse" + annotation (Placement(transformation(extent={{40,30},{60,50}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant endPro1(final k=true) + "Process is end" + annotation (Placement(transformation(extent={{80,10},{100,30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + final width=0.15, + final period=120) "Boolean pulse" + annotation (Placement(transformation(extent={{-260,-170},{-240,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Not staDow "Stage down command" + annotation (Placement(transformation(extent={{-220,-170},{-200,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staOneChi2[2]( + final k={true,false}) + "Vector of chillers status setpoint at stage one" + annotation (Placement(transformation(extent={{-260,-210},{-240,-190}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant upSta2( + final k=2) "Stage two" + annotation (Placement(transformation(extent={{-260,-130},{-240,-110}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant dowSta2( + final k=1) "Stage one" + annotation (Placement(transformation(extent={{-260,-90},{-240,-70}}))); + CDL.Integers.Switch intSwi1 + "Logical switch" + annotation (Placement(transformation(extent={{-180,-110},{-160,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staTwoChi2[2]( + final k={false,true}) + "Vector of chillers status setpoint at stage two" + annotation (Placement(transformation(extent={{-260,-250},{-240,-230}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep2( + final nout=2) "Replicate boolean input" + annotation (Placement(transformation(extent={{-180,-230},{-160,-210}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul6( + final width=0.5, + final period=120) "Boolean pulse" + annotation (Placement(transformation(extent={{-260,-290},{-240,-270}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant endPro2(final k=true) + "Not in the process" + annotation (Placement(transformation(extent={{-220,-310},{-200,-290}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul3( + final width=0.15, + final period=120) "Boolean pulse" + annotation (Placement(transformation(extent={{40,-170},{60,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Not staDow1 "Stage down command" + annotation (Placement(transformation(extent={{80,-170},{100,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staOneChi3[2]( + final k={true,false}) + "Vector of chillers status setpoint at stage one" + annotation (Placement(transformation(extent={{40,-210},{60,-190}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant upSta3( + final k=2) "Stage two" + annotation (Placement(transformation(extent={{40,-130},{60,-110}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant dowSta3( + final k=1) "Stage one" + annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi2 + "Logical switch" + annotation (Placement(transformation(extent={{120,-110},{140,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staTwoChi3[2]( + final k={true,true}) + "Vector of chillers status setpoint at stage two" + annotation (Placement(transformation(extent={{40,-250},{60,-230}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep3( + final nout=2) "Replicate boolean input" + annotation (Placement(transformation(extent={{120,-230},{140,-210}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul7( + final width=0.5, + final period=120) "Boolean pulse" + annotation (Placement(transformation(extent={{40,-290},{60,-270}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant endPro3(final k=true) + "Not in the process" + annotation (Placement(transformation(extent={{80,-310},{100,-290}}))); + Buildings.Controls.OBC.CDL.Logical.Not not3 "Logical not" + annotation (Placement(transformation(extent={{-220,50},{-200,70}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{80,50},{100,70}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" + annotation (Placement(transformation(extent={{-220,-270},{-200,-250}}))); + Buildings.Controls.OBC.CDL.Logical.Not not4 "Logical not" + annotation (Placement(transformation(extent={{80,-270},{100,-250}}))); +equation + connect(booPul.y, staUp.u) + annotation (Line(points={{-238,160},{-222,160}}, color={255,0,255})); + connect(staUp.y, intSwi.u2) annotation (Line(points={{-198,160},{-190,160},{-190, + 220},{-182,220}}, color={255,0,255})); + connect(staUp.y, booRep.u) annotation (Line(points={{-198,160},{-190,160},{-190, + 100},{-182,100}}, color={255,0,255})); + connect(booRep.y, chiSet.u2) + annotation (Line(points={{-158,100},{-142,100}}, color={255,0,255})); + connect(staUp.y, inPro.u2) annotation (Line(points={{-198,160},{-190,160},{-190, + 40},{-142,40}}, color={255,0,255})); + connect(chiSet.y, nexChi.uChiSet) annotation (Line(points={{-118,100},{-100,100}, + {-100,180},{-62,180}}, color={255,0,255})); + connect(inPro.y,nexChi.endPro) annotation (Line(points={{-118,40},{-80,40},{-80, + 173},{-62,173}}, color={255,0,255})); + connect(booPul1.y, staUp1.u) + annotation (Line(points={{62,160},{78,160}}, color={255,0,255})); + connect(staUp1.y, intSwi3.u2) annotation (Line(points={{102,160},{110,160},{ + 110,220},{118,220}}, color={255,0,255})); + connect(dowSta1.y, intSwi3.u3) annotation (Line(points={{62,200},{80,200},{80, + 212},{118,212}}, color={0,0,127})); + connect(upSta1.y, intSwi3.u1) annotation (Line(points={{62,240},{80,240},{80, + 228},{118,228}}, color={0,0,127})); + connect(staUp1.y, booRep1.u) annotation (Line(points={{102,160},{110,160},{110, + 100},{118,100}}, color={255,0,255})); + connect(booRep1.y, chiSet1.u2) + annotation (Line(points={{142,100},{158,100}}, color={255,0,255})); + connect(staUp1.y, inPro1.u2) annotation (Line(points={{102,160},{110,160},{110, + 40},{158,40}}, color={255,0,255})); + connect(endPro1.y, inPro1.u3) annotation (Line(points={{102,20},{140,20},{140, + 32},{158,32}}, color={255,0,255})); + connect(chiSet1.y, nexChi1.uChiSet) annotation (Line(points={{182,100},{200,100}, + {200,180},{238,180}}, color={255,0,255})); + connect(inPro1.y,nexChi1.endPro) annotation (Line(points={{182,40},{220,40},{ + 220,173},{238,173}}, color={255,0,255})); + connect(booPul2.y, staDow.u) + annotation (Line(points={{-238,-160},{-222,-160}}, color={255,0,255})); + connect(staDow.y, intSwi1.u2) annotation (Line(points={{-198,-160},{-190,-160}, + {-190,-100},{-182,-100}}, color={255,0,255})); + connect(staDow.y, booRep2.u) annotation (Line(points={{-198,-160},{-190,-160}, + {-190,-220},{-182,-220}}, color={255,0,255})); + connect(staOneChi2.y, chiSet2.u1) annotation (Line(points={{-238,-200},{-150,-200}, + {-150,-212},{-142,-212}}, color={255,0,255})); + connect(booRep2.y, chiSet2.u2) + annotation (Line(points={{-158,-220},{-142,-220}}, color={255,0,255})); + connect(staTwoChi2.y, chiSet2.u3) annotation (Line(points={{-238,-240},{-148,-240}, + {-148,-228},{-142,-228}}, color={255,0,255})); + connect(staDow.y, inPro2.u2) annotation (Line(points={{-198,-160},{-190,-160}, + {-190,-280},{-142,-280}}, color={255,0,255})); + connect(endPro2.y, inPro2.u3) annotation (Line(points={{-198,-300},{-160,-300}, + {-160,-288},{-142,-288}}, color={255,0,255})); + connect(chiSet2.y, nexChi2.uChiSet) annotation (Line(points={{-118,-220},{-100, + -220},{-100,-140},{-62,-140}}, color={255,0,255})); + connect(inPro2.y,nexChi2.endPro) annotation (Line(points={{-118,-280},{-80,-280}, + {-80,-147},{-62,-147}}, color={255,0,255})); + connect(dowSta2.y, intSwi1.u1) annotation (Line(points={{-238,-80},{-200,-80}, + {-200,-92},{-182,-92}}, color={0,0,127})); + connect(upSta2.y, intSwi1.u3) annotation (Line(points={{-238,-120},{-200,-120}, + {-200,-108},{-182,-108}}, color={0,0,127})); + connect(staTwoChi.y, chiSet.u1) annotation (Line(points={{-238,120},{-150,120}, + {-150,108},{-142,108}}, color={255,0,255})); + connect(staOneChi.y, chiSet.u3) annotation (Line(points={{-238,80},{-150,80},{ + -150,92},{-142,92}}, color={255,0,255})); + connect(staTwoChi1.y, chiSet1.u1) annotation (Line(points={{62,120},{150,120}, + {150,108},{158,108}}, color={255,0,255})); + connect(staOneChi1.y, chiSet1.u3) annotation (Line(points={{62,80},{150,80},{150, + 92},{158,92}}, color={255,0,255})); + connect(booPul3.y, staDow1.u) + annotation (Line(points={{62,-160},{78,-160}}, color={255,0,255})); + connect(staDow1.y, intSwi2.u2) annotation (Line(points={{102,-160},{110,-160}, + {110,-100},{118,-100}}, color={255,0,255})); + connect(staDow1.y, booRep3.u) annotation (Line(points={{102,-160},{110,-160},{ + 110,-220},{118,-220}}, color={255,0,255})); + connect(staOneChi3.y, chiSet3.u1) annotation (Line(points={{62,-200},{150,-200}, + {150,-212},{158,-212}}, color={255,0,255})); + connect(booRep3.y, chiSet3.u2) + annotation (Line(points={{142,-220},{158,-220}}, color={255,0,255})); + connect(staTwoChi3.y, chiSet3.u3) annotation (Line(points={{62,-240},{150, + -240},{150,-228},{158,-228}}, + color={255,0,255})); + connect(staDow1.y, inPro3.u2) annotation (Line(points={{102,-160},{110,-160},{ + 110,-280},{158,-280}}, color={255,0,255})); + connect(endPro3.y, inPro3.u3) annotation (Line(points={{102,-300},{140,-300}, + {140,-288},{158,-288}}, color={255,0,255})); + connect(chiSet3.y, nexChi3.uChiSet) annotation (Line(points={{182,-220},{200,-220}, + {200,-140},{238,-140}}, color={255,0,255})); + connect(inPro3.y,nexChi3.endPro) annotation (Line(points={{182,-280},{220,-280}, + {220,-147},{238,-147}}, color={255,0,255})); + connect(dowSta3.y, intSwi2.u1) annotation (Line(points={{62,-80},{100,-80},{ + 100,-92},{118,-92}}, color={0,0,127})); + connect(upSta3.y, intSwi2.u3) annotation (Line(points={{62,-120},{100,-120},{ + 100,-108},{118,-108}}, color={0,0,127})); + + connect(intSwi.y, nexChi.uStaSet) annotation (Line(points={{-158,220},{-80,220}, + {-80,187},{-62,187}}, color={255,127,0})); + connect(upSta.y, intSwi.u1) annotation (Line(points={{-238,240},{-220,240},{-220, + 228},{-182,228}}, color={255,127,0})); + connect(dowSta.y, intSwi.u3) annotation (Line(points={{-238,200},{-220,200},{-220, + 212},{-182,212}}, color={255,127,0})); + connect(intSwi3.y, nexChi1.uStaSet) annotation (Line(points={{142,220},{220, + 220},{220,187},{238,187}}, color={255,127,0})); + connect(intSwi2.y, nexChi3.uStaSet) annotation (Line(points={{142,-100},{220, + -100},{220,-133},{238,-133}}, color={255,127,0})); + connect(intSwi1.y, nexChi2.uStaSet) annotation (Line(points={{-158,-100},{-80, + -100},{-80,-133},{-62,-133}}, color={255,127,0})); + connect(booPul4.y, not3.u) annotation (Line(points={{-238,40},{-230,40},{-230, + 60},{-222,60}}, color={255,0,255})); + connect(endPro.y, inPro.u3) annotation (Line(points={{-198,20},{-160,20},{ + -160,32},{-142,32}}, color={255,0,255})); + connect(not3.y, inPro.u1) annotation (Line(points={{-198,60},{-160,60},{-160, + 48},{-142,48}}, color={255,0,255})); + connect(booPul5.y, not1.u) annotation (Line(points={{62,40},{70,40},{70,60},{ + 78,60}}, color={255,0,255})); + connect(not1.y, inPro1.u1) annotation (Line(points={{102,60},{140,60},{140,48}, + {158,48}}, color={255,0,255})); + connect(booPul6.y, not2.u) annotation (Line(points={{-238,-280},{-230,-280},{ + -230,-260},{-222,-260}}, color={255,0,255})); + connect(not2.y, inPro2.u1) annotation (Line(points={{-198,-260},{-160,-260},{ + -160,-272},{-142,-272}}, color={255,0,255})); + connect(booPul7.y, not4.u) annotation (Line(points={{62,-280},{70,-280},{70, + -260},{78,-260}}, color={255,0,255})); + connect(not4.y, inPro3.u1) annotation (Line(points={{102,-260},{140,-260},{ + 140,-272},{158,-272}}, color={255,0,255})); +annotation ( + experiment(StopTime=120, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/NextChiller.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.NextChiller. +

                      +

                      +It has four instances as below to demonstrate the process of identifying next +changing chiller(s) when the plant is in staging process. +

                      +

                      +The instance nexChi shows how the changing chillers being identified +in a staging up process that requires a large chiller being enabled and a small +chiller being disabled. The plant stages up from stage 1 that requires chiller 1 +operating to stage 2 that requires chiller 2 operating. +

                      +
                        +
                      • +Before 18 seconds, the plant is in stage 1 and is not in the staging process +(endPro=true). Chiller 1 is enabled (uChiSet[1]=true) +and chiller 2 is not enabled (uChiSet[2]=false). The next enabling +and disabling chiller are the default 1. +
                      • +
                      • +At 18 seconds, the plant starts staging up (endPro=false, +yUp=true) and it requires one chiller being enabled and another +chiller being disabled (yOnOff=true). The next enabling chiller is +chiller 2 (yNexEnaChi=2) and the next disabling chiller is chiller 1 +(yDisSmaChi=1). The chiller status setpoints are changed accordingly. +
                      • +
                      • +At 60 seconds, the staging process is done (endPro=true, +yUp=false, yOnOff=false). +
                      • +
                      + +

                      +The instance nexChi1 shows how the changing chillers being identified +in a staging up process that requires one additional chiller being enabled. The +plant stages up from stage 1 that requires chiller 1 operating to stage 2 that +requires both chiller 1 and chiller 2 operating. +

                      +
                        +
                      • +Before 18 seconds, the plant is in stage 1 and is not in the staging process +(endPro=true). Chiller 1 is enabled (uChiSet[1]=true) +and chiller 2 is not enabled (uChiSet[2]=false). The next enabling +and disabling chiller are the default 1. +
                      • +
                      • +At 18 seconds, the plant starts staging up (endPro=false, +yUp=true) and it does not require one chiller being enabled and +another chiller being disabled (yOnOff=false). The next additional +enabling chiller is chiller 2 (yNexEnaChi=2). The chiller status +setpoints are changed accordingly. +
                      • +
                      • +At 60 seconds, the staging process is done (endPro=true, +yUp=false, yOnOff=false). +
                      • +
                      + +

                      +The instance nexChi2 shows how the changing chillers being identified +in a staging down process that requires a large chiller being disabled and a small +chiller being enabled. The plant stages down from stage 2 that requires chiller 2 +operating to stage 1 that requires chiller 1 operating. +

                      +
                        +
                      • +Before 18 seconds, the plant is in stage 2 and is not in the staging process +(endPro=true). Chiller 1 is disabled (uChiSet[1]=false) +and chiller 2 is enabled (uChiSet[2]=true). The next enabling and +disabling chiller are the default 1. +
                      • +
                      • +At 18 seconds, the plant starts staging down (endPro=false, +yDow=true) and it requires one chiller being disabled and another +chiller being enabled (yOnOff=true). The next disabling chiller is +chiller 2 (yLasDisChi=2) and the next enabling chiller is chiller 1 +(yEnaSmaChi=1). The chiller status setpoints are changed accordingly. +
                      • +
                      • +At 60 seconds, the staging process is done (endPro=true, +yDow=false, yOnOff=false). +
                      • +
                      + +

                      +The instance nexChi3 shows how the changing chillers being identified +in a staging down process that requires one additional chiller being disabled. The +plant stages down from stage 2 that requires both chiller 1 and chiller 2 operating +to stage 1 that requires just chiller 1 operating. +

                      +
                        +
                      • +Before 18 seconds, the plant is in stage 2 and is not in the staging process +(endPro=true). Chiller 2 is enabled (uChiSet[2]=true) and +chiller 1 is not enabled (uChiSet[1]=false). The next enabling and +disabling chiller are the default 1. +
                      • +
                      • +At 18 seconds, the plant starts staging down (endPro=false, +yDow=true) and it does not require one chiller being disabled and +another chiller being enabled (yOnOff=false). The next additional +disabling chiller is chiller 2 (yLasDisChi=2) . The chiller status +setpoints are changed accordingly. +
                      • +
                      • +At 60 seconds, the staging process is done (endPro=true, +yDow=false, yOnOff=false). +
                      • +
                      +", revisions=" +
                        +
                      • +September 26, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-280,-320},{280,320}}), + graphics={ + Text( + extent={{-258,292},{-146,280}}, + textColor={0,0,127}, + textString="In stage up process (stage 1 to 2),"), + Text( + extent={{-254,278},{-94,266}}, + textColor={0,0,127}, + textString="requires small chiller (1) off and large chiller (2) on."), + Text( + extent={{64,278},{228,268}}, + textColor={0,0,127}, + textString="add one more chiller (1) on top of current chiller (2)."), + Text( + extent={{62,292},{174,280}}, + textColor={0,0,127}, + textString="In stage up process (stage 2 to 3),"), + Text( + extent={{-256,-40},{-96,-52}}, + textColor={0,0,127}, + textString="requires large chiller (2) off and small chiller (1) on."), + Text( + extent={{-260,-26},{-140,-36}}, + textColor={0,0,127}, + textString="In stage down process (stage 2 to 1),"), + Text( + extent={{58,-42},{130,-52}}, + textColor={0,0,127}, + textString="disable chiller (2)."), + Text( + extent={{62,-28},{182,-38}}, + textColor={0,0,127}, + textString="In stage down process (stage 2 to 1),")})); +end NextChiller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ReduceDemand.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ReduceDemand.mo new file mode 100644 index 00000000000..f258a60579b --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ReduceDemand.mo @@ -0,0 +1,250 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation; +model ReduceDemand + "Validate sequence of reducing chiller demand when there is stage up command" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ReduceDemand + chiDemRed( + final nChi=2) + "Reduce operaing chiller load as the first step of stage up process" + annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ReduceDemand + chiDemRed1( + final nChi=2) + "Reduce operaing chiller load as the first step of stage down process when it requires another chiller on" + annotation (Placement(transformation(extent={{200,50},{220,70}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.15, final period=600) "Boolean pulse" + annotation (Placement(transformation(extent={{-260,90},{-240,110}}))); + Buildings.Controls.OBC.CDL.Logical.Not limDem "Limit demand command" + annotation (Placement(transformation(extent={{-220,90},{-200,110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiOn( + final k=true) "Operating chiller one" + annotation (Placement(transformation(extent={{-260,-150},{-240,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{-160,50},{-140,70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiLoa(final k=50) + "Chiller load" + annotation (Placement(transformation(extent={{-260,50},{-240,70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerLoa( + final k=0) "Zero chiller load" + annotation (Placement(transformation(extent={{-260,10},{-240,30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yOpeParLoaRatMin( + final k=0.7) + "Minimum cycling operative partial load ratio" + annotation (Placement(transformation(extent={{-260,-30},{-240,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staDow( + final k=false) "Stage down command" + annotation (Placement(transformation(extent={{-260,-70},{-240,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant onOff( + final k=false) "Chiller on-off command" + annotation (Placement(transformation(extent={{-260,-110},{-240,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.15, final period=600) + "Boolean pulse" + annotation (Placement(transformation(extent={{40,90},{60,110}}))); + Buildings.Controls.OBC.CDL.Logical.Not limDem1 "Limit demand command" + annotation (Placement(transformation(extent={{80,90},{100,110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiOn1[2]( + final k=fill(true,2)) "Operating chiller one" + annotation (Placement(transformation(extent={{40,-150},{60,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1[2] "Logical switch" + annotation (Placement(transformation(extent={{140,-50},{160,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiLoa1(final k=50) + "Chiller load" + annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yOpeParLoaRatMin1( + final k=0.7) + "Minimum cycling operative partial load ratio" + annotation (Placement(transformation(extent={{40,-100},{60,-80}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol( + final samplePeriod=20) + "Output the input signal with zero order hold" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol1[2]( + final samplePeriod=fill(20,2)) + "Output the input signal with zero order hold" + annotation (Placement(transformation(extent={{240,40},{260,60}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=2) "Replicate boolean input" + annotation (Placement(transformation(extent={{140,20},{160,40}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep( + final nout=2) "Replicate real input" + annotation (Placement(transformation(extent={{80,-50},{100,-30}}))); + +equation + connect(booPul.y, limDem.u) + annotation (Line(points={{-238,100},{-222,100}}, color={255,0,255})); + connect(limDem.y, chiDemRed.uDemLim) + annotation (Line(points={{-198,100},{-180,100},{-180,119},{-102,119}}, + color={255,0,255})); + connect(chiDemRed.yChiDem[1], zerOrdHol.u) + annotation (Line(points={{-78,113.5},{-70,113.5},{-70,100},{-62,100}}, + color={0,0,127})); + connect(limDem.y, swi.u2) + annotation (Line(points={{-198,100},{-180,100},{-180,60},{-162,60}}, + color={255,0,255})); + connect(chiLoa.y, swi.u3) + annotation (Line(points={{-238,60},{-190,60},{-190,52},{-162,52}}, + color={0,0,127})); + connect(zerOrdHol.y, swi.u1) + annotation (Line(points={{-38,100},{-30,100},{-30,80},{-170,80},{-170,68}, + {-162,68}}, color={0,0,127})); + connect(swi.y, chiDemRed.uChiLoa[1]) + annotation (Line(points={{-138,60},{-130,60},{-130,114.5},{-102,114.5}}, + color={0,0,127})); + connect(zerLoa.y, chiDemRed.uChiLoa[2]) + annotation (Line(points={{-238,20},{-126,20},{-126,115.5},{-102,115.5}}, + color={0,0,127})); + connect(yOpeParLoaRatMin.y, chiDemRed.yOpeParLoaRatMin) + annotation (Line(points={{-238,-20},{-122,-20},{-122,111},{-102,111}}, + color={0,0,127})); + connect(staDow.y, chiDemRed.uStaDow) + annotation (Line(points={{-238,-60},{-118,-60},{-118,108},{-102,108}}, + color={255,0,255})); + connect(onOff.y, chiDemRed.uOnOff) + annotation (Line(points={{-238,-100},{-114,-100},{-114,105},{-102,105}}, + color={255,0,255})); + connect(chiOn.y, chiDemRed.uChi[1]) + annotation (Line(points={{-238,-140},{-110,-140},{-110,100.5},{-102,100.5}}, + color={255,0,255})); + connect(onOff.y, chiDemRed.uChi[2]) + annotation (Line(points={{-238,-100},{-106,-100},{-106,101.5},{-102,101.5}}, + color={255,0,255})); + connect(booPul1.y, limDem1.u) + annotation (Line(points={{62,100},{78,100}}, color={255,0,255})); + connect(limDem1.y, chiDemRed1.uDemLim) + annotation (Line(points={{102,100},{120,100},{120,69},{198,69}}, + color={255,0,255})); + connect(yOpeParLoaRatMin1.y, chiDemRed1.yOpeParLoaRatMin) + annotation (Line(points={{62,-90},{178,-90},{178,61},{198,61}}, + color={0,0,127})); + connect(chiDemRed1.yChiDem, zerOrdHol1.u) + annotation (Line(points={{222,64},{230,64},{230,50},{238,50}}, + color={0,0,127})); + connect(chiLoa1.y, reaRep.u) + annotation (Line(points={{62,-40},{78,-40}}, color={0,0,127})); + connect(booRep.y, swi1.u2) + annotation (Line(points={{162,30},{170,30},{170,10},{120,10},{120,-40}, + {138,-40}}, color={255,0,255})); + connect(reaRep.y, swi1.u3) + annotation (Line(points={{102,-40},{110,-40},{110,-48},{138,-48}}, + color={0,0,127})); + connect(zerOrdHol1.y, swi1.u1) + annotation (Line(points={{262,50},{270,50},{270,-10},{130,-10},{130,-32}, + {138,-32}}, color={0,0,127})); + connect(swi1.y, chiDemRed1.uChiLoa) + annotation (Line(points={{162,-40},{174,-40},{174,65},{198,65}}, + color={0,0,127})); + connect(limDem1.y, booRep.u) + annotation (Line(points={{102,100},{120,100},{120,30},{138,30}}, + color={255,0,255})); + connect(limDem1.y, chiDemRed1.uStaDow) + annotation (Line(points={{102,100},{120,100},{120,58},{198,58}}, + color={255,0,255})); + connect(limDem1.y, chiDemRed1.uOnOff) + annotation (Line(points={{102,100},{120,100},{120,55},{198,55}}, + color={255,0,255})); + connect(chiOn1.y, chiDemRed1.uChi) + annotation (Line(points={{62,-140},{182,-140},{182,51},{198,51}}, + color={255,0,255})); + +annotation ( + experiment(StopTime=600, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ReduceDemand.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ReduceDemand. +

                      +

                      +It has two instances as below to demonstrate the process of reducing chiller demand +when the plant is in staging process. +

                      +

                      +The instance chiDemRed shows the process of reducing the chiller +demand when the plant starts staging up. +

                      +
                        +
                      • +Before 90 seconds, the plant is not in staging process. There is no change to the +chiller demand and it is not requiring demand reduction (yChiDemRed=true)). +
                      • +
                      • +At 90 seconds, the staging process starts and it requires reducing the chiller +demand (uDemLim=true, yChiDemRed=false). It requires +reducing the demand by the larger value between chiDemRedFac (75%) +and yOpeParLoaRatMin (which is 0.7 in this case), which reduces from +50 A to 37.5 A (yChiDem). +
                      • +
                      • +At 100 seconds, the chiller load becomes 37.5 A, which is less than 80% of the +value before the staging (50 A). The demand reducing process is done +(yChiDemRed=true). +
                      • +
                      + +

                      +The instance chiDemRed1 shows the process of reducing the chiller +demand when the plant starts staging up. The process requires enabling a large +chiller and disabling a small chiller. +

                      +
                        +
                      • +Before 90 seconds, the plant is not in staging process. There is no change to +the chiller demand and it is not requiring demand reduction (yChiDemRed=true)). +
                      • +
                      • +At 90 seconds, the staging process starts and it requires reducing the chiller +demand (uDemLim=true, yChiDemRed=false). It requires +reducing the demand by the larger value between chiDemRedFac (75%) +and yOpeParLoaRatMin (which is 0.7 in this case). It requires reducing +both chillers demand from 50 A to 37.5 A (yChiDem). +
                      • +
                      • +At 100 seconds, both chillers load becomes 37.5 A, which is less than 80% of the +value before the staging (50 A). The demand reducing process is done +(yChiDemRed=true). +
                      • +
                      +", revisions=" +
                        +
                      • +September 26, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-280,-160},{280,160}}), + graphics={ + Text( + extent={{-258,152},{-184,142}}, + textColor={0,0,127}, + textString="In stage up process,"), + Text( + extent={{-258,138},{-166,128}}, + textColor={0,0,127}, + textString="enable one more chiller."), + Text( + extent={{38,136},{130,126}}, + textColor={0,0,127}, + textString="enable enabling chiller."), + Text( + extent={{42,152},{244,140}}, + textColor={0,0,127}, + textString="In stage down process that requires chiller on and off,")})); +end ReduceDemand; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ResetMinBypass.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ResetMinBypass.mo new file mode 100644 index 00000000000..c0d7ee56670 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ResetMinBypass.mo @@ -0,0 +1,117 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation; +model ResetMinBypass + "Validate sequence of reseting minimum flow bypass" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ResetMinBypass + minBypRes + "Check if the setpoint has achieved" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.15, + final period=600) "Boolean pulse" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + Buildings.Controls.OBC.CDL.Logical.Not staUp "Stage up command" + annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); + Buildings.Controls.OBC.CDL.Logical.Not upStrDev + "Upstream device reset status" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + final width=0.2, + final period=600) "Boolean pulse" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp minFloSet( + final height=0.5, + final duration=60, + final offset=1, + final startTime=120) "Minimum chiller water flow setpoint" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp meaFlo( + final height=0.5, + final duration=80, + final offset=1, + final startTime=120) "Measured chiller water flow" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Buildings.Controls.OBC.CDL.Logical.Not upStrDev1 + "Upstream device reset status" + annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); + +equation + connect(booPul2.y, upStrDev.u) + annotation (Line(points={{-58,80},{-42,80}}, color={255,0,255})); + connect(booPul1.y, staUp.u) + annotation (Line(points={{-58,40},{-42,40}}, color={255,0,255})); + connect(upStrDev.y, minBypRes.uUpsDevSta) + annotation (Line(points={{-18,80},{0,80},{0,8},{18,8}}, color={255,0,255})); + connect(staUp.y, minBypRes.uStaPro) annotation (Line(points={{-18,40},{-10,40}, + {-10,4},{18,4}}, color={255,0,255})); + connect(meaFlo.y, minBypRes.VChiWat_flow) + annotation (Line(points={{-18,0},{18,0}}, color={0,0,127})); + connect(minFloSet.y, minBypRes.VMinChiWat_setpoint) + annotation (Line(points={{-18,-40},{0,-40},{0,-4},{18,-4}}, color={0,0,127})); + connect(upStrDev.y, upStrDev1.u) annotation (Line(points={{-18,80},{0,80},{0,20}, + {-50,20},{-50,-80},{-42,-80}}, color={255,0,255})); + connect(upStrDev1.y, minBypRes.uSetChaPro) + annotation (Line(points={{-18,-80},{10,-80},{10,-8},{18,-8}}, color={255,0,255})); + +annotation ( + experiment(StopTime=600, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ResetMinBypass.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ResetMinBypass. +

                      +

                      +The instance minBypRes shows the process of changing the bypass valve +when the minimum bypass chilled water flow setpoint has been changed when the +plant is in a staging up process. +

                      +
                        +
                      • +Before 90 seconds, the plant is not in staging process. There is no change to the +minimum bypass valve (yMinBypRes=true). +
                      • +
                      • +At 90 seconds, the plant starts staging process. However, it is not yet to change +the bypass valve (yMinBypRes=true). As the upstream subprocess has +not finished (uUpsDevSta=false). +
                      • +
                      • +At 120 seconds, the plant is still in staging process and the upstream subprocess +has finished (uUpsDevSta=true). It starts changing the minimum flow +setpoint (uSetChaPro=true) and changing the bypass valve +(yMinBypRes=false). The measured chiller water flow becomes different +from its setpoint. +
                      • +
                      • +At about 200 seconds, the measured chilled water flow achieved the setpoint. Thus +the bypass valve position has been changed successfully. After 60 seconds to about +260 seconds, the minimum bypass valve position changing process is finished +(yMinBypRes=true). +
                      • +
                      +", revisions=" +
                        +
                      • +September 26, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-120},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end ResetMinBypass; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithOff.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithOff.mo new file mode 100644 index 00000000000..9c8c193d67c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithOff.mo @@ -0,0 +1,271 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation; +model UpEndWithOff + "Validate sequence of end staging up process which requires chiller OFF" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.UpEnd + endUp1( + final nChi=2, + final chaChiWatIsoTim=300, + final byPasSetTim=300, + final minFloSet={0.5,1}, + final maxFloSet={1,1.5}) + "End staging up process which does require one chiller on and another chiller off" + annotation (Placement(transformation(extent={{60,150},{80,170}}))); + +protected + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real input to integer output" + annotation (Placement(transformation(extent={{-60,150},{-40,170}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Logical switch" + annotation (Placement(transformation(extent={{-100,150},{-80,170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant nexEnaChi1(final k=2) + "Next enable chiller" + annotation (Placement(transformation(extent={{-180,170},{-160,190}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1(final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{-180,130},{-160,150}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul3( + final width=0.15, + final period=1200) "Boolean pulse" + annotation (Placement(transformation(extent={{-180,80},{-160,100}}))); + Buildings.Controls.OBC.CDL.Logical.Not staUp1 "Stage up command" + annotation (Placement(transformation(extent={{-140,80},{-120,100}}))); + Buildings.Controls.OBC.CDL.Logical.Not upStrDev1 "Upstream device status" + annotation (Placement(transformation(extent={{-140,40},{-120,60}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul4( + final width=0.20, + final period=1200) "Boolean pulse" + annotation (Placement(transformation(extent={{-180,40},{-160,60}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiOneSta1(final pre_u_start=true) + "Chiller one status" + annotation (Placement(transformation(extent={{140,120},{160,140}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiTwoSta1(final pre_u_start=false) + "Chiller two status" + annotation (Placement(transformation(extent={{140,80},{160,100}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 + "Convert real input to integer output" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Logical switch" + annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer4(final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{-180,-40},{-160,-20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant nexDisChi2(final k=1) + "Next disable chiller" + annotation (Placement(transformation(extent={{-180,0},{-160,20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant fulOpe(final k=1) + "Full open" + annotation (Placement(transformation(extent={{-180,-80},{-160,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiIsoVal1 + "Chilled water isolation valve one" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol1[2]( + final samplePeriod=fill(10, 2)) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{140,-20},{160,0}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant enaHeaCon(final k=true) + "Enable head pressure control" + annotation (Placement(transformation(extent={{-180,-170},{-160,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Switch chiOneHeaCon + "Chiller one head pressure control" + annotation (Placement(transformation(extent={{-100,-170},{-80,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiOneHea1(final pre_u_start=true) + "Chiller one head pressure control" + annotation (Placement(transformation(extent={{140,-130},{160,-110}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatFlo1(final k=1) + "Chilled water flow rate" + annotation (Placement(transformation(extent={{-180,-210},{-160,-190}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatFlo2(final k=1.667) + "Minimum chilled water flow setpoint calculated from upstream process" + annotation (Placement(transformation(extent={{-180,-250},{-160,-230}}))); + +equation + connect(booPul3.y, staUp1.u) + annotation (Line(points={{-158,90},{-142,90}}, color={255,0,255})); + connect(booPul4.y, upStrDev1.u) + annotation (Line(points={{-158,50},{-142,50}}, color={255,0,255})); + connect(nexEnaChi1.y, swi1.u1) + annotation (Line(points={{-158,180},{-140,180},{-140,168},{-102,168}}, + color={0,0,127})); + connect(zer1.y, swi1.u3) + annotation (Line(points={{-158,140},{-140,140},{-140,152},{-102,152}}, + color={0,0,127})); + connect(swi1.y, reaToInt1.u) + annotation (Line(points={{-78,160},{-62,160}}, color={0,0,127})); + connect(staUp1.y, swi1.u2) + annotation (Line(points={{-118,90},{-110,90},{-110,160},{-102,160}}, + color={255,0,255})); + connect(reaToInt1.y, endUp1.nexEnaChi) + annotation (Line(points={{-38,160},{-20,160},{-20,172},{58,172}}, + color={255,127,0})); + connect(staUp1.y, endUp1.uStaUp) + annotation (Line(points={{-118,90},{-16,90},{-16,170},{58,170}}, + color={255,0,255})); + connect(upStrDev1.y, endUp1.uEnaChiWatIsoVal) + annotation (Line(points={{-118,50},{-12,50},{-12,168},{58,168}}, + color={255,0,255})); + connect(endUp1.yChi[1], chiOneSta1.u) + annotation (Line(points={{82,168.5},{128,168.5},{128,130},{138,130}}, + color={255,0,255})); + connect(endUp1.yChi[2], chiTwoSta1.u) + annotation (Line(points={{82,169.5},{130,169.5},{130,90},{138,90}}, + color={255,0,255})); + connect(chiTwoSta1.y, endUp1.uChi[2]) + annotation (Line(points={{162,90},{176,90},{176,60},{-8,60},{-8,166.5},{58,166.5}}, + color={255,0,255})); + connect(chiOneSta1.y, endUp1.uChi[1]) + annotation (Line(points={{162,130},{180,130},{180,40},{-4,40},{-4,165.5}, + {58,165.5}}, color={255,0,255})); + connect(staUp1.y, endUp1.uOnOff) + annotation (Line(points={{-118,90},{0,90},{0,164},{58,164}}, + color={255,0,255})); + connect(nexDisChi2.y, swi3.u1) + annotation (Line(points={{-158,10},{-140,10},{-140,-2},{-102,-2}}, + color={0,0,127})); + connect(zer4.y, swi3.u3) + annotation (Line(points={{-158,-30},{-140,-30},{-140,-18},{-102,-18}}, + color={0,0,127})); + connect(staUp1.y, swi3.u2) + annotation (Line(points={{-118,90},{-110,90},{-110,-10},{-102,-10}}, + color={255,0,255})); + connect(swi3.y, reaToInt2.u) + annotation (Line(points={{-78,-10},{-62,-10}}, color={0,0,127})); + connect(reaToInt2.y, endUp1.nexDisChi) + annotation (Line(points={{-38,-10},{4,-10},{4,162},{58,162}}, + color={255,127,0})); + connect(chiTwoSta1.y, endUp1.uChiWatReq[2]) + annotation (Line(points={{162,90},{176,90},{176,60},{8,60},{8,160.5},{58,160.5}}, + color={255,0,255})); + connect(chiOneSta1.y, endUp1.uChiWatReq[1]) + annotation (Line(points={{162,130},{180,130},{180,40},{12,40},{12,159.5}, + {58,159.5}}, color={255,0,255})); + connect(fulOpe.y, chiIsoVal1.u3) + annotation (Line(points={{-158,-70},{-140,-70},{-140,-78},{-102,-78}}, + color={0,0,127})); + connect(staUp1.y, chiIsoVal1.u2) + annotation (Line(points={{-118,90},{-110,90},{-110,-70},{-102,-70}}, + color={255,0,255})); + connect(endUp1.yChiWatIsoVal, zerOrdHol1.u) + annotation (Line(points={{82,165},{124,165},{124,-10},{138,-10}}, + color={0,0,127})); + connect(zerOrdHol1[1].y, chiIsoVal1.u1) + annotation (Line(points={{162,-10},{166,-10},{166,-40},{-120,-40},{-120,-62}, + {-102,-62}}, color={0,0,127})); + connect(chiIsoVal1.y, endUp1.uChiWatIsoVal[1]) + annotation (Line(points={{-78,-70},{16,-70},{16,157.5},{58,157.5}}, + color={0,0,127})); + connect(chiOneSta1.y, endUp1.uConWatReq[1]) + annotation (Line(points={{162,130},{180,130},{180,40},{24,40},{24,155.5}, + {58,155.5}}, color={255,0,255})); + connect(chiTwoSta1.y, endUp1.uConWatReq[2]) + annotation (Line(points={{162,90},{176,90},{176,60},{28,60},{28,156.5},{58,156.5}}, + color={255,0,255})); + connect(enaHeaCon.y, chiOneHeaCon.u3) + annotation (Line(points={{-158,-160},{-140,-160},{-140,-168},{-102,-168}}, + color={255,0,255})); + connect(staUp1.y, chiOneHeaCon.u2) + annotation (Line(points={{-118,90},{-110,90},{-110,-160},{-102,-160}}, + color={255,0,255})); + connect(endUp1.yChiHeaCon[1], chiOneHea1.u) + annotation (Line(points={{82,160.5},{120,160.5},{120,-120},{138,-120}}, + color={255,0,255})); + connect(chiOneHea1.y, chiOneHeaCon.u1) + annotation (Line(points={{162,-120},{170,-120},{170,-140},{-120,-140}, + {-120,-152},{-102,-152}}, color={255,0,255})); + connect(chiOneHeaCon.y, endUp1.uChiHeaCon[1]) + annotation (Line(points={{-78,-160},{32,-160},{32,153.5},{58,153.5}}, + color={255,0,255})); + connect(chiWatFlo1.y, endUp1.VChiWat_flow) + annotation (Line(points={{-158,-200},{40,-200},{40,152},{58,152}}, + color={0,0,127})); + connect(fulOpe.y, endUp1.uChiWatIsoVal[2]) + annotation (Line(points={{-158,-70},{-140,-70},{-140,-100},{20,-100},{20,158.5}, + {58,158.5}}, color={0,0,127})); + connect(enaHeaCon.y, endUp1.uChiHeaCon[2]) + annotation (Line(points={{-158,-160},{-140,-160},{-140,-180},{36,-180},{36,154.5}, + {58,154.5}}, color={255,0,255})); + connect(chiWatFlo2.y, endUp1.VMinChiWat_setpoint) + annotation (Line(points={{-158,-240},{44,-240},{44,150},{58,150}}, color={0,0,127})); + +annotation ( + experiment(StopTime=1200, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithOff.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.UpEnd. +

                      +

                      +It shows how the staging up process ends when the process requires one chiller +being enabled and another chiller being disabled. The instance endUp1 +shows the results as below. It stages up from stage 1 which requires smaller chiller +1 being enabled, to stage 2 which requires larger chiller 2 being enabled and +chiller 1 being disabled. +

                      +
                        +
                      • +Before 180 seconds, the plant is not in stagingg up process (uStaUp=false). +
                      • +
                      • +At 180 seconds, the plant starts staging up (uStaUp=true). However, +it does not yet starts the subprocess of ending the staging process +(uEnaChiWatIsoVal=false). +
                      • +
                      • +At 240 seconds, the ending process starts (uEnaChiWatIsoVal=true). +The chiller 2 is enabled (uChi[2]=true, uChiWatReq[2]=true, +uConWatReq[2]=true). +
                      • +
                      • +After 300 seconds at 540 seconds, the chiller 1 becomes disabled +(uChi[1]=false). The chiller 1 becomes not requiring the chilled water +and condenser water (uChiWatReq[1]=false, uConWatReq[1]=false). +It starts slowly close the chilled water isolation valve of chiller 1. +
                      • +
                      • +After 300 seconds (chaChiWatIsoTim) at 840 seconds, the chilled water +isolation valve of chilelr 1 is fully closed. The head pressure control of chiller +1 becomes disabled (yChiHeaCon[1]). The chilled water minimum flow +setpoint chnages to the new setpoint. +
                      • +
                      • +After 60 seconds (aftByPasSetTim) at 900 seconds, the ending process +is done (yEndSta=true). +
                      • +
                      +", revisions=" +
                        +
                      • +September 30, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-200,-260},{200,260}}), + graphics={ + Text( + extent={{-182,250},{-150,242}}, + textColor={0,0,127}, + textString="Stage up:"), + Text( + extent={{-176,236},{-16,226}}, + textColor={0,0,127}, + textString="from stage 1 which has small chiller 1 being enabled, "), + Text( + extent={{-180,224},{82,210}}, + textColor={0,0,127}, + textString="to stage 2 which has small chiller 1 being disabled and large chiller 2 being enabled.")})); +end UpEndWithOff; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithoutOff.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithoutOff.mo new file mode 100644 index 00000000000..191ed5e8001 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithoutOff.mo @@ -0,0 +1,202 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation; +model UpEndWithoutOff + "Validate sequence of end staging up process which does not require chiller OFF" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.UpEnd + endUp( + final nChi=2, + final chaChiWatIsoTim=300, + final byPasSetTim=300, + final minFloSet={0.5,1}, + final maxFloSet={1,1.5}) + "End staging up process which does not require one chiller on and another chiller off" + annotation (Placement(transformation(extent={{100,140},{120,160}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( + freqHz=1/1200) "Source for the trigger sampling" + annotation (Placement(transformation(extent={{80,190},{100,210}}))); + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam + "Check if there is end staging edge " + annotation (Placement(transformation(extent={{140,190},{160,210}}))); +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.15, + final period=1200) "Boolean pulse" + annotation (Placement(transformation(extent={{-140,70},{-120,90}}))); + Buildings.Controls.OBC.CDL.Logical.Not staUp "Stage up command" + annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant nexDisChi( + final k=0) "Next disabling chiller" + annotation (Placement(transformation(extent={{-140,-50},{-120,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant onOff( + final k=false) "Chiller on-off command" + annotation (Placement(transformation(extent={{-140,-10},{-120,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiHea[2]( + final k=fill(true,2)) "Chiller one head pressure control" + annotation (Placement(transformation(extent={{-140,-170},{-120,-150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatFlo(final k=1.667) + "Chilled water flow rate" + annotation (Placement(transformation(extent={{-140,-250},{-120,-230}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiOneSta( + final pre_u_start=true) "Chiller one status" + annotation (Placement(transformation(extent={{140,110},{160,130}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Logical switch" + annotation (Placement(transformation(extent={{-60,140},{-40,160}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant nexEnaChi( + final k=2) "Next enable chiller" + annotation (Placement(transformation(extent={{-140,160},{-120,180}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer2(final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{-140,120},{-120,140}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real input to integer output" + annotation (Placement(transformation(extent={{-20,140},{0,160}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.20, + final period=1200) "Boolean pulse" + annotation (Placement(transformation(extent={{-140,30},{-120,50}}))); + Buildings.Controls.OBC.CDL.Logical.Not upStrDev "Upstream device status" + annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiTwoSta( + final pre_u_start=false) "Chiller two status" + annotation (Placement(transformation(extent={{140,70},{160,90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatIsoVal[2]( + final k=fill(1, 2)) "Constant one" + annotation (Placement(transformation(extent={{-140,-90},{-120,-70}}))); + +equation + connect(booPul.y, staUp.u) + annotation (Line(points={{-118,80},{-102,80}}, color={255,0,255})); + connect(staUp.y, swi2.u2) + annotation (Line(points={{-78,80},{-70,80},{-70,150},{-62,150}}, + color={255,0,255})); + connect(nexEnaChi.y, swi2.u1) + annotation (Line(points={{-118,170},{-100,170},{-100,158},{-62,158}}, + color={0,0,127})); + connect(zer2.y, swi2.u3) + annotation (Line(points={{-118,130},{-100,130},{-100,142},{-62,142}}, + color={0,0,127})); + connect(swi2.y, reaToInt.u) + annotation (Line(points={{-38,150},{-22,150}}, color={0,0,127})); + connect(booPul1.y, upStrDev.u) + annotation (Line(points={{-118,40},{-102,40}}, color={255,0,255})); + connect(endUp.yChi[1], chiOneSta.u) + annotation (Line(points={{122,158.5},{130,158.5},{130,120},{138,120}}, + color={255,0,255})); + connect(endUp.yChi[2], chiTwoSta.u) + annotation (Line(points={{122,159.5},{130,159.5},{130,80},{138,80}}, + color={255,0,255})); + connect(reaToInt.y, endUp.nexEnaChi) + annotation (Line(points={{2,150},{20,150},{20,162},{98,162}}, + color={255,127,0})); + connect(staUp.y, endUp.uStaUp) + annotation (Line(points={{-78,80},{24,80},{24,160},{98,160}}, + color={255,0,255})); + connect(upStrDev.y, endUp.uEnaChiWatIsoVal) + annotation (Line(points={{-78,40},{28,40},{28,158},{98,158}}, + color={255,0,255})); + connect(chiOneSta.y, endUp.uChi[1]) + annotation (Line(points={{162,120},{174,120},{174,100},{32,100},{32,155.5},{ + 98,155.5}}, color={255,0,255})); + connect(chiTwoSta.y, endUp.uChi[2]) + annotation (Line(points={{162,80},{170,80},{170,60},{36,60},{36,156.5},{98,156.5}}, + color={255,0,255})); + connect(onOff.y, endUp.uOnOff) + annotation (Line(points={{-118,0},{40,0},{40,154},{98,154}}, + color={255,0,255})); + connect(nexDisChi.y, endUp.nexDisChi) + annotation (Line(points={{-118,-40},{44,-40},{44,152},{98,152}}, + color={255,127,0})); + connect(chiOneSta.y, endUp.uChiWatReq[1]) + annotation (Line(points={{162,120},{174,120},{174,100},{48,100},{48,149.5},{ + 98,149.5}}, color={255,0,255})); + connect(chiTwoSta.y, endUp.uChiWatReq[2]) + annotation (Line(points={{162,80},{170,80},{170,60},{52,60},{52,150.5},{98,150.5}}, + color={255,0,255})); + connect(chiOneSta.y, endUp.uConWatReq[1]) + annotation (Line(points={{162,120},{174,120},{174,100},{60,100},{60,145.5},{ + 98,145.5}}, color={255,0,255})); + connect(chiTwoSta.y, endUp.uConWatReq[2]) + annotation (Line(points={{162,80},{170,80},{170,60},{64,60},{64,146.5},{98,146.5}}, + color={255,0,255})); + connect(chiWatFlo.y, endUp.VChiWat_flow) + annotation (Line(points={{-118,-240},{72,-240},{72,142},{98,142}}, + color={0,0,127})); + connect(chiWatIsoVal.y, endUp.uChiWatIsoVal) + annotation (Line(points={{-118,-80},{56,-80},{56,148},{98,148}}, + color={0,0,127})); + connect(chiHea.y, endUp.uChiHeaCon) + annotation (Line(points={{-118,-160},{68,-160},{68,144},{98,144}}, + color={255,0,255})); + connect(chiWatFlo.y, endUp.VMinChiWat_setpoint) + annotation (Line(points={{-118,-240},{72,-240},{72,140},{98,140}}, + color={0,0,127})); + connect(sin.y, triSam.u) + annotation (Line(points={{102,200},{138,200}}, color={0,0,127})); + connect(endUp.yEndSta, triSam.trigger) annotation (Line(points={{122,143},{150, + 143},{150,188}}, color={255,0,255})); +annotation ( + experiment(StopTime=1200, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithoutOff.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.UpEnd. +

                      +

                      +It shows how the staging up process ends when the process does not require one chiller +being enabled and another chiller being disabled. The instance endUp +shows the results as below. It stages up from stage 1 which requires chiller 1 being +enabled, to stage 2 which requires chiller 1 and chiller 2 being enabled. +

                      +
                        +
                      • +Before 180 seconds, the plant is not in stagingg up process (uStaUp=false). +
                      • +
                      • +At 180 seconds, the plant starts staging up (uStaUp=true). However, +it does not yet starts the subprocess of ending the staging process +(uEnaChiWatIsoVal=false). +
                      • +
                      • +At 240 seconds, the ending process starts (uEnaChiWatIsoVal=true). +The chiller 2 is enabled (yChi[2]=true). The ending process is done +(the output yEndSta has a rising edge). +
                      • +
                      +", revisions=" +
                        +
                      • +September 30, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-180,-260},{180,260}}), + graphics={ + Text( + extent={{-142,240},{-110,232}}, + textColor={0,0,127}, + textString="Stage up:"), + Text( + extent={{-138,226},{22,216}}, + textColor={0,0,127}, + textString="from stage 1 which has only chiller 1 being enabled, "), + Text( + extent={{-138,214},{16,200}}, + textColor={0,0,127}, + textString="to stage 2 which has chiller 1 and 2 being enabled.")})); +end UpEndWithoutOff; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/package.mo new file mode 100644 index 00000000000..aace7958dd6 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/package.mo @@ -0,0 +1,36 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences; +package Validation "Collection of validation models" +annotation (preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}}), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/package.order new file mode 100644 index 00000000000..673266a6037 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/package.order @@ -0,0 +1,12 @@ +CHWIsoVal +DisableChiller +DownStartWithOn +DownStartWithoutOn +EnableCWPump +EnableChiller +HeadControl +NextChiller +ReduceDemand +ResetMinBypass +UpEndWithOff +UpEndWithoutOff diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/package.mo new file mode 100644 index 00000000000..117822b0a83 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/package.mo @@ -0,0 +1,44 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes; +package Subsequences "Package of subsequences for staging up and down devices" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains subsequences for controlling devices when there is stage-up +or stage-down command. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Subsequences; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/package.order new file mode 100644 index 00000000000..c5c50244d09 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/package.order @@ -0,0 +1,11 @@ +CHWIsoVal +DisableChiller +DownStart +EnableCWPump +EnableChiller +HeadControl +NextChiller +ReduceDemand +ResetMinBypass +UpEnd +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Up.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Up.mo new file mode 100644 index 00000000000..27c5af70e4c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Up.mo @@ -0,0 +1,934 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes; +block Up "Sequence for control devices when there is stage-up command" + + parameter Integer nChi=2 "Total number of chillers in the plant"; + parameter Integer nConWatPum=2 "Total number of condenser water pumps"; + parameter Integer totSta=6 + "Total number of plant stages, including stage zero and the stages with a WSE, if applicable"; + parameter Integer nChiSta=3 + "Total number of chiller stages, including stage zero but not the stages with a WSE, if applicable"; + parameter Boolean have_WSE=true + "True: have waterside economizer"; + parameter Boolean have_ponyChiller=false + "True: have pony chiller"; + parameter Boolean have_parChi=true + "True: the plant has parallel chillers"; + parameter Boolean have_heaConWatPum=true + "True: headered condenser water pumps"; + parameter Boolean have_fixSpeConWatPum=true + "True: fixed speed condenser water pump"; + parameter Boolean need_reduceChillerDemand=false + "True: need limit chiller demand when chiller staging"; + parameter Real chiDemRedFac=0.75 + "Demand reducing factor of current operating chillers" + annotation (Dialog(group="Limit chiller demand", enable=need_reduceChillerDemand)); + parameter Real holChiDemTim( + unit="s", + displayUnit="s")=300 + "Maximum time to wait for the actual demand less than percentage of current load" + annotation (Dialog(group="Limit chiller demand", enable=need_reduceChillerDemand)); + parameter Real byPasSetTim( + unit="s", + displayUnit="s")=300 + "Time to reset minimum bypass flow" + annotation (Dialog(group="Reset CHW minimum flow setpoint")); + parameter Real minFloSet[nChi]( + final unit=fill("m3/s",nChi), + displayUnit=fill("m3/s",nChi))={0.0089,0.0089} + "Minimum chilled water flow through each chiller" + annotation (Dialog(group="Reset CHW minimum flow setpoint")); + parameter Real maxFloSet[nChi]( + final unit=fill("m3/s",nChi), + displayUnit=fill("m3/s",nChi))={0.025,0.025} + "Maximum chilled water flow through each chiller" + annotation (Dialog(group="Reset CHW minimum flow setpoint")); + parameter Real aftByPasSetTim( + unit="s", + displayUnit="s")=60 + "Time to allow loop to stabilize after resetting minimum chilled water flow setpoint" + annotation (Dialog(group="Reset bypass")); + parameter Real staVec[totSta]={0,0.5,1,1.5,2,2.5} + "Chiller stage vector, element value like x.5 means chiller stage x plus WSE" + annotation (Dialog(group="Enable condenser water pump")); + parameter Real desConWatPumSpe[totSta]={0,0.5,0.75,0.6,0.75,0.9} + "Design condenser water pump speed setpoints, according to current chiller stage and WSE status" + annotation (Dialog(group="Enable condenser water pump")); + parameter Real desConWatPumNum[totSta]={0,1,1,2,2,2} + "Design number of condenser water pumps that should be ON, according to current chiller stage and WSE status" + annotation (Dialog(group="Enable condenser water pump")); + parameter Real desChiNum[nChiSta]={0,1,2} + "Design number of chiller that should be ON, according to current chiller stage" + annotation (Dialog(group="Enable condenser water pump", enable=have_fixSpeConWatPum)); + parameter Real thrTimEnb( + unit="s", + displayUnit="s")=10 + "Threshold time to enable head pressure control after condenser water pump being reset" + annotation (Dialog(group="Enable head pressure control")); + parameter Real waiTim( + unit="s", + displayUnit="s")=30 + "Waiting time after enabling next head pressure control" + annotation (Dialog(group="Enable head pressure control")); + parameter Real chaChiWatIsoTim( + unit="s", + displayUnit="s")=300 + "Time to slowly change isolation valve, should be determined in the field" + annotation (Dialog(group="Enable CHW isolation valve")); + parameter Real proOnTim( + unit="s", + displayUnit="s")=300 + "Threshold time to check after newly enabled chiller being operated" + annotation (Dialog(group="Enable next chiller",enable=have_ponyChiller)); + parameter Real pumSpeChe = 0.05 + "Lower threshold value to check if condenser water pump has achieved setpoint" + annotation (Dialog(tab="Advanced", group="Enable condenser water pump")); + parameter Real relFloDif=0.05 + "Relative error to the setpoint for checking if it has achieved flow rate setpoint" + annotation (Dialog(tab="Advanced", group="Reset bypass")); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uStaSet + "Chiller stage setpoint index" + annotation (Placement(transformation(extent={{-280,180},{-240,220}}), + iconTransformation(extent={{-140,170},{-100,210}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiSet[nChi] + "Vector of chillers status setpoint" + annotation (Placement(transformation(extent={{-280,150},{-240,190}}), + iconTransformation(extent={{-140,140},{-100,180}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiLoa[nChi]( + final quantity=fill("ElectricCurrent", nChi), + final unit=fill("A", nChi)) + if need_reduceChillerDemand + "Current chiller load" + annotation (Placement(transformation(extent={{-280,90},{-240,130}}), + iconTransformation(extent={{-140,100},{-100,140}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller status: true=ON" + annotation (Placement(transformation(extent={{-280,60},{-240,100}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( + final min=0, + final unit="m3/s", + final quantity="VolumeFlowRate") "Measured chilled water flow rate" + annotation (Placement(transformation(extent={{-280,30},{-240,70}}), + iconTransformation(extent={{-140,56},{-100,96}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiConIsoVal[nChi] + if have_heaConWatPum + "Chiller condenser water isolation valve status" + annotation (Placement(transformation(extent={{-280,-10},{-240,30}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiSta + "Current chiller stage, it would be the same as chiller stage setpoint when it is not in staging process" + annotation (Placement(transformation(extent={{-280,-30},{-240,10}}), + iconTransformation(extent={{-140,10},{-100,50}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEnaPlaConPum + "True: enable condenser water pump when the plant is just enabled" + annotation (Placement(transformation(extent={{-280,-56},{-240,-16}}), + iconTransformation(extent={{-140,-10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uConWatReq[nChi] + "Condenser water requst status for each chiller" + annotation (Placement(transformation(extent={{-280,-90},{-240,-50}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWSE if have_WSE + "Water side economizer status: true = ON, false = OFF" + annotation (Placement(transformation(extent={{-280,-110},{-240,-70}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpeSet( + final min=0, + final max=1, + final unit="1") if not have_fixSpeConWatPum + "Condenser water pump speed setpoint" + annotation (Placement(transformation(extent={{-280,-130},{-240,-90}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpe( + final min=0, + final max=1, + final unit="1") if not have_fixSpeConWatPum + "Current condenser water pump speed" + annotation (Placement(transformation(extent={{-280,-150},{-240,-110}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEnaPlaConIso + "True: enable condenser water pump when then plant is just enabled" + annotation (Placement(transformation(extent={{-280,-180},{-240,-140}}), + iconTransformation(extent={{-140,-120},{-100,-80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uConWatPum[nConWatPum] if have_fixSpeConWatPum + "Status indicating if condenser water pump is running" + annotation (Placement(transformation(extent={{-280,-210},{-240,-170}}), + iconTransformation(extent={{-140,-150},{-100,-110}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiHeaCon[nChi] + "Chillers head pressure control status" + annotation (Placement(transformation(extent={{-280,-240},{-240,-200}}), + iconTransformation(extent={{-140,-170},{-100,-130}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiWatIsoVal[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Chilled water isolation valve position" + annotation (Placement(transformation(extent={{-280,-270},{-240,-230}}), + iconTransformation(extent={{-140,-190},{-100,-150}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatReq[nChi] + "Chilled water requst status for each chiller" + annotation (Placement(transformation(extent={{-280,-300},{-240,-260}}), + iconTransformation(extent={{-140,-210},{-100,-170}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yStaPro + "Indicate if it is in stage-up process: true=in stage-up process" + annotation (Placement(transformation(extent={{240,190},{280,230}}), + iconTransformation(extent={{100,170},{140,210}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiDem[nChi]( + final quantity=fill("ElectricCurrent", nChi), + final unit=fill("A", nChi)) + if need_reduceChillerDemand + "Chiller demand setpoint" + annotation (Placement(transformation(extent={{240,160},{280,200}}), + iconTransformation(extent={{100,130},{140,170}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatMinFloSet( + final min=0, + final unit="m3/s", + final quantity="VolumeFlowRate") + "Chilled water minimum flow setpoint" + annotation (Placement(transformation(extent={{240,20},{280,60}}), + iconTransformation(extent={{100,90},{140,130}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yTowStaUp + "Tower stage up status: true=stage up cooling tower" + annotation (Placement(transformation(extent={{240,-20},{280,20}}), + iconTransformation(extent={{100,50},{140,90}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLeaPum + "Lead condenser water pump status" + annotation (Placement(transformation(extent={{240,-50},{280,-10}}), + iconTransformation(extent={{100,10},{140,50}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yDesConWatPumSpe( + final min=0, + final max=1, + final unit="1") if not have_fixSpeConWatPum + "Condenser water pump design speed at current stage" + annotation (Placement(transformation(extent={{240,-80},{280,-40}}), + iconTransformation(extent={{100,-30},{140,10}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yConWatPumNum + "Number of operating condenser water pumps" + annotation (Placement(transformation(extent={{240,-110},{280,-70}}), + iconTransformation(extent={{100,-70},{140,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChiHeaCon[nChi] + "Chiller head pressure control enabling status" + annotation (Placement(transformation(extent={{240,-150},{280,-110}}), + iconTransformation(extent={{100,-110},{140,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatIsoVal[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Chiller chilled water isolation valve position" + annotation (Placement(transformation(extent={{240,-210},{280,-170}}), + iconTransformation(extent={{100,-160},{140,-120}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChi[nChi] + "Chiller enabling status" + annotation (Placement(transformation(extent={{240,-260},{280,-220}}), + iconTransformation(extent={{100,-190},{140,-150}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yEndStaTri + "Staging end trigger" + annotation (Placement(transformation(extent={{240,-320},{280,-280}}), + iconTransformation(extent={{100,-210},{140,-170}}))); + +protected + Buildings.Controls.OBC.CDL.Integers.Change cha + "Check if stage setpoint increases" + annotation (Placement(transformation(extent={{-200,140},{-180,160}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.NextChiller + nexChi(final nChi=nChi) "Identify next enabling chiller" + annotation (Placement(transformation(extent={{-80,180},{-60,200}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ReduceDemand + chiDemRed( + final nChi=nChi, + final chiDemRedFac=chiDemRedFac, + final holChiDemTim=holChiDemTim) if need_reduceChillerDemand + "Limit chiller demand" + annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.FlowSetpoint + minChiWatFlo( + final nChi=nChi, + final have_parChi=have_parChi, + final byPasSetTim=byPasSetTim, + final minFloSet=minFloSet, + final maxFloSet=maxFloSet) "Minimum chilled water flow setpoint" + annotation (Placement(transformation(extent={{20,30},{40,50}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ResetMinBypass + minBypSet( + final aftByPasSetTim=aftByPasSetTim, + final relFloDif=relFloDif) + "Check if minium bypass has been reset" + annotation (Placement(transformation(extent={{60,70},{80,90}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.EnableCWPump + enaNexCWP + "Identify correct stage number for enabling next condenser water pump" + annotation (Placement(transformation(extent={{0,-20},{20,0}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Controller + conWatPumCon( + final have_heaPum=have_heaConWatPum, + final have_WSE=have_WSE, + final fixSpe=have_fixSpeConWatPum, + final nChi=nChi, + final totSta=totSta, + final nChiSta=nChiSta, + final staVec=staVec, + final desConWatPumSpe=desConWatPumSpe, + final desConWatPumNum=desConWatPumNum, + final desChiNum=desChiNum, + final pumSpeChe=pumSpeChe) + "Enabling next condenser water pump or change pump speed" + annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.HeadControl + enaHeaCon( + final nChi=nChi, + final thrTimEnb=thrTimEnb, + final waiTim=waiTim, + final heaStaCha=true) + "Enabling head pressure control for next enabling chiller" + annotation (Placement(transformation(extent={{60,-150},{80,-130}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.CHWIsoVal + enaChiIsoVal( + final nChi=nChi, + final chaChiWatIsoTim=chaChiWatIsoTim, + final iniValPos=0, + final endValPos=1) + "Enable chilled water isolation valve for next enabling chiller" + annotation (Placement(transformation(extent={{60,-210},{80,-190}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.UpEnd + endUp( + final nChi=nChi, + final have_parChi=have_parChi, + final chaChiWatIsoTim=chaChiWatIsoTim, + final maxFloSet=maxFloSet, + final proOnTim=proOnTim, + final minFloSet=minFloSet, + final byPasSetTim=byPasSetTim, + final aftByPasSetTim=aftByPasSetTim, + final relFloDif=relFloDif) "End stage-up process" + annotation (Placement(transformation(extent={{20,-280},{40,-260}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con(final k=false) + "False constant" + annotation (Placement(transformation(extent={{-200,20},{-180,40}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr(final nin=nChi) "Multiple or" + annotation (Placement(transformation(extent={{-140,-62},{-120,-42}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr1(final nin=nChi) "Multiple or" + annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[nChi] "Logical switch" + annotation (Placement(transformation(extent={{200,-200},{220,-180}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep(final nout=nChi) + "Replicate boolean input" + annotation (Placement(transformation(extent={{140,-230},{160,-210}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi[nChi] "Logical switch" + annotation (Placement(transformation(extent={{200,-140},{220,-120}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Logical switch" + annotation (Placement(transformation(extent={{200,30},{220,50}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "Logical latch, maintain ON signal until condition changes" + annotation (Placement(transformation(extent={{-140,140},{-120,160}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1(final k=0) + if need_reduceChillerDemand + "Constant zero" + annotation (Placement(transformation(extent={{-200,80},{-180,100}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and" + annotation (Placement(transformation(extent={{20,-126},{40,-106}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat1 if need_reduceChillerDemand + "Maintain ON signal when chiller demand has been limited" + annotation (Placement(transformation(extent={{-20,90},{0,110}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat2 + "Maintain ON signal when minimum chilled water flow has been reset" + annotation (Placement(transformation(extent={{160,60},{180,80}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat3 + "Maintain ON signal when condenser water pump has been enabled" + annotation (Placement(transformation(extent={{120,-90},{140,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat4 + "Maintain ON signal when chiller head pressure control has been enabled" + annotation (Placement(transformation(extent={{120,-170},{140,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat5 + "Maintain ON signal when chilled water isolation valve has been open" + annotation (Placement(transformation(extent={{100,-230},{120,-210}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2 if not need_reduceChillerDemand + "Dummy or" + annotation (Placement(transformation(extent={{-20,160},{0,180}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and" + annotation (Placement(transformation(extent={{-100,290},{-80,310}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi1 "Logical switch" + annotation (Placement(transformation(extent={{-40,240},{-20,260}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu + "Check if the stage setpoint is zero" + annotation (Placement(transformation(extent={{-140,270},{-120,290}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=0) "Constant zero" + annotation (Placement(transformation(extent={{-220,290},{-200,310}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con2(final k=true) + "Constant true" + annotation (Placement(transformation(extent={{-200,230},{-180,250}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=1, + final delayOnInit=true) "Check if it has passed initial time" + annotation (Placement(transformation(extent={{-140,230},{-120,250}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg + "Rising edge when the new setpoint has been achieved" + annotation (Placement(transformation(extent={{120,70},{140,90}}))); + Buildings.Controls.OBC.CDL.Logical.And and3 + "Logical and" + annotation (Placement(transformation(extent={{100,110},{120,130}}))); + Buildings.Controls.OBC.CDL.Logical.And and4 + "Logical and" + annotation (Placement(transformation(extent={{160,150},{180,170}}))); + +equation + connect(lat.y,chiDemRed.uDemLim) + annotation (Line(points={{-118,150},{-100,150},{-100,129},{-82,129}}, + color={255,0,255})); + connect(chiDemRed.uChiLoa, uChiLoa) + annotation (Line(points={{-82,125},{-230,125},{-230,110},{-260,110}}, + color={0,0,127})); + connect(chiDemRed.uChi, uChi) + annotation (Line(points={{-82,111},{-220,111},{-220,80},{-260,80}}, + color={255,0,255})); + connect(lat.y, minBypSet.uStaPro) annotation (Line(points={{-118,150},{-100, + 150},{-100,84},{58,84}}, color={255,0,255})); + connect(minBypSet.VChiWat_flow, VChiWat_flow) + annotation (Line(points={{58,80},{-156,80},{-156,50},{-260,50}}, + color={0,0,127})); + connect(lat.y, minChiWatFlo.uStaUp) + annotation (Line(points={{-118,150},{-100,150},{-100,49},{18,49}}, + color={255,0,255})); + connect(con.y, minChiWatFlo.uStaDow) + annotation (Line(points={{-178,30},{-96,30},{-96,31},{18,31}}, + color={255,0,255})); + connect(lat.y, enaNexCWP.uStaUp) + annotation (Line(points={{-118,150},{-100,150},{-100,-8},{-2,-8}}, + color={255,0,255})); + connect(conWatPumCon.uWSE, uWSE) + annotation (Line(points={{58,-63},{-6,-63},{-6,-90},{-260,-90}}, + color={255,0,255})); + connect(conWatPumCon.uConWatPumSpe, uConWatPumSpe) + annotation (Line(points={{58,-67},{2,-67},{2,-130},{-260,-130}}, + color={0,0,127})); + connect(enaNexCWP.yChiSta, conWatPumCon.uChiSta) + annotation (Line(points={{22,-10},{36,-10},{36,-61},{58,-61}}, + color={255,127,0})); + connect(lat.y, enaHeaCon.uStaPro) annotation (Line(points={{-118,150},{-100, + 150},{-100,-140},{58,-140}}, color={255,0,255})); + connect(nexChi.yNexEnaChi, enaHeaCon.nexChaChi) + annotation (Line(points={{-58,194},{-36,194},{-36,-144},{58,-144}}, + color={255,127,0})); + connect(nexChi.yNexEnaChi, enaChiIsoVal.nexChaChi) + annotation (Line(points={{-58,194},{-36,194},{-36,-192},{58,-192}}, + color={255,127,0})); + connect(enaChiIsoVal.uChiWatIsoVal, uChiWatIsoVal) + annotation (Line(points={{58,-195},{-96,-195},{-96,-250},{-260,-250}}, + color={0,0,127})); + connect(lat.y, enaChiIsoVal.uStaPro) annotation (Line(points={{-118,150},{-100, + 150},{-100,-208},{58,-208}}, color={255,0,255})); + connect(nexChi.yNexEnaChi, endUp.nexEnaChi) + annotation (Line(points={{-58,194},{-36,194},{-36,-258},{18,-258}}, + color={255,127,0})); + connect(lat.y, endUp.uStaUp) + annotation (Line(points={{-118,150},{-100,150},{-100,-260},{18,-260}}, + color={255,0,255})); + connect(uChi, endUp.uChi) + annotation (Line(points={{-260,80},{-220,80},{-220,-264},{18,-264}}, + color={255,0,255})); + connect(endUp.uChiWatReq, uChiWatReq) + annotation (Line(points={{18,-270},{-168,-270},{-168,-280},{-260,-280}}, + color={255,0,255})); + connect(endUp.uChiWatIsoVal, uChiWatIsoVal) + annotation (Line(points={{18,-272},{-96,-272},{-96,-250},{-260,-250}}, + color={0,0,127})); + connect(uConWatReq, endUp.uConWatReq) + annotation (Line(points={{-260,-70},{-164,-70},{-164,-274},{18,-274}}, + color={255,0,255})); + connect(VChiWat_flow, endUp.VChiWat_flow) + annotation (Line(points={{-260,50},{-156,50},{-156,-278},{18,-278}}, + color={0,0,127})); + connect(uConWatReq, mulOr1.u) + annotation (Line(points={{-260,-70},{-82,-70}}, + color={255,0,255})); + connect(uChi, mulOr.u) + annotation (Line(points={{-260,80},{-220,80},{-220,-52},{-142,-52}}, + color={255,0,255})); + connect(chiDemRed.yChiDem, yChiDem) + annotation (Line(points={{-58,124},{40,124},{40,180},{260,180}}, + color={0,0,127})); + connect(conWatPumCon.yLeaPum, yLeaPum) + annotation (Line(points={{82,-51},{120,-51},{120,-30},{260,-30}}, color={255,0,255})); + connect(endUp.yChi, yChi) + annotation (Line(points={{42,-261},{220,-261},{220,-240},{260,-240}}, + color={255,0,255})); + connect(endUp.yChiWatIsoVal, swi.u1) + annotation (Line(points={{42,-265},{184,-265},{184,-182},{198,-182}}, + color={0,0,127})); + connect(swi.y, yChiWatIsoVal) + annotation (Line(points={{222,-190},{260,-190}}, color={0,0,127})); + connect(endUp.yChiHeaCon, logSwi.u1) + annotation (Line(points={{42,-269},{172,-269},{172,-122},{198,-122}}, + color={255,0,255})); + connect(enaHeaCon.yChiHeaCon, logSwi.u3) + annotation (Line(points={{82,-146},{120,-146},{120,-138},{198,-138}}, + color={255,0,255})); + connect(logSwi.y, yChiHeaCon) + annotation (Line(points={{222,-130},{260,-130}}, color={255,0,255})); + connect(enaChiIsoVal.yEnaChiWatIsoVal, swi1.u2) + annotation (Line(points={{82,-194},{100,-194},{100,40},{198,40}}, + color={255,0,255})); + connect(endUp.yChiWatMinSet, swi1.u1) + annotation (Line(points={{42,-273},{178,-273},{178,48},{198,48}}, + color={0,0,127})); + connect(swi1.y, yChiWatMinFloSet) + annotation (Line(points={{222,40},{260,40}}, color={0,0,127})); + connect(enaChiIsoVal.yChiWatIsoVal, swi.u3) + annotation (Line(points={{82,-206},{100,-206},{100,-198},{198,-198}}, + color={0,0,127})); + connect(nexChi.yDisSmaChi, endUp.nexDisChi) + annotation (Line(points={{-58,190.8},{-40,190.8},{-40,-268},{18,-268}}, + color={255,127,0})); + connect(nexChi.yOnOff, minChiWatFlo.uOnOff) + annotation (Line(points={{-58,187},{-44,187},{-44,33},{18,33}}, + color={255,0,255})); + connect(nexChi.yOnOff, endUp.uOnOff) + annotation (Line(points={{-58,187},{-44,187},{-44,-266},{18,-266}}, + color={255,0,255})); + connect(con.y, enaNexCWP.uStaDow) + annotation (Line(points={{-178,30},{-96,30},{-96,-12},{-2,-12}}, + color={255,0,255})); + connect(lat.y, yStaPro) + annotation (Line(points={{-118,150},{-100,150},{-100,210},{260,210}}, + color={255,0,255})); + connect(and2.y, enaHeaCon.uUpsDevSta) + annotation (Line(points={{42,-116},{50,-116},{50,-136},{58,-136}}, + color={255,0,255})); + connect(con.y, chiDemRed.uStaDow) + annotation (Line(points={{-178,30},{-96,30},{-96,118},{-82,118}}, + color={255,0,255})); + connect(con1.y, chiDemRed.yOpeParLoaRatMin) + annotation (Line(points={{-178,90},{-140,90},{-140,121},{-82,121}}, + color={0,0,127})); + connect(uChi, minChiWatFlo.uChi) + annotation (Line(points={{-260,80},{-220,80},{-220,44},{18,44}}, + color={255,0,255})); + connect(nexChi.yNexEnaChi, minChiWatFlo.nexEnaChi) + annotation (Line(points={{-58,194},{-36,194},{-36,41},{18,41}}, + color={255,127,0})); + connect(nexChi.yDisSmaChi, minChiWatFlo.nexDisChi) + annotation (Line(points={{-58,190.8},{-40,190.8},{-40,39},{18,39}}, + color={255,127,0})); + connect(con.y, minChiWatFlo.uSubCha) + annotation (Line(points={{-178,30},{-96,30},{-96,36},{18,36}}, + color={255,0,255})); + connect(nexChi.yOnOff, chiDemRed.uOnOff) + annotation (Line(points={{-58,187},{-44,187},{-44,140},{-92,140},{-92,115},{ + -82,115}}, color={255,0,255})); + connect(minChiWatFlo.yChiWatMinFloSet, minBypSet.VMinChiWat_setpoint) + annotation (Line(points={{42,40},{50,40},{50,76},{58,76}}, + color={0,0,127})); + connect(minChiWatFlo.yChiWatMinFloSet, swi1.u3) + annotation (Line(points={{42,40},{50,40},{50,32},{198,32}}, + color={0,0,127})); + connect(conWatPumCon.yDesConWatPumSpe, yDesConWatPumSpe) + annotation (Line(points={{82,-57},{120,-57},{120,-60},{260,-60}}, + color={0,0,127})); + connect(conWatPumCon.uChiConIsoVal, uChiConIsoVal) + annotation (Line(points={{58,-50},{48,-50},{48,10},{-260,10}}, + color={255,0,255})); + connect(mulOr.y, conWatPumCon.uLeaChiSta) + annotation (Line(points={{-118,-52},{44,-52},{44,-54},{58,-54}}, + color={255,0,255})); + connect(mulOr.y, conWatPumCon.uLeaChiEna) + annotation (Line(points={{-118,-52},{58,-52}}, + color={255,0,255})); + connect(mulOr1.y, conWatPumCon.uLeaConWatReq) + annotation (Line(points={{-58,-70},{-10,-70},{-10,-56},{58,-56}}, + color={255,0,255})); + connect(conWatPumCon.uConWatPumSpeSet, uConWatPumSpeSet) + annotation (Line(points={{58,-65},{-2,-65},{-2,-110},{-260,-110}}, + color={0,0,127})); + connect(conWatPumCon.yConWatPumNum, yConWatPumNum) + annotation (Line(points={{82,-63},{220,-63},{220,-90},{260,-90}}, + color={255,127,0})); + connect(minChiWatFlo.yChiWatMinFloSet, endUp.VMinChiWat_setpoint) + annotation (Line(points={{42,40},{50,40},{50,20},{-92,20},{-92,-280},{18,-280}}, + color={0,0,127})); + connect(lat1.y, minBypSet.uUpsDevSta) annotation (Line(points={{2,100},{10,100}, + {10,88},{58,88}}, color={255,0,255})); + connect(lat1.y, minChiWatFlo.uUpsDevSta) annotation (Line(points={{2,100},{10, + 100},{10,47},{18,47}}, color={255,0,255})); + connect(lat2.y, yTowStaUp) annotation (Line(points={{182,70},{190,70},{190,0}, + {260,0}}, color={255,0,255})); + connect(lat2.y, enaNexCWP.uUpsDevSta) annotation (Line(points={{182,70},{190,70}, + {190,14},{-20,14},{-20,-2},{-2,-2}}, color={255,0,255})); + connect(lat2.y, and2.u2) annotation (Line(points={{182,70},{190,70},{190,14},{ + -20,14},{-20,-124},{18,-124}},color={255,0,255})); + connect(conWatPumCon.yPumSpeChe, lat3.u) annotation (Line(points={{82,-69},{110, + -69},{110,-80},{118,-80}}, color={255,0,255})); + connect(lat3.y, and2.u1) annotation (Line(points={{142,-80},{160,-80},{160,-98}, + {10,-98},{10,-116},{18,-116}}, color={255,0,255})); + connect(enaHeaCon.yEnaHeaCon, lat4.u) annotation (Line(points={{82,-134},{110, + -134},{110,-160},{118,-160}}, color={255,0,255})); + connect(lat4.y, enaChiIsoVal.uUpsDevSta) annotation (Line(points={{142,-160},{ + 160,-160},{160,-180},{40,-180},{40,-205},{58,-205}}, color={255,0,255})); + connect(enaChiIsoVal.yEnaChiWatIsoVal, lat5.u) annotation (Line(points={{82,-194}, + {90,-194},{90,-220},{98,-220}}, color={255,0,255})); + connect(lat5.y, booRep.u) + annotation (Line(points={{122,-220},{138,-220}}, color={255,0,255})); + connect(booRep.y, logSwi.u2) annotation (Line(points={{162,-220},{166,-220},{166, + -130},{198,-130}}, color={255,0,255})); + connect(booRep.y, swi.u2) annotation (Line(points={{162,-220},{166,-220},{166, + -190},{198,-190}}, color={255,0,255})); + connect(lat5.y, endUp.uEnaChiWatIsoVal) annotation (Line(points={{122,-220},{ + 130,-220},{130,-240},{0,-240},{0,-262},{18,-262}}, + color={255,0,255})); + connect(endUp.endStaTri, lat.clr) annotation (Line(points={{42,-279},{60,-279}, + {60,-300},{-160,-300},{-160,144},{-142,144}}, color={255,0,255})); + connect(endUp.endStaTri, lat1.clr) annotation (Line(points={{42,-279},{60,-279}, + {60,-300},{-160,-300},{-160,94},{-22,94}}, color={255,0,255})); + connect(endUp.endStaTri, lat2.clr) annotation (Line(points={{42,-279},{60,-279}, + {60,-300},{-160,-300},{-160,64},{158,64}}, color={255,0,255})); + connect(endUp.endStaTri, lat3.clr) annotation (Line(points={{42,-279},{60,-279}, + {60,-300},{-160,-300},{-160,-86},{118,-86}}, color={255,0,255})); + connect(endUp.endStaTri, lat4.clr) annotation (Line(points={{42,-279},{60,-279}, + {60,-300},{-160,-300},{-160,-166},{118,-166}}, color={255,0,255})); + connect(uStaSet, nexChi.uStaSet) annotation (Line(points={{-260,200},{-104,200}, + {-104,197},{-82,197}}, color={255,127,0})); + connect(nexChi.uChiSet, uChiSet) + annotation (Line(points={{-82,190},{-180,190},{-180,170},{-260,170}}, + color={255,0,255})); + connect(uStaSet, cha.u) annotation (Line(points={{-260,200},{-220,200},{-220,150}, + {-202,150}}, color={255,127,0})); + connect(uStaSet, enaNexCWP.uStaSet) annotation (Line(points={{-260,200},{-104, + 200},{-104,-19},{-2,-19}}, color={255,127,0})); + connect(uChiSta, enaNexCWP.uChiSta) annotation (Line(points={{-260,-10},{-180, + -10},{-180,-15},{-2,-15}}, color={255,127,0})); + connect(enaHeaCon.uChiHeaCon, uChiHeaCon) annotation (Line(points={{58,-148},{ + -48,-148},{-48,-220},{-260,-220}}, color={255,0,255})); + connect(uChiHeaCon, endUp.uChiHeaCon) annotation (Line(points={{-260,-220},{-48, + -220},{-48,-276},{18,-276}}, color={255,0,255})); + connect(conWatPumCon.uConWatPum, uConWatPum) annotation (Line(points={{58,-69}, + {6,-69},{6,-190},{-260,-190}}, color={255,0,255})); + connect(endUp.endStaTri, lat5.clr) annotation (Line(points={{42,-279},{60,-279}, + {60,-300},{-160,-300},{-160,-226},{98,-226}}, color={255,0,255})); + connect(lat.y, or2.u1) + annotation (Line(points={{-118,150},{-100,150},{-100,170},{-22,170}}, + color={255,0,255})); + connect(con.y, or2.u2) annotation (Line(points={{-178,30},{-96,30},{-96,162},{ + -22,162}}, color={255,0,255})); + connect(or2.y, minBypSet.uUpsDevSta) annotation (Line(points={{2,170},{6,170}, + {6,88},{58,88}}, color={255,0,255})); + connect(or2.y, minChiWatFlo.uUpsDevSta) annotation (Line(points={{2,170},{6,170}, + {6,47},{18,47}}, color={255,0,255})); + connect(intEqu.y, and1.u2) annotation (Line(points={{-118,280},{-110,280},{-110, + 292},{-102,292}}, color={255,0,255})); + connect(conInt.y, intEqu.u1) annotation (Line(points={{-198,300},{-180,300},{-180, + 280},{-142,280}}, color={255,127,0})); + connect(uStaSet, intEqu.u2) annotation (Line(points={{-260,200},{-220,200},{-220, + 272},{-142,272}}, color={255,127,0})); + connect(cha.up, and1.u1) annotation (Line(points={{-178,156},{-170,156},{-170, + 300},{-102,300}}, color={255,0,255})); + connect(and1.y, logSwi1.u3) annotation (Line(points={{-78,300},{-60,300},{-60, + 242},{-42,242}}, color={255,0,255})); + connect(cha.up, logSwi1.u1) annotation (Line(points={{-178,156},{-170,156},{-170, + 258},{-42,258}}, color={255,0,255})); + connect(logSwi1.y, lat.u) annotation (Line(points={{-18,250},{0,250},{0,220},{ + -150,220},{-150,150},{-142,150}}, color={255,0,255})); + connect(uEnaPlaConPum, conWatPumCon.uEnaPla) annotation (Line(points={{-260,-36}, + {40,-36},{40,-58},{58,-58}}, color={255,0,255})); + connect(uEnaPlaConIso, enaHeaCon.uEnaPla) annotation (Line(points={{-260,-160}, + {-52,-160},{-52,-132},{58,-132}}, color={255,0,255})); + connect(endUp.endStaTri, yEndStaTri) annotation (Line(points={{42,-279},{60,-279}, + {60,-300},{260,-300}}, color={255,0,255})); + connect(endUp.endStaTri, nexChi.endPro) annotation (Line(points={{42,-279},{60, + -279},{60,-300},{-160,-300},{-160,183},{-82,183}}, color={255,0,255})); + connect(con2.y, truDel.u) + annotation (Line(points={{-178,240},{-142,240}}, color={255,0,255})); + connect(truDel.y, logSwi1.u2) annotation (Line(points={{-118,240},{-80,240},{-80, + 250},{-42,250}}, color={255,0,255})); + connect(minChiWatFlo.yChaSet, minBypSet.uSetChaPro) annotation (Line(points={ + {42,32},{46,32},{46,72},{58,72}}, color={255,0,255})); + connect(edg.y, lat2.u) annotation (Line(points={{142,80},{150,80},{150,70},{158, + 70}}, color={255,0,255})); + connect(minBypSet.yMinBypRes, and3.u2) annotation (Line(points={{82,80},{90, + 80},{90,112},{98,112}}, + color={255,0,255})); + connect(and3.y, edg.u) annotation (Line(points={{122,120},{130,120},{130,100}, + {110,100},{110,80},{118,80}}, color={255,0,255})); + connect(lat.y, and3.u1) annotation (Line(points={{-118,150},{80,150},{80,120}, + {98,120}}, color={255,0,255})); + connect(lat.y, and4.u1) annotation (Line(points={{-118,150},{80,150},{80,160}, + {158,160}}, color={255,0,255})); + connect(chiDemRed.yChiDemRed, and4.u2) annotation (Line(points={{-58,116},{ + -32,116},{-32,152},{158,152}}, color={255,0,255})); + connect(and4.y, lat1.u) annotation (Line(points={{182,160},{190,160},{190,140}, + {-28,140},{-28,100},{-22,100}}, color={255,0,255})); + connect(or2.y, and4.u2) annotation (Line(points={{2,170},{6,170},{6,152},{158, + 152}}, color={255,0,255})); +annotation ( + defaultComponentName="upProCon", + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-240,-320},{240,320}}), graphics={ + Rectangle( + extent={{-238,318},{158,202}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-40,302},{138,260}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="The Change block in default has initial input of zero. +This is to avoid the initial edge.")}), + Icon(coordinateSystem(extent={{-100,-200},{100,200}}), graphics={ + Rectangle( + extent={{-100,-200},{100,200}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-120,240},{120,200}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-10,120},{10,-140}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,160},{-40,120},{0,120},{40,120},{0,160}}, + lineColor={200,200,200}, + fillColor={207,207,207}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,198},{-58,186}}, + textColor={255,127,0}, + textString="uStaSet"), + Text( + extent={{-100,106},{-70,94}}, + textColor={255,0,255}, + textString="uChi"), + Text( + extent={{-96,58},{-32,44}}, + textColor={255,0,255}, + textString="uChiConIsoVal"), + Text( + extent={{-96,-12},{-38,-26}}, + textColor={255,0,255}, + textString="uConWatReq"), + Text( + extent={{-100,-34},{-64,-46}}, + textColor={255,0,255}, + textString="uWSE", + visible=have_WSE), + Text( + extent={{-98,-184},{-48,-196}}, + textColor={255,0,255}, + textString="uChiWatReq"), + Text( + extent={{-96,128},{-60,116}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uChiLoa", + visible=need_reduceChillerDemand), + Text( + extent={{-96,84},{-40,70}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="VChiWat_flow"), + Text( + extent={{-96,-50},{-12,-68}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uConWatPumSpeSet", + visible=not have_fixSpeConWatPum), + Text( + extent={{-96,-72},{-22,-86}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uConWatPumSpe", + visible=not have_fixSpeConWatPum), + Text( + extent={{-96,-164},{-36,-176}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uChiWatIsoVal"), + Text( + extent={{60,198},{100,186}}, + textColor={255,0,255}, + textString="yStaPro"), + Text( + extent={{52,78},{98,66}}, + textColor={255,0,255}, + textString="yTowStaUp"), + Text( + extent={{58,38},{96,26}}, + textColor={255,0,255}, + textString="yLeaPum"), + Text( + extent={{48,-82},{96,-96}}, + textColor={255,0,255}, + textString="yChiHeaCon"), + Text( + extent={{76,-162},{100,-174}}, + textColor={255,0,255}, + textString="yChi"), + Text( + extent={{60,158},{96,146}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiDem", + visible=need_reduceChillerDemand), + Text( + extent={{28,118},{98,104}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiWatMinFloSet"), + Text( + extent={{18,-4},{98,-14}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yDesConWatPumSpe", + visible=not have_fixSpeConWatPum), + Text( + extent={{36,-130},{96,-146}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yChiWatIsoVal"), + Text( + extent={{34,-42},{96,-56}}, + textColor={255,127,0}, + textString="yConWatPumNum"), + Text( + extent={{-100,168},{-60,156}}, + textColor={255,0,255}, + textString="uChiSet"), + Text( + extent={{-98,36},{-56,24}}, + textColor={255,127,0}, + textString="uChiSta"), + Text( + extent={{-98,-144},{-48,-156}}, + textColor={255,0,255}, + textString="uChiHeaCon"), + Text( + extent={{-96,-122},{-38,-136}}, + textColor={255,0,255}, + textString="uConWatPum", + visible=have_fixSpeConWatPum), + Text( + extent={{-96,-92},{-30,-106}}, + textColor={255,0,255}, + textString="uEnaPlaConIso"), + Text( + extent={{-96,16},{-24,2}}, + textColor={255,0,255}, + textString="uEnaPlaConPum"), + Text( + extent={{50,-182},{98,-196}}, + textColor={255,0,255}, + textString="yEndStaTri")}), +Documentation(info=" +

                      +Block that controls devices when there is a stage-up command. This sequence is for +water-cooled primary-only parallel chiller plants with headered chilled water pumps +and headered condenser water pumps, or air-cooled primary-only parallel chiller +plants with headered chilled water pumps. +This development is based on ASHRAE Guideline 36-2021, +section 5.20.4.16, which specifies the step-by-step control of +devices during chiller staging up process. +

                      +
                        +
                      1. +Identify the chiller(s) that should be enabled (and disabled, if have_ponyChiller=true). +This is implemented in block nexChi. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.NextChiller +for more decriptions. +
                      2. +
                      3. +Command operating chillers to reduce demand to 75% (chiDemRedFac) of +their current load (uChiLoa). Wait until actual demand < 80% of +current load up to a maximum of 5 minutes (holChiDemTim) before proceeding. +This is implemented in block chiDemRed. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ReduceDemand +for more decriptions. +
                      4. +
                      5. +Reset the minimum chilled water flow setpoint, +
                          +
                        • +For any stage change during which a smaller chiller is disabled and a larger chiller +is enabled, slowly change (byPasSetTim) the minimum chilled water flow +setpoint to the one that includes both chillers are enabled. After new setpoint is +achieved, wait 1 minute (aftByPasSetTim) to allow loop to stabilize. +
                        • +
                        • +For any other stage change, reset ((byPasSetTim)) the minimum chilled +water flow setpoint to the one that includes the new chiller. After new setpoint is +achieved, wait 1 minute (aftByPasSetTim) to allow loop to stabilize. +
                        • +
                        +The minimum flow setpoint is reset in block minChiWatFlo +( +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.FlowSetpoint). +Block minBypSet checks if the new setpoint is achieved +( +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.ResetMinBypass). +
                      6. +
                      7. +Start the next condenser water pump and/or change condenser water pump speed +to that required of the new stage. Wait 10 seconds (thrTimEnb). +Block enaNexCWP identifies chiller stage for the condenser water pump +control +( +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.EnableCWPump) +and block conWatPumCon checks if the condenser water pumps have been reset +( +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Controller). +
                      8. +
                      9. +Enabled head pressure control for the chiller being enabled. Wait 30 seconds (waiTim). +This is implemented in block enaHeaCon. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.HeadControl +for more decriptions. +
                      10. +
                      11. +Slowly (chaChiWatIsoTim) open chilled water isolation valve of the chiller +being enabled. The valve timing should be determined in the fields. +This is implemented in block enaChiIsoVal. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.CHWIsoVal +for more decriptions. +
                      12. +
                      13. +End the staging up process: +
                          +
                        • +If the stage change does not require one chiller enabled and another chiller disabled, +start the next stage chiller after the isolation valve is fully open. +
                        • +
                        • +If the stage change does require one chiller enabled and another chiller disabled, +starting the next stage chiller after the isolation valve is fully open, then shut off +the smaller chiller, close the chiller's chilled water isolation valve, disable +the head pressure control loop, and change the minimum chilled water flow setpoint +to the one for the new stage. +
                        • +
                        • +Release the demand limit, which marks the end of the staging process. +
                        • +
                        +These are implemented in block endUp. See + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.UpEnd +for more decriptions. +
                      14. +
                      +", revisions=" +
                        +
                      • +September 23, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Up; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithOnOff.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithOnOff.mo new file mode 100644 index 00000000000..f4975c754fc --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithOnOff.mo @@ -0,0 +1,437 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation; +model DownWithOnOff + "Validate sequence of staging down process which requires enabling one chiller and disabling another chiller" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Down + dowProCon( + final nChi=2, + final totSta=4, + final have_ponyChiller=true, + final need_reduceChillerDemand=true, + final chaChiWatIsoTim=300, + final staVec={0,0.5,1,2}, + final desConWatPumSpe={0,0.5,0.75,0.6}, + final desConWatPumNum={0,1,1,2}, + final byPasSetTim=300, + final minFloSet={0.5,1}, + final maxFloSet={1,1.5}) + "Stage down process when does require chiller on and off" + annotation (Placement(transformation(extent={{20,60},{40,100}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + delayTime=1, + delayOnInit=true) + "Delay the true input" + annotation (Placement(transformation(extent={{80,210},{100,230}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp chiWatFlo1( + final height=0.5 - 5/3, + final duration=300, + final offset=5/3, + final startTime=800) "Chilled water flow rate" + annotation (Placement(transformation(extent={{-200,-100},{-180,-80}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.05, final period=2400) + "Boolean pulse" + annotation (Placement(transformation(extent={{-200,130},{-180,150}}))); + Buildings.Controls.OBC.CDL.Logical.Not staDow1 "Stage down command" + annotation (Placement(transformation(extent={{-160,130},{-140,150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiLoa1( + final k=2) "Chiller load" + annotation (Placement(transformation(extent={{-200,-60},{-180,-40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yOpeParLoaRatMin1( + final k=0.78) + "Minimum cycling operative partial load ratio" + annotation (Placement(transformation(extent={{-200,20},{-180,40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant fulOpe1(final k=1) + "Full open isolation valve" + annotation (Placement(transformation(extent={{-200,-260},{-180,-240}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerLoa( + final k=0) "Constant zero" + annotation (Placement(transformation(extent={{-200,-20},{-180,0}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiOneSta( + final pre_u_start=false) "Chiller one status" + annotation (Placement(transformation(extent={{100,30},{120,50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiOneLoa "Chiller one load" + annotation (Placement(transformation(extent={{-120,-20},{-100,0}}))); + Buildings.Controls.OBC.CDL.Reals.Switch IsoValOne "Logical switch" + annotation (Placement(transformation(extent={{-120,-220},{-100,-200}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol3[2]( + final samplePeriod=fill(10, 2)) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{100,-180},{120,-160}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant wseSta1( + final k=false) + "Waterside economizer status" + annotation (Placement(transformation(extent={{-200,-300},{-180,-280}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol4( + final samplePeriod=10) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{100,-220},{120,-200}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol5( + final samplePeriod=20) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{100,-260},{120,-240}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiTwoLoa "Chiller two load" + annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiTwoSta( + final pre_u_start=true) "Chiller two status" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer3[2]( + final k=fill(0,2)) "Constant zero" + annotation (Placement(transformation(extent={{80,80},{100,100}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol6( + final samplePeriod=10) "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{80,110},{100,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiLoa3(final k=1) + "Chiller load" + annotation (Placement(transformation(extent={{80,150},{100,170}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiLoa2[2] "Chiller load" + annotation (Placement(transformation(extent={{140,110},{160,130}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol7( + final samplePeriod=10) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{180,110},{200,130}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiOneHea( + final pre_u_start=false) + "Chiller one head pressure control" + annotation (Placement(transformation(extent={{100,-100},{120,-80}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiTwoHea( + final pre_u_start=true) + "Chiller two head pressure control" + annotation (Placement(transformation(extent={{100,-140},{120,-120}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerOpe2( + final k=0) "Closed isolation valve" + annotation (Placement(transformation(extent={{-200,-220},{-180,-200}}))); + Buildings.Controls.OBC.CDL.Reals.Switch IsoValTwo "Logical switch" + annotation (Placement(transformation(extent={{-120,-260},{-100,-240}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staTwoChi2[2]( + final k={false,true}) + "Vector of chillers status setpoint at stage two" + annotation (Placement(transformation(extent={{-200,90},{-180,110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staOneChi2[2]( + final k={true,false}) + "Vector of chillers status setpoint at stage one" + annotation (Placement(transformation(extent={{-200,160},{-180,180}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep2( + final nout=2) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); + Buildings.Controls.OBC.CDL.Logical.Switch chiSet2[2] + "Chiller status setpoint" + annotation (Placement(transformation(extent={{-80,130},{-60,150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant upSta2( + final k=2) + "Stage two" + annotation (Placement(transformation(extent={{-200,190},{-180,210}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dowSta2( + final k=1) + "Stage one" + annotation (Placement(transformation(extent={{-200,230},{-180,250}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Logical switch" + annotation (Placement(transformation(extent={{-120,210},{-100,230}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger staSet2 + "Stage setpoint index" + annotation (Placement(transformation(extent={{-80,210},{-60,230}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant staOne( + final k=1) "Stage one" + annotation (Placement(transformation(extent={{-200,-140},{-180,-120}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant staTwo( + final k=2) + "Stage two" + annotation (Placement(transformation(extent={{-200,-180},{-180,-160}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiSta "Current chiller stage" + annotation (Placement(transformation(extent={{-120,-160},{-100,-140}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger sta "Current chiller stage" + annotation (Placement(transformation(extent={{-80,-160},{-60,-140}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant fal( + final k=false) + "Logical false" + annotation (Placement(transformation(extent={{120,180},{140,200}}))); + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg + "Check if the down process has ended" + annotation (Placement(transformation(extent={{120,210},{140,230}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "True when it is not in process" + annotation (Placement(transformation(extent={{160,210},{180,230}}))); + +equation + connect(booPul1.y, staDow1.u) + annotation (Line(points={{-178,140},{-162,140}}, color={255,0,255})); + connect(staDow1.y, chiOneLoa.u2) + annotation (Line(points={{-138,140},{-130,140},{-130,-10},{-122,-10}}, + color={255,0,255})); + connect(staDow1.y, chiTwoLoa.u2) + annotation (Line(points={{-138,140},{-130,140},{-130,-50},{-122,-50}}, + color={255,0,255})); + connect(chiLoa1.y, chiTwoLoa.u3) + annotation (Line(points={{-178,-50},{-160,-50},{-160,-58},{-122,-58}}, + color={0,0,127})); + connect(zerLoa.y, chiOneLoa.u3) + annotation (Line(points={{-178,-10},{-160,-10},{-160,-18},{-122,-18}}, + color={0,0,127})); + connect(chiLoa3.y, chiLoa2[1].u1) + annotation (Line(points={{102,160},{120,160},{120,128},{138,128}}, + color={0,0,127})); + connect(zerOrdHol6.y, chiLoa2[2].u1) + annotation (Line(points={{102,120},{120,120},{120,128},{138,128}}, + color={0,0,127})); + connect(zer3.y, chiLoa2.u3) + annotation (Line(points={{102,90},{120,90},{120,112},{138,112}}, + color={0,0,127})); + connect(dowProCon.yChiDem[2], zerOrdHol6.u) + annotation (Line(points={{42,95.5},{60,95.5},{60,120},{78,120}}, + color={0,0,127})); + connect(dowProCon.yChi[1], chiOneSta.u) + annotation (Line(points={{42,91.5},{60,91.5},{60,40},{98,40}}, + color={255,0,255})); + connect(dowProCon.yChi[2], chiTwoSta.u) + annotation (Line(points={{42,92.5},{62,92.5},{62,0},{98,0}}, color={255,0,255})); + connect(chiOneSta.y, chiLoa2[1].u2) + annotation (Line(points={{122,40},{130,40},{130,120},{138,120}}, + color={255,0,255})); + connect(chiTwoSta.y, chiLoa2[2].u2) + annotation (Line(points={{122,0},{132,0},{132,120},{138,120}}, + color={255,0,255})); + connect(chiLoa2[2].y, chiTwoLoa.u1) + annotation (Line(points={{162,120},{170,120},{170,-70},{-140,-70},{-140,-42}, + {-122,-42}}, color={0,0,127})); + connect(chiLoa2[1].y, zerOrdHol7.u) + annotation (Line(points={{162,120},{178,120}}, color={0,0,127})); + connect(zerOrdHol7.y, chiOneLoa.u1) + annotation (Line(points={{202,120},{210,120},{210,-30},{-140,-30},{-140,-2}, + {-122,-2}}, color={0,0,127})); + connect(yOpeParLoaRatMin1.y, dowProCon.yOpeParLoaRatMin) + annotation (Line(points={{-178,30},{-126,30},{-126,93},{18,93}}, + color={0,0,127})); + connect(chiOneLoa.y, dowProCon.uChiLoa[1]) + annotation (Line(points={{-98,-10},{-90,-10},{-90,90.5},{18,90.5}}, + color={0,0,127})); + connect(chiTwoLoa.y, dowProCon.uChiLoa[2]) + annotation (Line(points={{-98,-50},{-88,-50},{-88,91.5},{18,91.5}}, + color={0,0,127})); + connect(chiOneSta.y, dowProCon.uChi[1]) + annotation (Line(points={{122,40},{130,40},{130,20},{-80,20},{-80,88.5}, + {18,88.5}}, color={255,0,255})); + connect(chiTwoSta.y, dowProCon.uChi[2]) + annotation (Line(points={{122,0},{132,0},{132,-20},{-78,-20},{-78,89.5}, + {18,89.5}}, color={255,0,255})); + connect(chiWatFlo1.y, dowProCon.VChiWat_flow) + annotation (Line(points={{-178,-90},{-76,-90},{-76,87},{18,87}}, + color={0,0,127})); + connect(dowProCon.yChiHeaCon[1], chiOneHea.u) + annotation (Line(points={{42,76.5},{58,76.5},{58,-90},{98,-90}}, + color={255,0,255})); + connect(dowProCon.yChiHeaCon[2], chiTwoHea.u) + annotation (Line(points={{42,77.5},{56,77.5},{56,-130},{98,-130}}, + color={255,0,255})); + connect(chiOneHea.y, dowProCon.uChiHeaCon[1]) + annotation (Line(points={{122,-90},{140,-90},{140,-60},{-32,-60},{-32,80.5}, + {18,80.5}}, color={255,0,255})); + connect(chiTwoHea.y, dowProCon.uChiHeaCon[2]) + annotation (Line(points={{122,-130},{140,-130},{140,-112},{-34,-112},{-34,81.5}, + {18,81.5}}, color={255,0,255})); + connect(zerOpe2.y, IsoValOne.u3) + annotation (Line(points={{-178,-210},{-160,-210},{-160,-218},{-122,-218}}, + color={0,0,127})); + connect(fulOpe1.y, IsoValTwo.u3) + annotation (Line(points={{-178,-250},{-160,-250},{-160,-258},{-122,-258}}, + color={0,0,127})); + connect(staDow1.y, IsoValOne.u2) + annotation (Line(points={{-138,140},{-130,140},{-130,-210},{-122,-210}}, + color={255,0,255})); + connect(staDow1.y, IsoValTwo.u2) + annotation (Line(points={{-138,140},{-130,140},{-130,-250},{-122,-250}}, + color={255,0,255})); + connect(dowProCon.yChiWatIsoVal, zerOrdHol3.u) + annotation (Line(points={{42,84},{72,84},{72,-170},{98,-170}}, + color={0,0,127})); + connect(zerOrdHol3[1].y, IsoValOne.u1) + annotation (Line(points={{122,-170},{140,-170},{140,-190},{-140,-190}, + {-140, -202},{-122,-202}}, color={0,0,127})); + connect(zerOrdHol3[2].y, IsoValTwo.u1) + annotation (Line(points={{122,-170},{140,-170},{140,-190},{-140,-190}, + {-140,-242},{-122,-242}}, color={0,0,127})); + connect(IsoValOne.y, dowProCon.uChiWatIsoVal[1]) + annotation (Line(points={{-98,-210},{-44,-210},{-44,77.5},{18,77.5}}, + color={0,0,127})); + connect(IsoValTwo.y, dowProCon.uChiWatIsoVal[2]) + annotation (Line(points={{-98,-250},{-42,-250},{-42,78.5},{18,78.5}}, + color={0,0,127})); + connect(chiOneSta.y, dowProCon.uChiWatReq[1]) + annotation (Line(points={{122,40},{130,40},{130,20},{-30,20},{-30,74.5}, + {18,74.5}}, color={255,0,255})); + connect(chiTwoSta.y, dowProCon.uChiWatReq[2]) + annotation (Line(points={{122,0},{132,0},{132,-20},{-28,-20},{-28,75.5}, + {18,75.5}}, color={255,0,255})); + connect(chiOneSta.y, dowProCon.uConWatReq[1]) + annotation (Line(points={{122,40},{130,40},{130,20},{-26,20},{-26,72.5}, + {18,72.5}}, color={255,0,255})); + connect(chiTwoSta.y, dowProCon.uConWatReq[2]) + annotation (Line(points={{122,0},{132,0},{132,-20},{-24,-20},{-24,73.5}, + {18,73.5}}, color={255,0,255})); + connect(chiOneSta.y, dowProCon.uChiConIsoVal[1]) + annotation (Line(points={{122,40},{130,40},{130,20},{-22,20},{-22,69.5}, + {18,69.5}}, color={255,0,255})); + connect(chiTwoSta.y, dowProCon.uChiConIsoVal[2]) + annotation (Line(points={{122,0},{132,0},{132,-20},{-20,-20},{-20,70.5}, + {18,70.5}}, color={255,0,255})); + connect(wseSta1.y, dowProCon.uWSE) + annotation (Line(points={{-178,-290},{-10,-290},{-10,67},{18,67}}, + color={255,0,255})); + connect(dowProCon.yDesConWatPumSpe, zerOrdHol4.u) + annotation (Line(points={{42,69},{78,69},{78,-210},{98,-210}}, + color={0,0,127})); + connect(zerOrdHol4.y, zerOrdHol5.u) + annotation (Line(points={{122,-210},{140,-210},{140,-230},{80,-230},{80,-250}, + {98,-250}}, color={0,0,127})); + connect(zerOrdHol4.y, dowProCon.uConWatPumSpeSet) + annotation (Line(points={{122,-210},{140,-210},{140,-230},{-8,-230},{-8,65}, + {18,65}}, color={0,0,127})); + connect(zerOrdHol5.y, dowProCon.uConWatPumSpe) + annotation (Line(points={{122,-250},{140,-250},{140,-270},{-6,-270},{-6,63}, + {18,63}}, color={0,0,127})); + connect(staDow1.y, booRep2.u) + annotation (Line(points={{-138,140},{-122,140}}, color={255,0,255})); + connect(staTwoChi2.y, chiSet2.u3) annotation (Line(points={{-178,100},{-90,100}, + {-90,132},{-82,132}}, color={255,0,255})); + connect(booRep2.y, chiSet2.u2) + annotation (Line(points={{-98,140},{-82,140}}, color={255,0,255})); + connect(staOneChi2.y, chiSet2.u1) annotation (Line(points={{-178,170},{-90,170}, + {-90,148},{-82,148}}, color={255,0,255})); + connect(dowSta2.y, swi2.u1) annotation (Line(points={{-178,240},{-140,240},{-140, + 228},{-122,228}}, color={0,0,127})); + connect(upSta2.y, swi2.u3) annotation (Line(points={{-178,200},{-140,200},{-140, + 212},{-122,212}}, color={0,0,127})); + connect(staDow1.y, swi2.u2) annotation (Line(points={{-138,140},{-130,140},{-130, + 220},{-122,220}}, color={255,0,255})); + connect(swi2.y, staSet2.u) + annotation (Line(points={{-98,220},{-82,220}}, color={0,0,127})); + connect(chiSet2.y, dowProCon.uChiSet) annotation (Line(points={{-58,140},{-40, + 140},{-40,97},{18,97}}, color={255,0,255})); + connect(staSet2.y, dowProCon.uStaSet) annotation (Line(points={{-58,220},{-36, + 220},{-36,99},{18,99}}, color={255,127,0})); + connect(staOne.y, chiSta.u1) annotation (Line(points={{-178,-130},{-160,-130}, + {-160,-142},{-122,-142}}, color={0,0,127})); + connect(staTwo.y, chiSta.u3) annotation (Line(points={{-178,-170},{-160,-170}, + {-160,-158},{-122,-158}}, color={0,0,127})); + connect(chiSta.y, sta.u) + annotation (Line(points={{-98,-150},{-82,-150}}, color={0,0,127})); + connect(falEdg.y, lat.u) + annotation (Line(points={{142,220},{158,220}}, color={255,0,255})); + connect(fal.y, lat.clr) annotation (Line(points={{142,190},{150,190},{150,214}, + {158,214}}, color={255,0,255})); + connect(lat.y, chiSta.u2) annotation (Line(points={{182,220},{214,220},{214,-104}, + {-140,-104},{-140,-150},{-122,-150}}, color={255,0,255})); + connect(sta.y, dowProCon.uChiSta) annotation (Line(points={{-58,-150},{-50, + -150},{-50,84},{18,84}}, color={255,127,0})); + connect(dowProCon.yStaPro, truDel.u) annotation (Line(points={{42,99},{50,99}, + {50,220},{78,220}}, color={255,0,255})); + connect(truDel.y, falEdg.u) + annotation (Line(points={{102,220},{118,220}}, color={255,0,255})); +annotation ( + experiment(StopTime=2400, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithOnOff.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Down. +

                      +

                      +It shows a process of staging down from stage 2 which requires large chiller 2 +being enabled to stage 1 which requires small chiller 1 being enabled and chiller +2 being disabled. +

                      +
                        +
                      • +In stage 2, the design condenser water pump speed is 0.6 and it requires 2 +condenser water pumps. The maximum and minimum chilled water flow are 1.5 m3/s and +1.0 m3/s. +
                      • +
                      • +In stage 1, the design condenser water pump speed is 0.75 and it requires 1 condenser +water pump. The maximum and minimum chilled water flow are 1.0 m3/s and 0.5 m3/s. +
                      • +
                      +

                      +It demonstrates process as below: +

                      +
                        +
                      • +Before 120 seconds, the plant is not in the staging process. +
                      • +
                      • +At 120 seconds, the plant starts staging down from stage 2 to stage 1. The operating +chiller load is reduced from 2 A to 1.56 A (which is lower than 80% of the operating +chiller load). It then slowly increases the minimum chilled water flow setpoint from +1 m3/s to both 1.667 m3/s. The setpoint change takes 300 seconds +(byPasSetTim) and it ends at about 394 seconds. +
                      • +
                      • +After the new setpoint being achieved, wait 60 seconds (aftByPasSetTim) +to 454 seconds, it enabled chiller 1 head pressure control (yChiHeaCon[1]=true). +
                      • +
                      • +After 30 seconds (waiTim) to 484 seconds, it starts slowly open the +chiller 1 isolation valve (yChiWatIsoVal[1]). It takes 300 seconds +(chaChiWatIsoTim) to fully open the valve, till 784 seconds. +
                      • +
                      • +At 784 seconds, the chiller 1 isolation valve is fully open and the chiller becomes +enabled (uChi[1]=true). +
                      • +
                      • +After 5 minutes (proOnTim) to 1084 seconds, the chiller 2 becomes +disabled (uChi[2]=false, uChiLoa[2]=0). +
                      • +
                      • +After the chiller 2 being disabled and no request for chilled water flow, it +starts slowly close the isolation valve of chiller 2. At 1384 seconds, the valve +is fully closed. +
                      • +
                      • +At 1384 seconds, the chiller 2 head pressure control becomes disabled +(yChiHeaCon[2]=false). It also changes the minimum flow setpoint to +the new one for the stage 1, which is 1 m3/s. +
                      • +
                      • +After the new setpoint being achieved for 60 seconds, to 1684 seconds, the staging +process is done. +
                      • +
                      +", revisions=" +
                        +
                      • +May 30, 2024, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-220,-320},{220,320}}), + graphics={ + Text( + extent={{-194,276},{-4,260}}, + textColor={0,0,127}, + textString="to stage 1 which only has small chiller enabled (chiller 1)."), + Text( + extent={{-194,288},{-6,278}}, + textColor={0,0,127}, + textString="from stage 2 which only has large chiller enabled (chiller 2), "), + Text( + extent={{-204,300},{-156,292}}, + textColor={0,0,127}, + textString="Stage down:")})); +end DownWithOnOff; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithoutOnOff.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithoutOnOff.mo new file mode 100644 index 00000000000..63d67bf79c6 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithoutOnOff.mo @@ -0,0 +1,304 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation; +model DownWithoutOnOff + "Validate sequence of staging down process which does require chiller ON" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Down + dowProCon( + final nChi=2, + final totSta=4, + final need_reduceChillerDemand=true, + final chaChiWatIsoTim=300, + final staVec={0,0.5,1,2}, + final desConWatPumSpe={0,0.5,0.75,0.6}, + final desConWatPumNum={0,1,1,2}, + final byPasSetTim=300, + final minFloSet={1,1}, + final maxFloSet={1.5,1.5}) + "Stage down process when does not require chiller on and off" + annotation (Placement(transformation(extent={{40,50},{60,90}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp chiWatFlo( + final height=-1, + final duration=300, + final offset=2, + final startTime=800) "Chilled water flow rate" + annotation (Placement(transformation(extent={{-140,-110},{-120,-90}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=2) "Replicate boolean input" + annotation (Placement(transformation(extent={{-60,-210},{-40,-190}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul(final width=0.05, + final period=1500) "Boolean pulse" + annotation (Placement(transformation(extent={{-140,120},{-120,140}}))); + Buildings.Controls.OBC.CDL.Logical.Not staDow "Stage down command" + annotation (Placement(transformation(extent={{-100,120},{-80,140}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiLoa[2]( + final k=fill(2, 2)) + "Chiller load" + annotation (Placement(transformation(extent={{-140,-30},{-120,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yOpeParLoaRatMin( + final k=0.78) "Minimum cycling operative partial load ratio" + annotation (Placement(transformation(extent={{-140,10},{-120,30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant fulOpe[2]( + final k=fill(1, 2)) "Full open isolation valve" + annotation (Placement(transformation(extent={{-140,-240},{-120,-220}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1[2]( + final k=fill(0,2)) "Constant zero" + annotation (Placement(transformation(extent={{-140,-70},{-120,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre2[2]( + final pre_u_start=fill(true,2)) "Break algebraic loop" + annotation (Placement(transformation(extent={{100,30},{120,50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1[2] "Logical switch" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Switch IsoVal[2] "Logical switch" + annotation (Placement(transformation(extent={{-20,-240},{0,-220}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol[2]( + final samplePeriod=fill(10, 2)) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{100,-40},{120,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant wseSta(final k=false) + "Waterside economizer status" + annotation (Placement(transformation(extent={{-140,-280},{-120,-260}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol1( + final samplePeriod=10) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{100,-90},{120,-70}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol2( + final samplePeriod=20) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{100,-130},{120,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staTwoChi2[2](final k={ + true,true}) + "Vector of chillers status setpoint at stage two" + annotation (Placement(transformation(extent={{-140,90},{-120,110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staOneChi2[2]( + final k={true,false}) + "Vector of chillers status setpoint at stage one" + annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep2(final nout=2) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-60,120},{-40,140}}))); + Buildings.Controls.OBC.CDL.Logical.Switch chiSet2[2] + "Chiller status setpoint" + annotation (Placement(transformation(extent={{-20,120},{0,140}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger staSet2 + "Stage setpoint index" + annotation (Placement(transformation(extent={{-20,200},{0,220}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Logical switch" + annotation (Placement(transformation(extent={{-60,200},{-40,220}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant upSta2(final k=2) + "Stage two" + annotation (Placement(transformation(extent={{-140,180},{-120,200}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dowSta2(final k=1) + "Stage one" + annotation (Placement(transformation(extent={{-140,220},{-120,240}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant staOne(final k=1) "Stage one" + annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant staTwo(final k=2) + "Stage two" + annotation (Placement(transformation(extent={{-140,-190},{-120,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiSta "Current chiller stage" + annotation (Placement(transformation(extent={{-60,-170},{-40,-150}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger sta "Current chiller stage" + annotation (Placement(transformation(extent={{-20,-170},{0,-150}}))); + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg + "Check if the down process has ended" + annotation (Placement(transformation(extent={{80,130},{100,150}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant fal(final k=false) + "Logical false" + annotation (Placement(transformation(extent={{80,100},{100,120}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "True when it is not in process" + annotation (Placement(transformation(extent={{120,130},{140,150}}))); + +equation + connect(booPul.y,staDow. u) + annotation (Line(points={{-118,130},{-102,130}}, color={255,0,255})); + connect(yOpeParLoaRatMin.y, dowProCon.yOpeParLoaRatMin) + annotation (Line(points={{-118,20},{-58,20},{-58,83},{38,83}}, + color={0,0,127})); + connect(dowProCon.yChi, pre2.u) + annotation (Line(points={{62,82},{94,82},{94,40},{98,40}}, + color={255,0,255})); + connect(pre2.y, swi1.u2) + annotation (Line(points={{122,40},{140,40},{140,0},{-80,0},{-80,-40},{-62,-40}}, + color={255,0,255})); + connect(chiLoa.y, swi1.u1) + annotation (Line(points={{-118,-20},{-100,-20},{-100,-32},{-62,-32}}, + color={0,0,127})); + connect(zer1.y, swi1.u3) + annotation (Line(points={{-118,-60},{-100,-60},{-100,-48},{-62,-48}}, + color={0,0,127})); + connect(swi1.y, dowProCon.uChiLoa) + annotation (Line(points={{-38,-40},{-30,-40},{-30,81},{38,81}}, + color={0,0,127})); + connect(pre2.y, dowProCon.uChi) + annotation (Line(points={{122,40},{140,40},{140,0},{-28,0},{-28,79},{38,79}}, + color={255,0,255})); + connect(chiWatFlo.y, dowProCon.VChiWat_flow) + annotation (Line(points={{-118,-100},{-26,-100},{-26,77},{38,77}}, + color={0,0,127})); + connect(pre2.y, dowProCon.uChiHeaCon) + annotation (Line(points={{122,40},{140,40},{140,0},{12,0},{12,71},{38,71}}, + color={255,0,255})); + connect(staDow.y, booRep.u) + annotation (Line(points={{-78,130},{-70,130},{-70,-200},{-62,-200}}, + color={255,0,255})); + connect(booRep.y, IsoVal.u2) + annotation (Line(points={{-38,-200},{-30,-200},{-30,-230},{-22,-230}}, + color={255,0,255})); + connect(fulOpe.y, IsoVal.u3) + annotation (Line(points={{-118,-230},{-100,-230},{-100,-238},{-22,-238}}, + color={0,0,127})); + connect(dowProCon.yChiWatIsoVal, zerOrdHol.u) + annotation (Line(points={{62,74},{88,74},{88,-30},{98,-30}}, + color={0,0,127})); + connect(zerOrdHol.y, IsoVal.u1) + annotation (Line(points={{122,-30},{150,-30},{150,-190},{-26,-190},{-26,-222}, + {-22,-222}}, color={0,0,127})); + connect(IsoVal.y, dowProCon.uChiWatIsoVal) + annotation (Line(points={{2,-230},{14,-230},{14,68},{38,68}}, + color={0,0,127})); + connect(pre2.y, dowProCon.uChiWatReq) + annotation (Line(points={{122,40},{140,40},{140,0},{16,0},{16,65},{38,65}}, + color={255,0,255})); + connect(pre2.y, dowProCon.uConWatReq) + annotation (Line(points={{122,40},{140,40},{140,0},{18,0},{18,63},{38,63}}, + color={255,0,255})); + connect(pre2.y, dowProCon.uChiConIsoVal) + annotation (Line(points={{122,40},{140,40},{140,0},{20,0},{20,60},{38,60}}, + color={255,0,255})); + connect(wseSta.y, dowProCon.uWSE) + annotation (Line(points={{-118,-270},{22,-270},{22,57},{38,57}}, + color={255,0,255})); + connect(dowProCon.yDesConWatPumSpe, zerOrdHol1.u) + annotation (Line(points={{62,59},{80,59},{80,-80},{98,-80}}, + color={0,0,127})); + connect(zerOrdHol1.y, dowProCon.uConWatPumSpeSet) + annotation (Line(points={{122,-80},{140,-80},{140,-160},{24,-160},{24,55},{ + 38,55}}, + color={0,0,127})); + connect(zerOrdHol1.y, zerOrdHol2.u) + annotation (Line(points={{122,-80},{140,-80},{140,-100},{80,-100},{80,-120}, + {98,-120}}, color={0,0,127})); + connect(zerOrdHol2.y, dowProCon.uConWatPumSpe) + annotation (Line(points={{122,-120},{130,-120},{130,-140},{26,-140},{26,53}, + {38,53}}, color={0,0,127})); + connect(staDow.y, booRep2.u) + annotation (Line(points={{-78,130},{-62,130}}, color={255,0,255})); + connect(staTwoChi2.y, chiSet2.u3) annotation (Line(points={{-118,100},{-30,100}, + {-30,122},{-22,122}}, color={255,0,255})); + connect(booRep2.y, chiSet2.u2) + annotation (Line(points={{-38,130},{-22,130}}, color={255,0,255})); + connect(staOneChi2.y, chiSet2.u1) annotation (Line(points={{-118,160},{-30,160}, + {-30,138},{-22,138}}, color={255,0,255})); + connect(upSta2.y, swi2.u3) annotation (Line(points={{-118,190},{-100,190},{-100, + 202},{-62,202}}, color={0,0,127})); + connect(dowSta2.y, swi2.u1) annotation (Line(points={{-118,230},{-100,230},{-100, + 218},{-62,218}}, color={0,0,127})); + connect(swi2.y, staSet2.u) + annotation (Line(points={{-38,210},{-22,210}}, color={0,0,127})); + connect(staDow.y, swi2.u2) annotation (Line(points={{-78,130},{-70,130},{-70,210}, + {-62,210}}, color={255,0,255})); + connect(chiSet2.y, dowProCon.uChiSet) annotation (Line(points={{2,130},{12, + 130},{12,87},{38,87}}, color={255,0,255})); + connect(staSet2.y, dowProCon.uStaSet) annotation (Line(points={{2,210},{20, + 210},{20,89},{38,89}}, color={255,127,0})); + connect(staOne.y, chiSta.u1) annotation (Line(points={{-118,-140},{-100,-140}, + {-100,-152},{-62,-152}}, color={0,0,127})); + connect(staTwo.y, chiSta.u3) annotation (Line(points={{-118,-180},{-100,-180}, + {-100,-168},{-62,-168}}, color={0,0,127})); + connect(chiSta.y, sta.u) + annotation (Line(points={{-38,-160},{-22,-160}}, color={0,0,127})); + connect(dowProCon.yStaPro, falEdg.u) annotation (Line(points={{62,89},{70,89}, + {70,140},{78,140}}, color={255,0,255})); + connect(falEdg.y, lat.u) + annotation (Line(points={{102,140},{118,140}}, color={255,0,255})); + connect(fal.y, lat.clr) annotation (Line(points={{102,110},{110,110},{110,134}, + {118,134}}, color={255,0,255})); + connect(lat.y, chiSta.u2) annotation (Line(points={{142,140},{154,140},{154,-180}, + {-80,-180},{-80,-160},{-62,-160}}, color={255,0,255})); + connect(sta.y, dowProCon.uChiSta) annotation (Line(points={{2,-160},{10,-160}, + {10,74},{38,74}}, color={255,127,0})); + +annotation ( + experiment(StopTime=1500, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithoutOnOff.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Down. +

                      +

                      +It shows a process of staging down from stage 2 which requires chiller 1 and chiller 2 +being enabled to stage 1 which requires only chiller 1 being enabled. +

                      +
                        +
                      • +In stage 2, the design condenser water pump speed is 0.6 and it requires 2 +condenser water pumps. The maximum and minimum chilled water flow for chiller 1 +and 2 are 1.5 m3/s and 1.0 m3/s. +
                      • +
                      • +In stage 1, the design condenser water pump speed is 0.75 and it requires 1 condenser +water pump. The maximum and minimum chilled water flow for chiller 1 are 1.0 m3/s +and 0.5 m3/s. +
                      • +
                      +

                      +It demonstrates process as below: +

                      +
                        +
                      • +Before 75 seconds, the plant is not in the staging process. +
                      • +
                      • +At 75 seconds, the plant starts staging down from stage 2 to stage 1. The chiller +2 becomes disabled (uChiLoa[2]=0). Its head pressure control becomes +disabled (yChiHeaCon[2]=false). +It then slowly close chilled water isolation valve of chiller 1. This takes 300 +seconds (chaChiWatIsoTim) and finish the process at 375 seconds. +
                      • +
                      • +After the isolation being closed at 375 seconds, it slowly changes the minimum +chilled water flow setpoint from 2 m3/s (for both chiller 1 and 2 operation) to +1 m3/s (for only chiller 1 operation). It takes 300 seconds (byPasSetTim) +to finish the change at 675 seconds. The staging process is done. +
                      • +
                      +", revisions=" +
                        +
                      • +May 30, 2024, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-160,-300},{160,300}}), + graphics={ + Text( + extent={{-144,294},{-96,286}}, + textColor={0,0,127}, + textString="Stage down:"), + Text( + extent={{-134,282},{26,272}}, + textColor={0,0,127}, + textString="from stage 2 which has chiller one and two enabled, "), + Text( + extent={{-138,270},{-36,256}}, + textColor={0,0,127}, + textString="to stage 1 which only has chiller 1.")})); +end DownWithoutOnOff; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithOnOff.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithOnOff.mo new file mode 100644 index 00000000000..941a3e5a8c5 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithOnOff.mo @@ -0,0 +1,392 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation; +model UpWithOnOff + "Validate sequence of staging up process which does require chiller OFF" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Up upProCon( + final nChi=2, + final totSta=4, + final have_ponyChiller=true, + final have_fixSpeConWatPum=false, + final need_reduceChillerDemand=true, + final chaChiWatIsoTim=300, + final staVec={0,0.5,1,2}, + final desConWatPumSpe={0,0.5,0.75,0.6}, + final desConWatPumNum={0,1,1,2}, + final byPasSetTim=300, + final minFloSet={0.5,1}, + final maxFloSet={1,1.5}) + "Stage up process when does not require chiller off" + annotation (Placement(transformation(extent={{20,80},{40,120}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp chiWatFlo( + final height=5/3 - 0.5, + final duration=300, + final offset=0.5, + final startTime=500) "Chilled water flow rate" + annotation (Placement(transformation(extent={{-200,-70},{-180,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.075, + final period=2000) "Boolean pulse" + annotation (Placement(transformation(extent={{-200,110},{-180,130}}))); + Buildings.Controls.OBC.CDL.Logical.Not staUp "Stage up command" + annotation (Placement(transformation(extent={{-160,110},{-140,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant fulLoa(final k=2) + "Full load" + annotation (Placement(transformation(extent={{-200,10},{-180,30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerLoa( + final k=0) + "Zero load" + annotation (Placement(transformation(extent={{-200,-30},{-180,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiOneSta( + final pre_u_start=true) + "Break algebraic loop" + annotation (Placement(transformation(extent={{80,60},{100,80}}))); + Buildings.Controls.OBC.CDL.Reals.Switch loaOne "Chiller load one" + annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol[2]( + final samplePeriod=fill(10, 2)) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{80,-190},{100,-170}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant wseSta( + final k=false) + "Waterside economizer status" + annotation (Placement(transformation(extent={{-200,-190},{-180,-170}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold conPumSpeSet( + final samplePeriod=10) "Design condenser water pump speed setpoint" + annotation (Placement(transformation(extent={{80,-30},{100,-10}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold conPumSpe( + final samplePeriod=20) "Condenser water pump speed" + annotation (Placement(transformation(extent={{80,-70},{100,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch loaTwo "Chiller load two" + annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer3[2]( + final k=fill(0,2)) "Constant zero" + annotation (Placement(transformation(extent={{80,100},{100,120}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold chiTwoDem( + final samplePeriod=10) "Chiller two limited demand" + annotation (Placement(transformation(extent={{80,130},{100,150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiLoa3(final k=2) + "Chiller load" + annotation (Placement(transformation(extent={{80,160},{100,180}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiLoa[2] "Limited chiller load" + annotation (Placement(transformation(extent={{140,130},{160,150}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold chiTwoDem1( + final samplePeriod=10) "Limited chiller two demand" + annotation (Placement(transformation(extent={{180,130},{200,150}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiTwoSta( + final pre_u_start=false) "Chiller two status" + annotation (Placement(transformation(extent={{80,20},{100,40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerOpe( + final k=0) "Closed isolation valve" + annotation (Placement(transformation(extent={{-200,-270},{-180,-250}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant fulOpe( + final k=1) "Full open isolation valve" + annotation (Placement(transformation(extent={{-200,-230},{-180,-210}}))); + Buildings.Controls.OBC.CDL.Reals.Switch IsoValOne "Logical switch" + annotation (Placement(transformation(extent={{-120,-230},{-100,-210}}))); + Buildings.Controls.OBC.CDL.Reals.Switch IsoValTwo "Logical switch" + annotation (Placement(transformation(extent={{-120,-270},{-100,-250}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiOneHea( + final pre_u_start=true) + "Chiller one head pressure control" + annotation (Placement(transformation(extent={{80,-110},{100,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiTwoHea( + final pre_u_start=false) + "Chiller two head pressure control" + annotation (Placement(transformation(extent={{80,-150},{100,-130}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol3( + final samplePeriod=20) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{80,-230},{100,-210}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiWatFlo1 "Chilled water flow rate" + annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiOneHea1( + final pre_u_start=false) + "Chiller one head pressure control" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staOneChi[2]( + final k={true,false}) + "Vector of chillers status setpoint at stage one" + annotation (Placement(transformation(extent={{-200,70},{-180,90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staTwoChi[2]( + final k={false,true}) + "Vector of chillers status setpoint at stage two" + annotation (Placement(transformation(extent={{-200,150},{-180,170}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=2) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-120,110},{-100,130}}))); + Buildings.Controls.OBC.CDL.Logical.Switch chiSet[2] + "Chiller status setpoint" + annotation (Placement(transformation(extent={{-80,130},{-60,150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dowSta( + final k=1) + "Stage one" + annotation (Placement(transformation(extent={{-200,190},{-180,210}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant upSta( + final k=2) + "Stage two" + annotation (Placement(transformation(extent={{-200,220},{-180,240}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{-120,200},{-100,220}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger staSet + "Stage setpoint index" + annotation (Placement(transformation(extent={{-80,200},{-60,220}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant staOne( + final k=1) "Stage one" + annotation (Placement(transformation(extent={{-200,-150},{-180,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant staTwo( + final k=2) + "Stage two" + annotation (Placement(transformation(extent={{-200,-110},{-180,-90}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiSta "Current chiller stage" + annotation (Placement(transformation(extent={{-120,-130},{-100,-110}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger sta "Current chiller stage" + annotation (Placement(transformation(extent={{-80,-130},{-60,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant fal( + final k=false) + "Logical false" + annotation (Placement(transformation(extent={{140,170},{160,190}}))); + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg + "Check if the up process has ended" + annotation (Placement(transformation(extent={{80,190},{100,210}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "True when it is not in process" + annotation (Placement(transformation(extent={{180,190},{200,210}}))); + +equation + connect(booPul.y, staUp.u) + annotation (Line(points={{-178,120},{-162,120}}, color={255,0,255})); + connect(fulLoa.y, loaOne.u3) annotation (Line(points={{-178,20},{-160,20},{-160, + 12},{-122,12}}, color={0,0,127})); + connect(zerLoa.y, loaTwo.u3) annotation (Line(points={{-178,-20},{-160,-20},{-160, + -28},{-122,-28}}, color={0,0,127})); + connect(staUp.y, loaOne.u2) annotation (Line(points={{-138,120},{-130,120},{-130, + 20},{-122,20}}, color={255,0,255})); + connect(staUp.y, loaTwo.u2) annotation (Line(points={{-138,120},{-130,120},{-130, + -20},{-122,-20}}, color={255,0,255})); + connect(upProCon.yChi[1], chiOneSta.u) annotation (Line(points={{42,82.5},{60, + 82.5},{60,70},{78,70}}, color={255,0,255})); + connect(upProCon.yChi[2], chiTwoSta.u) annotation (Line(points={{42,83.5},{58, + 83.5},{58,30},{78,30}}, color={255,0,255})); + connect(chiOneSta.y, chiLoa[1].u2) annotation (Line(points={{102,70},{130,70}, + {130,140},{138,140}}, color={255,0,255})); + connect(chiTwoSta.y, chiLoa[2].u2) annotation (Line(points={{102,30},{132,30}, + {132,140},{138,140}}, color={255,0,255})); + connect(upProCon.yChiDem[2], chiTwoDem.u) annotation (Line(points={{42,115.5}, + {60,115.5},{60,140},{78,140}}, color={0,0,127})); + connect(chiLoa3.y, chiLoa[1].u1) annotation (Line(points={{102,170},{120,170}, + {120,148},{138,148}}, color={0,0,127})); + connect(zer3.y, chiLoa.u3) annotation (Line(points={{102,110},{120,110},{120,132}, + {138,132}}, color={0,0,127})); + connect(chiLoa[2].y, chiTwoDem1.u) + annotation (Line(points={{162,140},{178,140}}, color={0,0,127})); + connect(chiLoa[1].y, loaOne.u1) annotation (Line(points={{162,140},{170,140},{ + 170,46},{-140,46},{-140,28},{-122,28}}, color={0,0,127})); + connect(chiTwoDem1.y, loaTwo.u1) annotation (Line(points={{202,140},{210,140}, + {210,0},{-140,0},{-140,-12},{-122,-12}}, color={0,0,127})); + connect(loaOne.y, upProCon.uChiLoa[1]) annotation (Line(points={{-98,20},{-60, + 20},{-60,111.5},{18,111.5}}, color={0,0,127})); + connect(loaTwo.y, upProCon.uChiLoa[2]) annotation (Line(points={{-98,-20},{-58, + -20},{-58,112.5},{18,112.5}}, color={0,0,127})); + connect(chiOneSta.y, upProCon.uChi[1]) annotation (Line(points={{102,70},{130, + 70},{130,50},{-56,50},{-56,109.5},{18,109.5}}, color={255,0,255})); + connect(chiTwoSta.y, upProCon.uChi[2]) annotation (Line(points={{102,30},{132, + 30},{132,10},{-54,10},{-54,110.5},{18,110.5}}, color={255,0,255})); + connect(zerOpe.y, IsoValTwo.u3) annotation (Line(points={{-178,-260},{-160,-260}, + {-160,-268},{-122,-268}}, color={0,0,127})); + connect(fulOpe.y, IsoValOne.u3) annotation (Line(points={{-178,-220},{-160,-220}, + {-160,-228},{-122,-228}}, color={0,0,127})); + connect(staUp.y, IsoValOne.u2) annotation (Line(points={{-138,120},{-130,120}, + {-130,-220},{-122,-220}}, color={255,0,255})); + connect(staUp.y, IsoValTwo.u2) annotation (Line(points={{-138,120},{-130,120}, + {-130,-260},{-122,-260}}, color={255,0,255})); + connect(upProCon.yChiWatIsoVal, zerOrdHol.u) annotation (Line(points={{42,86}, + {56,86},{56,-180},{78,-180}}, color={0,0,127})); + connect(zerOrdHol[1].y, IsoValOne.u1) annotation (Line(points={{102,-180},{120, + -180},{120,-200},{-140,-200},{-140,-212},{-122,-212}}, color={0,0,127})); + connect(zerOrdHol[2].y, IsoValTwo.u1) annotation (Line(points={{102,-180},{120, + -180},{120,-200},{-140,-200},{-140,-252},{-122,-252}}, color={0,0,127})); + connect(chiOneSta.y, upProCon.uChiConIsoVal[1]) annotation (Line(points={{102,70}, + {130,70},{130,50},{-50,50},{-50,104.5},{18,104.5}}, color={255,0,255})); + connect(chiTwoSta.y, upProCon.uChiConIsoVal[2]) annotation (Line(points={{102,30}, + {132,30},{132,10},{-48,10},{-48,105.5},{18,105.5}}, color={255,0,255})); + connect(chiOneSta.y, upProCon.uConWatReq[1]) annotation (Line(points={{102,70}, + {130,70},{130,50},{-44,50},{-44,97.5},{18,97.5}},color={255,0,255})); + connect(chiTwoSta.y, upProCon.uConWatReq[2]) annotation (Line(points={{102,30}, + {132,30},{132,10},{-42,10},{-42,98.5},{18,98.5}}, color={255,0,255})); + connect(wseSta.y, upProCon.uWSE) annotation (Line(points={{-178,-180},{-40,-180}, + {-40,96},{18,96}}, color={255,0,255})); + connect(upProCon.yDesConWatPumSpe, conPumSpeSet.u) annotation (Line(points={{42,99}, + {54,99},{54,-20},{78,-20}}, color={0,0,127})); + connect(conPumSpeSet.y, conPumSpe.u) annotation (Line(points={{102,-20},{120,-20}, + {120,-40},{60,-40},{60,-60},{78,-60}}, color={0,0,127})); + connect(conPumSpeSet.y, upProCon.uConWatPumSpeSet) annotation (Line(points={{102,-20}, + {120,-20},{120,-40},{-38,-40},{-38,94},{18,94}}, color={0,0,127})); + connect(conPumSpe.y, upProCon.uConWatPumSpe) annotation (Line(points={{102,-60}, + {120,-60},{120,-80},{-36,-80},{-36,92},{18,92}}, color={0,0,127})); + connect(chiOneHea.y, upProCon.uChiHeaCon[1]) annotation (Line(points={{102,-100}, + {120,-100},{120,-116},{-32,-116},{-32,84.5},{18,84.5}}, color={255,0,255})); + connect(chiTwoHea.y, upProCon.uChiHeaCon[2]) annotation (Line(points={{102,-140}, + {120,-140},{120,-124},{-34,-124},{-34,85.5},{18,85.5}}, color={255,0,255})); + connect(upProCon.yChiHeaCon[1], chiOneHea.u) annotation (Line(points={{42,90.5}, + {50,90.5},{50,-100},{78,-100}}, color={255,0,255})); + connect(upProCon.yChiHeaCon[2], chiTwoHea.u) annotation (Line(points={{42,91.5}, + {52,91.5},{52,-140},{78,-140}}, color={255,0,255})); + connect(IsoValOne.y, upProCon.uChiWatIsoVal[1]) annotation (Line(points={{-98, + -220},{-30,-220},{-30,82.5},{18,82.5}}, color={0,0,127})); + connect(IsoValTwo.y, upProCon.uChiWatIsoVal[2]) annotation (Line(points={{-98, + -260},{-28,-260},{-28,83.5},{18,83.5}}, color={0,0,127})); + connect(chiOneSta.y, upProCon.uChiWatReq[1]) annotation (Line(points={{102,70}, + {130,70},{130,50},{-26,50},{-26,80.5},{18,80.5}},color={255,0,255})); + connect(chiTwoSta.y, upProCon.uChiWatReq[2]) annotation (Line(points={{102,30}, + {132,30},{132,10},{-24,10},{-24,81.5},{18,81.5}}, color={255,0,255})); + connect(upProCon.yChiWatMinFloSet, zerOrdHol3.u) annotation (Line(points={{42,111}, + {48,111},{48,-220},{78,-220}}, color={0,0,127})); + connect(chiWatFlo.y, chiWatFlo1.u3) annotation (Line(points={{-178,-60},{-160, + -60},{-160,-68},{-122,-68}}, color={0,0,127})); + connect(zerOrdHol3.y, chiWatFlo1.u1) annotation (Line(points={{102,-220},{120, + -220},{120,-240},{-90,-240},{-90,-40},{-140,-40},{-140,-52},{-122,-52}}, + color={0,0,127})); + connect(chiWatFlo1.y, upProCon.VChiWat_flow) annotation (Line(points={{-98,-60}, + {-52,-60},{-52,107.6},{18,107.6}}, color={0,0,127})); + connect(upProCon.yTowStaUp, chiOneHea1.u) annotation (Line(points={{42,107},{46, + 107},{46,20},{-20,20},{-20,-20},{-2,-20}}, color={255,0,255})); + connect(chiOneHea1.y, chiWatFlo1.u2) annotation (Line(points={{22,-20},{40,-20}, + {40,-34},{-150,-34},{-150,-60},{-122,-60}}, color={255,0,255})); + connect(upSta.y, swi.u1) annotation (Line(points={{-178,230},{-160,230},{-160, + 218},{-122,218}}, color={0,0,127})); + connect(dowSta.y, swi.u3) annotation (Line(points={{-178,200},{-160,200},{-160, + 202},{-122,202}}, color={0,0,127})); + connect(swi.y, staSet.u) + annotation (Line(points={{-98,210},{-82,210}}, color={0,0,127})); + connect(booRep.y, chiSet.u2) annotation (Line(points={{-98,120},{-92,120},{-92, + 140},{-82,140}}, color={255,0,255})); + connect(staUp.y, booRep.u) + annotation (Line(points={{-138,120},{-122,120}}, color={255,0,255})); + connect(staOneChi.y, chiSet.u3) annotation (Line(points={{-178,80},{-88,80},{-88, + 132},{-82,132}}, color={255,0,255})); + connect(staTwoChi.y, chiSet.u1) annotation (Line(points={{-178,160},{-90,160}, + {-90,148},{-82,148}}, color={255,0,255})); + connect(staUp.y, swi.u2) annotation (Line(points={{-138,120},{-130,120},{-130, + 210},{-122,210}}, color={255,0,255})); + connect(staSet.y, upProCon.uStaSet) annotation (Line(points={{-58,210},{0,210}, + {0,119},{18,119}}, color={255,127,0})); + connect(chiSet.y, upProCon.uChiSet) annotation (Line(points={{-58,140},{-4,140}, + {-4,116},{18,116}}, color={255,0,255})); + connect(staTwo.y, chiSta.u1) annotation (Line(points={{-178,-100},{-160,-100}, + {-160,-112},{-122,-112}}, color={0,0,127})); + connect(staOne.y, chiSta.u3) annotation (Line(points={{-178,-140},{-160,-140}, + {-160,-128},{-122,-128}}, color={0,0,127})); + connect(chiSta.y, sta.u) + annotation (Line(points={{-98,-120},{-82,-120}}, color={0,0,127})); + connect(sta.y, upProCon.uChiSta) annotation (Line(points={{-58,-120},{-46,-120}, + {-46,103},{18,103}}, color={255,127,0})); + connect(upProCon.yStaPro, falEdg.u) annotation (Line(points={{42,119},{56,119}, + {56,200},{78,200}}, color={255,0,255})); + connect(falEdg.y, lat.u) + annotation (Line(points={{102,200},{178,200}}, color={255,0,255})); + connect(fal.y, lat.clr) annotation (Line(points={{162,180},{170,180},{170,194}, + {178,194}}, color={255,0,255})); + connect(lat.y, chiSta.u2) annotation (Line(points={{202,200},{214,200},{214,-84}, + {-140,-84},{-140,-120},{-122,-120}}, color={255,0,255})); + connect(wseSta.y, upProCon.uEnaPlaConPum) annotation (Line(points={{-178,-180}, + {-40,-180},{-40,101},{18,101}}, color={255,0,255})); + connect(wseSta.y, upProCon.uEnaPlaConIso) annotation (Line(points={{-178,-180}, + {-40,-180},{-40,90},{18,90}}, color={255,0,255})); + connect(chiLoa3.y, chiLoa[2].u1) annotation (Line(points={{102,170},{120,170}, + {120,148},{138,148}}, color={0,0,127})); +annotation ( + experiment(StopTime=2000, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithOnOff.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Up. +

                      +

                      +It shows a process of staging up from stage 1 which only requires small chiller 1 +being enabled, to stage 2 which only requires large chiller 2 being enabled. In +stage 1 and 2, the required minimum chilled water flow setpoints are 0.5 m3/s and +1.0 m3/s respectively. The process are below: +

                      +
                        +
                      • +Before 150 seconds, the plant is not in the staging process. +
                      • +
                      • +At 150 seconds, the plant starts staging up. The operating chiller load is reduced +from 2 A to 1.5 A (which is lower than 80% of the operating chiller load). +
                      • +
                      • +After 300 seconds (byPasSetTim) to 450 seconds, the minimum chilled +water flow setpoint slowly increase from 0.5 m3/s to 1.667 m3/s which is for the +case when both chiller 1 and 2 are operating. The setpoint is achieved at 750 seconds. +
                      • +
                      • +Wait 60 seconds (aftByPasSetTim) to allow the loop being stable, +enabling the head pressure control of chiller 2 (yChiHeaCon[2]=true) +at 850 seconds. +
                      • +
                      • +After 30 seconds (waiTim) at 880 seconds, it starts slowly open the chilled +water isolation valve of chiller 2 (yChiWatIsoVal[2]). After 300 +seconds (chaChiWatIsoTim) at 1180 seconds, the valve is fully open. +
                      • +
                      • +At 1180 seconds, the chiller 2 becomes enabled. +
                      • +
                      • +After 300 seconds (proOnTim) at 1480 seconds which allows the chiller +2 being operating correctly, the chiller 1 becomes disabled. +
                      • +
                      • +At 1480 seconds, it slowly closes the chilled water isolation valve. After 300 +seconds (chaChiWatIsoTim) at 1780, the valve becomes fully closed. +
                      • +
                      • +At 1780 seconds, it disables chiller 1 head pressure control and change the minimum +chilled water flow setpoint to 1 m3/s. +
                      • +
                      • +At 1800 seconds, the measured chilled water flow achieves the new setpoint. After +60 seconds at 1860 seconds, the staging process is done and the chiller load demand is released. +
                      • +
                      +", revisions=" +
                        +
                      • +May 30, 2024, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-220,-300},{220,300}}), + graphics={ + Text( + extent={{-208,294},{-160,286}}, + textColor={0,0,127}, + textString="Stage up:"), + Text( + extent={{-196,280},{-50,272}}, + textColor={0,0,127}, + textString="from stage 1 which has small chiller one been enabled, "), + Text( + extent={{-196,268},{-70,254}}, + textColor={0,0,127}, + textString="to stage 2 which has large chiller 2 been enabled.")})); +end UpWithOnOff; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithoutOnOff.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithoutOnOff.mo new file mode 100644 index 00000000000..0a52393dd5b --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithoutOnOff.mo @@ -0,0 +1,281 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation; +model UpWithoutOnOff + "Validate sequence of staging up process which does not require chiller OFF" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Up upProCon( + final nChi=2, + final totSta=4, + final have_fixSpeConWatPum=false, + final need_reduceChillerDemand=true, + final chaChiWatIsoTim=300, + final staVec={0,0.5,1,2}, + final desConWatPumSpe={0,0.5,0.75,0.6}, + final desConWatPumNum={0,1,1,2}, + final byPasSetTim=300, + final minFloSet={1,1}, + final maxFloSet={1.5,1.5}) + "Stage up process when does not require chiller off" + annotation (Placement(transformation(extent={{40,48},{60,88}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp chiWatFlo( + final height=1, + final duration=300, + final offset=1, + final startTime=500) "Chilled water flow rate" + annotation (Placement(transformation(extent={{-140,-50},{-120,-30}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=2) "Replicate boolean input" + annotation (Placement(transformation(extent={{-60,-230},{-40,-210}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.075, + final period=2000) + "Boolean pulse" + annotation (Placement(transformation(extent={{-140,100},{-120,120}}))); + Buildings.Controls.OBC.CDL.Logical.Not staUp "Stage up command" + annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiLoa[2]( + final k=fill(2, 2)) + "Chiller load" + annotation (Placement(transformation(extent={{-140,30},{-120,50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant iniChiIsoVal[2]( + final k={1,0}) "Initial chilled water solation valve" + annotation (Placement(transformation(extent={{-140,-260},{-120,-240}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1[2]( + final k=fill(0,2)) "Constant zero" + annotation (Placement(transformation(extent={{-140,-10},{-120,10}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiStaRet[2]( + final pre_u_start={true,false}) "Chiller status return value" + annotation (Placement(transformation(extent={{100,60},{120,80}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1[2] "Logical switch" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + Buildings.Controls.OBC.CDL.Reals.Switch IsoVal[2] "Logical switch" + annotation (Placement(transformation(extent={{-20,-260},{0,-240}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol[2]( + final samplePeriod=fill(10, 2)) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{100,-30},{120,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant wseSta(final k=false) + "Waterside economizer status" + annotation (Placement(transformation(extent={{-140,-180},{-120,-160}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol1( + final samplePeriod=10) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{100,-70},{120,-50}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol2( + final samplePeriod=20) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{100,-120},{120,-100}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staOneChi[2]( + final k={true,false}) + "Vector of chillers status setpoint at stage one" + annotation (Placement(transformation(extent={{-140,62},{-120,82}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant staTwoChi[2]( + final k={true,true}) + "Vector of chillers status setpoint at stage two" + annotation (Placement(transformation(extent={{-140,140},{-120,160}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dowSta(final k=1) + "Stage one" + annotation (Placement(transformation(extent={{-140,170},{-120,190}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant upSta(final k=2) + "Stage two" + annotation (Placement(transformation(extent={{-140,210},{-120,230}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{-60,190},{-40,210}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger staSet + "Stage setpoint index" + annotation (Placement(transformation(extent={{-20,190},{0,210}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep1(final nout=2) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-60,100},{-40,120}}))); + Buildings.Controls.OBC.CDL.Logical.Switch chiSet[2] + "Chiller status setpoint" + annotation (Placement(transformation(extent={{-20,100},{0,120}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant staOne(final k=1) "Stage one" + annotation (Placement(transformation(extent={{-140,-140},{-120,-120}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant staTwo(final k=2) + "Stage two" + annotation (Placement(transformation(extent={{-140,-100},{-120,-80}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiSta "Current chiller stage" + annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger sta "Current chiller stage" + annotation (Placement(transformation(extent={{-20,-120},{0,-100}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant fal(final k=false) + "Logical false" + annotation (Placement(transformation(extent={{80,100},{100,120}}))); + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg + "Check if the up process has ended" + annotation (Placement(transformation(extent={{80,130},{100,150}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "True when it is not in process" + annotation (Placement(transformation(extent={{120,130},{140,150}}))); + +equation + connect(booPul.y, staUp.u) + annotation (Line(points={{-118,110},{-102,110}}, color={255,0,255})); + connect(chiLoa.y, swi1.u1) + annotation (Line(points={{-118,40},{-100,40},{-100,28},{-62,28}}, + color={0,0,127})); + connect(zer1.y, swi1.u3) + annotation (Line(points={{-118,0},{-100,0},{-100,12},{-62,12}}, + color={0,0,127})); + connect(iniChiIsoVal.y, IsoVal.u3) + annotation (Line(points={{-118,-250},{-100,-250},{-100,-258},{-22,-258}}, + color={0,0,127})); + connect(upProCon.yChi, chiStaRet.u) annotation (Line(points={{62,51},{94,51},{ + 94,70},{98,70}}, color={255,0,255})); + connect(chiStaRet.y, swi1.u2) annotation (Line(points={{122,70},{140,70},{140, + 40},{-80,40},{-80,20},{-62,20}}, color={255,0,255})); + connect(swi1.y, upProCon.uChiLoa) annotation (Line(points={{-38,20},{-30,20},{ + -30,80},{38,80}}, color={0,0,127})); + connect(chiStaRet.y, upProCon.uChi) annotation (Line(points={{122,70},{140,70}, + {140,40},{-28,40},{-28,78},{38,78}}, color={255,0,255})); + connect(chiWatFlo.y, upProCon.VChiWat_flow) annotation (Line(points={{-118,-40}, + {-26,-40},{-26,75.6},{38,75.6}}, color={0,0,127})); + connect(chiStaRet.y, upProCon.uChiConIsoVal) annotation (Line(points={{122,70}, + {140,70},{140,40},{-24,40},{-24,73},{38,73}}, color={255,0,255})); + connect(chiStaRet.y, upProCon.uConWatReq) annotation (Line(points={{122,70},{ + 140,70},{140,40},{12,40},{12,66},{38,66}}, color={255,0,255})); + connect(wseSta.y, upProCon.uWSE) annotation (Line(points={{-118,-170},{14, + -170},{14,64},{38,64}}, color={255,0,255})); + connect(upProCon.yDesConWatPumSpe, zerOrdHol1.u) annotation (Line(points={{62,67}, + {80,67},{80,-60},{98,-60}}, color={0,0,127})); + connect(zerOrdHol1.y, upProCon.uConWatPumSpeSet) annotation (Line(points={{122,-60}, + {140,-60},{140,-140},{16,-140},{16,62},{38,62}}, color={0,0,127})); + connect(zerOrdHol1.y, zerOrdHol2.u) annotation (Line(points={{122,-60},{140,-60}, + {140,-90},{80,-90},{80,-110},{98,-110}}, color={0,0,127})); + connect(zerOrdHol2.y, upProCon.uConWatPumSpe) annotation (Line(points={{122, + -110},{130,-110},{130,-134},{18,-134},{18,60},{38,60}}, color={0,0,127})); + connect(chiStaRet.y, upProCon.uChiHeaCon) annotation (Line(points={{122,70},{ + 140,70},{140,40},{20,40},{20,53},{38,53}}, color={255,0,255})); + connect(staUp.y, booRep.u) annotation (Line(points={{-78,110},{-70,110},{-70,-220}, + {-62,-220}}, color={255,0,255})); + connect(booRep.y, IsoVal.u2) annotation (Line(points={{-38,-220},{-30,-220},{-30, + -250},{-22,-250}}, color={255,0,255})); + connect(upProCon.yChiWatIsoVal, zerOrdHol.u) annotation (Line(points={{62,54}, + {88,54},{88,-20},{98,-20}},color={0,0,127})); + connect(zerOrdHol.y, IsoVal.u1) annotation (Line(points={{122,-20},{150,-20},{ + 150,-190},{-80,-190},{-80,-242},{-22,-242}}, color={0,0,127})); + connect(IsoVal.y, upProCon.uChiWatIsoVal) annotation (Line(points={{2,-250},{22, + -250},{22,51},{38,51}}, color={0,0,127})); + connect(chiStaRet.y, upProCon.uChiWatReq) annotation (Line(points={{122,70},{ + 140,70},{140,40},{24,40},{24,49},{38,49}}, color={255,0,255})); + connect(staUp.y, booRep1.u) + annotation (Line(points={{-78,110},{-62,110}}, color={255,0,255})); + connect(staOneChi.y, chiSet.u3) annotation (Line(points={{-118,72},{-60,72},{-60, + 90},{-30,90},{-30,102},{-22,102}}, color={255,0,255})); + connect(booRep1.y, chiSet.u2) + annotation (Line(points={{-38,110},{-22,110}}, color={255,0,255})); + connect(staTwoChi.y, chiSet.u1) annotation (Line(points={{-118,150},{-30,150}, + {-30,118},{-22,118}}, color={255,0,255})); + connect(upSta.y, swi.u1) annotation (Line(points={{-118,220},{-80,220},{-80,208}, + {-62,208}}, color={0,0,127})); + connect(dowSta.y, swi.u3) annotation (Line(points={{-118,180},{-80,180},{-80,192}, + {-62,192}}, color={0,0,127})); + connect(staUp.y, swi.u2) annotation (Line(points={{-78,110},{-70,110},{-70,200}, + {-62,200}}, color={255,0,255})); + connect(swi.y, staSet.u) + annotation (Line(points={{-38,200},{-22,200}}, color={0,0,127})); + connect(staSet.y, upProCon.uStaSet) annotation (Line(points={{2,200},{30,200}, + {30,87},{38,87}}, color={255,127,0})); + connect(chiSet.y, upProCon.uChiSet) annotation (Line(points={{2,110},{20,110}, + {20,84},{38,84}}, color={255,0,255})); + connect(staTwo.y, chiSta.u1) annotation (Line(points={{-118,-90},{-100,-90},{-100, + -102},{-62,-102}}, color={0,0,127})); + connect(staOne.y, chiSta.u3) annotation (Line(points={{-118,-130},{-100,-130}, + {-100,-118},{-62,-118}}, color={0,0,127})); + connect(chiSta.y, sta.u) + annotation (Line(points={{-38,-110},{-22,-110}}, color={0,0,127})); + connect(sta.y, upProCon.uChiSta) annotation (Line(points={{2,-110},{8,-110},{ + 8,71},{38,71}}, color={255,127,0})); + connect(upProCon.yStaPro, falEdg.u) annotation (Line(points={{62,87},{70,87},{ + 70,140},{78,140}}, color={255,0,255})); + connect(falEdg.y, lat.u) + annotation (Line(points={{102,140},{118,140}}, color={255,0,255})); + connect(fal.y, lat.clr) annotation (Line(points={{102,110},{110,110},{110,134}, + {118,134}}, color={255,0,255})); + connect(lat.y, chiSta.u2) annotation (Line(points={{142,140},{150,140},{150,0}, + {-80,0},{-80,-110},{-62,-110}}, color={255,0,255})); + connect(wseSta.y, upProCon.uEnaPlaConPum) annotation (Line(points={{-118,-170}, + {14,-170},{14,69},{38,69}}, color={255,0,255})); + connect(wseSta.y, upProCon.uEnaPlaConIso) annotation (Line(points={{-118,-170}, + {14,-170},{14,58},{38,58}}, color={255,0,255})); +annotation ( + experiment(StopTime=2000, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithoutOnOff.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Up. +

                      +

                      +It shows a process of staging up from stage 1 which requires only chiller 1 being +enabled, to stage 2 which requires both chiller 1 and 2 being enabled. In stage 1 +and 2, the required minimum chilled water flow setpoints are 1.0 m3/s and 2.0 m3/s +respectively. The process are below: +

                      +
                        +
                      • +Before 150 seconds, the plant is not in the staging process. +
                      • +
                      • +At 150 seconds, the plant starts staging up (yStaPro=true). The +operating chiller load is reduced from 2 A to 1.5 A (which is lower than 80% of +the operating chiller load). +
                      • +
                      • +After 300 seconds (byPasSetTim) to 450 seconds, the minimum chilled +water flow setpoint slowly increase from 1.0 m3/s to 2.0 m3/s which is for the case +when both chiller 1 and 2 are operating. The setpoint is achieved at 750 seconds. +
                      • +
                      • +Wait 60 seconds (aftByPasSetTim) to allow the loop being stable, +enabling the head pressure control of chiller 2 (yChiHeaCon[2]=true) +at 840 seconds. +
                      • +
                      • +After 30 seconds (waiTim) at 870 seconds, it starts slowly open the chilled +water isolation valve of chiller 2 (yChiWatIsoVal[2]). After 300 +seconds (chaChiWatIsoTim) at 1170 seconds, the valve is fully open. +
                      • +
                      • +At 1170 seconds, the chiller 2 becomes enabled. The chiller load demand is released. +The staging process is done (yStaPro=false). +
                      • +
                      +", revisions=" +
                        +
                      • +May 31, 2024, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), +Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-160,-300},{160,300}}), + graphics={ + Text( + extent={{-148,290},{-100,282}}, + textColor={0,0,127}, + textString="Stage up:"), + Text( + extent={{-138,274},{-8,264}}, + textColor={0,0,127}, + textString="from stage 1 which has chiller 1 enabled, "), + Text( + extent={{-136,262},{-10,248}}, + textColor={0,0,127}, + textString="to stage 2 which has chiller 1 and 2 enabled.")})); +end UpWithoutOnOff; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/package.mo new file mode 100644 index 00000000000..846bf37c7f5 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/package.mo @@ -0,0 +1,36 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes; +package Validation "Collection of validation models" +annotation (preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}}), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/package.order new file mode 100644 index 00000000000..fd9062ca55c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/package.order @@ -0,0 +1,4 @@ +DownWithOnOff +DownWithoutOnOff +UpWithOnOff +UpWithoutOnOff diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/package.mo new file mode 100644 index 00000000000..3543a331612 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/package.mo @@ -0,0 +1,43 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging; +package Processes "Package of sequences for controlling devices when there is a chiller stage change command" + annotation (preferredView="info", Documentation(info=" +

                      +This package contains sequences for controlling devices when there is stage-up +or stage-down command. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Processes; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/package.order new file mode 100644 index 00000000000..95417cff338 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/package.order @@ -0,0 +1,4 @@ +Down +Up +Subsequences +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/SetpointController.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/SetpointController.mo new file mode 100644 index 00000000000..da9685a83a2 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/SetpointController.mo @@ -0,0 +1,844 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints; +block SetpointController + "Calculates the chiller stage status setpoint signal" + + parameter Boolean have_WSE = false + "true = plant has a WSE, false = plant does not have WSE" + annotation (Dialog(tab="General", group="Plant configuration parameters")); + + parameter Boolean have_serChi = false + "true = series chillers plant; false = parallel chillers plant" + annotation (Dialog(tab="General", group="Plant configuration parameters")); + + parameter Boolean have_locSen=false + "Flag of local DP sensor: true=local DP sensor hardwired to controller" + annotation (Dialog(tab="General", group="Plant configuration parameters", enable=not have_serChi)); + + parameter Integer nRemSen=2 + "Total number of remote differential pressure sensors" + annotation (Dialog(tab="General", group="Plant configuration parameters", enable=not have_serChi)); + + parameter Boolean anyVsdCen=false + "Plant contains at least one variable speed centrifugal chiller" + annotation (Dialog(tab="General", group="Plant configuration parameters")); + + parameter Integer nChi = 2 + "Number of chillers" + annotation (Dialog(tab="General", group="Chiller configuration parameters")); + + parameter Real chiDesCap[nChi]( + final unit=fill("W",nChi), + displayUnit=fill("W",nChi)) + "Design chiller capacities vector" + annotation (Dialog(tab="General", group="Chiller configuration parameters")); + + parameter Real chiMinCap[nChi]( + final unit=fill("W",nChi), + displayUnit=fill("W",nChi)) + "Chiller minimum cycling loads vector" + annotation (Dialog(tab="General", group="Chiller configuration parameters")); + + parameter Integer chiTyp[nChi]={ + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.variableSpeedCentrifugal} + "Chiller type" + annotation (Dialog(tab="General", group="Chiller configuration parameters")); + + parameter Integer nSta = 3 + "Number of chiller stages, does not include zero stage" + annotation (Dialog(tab="General", group="Chiller configuration parameters")); + + parameter Integer staMat[nSta, nChi] = {{1,0},{0,1},{1,1}} + "Staging matrix with stage as row index and chiller as column index" + annotation (Dialog(tab="General", group="Chiller configuration parameters")); + + parameter Real avePer(unit="s")=300 + "Time period for the capacity requirement rolling average" + annotation (Dialog(tab="Time parameters", group="Hold and delay parameters")); + + parameter Real delayStaCha( + unit="s", + displayUnit="h")=900 + "Hold period for each stage change" + annotation (Dialog(tab="Time parameters", group="Hold and delay parameters")); + + parameter Real parLoaRatDelay( + unit="s", + displayUnit="h")=900 + "Enable delay for operating and staging part load ratio condition" + annotation (Dialog(tab="Time parameters", group="Hold and delay parameters")); + + parameter Real faiSafTruDelay( + unit="s", + displayUnit="h")=900 + "Enable delay for failsafe condition" + annotation (Dialog(tab="Time parameters", group="Hold and delay parameters")); + + parameter Real effConTruDelay( + unit="s", + displayUnit="h")=900 + "Enable delay for efficiency condition" + annotation (Dialog(tab="Time parameters", group="Hold and delay parameters")); + + parameter Real shortTDelay( + unit="s", + displayUnit="h")=600 + "Short enable delay for staging from zero to first available stage up" + annotation(Evaluate=true, Dialog(enable=have_WSE, tab="Time parameters", group="Hold and delay parameters")); + + parameter Real longTDelay( + unit="s", + displayUnit="h")=1200 + "Long enable delay for staging from zero to first available stage up" + annotation(Evaluate=true, Dialog(enable=have_WSE, tab="Time parameters", group="Hold and delay parameters")); + + parameter Real posDisMult(unit="1")=0.8 + "Positive displacement chiller type staging multiplier" + annotation (Dialog(tab="Conditionals", group="Staging part load ratio parameters")); + + parameter Real conSpeCenMult(unit="1")=0.9 + "Constant speed centrifugal chiller type staging multiplier" + annotation (Dialog(tab="Conditionals", group="Staging part load ratio parameters")); + + parameter Real anyOutOfScoMult(unit="1")=0.9 + "Outside of G36 recommended staging order chiller type SPLR multiplier" + annotation(Evaluate=true, __cdl(ValueInReference=False), Dialog(tab="Conditionals", group="Staging part load ratio parameters")); + + parameter Real varSpeStaMin(unit="1")=0.45 + "Minimum stage up or down part load ratio for variable speed centrifugal stage types" + annotation(Evaluate=true, Dialog(enable=anyVsdCen, tab="Conditionals", group="Staging part load ratio parameters")); + + parameter Real varSpeStaMax(unit="1")=0.9 + "Maximum stage up or down part load ratio for variable speed centrifugal stage types" + annotation(Evaluate=true, Dialog(enable=anyVsdCen, tab="Conditionals", group="Staging part load ratio parameters")); + + parameter Real smallTDif( + unit="K", + displayUnit="degC")=1 + "Offset between the chilled water supply temperature and its setpoint for the long condition" + annotation(Evaluate=true, Dialog(enable=have_WSE, tab="Conditionals", group="Value comparison parameters")); + + parameter Real largeTDif( + unit="K", + displayUnit="degC")=2 + "Offset between the chilled water supply temperature and its setpoint for the short condition" + annotation(Evaluate=true, Dialog(enable=have_WSE, tab="Conditionals", group="Value comparison parameters")); + + parameter Real faiSafTDif( + unit="K", + displayUnit="degC")=1 + "Offset between the chilled water supply temperature and its setpoint for the failsafe condition" + annotation (Dialog(tab="Conditionals", group="Value comparison parameters")); + + parameter Real dpDif( + unit="Pa", + displayUnit="Pa")=2*6895 + "Offset between the chilled water pump diferential static pressure and its setpoint" + annotation (Dialog(tab="Conditionals", group="Value comparison parameters")); + + parameter Real TDif( + unit="K", + displayUnit="degC")=1 + "Offset between the chilled water supply temperature and its setpoint for staging down to WSE only" + annotation (Dialog(tab="Conditionals", group="Value comparison parameters")); + + parameter Real TDifHys( + unit="K", + displayUnit="degC")=1 + "Hysteresis deadband for temperature" + annotation (Dialog(tab="Conditionals", group="Value comparison parameters")); + + parameter Real faiSafDpDif( + unit="Pa", + displayUnit="Pa")=2*6895 + "Offset between the chilled water differential pressure and its setpoint" + annotation (Dialog(tab="Conditionals", group="Value comparison parameters")); + + parameter Real dpDifHys( + unit="Pa", + displayUnit="Pa")=0.5*6895 + "Pressure difference hysteresis deadband" + annotation (Dialog(tab="Conditionals", group="Value comparison parameters")); + + parameter Real effConSigDif(unit="1")=0.05 + "Signal hysteresis deadband" + annotation (Dialog(tab="Conditionals", group="Value comparison parameters")); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla "Plant enable signal" + annotation (Placement( + transformation(extent={{-440,-120},{-400,-80}}), iconTransformation( + extent={{-140,110},{-100,150}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput chaPro "Stage change process status signal" + annotation (Placement(transformation(extent={{-440,-160},{-400,-120}}), + iconTransformation(extent={{-140,150},{-100,190}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWseSta if have_WSE + "WSE status" + annotation (Placement(transformation(extent={{-440,-280},{-400,-240}}), + iconTransformation(extent={{-140,170},{-100,210}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiAva[nChi] + "Chiller availability status vector" + annotation (Placement(transformation(extent={{-440,-220},{-400,-180}}), + iconTransformation(extent={{-140,130},{-100,170}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uSta( + final min=0, + final max=nSta) + "Chiller stage" + annotation (Placement(transformation(extent={{-440, + -80},{-400,-40}}), iconTransformation(extent={{-140,80},{-100,120}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TWsePre( + final quantity="ThermodynamicTemperature", + final unit="K") if have_WSE + "Predicted WSE outlet temperature" + annotation (Placement(transformation(extent={{-440,70},{-400,110}}), + iconTransformation(extent={{-140,-210},{-100,-170}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uTowFanSpeMax if have_WSE + "Maximum cooling tower fan speed" + annotation (Placement(transformation(extent={{-440,40},{-400,80}}), + iconTransformation(extent={{-140,-160},{-100,-120}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uLifMin( + final unit="K", + final quantity="TemperatureDifference") if anyVsdCen + "Minimum chiller lift" + annotation (Placement(transformation(extent={{-440,-30},{-400,10}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uLifMax( + final unit="K", + final quantity="TemperatureDifference") if anyVsdCen + "Maximum chiller lift" + annotation (Placement(transformation(extent={{-440,0},{-400,40}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final unit="K", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-442,350},{-402,390}}), + iconTransformation(extent={{-140,50},{-100,90}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatRet( + final unit="K", + final quantity="ThermodynamicTemperature") + "Chilled water return temperature" + annotation (Placement(transformation(extent={{-440,280},{-400,320}}), + iconTransformation(extent={{-140,-190},{-100,-150}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( + final quantity="VolumeFlowRate", + final unit="m3/s") "Measured chilled water flow rate" + annotation (Placement(transformation(extent={{-440,250},{-400,290}}), + iconTransformation(extent={{-140,-230},{-100,-190}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPumSet_local( + final unit="Pa", + final quantity="PressureDifference") + if (not have_serChi) and have_locSen + "Chilled water pump differential static pressure setpoint for local sensor" + annotation (Placement(transformation(extent={{-440,220},{-400,260}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPum_local( + final unit="Pa", + final quantity="PressureDifference") if (not have_serChi) and have_locSen + "Chilled water pump differential static pressure from local sensor" + annotation (Placement(transformation(extent={{-440,190},{-400,230}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPumSet_remote[nRemSen]( + final unit=fill("Pa", nRemSen), + final quantity=fill("PressureDifference",nRemSen)) + if (not have_serChi) and (not have_locSen) + "Chilled water differential pressure setpoint for remote sensor" + annotation (Placement(transformation(extent={{-440,160},{-400,200}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPum_remote[nRemSen]( + final unit=fill("Pa", nRemSen), + final quantity=fill("PressureDifference",nRemSen)) + if (not have_serChi) and (not have_locSen) + "Chilled water differential pressure from remote sensor" + annotation (Placement(transformation(extent={{-440,130},{-400,170}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup( + final unit="K", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-442,320},{-402,360}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uTunPar if have_WSE + "Tuning parameter as at last plant disable" + annotation (Placement(transformation(extent={{-440,100},{-400,140}}), + iconTransformation(extent={{-140,-140},{-100,-100}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TOutWet( + final unit="K", + final quantity="ThermodynamicTemperature") if have_WSE + "Outdoor air wet bulb temperature" + annotation (Placement(transformation(extent={{-440,380},{-400,420}}), + iconTransformation(extent={{-140,-120},{-100,-80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChiSet[nChi] + "Chiller status setpoint vector for the current chiller stage setpoint" + annotation (Placement(transformation(extent={{120,-280},{160,-240}}), + iconTransformation(extent={{100,-60},{140,-20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChaEdg + "Chiller stage change edge signal" + annotation (Placement(transformation(extent={{120,-160},{160,-120}}), + iconTransformation(extent={{100,40},{140,80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChaUpEdg + "Chiller stage up change edge signal" + annotation (Placement(transformation(extent={{120,-120},{160,-80}}), + iconTransformation(extent={{100,70},{140,110}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChaDowEdg + "Chiller stage down change edge signal" + annotation (Placement(transformation(extent={{120,-220},{160,-180}}), + iconTransformation(extent={{100,10},{140,50}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yIni + "Initial chiller plant stage" + annotation (Placement(transformation(extent={{120,280},{160,320}}), + iconTransformation(extent={{100,-110},{140,-70}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput ySta( + final min=0, + final max=nSta) + "Chiller stage integer setpoint" + annotation (Placement(transformation(extent={{120,220},{160,260}}), + iconTransformation(extent={{100,-130},{140,-90}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yUp + "Stage up signal" + annotation (Placement(transformation(extent={{120,60},{160,100}}), + iconTransformation(extent={{100,160},{140,200}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yDow + "Stage down signal" + annotation (Placement(transformation(extent={{120,22},{156,58}}), + iconTransformation(extent={{100,130},{140,170}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOpeParLoaRatMin( + final unit="1", + final min=0) + "Minimum operating part load ratio at current stage" + annotation (Placement(transformation(extent={{120,320},{160,360}}), + iconTransformation(extent={{100,-202},{140,-162}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yCapReq( + final quantity="HeatFlowRate", + final unit="W") + "Chilled water cooling capacity requirement" + annotation (Placement(transformation(extent={{120,370},{160,410}}), + iconTransformation(extent={{100,-230},{140,-190}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Up staUp( + final have_WSE=have_WSE, + final have_serChi=have_serChi, + final have_locSen=have_locSen, + final nRemSen=nRemSen, + final effConTruDelay=effConTruDelay, + final faiSafTruDelay=faiSafTruDelay, + final shortTDelay=shortTDelay, + final longTDelay=longTDelay, + final faiSafTDif=faiSafTDif, + final TDifHys=TDifHys, + final smallTDif=smallTDif, + final largeTDif=largeTDif, + final faiSafDpDif=faiSafDpDif, + final dpDifHys=dpDifHys, + final effConSigDif=effConSigDif) "Stage up conditions" + annotation (Placement(transformation(extent={{-100,-120},{-80,-100}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Down staDow( + final have_WSE=have_WSE, + final have_serChi=have_serChi, + final have_locSen=have_locSen, + final nRemSen=nRemSen, + final parLoaRatDelay=parLoaRatDelay, + final faiSafTruDelay=faiSafTruDelay, + final faiSafTDif=faiSafTDif, + final faiSafDpDif=faiSafDpDif, + final TDif=TDif, + final TDifHys=TDifHys) "Stage down conditions" + annotation (Placement(transformation(extent={{-100,-240},{-80,-220}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.CapacityRequirement capReq( + final avePer = avePer, + final holPer = delayStaCha) "Capacity requirement" + annotation (Placement(transformation(extent={{-320,300},{-300,320}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Capacities cap( + final nSta=nSta) "Design and minimum capacities for relevant chiller stages" + annotation (Placement(transformation(extent={{-270,-180},{-250,-160}}))); + +protected + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Initial iniSta( + final have_WSE=have_WSE) "Initia stage" + annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Configurator conf( + final nSta = nSta, + final nChi = nChi, + final chiTyp = chiTyp, + final chiDesCap = chiDesCap, + final chiMinCap = chiMinCap, + final staMat = staMat) + "Configures chiller staging variables such as capacity and stage type vectors" + annotation (Placement(transformation(extent={{-360,-180},{-340,-160}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Status sta( + final nSta=nSta, + final nChi=nChi, + final staMat=staMat) "First higher and lower available stage index, end stage boolean flags and chiller status setpoints" + annotation (Placement(transformation(extent={{-320,-220},{-300,-200}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.PartLoadRatios PLRs( + final anyVsdCen=anyVsdCen, + final nSta=nSta, + final posDisMult=posDisMult, + final conSpeCenMult=conSpeCenMult, + final anyOutOfScoMult=anyOutOfScoMult, + final varSpeStaMin=varSpeStaMin, + final varSpeStaMax=varSpeStaMax) "Operative and staging part load ratios" + annotation (Placement(transformation(extent={{-182,-200},{-162,-160}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Change cha( + final nSta=nSta, + final delayStaCha=delayStaCha) "Stage change assignment" + annotation (Placement(transformation(extent={{-20,-180},{0,-160}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.ChillerIndices chiInd( + final nSta=nSta, + final nChi=nChi, + final staMat=staMat) "Calculates chiller status setpoint vector" + annotation (Placement(transformation(extent={{40,-240},{60,-220}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract lift if anyVsdCen + "Calculates chiller lift for variable speed centrifugal chiller containing configurations" + annotation (Placement(transformation(extent={{-260,30},{-240,50}}))); + +equation + connect(uChiAva, conf.uChiAva) + annotation (Line(points={{-420,-200},{-380,-200},{-380,-170},{-362,-170}}, + color={255,0,255})); + connect(conf.yAva, sta.uAva) annotation (Line(points={{-338,-178},{-332,-178}, + {-332,-216},{-322,-216}},color={255,0,255})); + connect(TChiWatSupSet, capReq.TChiWatSupSet) annotation (Line(points={{-422,370}, + {-360,370},{-360,319},{-322,319}}, color={0,0,127})); + connect(TChiWatRet, capReq.TChiWatRet) annotation (Line(points={{-420,300},{-374, + 300},{-374,314},{-322,314}}, color={0,0,127})); + connect(VChiWat_flow, capReq.VChiWat_flow) annotation (Line(points={{-420,270}, + {-370,270},{-370,309},{-322,309}}, color={0,0,127})); + connect(conf.yDesCap, cap.uDesCap) annotation (Line(points={{-338,-162},{-322, + -162},{-322,-161},{-272,-161}}, color={0,0,127})); + connect(conf.yMinCap, cap.uMinCap) annotation (Line(points={{-338,-166},{-312, + -166},{-312,-164},{-272,-164}}, color={0,0,127})); + connect(sta.yAvaUp, cap.uUp) annotation (Line(points={{-298,-203},{-286,-203}, + {-286,-170},{-272,-170}}, color={255,127,0})); + connect(sta.yAvaDow, cap.uDown) annotation (Line(points={{-298,-206},{-282,-206}, + {-282,-173},{-272,-173}}, color={255,127,0})); + connect(sta.yHig, cap.uHig) annotation (Line(points={{-298,-211},{-280,-211}, + {-280,-176},{-272,-176}},color={255,0,255})); + connect(capReq.y, PLRs.uCapReq) annotation (Line(points={{-298,310},{-194,310}, + {-194,-166},{-184,-166}}, + color={0,0,127})); + connect(cap.yDes, PLRs.uCapDes) annotation (Line(points={{-248,-162},{-234, + -162},{-234,-168},{-184,-168}}, + color={0,0,127})); + connect(cap.yUpDes, PLRs.uUpCapDes) annotation (Line(points={{-248,-166},{ + -236,-166},{-236,-170},{-184,-170}}, + color={0,0,127})); + connect(cap.yDowDes, PLRs.uDowCapDes) annotation (Line(points={{-248,-170},{ + -238,-170},{-238,-172},{-184,-172}}, + color={0,0,127})); + connect(cap.yMin, PLRs.uCapMin) annotation (Line(points={{-248,-174},{-240, + -174},{-240,-175},{-184,-175}}, + color={0,0,127})); + connect(cap.yUpMin, PLRs.uUpCapMin) annotation (Line(points={{-248,-178},{ + -242,-178},{-242,-177},{-184,-177}}, + color={0,0,127})); + connect(uLifMax, PLRs.uLifMax) annotation (Line(points={{-420,20},{-212,20},{ + -212,-182},{-184,-182}}, + color={0,0,127})); + connect(uLifMin, PLRs.uLifMin) annotation (Line(points={{-420,-10},{-222,-10}, + {-222,-184},{-184,-184}}, + color={0,0,127})); + connect(conf.yTyp, PLRs.uTyp) annotation (Line(points={{-338,-174},{-302,-174}, + {-302,-188},{-184,-188}}, color={255,127,0})); + connect(sta.yAvaUp, PLRs.uUp) annotation (Line(points={{-298,-203},{-242,-203}, + {-242,-194},{-184,-194}}, color={255,127,0})); + connect(sta.yAvaDow, PLRs.uDown) + annotation (Line(points={{-298,-206},{-242,-206},{-242,-196},{-184,-196}}, + color={255,127,0})); + connect(sta.yLow, cap.uLow) annotation (Line(points={{-298,-214},{-278,-214}, + {-278,-179},{-272,-179}},color={255,0,255})); + connect(PLRs.yOpe, staUp.uOpe) annotation (Line(points={{-160,-172},{-136, + -172},{-136,-99},{-102,-99}}, + color={0,0,127})); + connect(PLRs.yStaUp, staUp.uStaUp) annotation (Line(points={{-160,-181},{-134, + -181},{-134,-101},{-102,-101}}, + color={0,0,127})); + connect(TChiWatSupSet, staUp.TChiWatSupSet) annotation (Line(points={{-422, + 370},{-162,370},{-162,-103},{-102,-103}}, + color={0,0,127})); + connect(TChiWatSup, staUp.TChiWatSup) annotation (Line(points={{-422,340},{ + -386,340},{-386,284},{-164,284},{-164,-105},{-102,-105}}, + color={0,0,127})); + connect(dpChiWatPumSet_local, staUp.dpChiWatPumSet_local) annotation (Line( + points={{-420,240},{-144,240},{-144,-107},{-102,-107}}, color={0,0,127})); + connect(dpChiWatPum_local, staUp.dpChiWatPum_local) annotation (Line(points={{-420, + 210},{-146,210},{-146,-109},{-102,-109}}, color={0,0,127})); + connect(PLRs.yOpeDow, staDow.uOpeDow) annotation (Line(points={{-160,-176},{ + -142,-176},{-142,-219},{-102,-219}}, + color={0,0,127})); + connect(staDow.uStaDow, PLRs.yStaDow) annotation (Line(points={{-102,-221},{ + -144,-221},{-144,-183},{-160,-183}}, + color={0,0,127})); + connect(dpChiWatPumSet_local, staDow.dpChiWatPumSet_local) annotation (Line( + points={{-420,240},{-144,240},{-144,-223},{-102,-223}}, color={0,0,127})); + connect(dpChiWatPum_local, staDow.dpChiWatPum_local) annotation (Line(points={ + {-420,210},{-146,210},{-146,-225},{-102,-225}}, color={0,0,127})); + connect(TChiWatSupSet, staDow.TChiWatSupSet) annotation (Line(points={{-422,370}, + {-152,370},{-152,-231.2},{-102,-231.2}}, + color={0,0,127})); + connect(TChiWatSup, staDow.TChiWatSup) annotation (Line(points={{-422,340},{-386, + 340},{-386,284},{-154,284},{-154,-233.2},{-102,-233.2}}, + color={0,0,127})); + connect(TWsePre, staDow.TWsePre) annotation (Line(points={{-420,90},{-156,90}, + {-156,-235.2},{-102,-235.2}}, + color={0,0,127})); + connect(uTowFanSpeMax, staDow.uTowFanSpeMax) annotation (Line(points={{-420,60}, + {-158,60},{-158,-237.2},{-102,-237.2}}, + color={0,0,127})); + connect(staDow.uWseSta, uWseSta) annotation (Line(points={{-102,-241},{-340, + -241},{-340,-260},{-420,-260}}, + color={255,0,255})); + connect(uSta, sta.u) annotation (Line(points={{-420,-60},{-328,-60},{-328,-204}, + {-322,-204}}, color={255,127,0})); + connect(sta.yAvaCur, staUp.uAvaCur) annotation (Line(points={{-298,-217},{ + -242,-217},{-242,-210},{-122,-210},{-122,-117},{-102,-117}}, + color={255,0,255})); + connect(uSta, cap.u) annotation (Line(points={{-420,-60},{-328,-60},{-328,-167}, + {-272,-167}}, color={255,127,0})); + connect(uSta, PLRs.u) annotation (Line(points={{-420,-60},{-232,-60},{-232, + -192},{-184,-192}}, + color={255,127,0})); + connect(uSta, staUp.u) annotation (Line(points={{-420,-60},{-112,-60},{-112, + -115},{-102,-115}}, + color={255,127,0})); + connect(uSta, staDow.u) annotation (Line(points={{-420,-60},{-328,-60},{-328,-239}, + {-102,-239}}, color={255,127,0})); + connect(chaPro, capReq.chaPro) annotation (Line(points={{-420,-140},{-350, + -140},{-350,302},{-322,302}}, color={255,0,255})); + connect(sta.yAvaUp, cha.uAvaUp) annotation (Line(points={{-298,-203},{-292,-203}, + {-292,-148},{-40,-148},{-40,-164},{-22,-164}}, color={255,127,0})); + connect(sta.yAvaDow, cha.uAvaDow) annotation (Line(points={{-298,-206},{-290,-206}, + {-290,-150},{-44,-150},{-44,-168},{-22,-168}}, color={255,127,0})); + connect(staUp.y, cha.uUp) annotation (Line(points={{-78,-110},{-50,-110},{-50, + -172},{-22,-172}}, color={255,0,255})); + connect(staDow.y, cha.uDow) annotation (Line(points={{-78,-230},{-60,-230},{ + -60,-176},{-22,-176}}, + color={255,0,255})); + connect(uPla, cha.uPla) annotation (Line(points={{-420,-100},{-280,-100},{ + -280,-140},{-70,-140},{-70,-180},{-22,-180}}, + color={255,0,255})); + connect(cha.ySta, ySta) annotation (Line(points={{2,-166},{20,-166},{20,240},{ + 140,240}}, color={255,127,0})); + connect(cha.yChaEdg, yChaEdg) annotation (Line(points={{2,-174},{80,-174},{80, + -140},{140,-140}}, color={255,0,255})); + connect(chiInd.yChi, yChiSet) annotation (Line(points={{62,-230},{80,-230},{ + 80,-260},{140,-260}}, color={255,0,255})); + connect(cha.ySta, chiInd.u) annotation (Line(points={{2,-166},{20,-166},{20, + -230},{38,-230}}, color={255,127,0})); + connect(TChiWatSupSet, iniSta.TChiWatSupSet) annotation (Line(points={{-422,370}, + {-100,370},{-100,113},{-82,113}}, color={0,0,127})); + connect(uTunPar, iniSta.uTunPar) annotation (Line(points={{-420,120},{-104,120}, + {-104,116},{-82,116}}, color={0,0,127})); + connect(iniSta.yIni, cha.uIni) annotation (Line(points={{-59,110},{-30,110},{-30, + -160},{-22,-160}}, color={255,127,0})); + connect(TOutWet, iniSta.TOutWet) annotation (Line(points={{-420,400},{-96,400}, + {-96,119},{-82,119}}, color={0,0,127})); + connect(sta.yAvaUp, iniSta.uUp) annotation (Line(points={{-298,-203},{-294,-203}, + {-294,110},{-82,110}}, color={255,127,0})); + connect(uPla, iniSta.uPla) annotation (Line(points={{-420,-100},{-280,-100},{-280, + 104},{-82,104}}, color={255,0,255})); + connect(cha.yChaUpEdg, yChaUpEdg) annotation (Line(points={{2,-170},{60,-170}, + {60,-100},{140,-100}}, + color={255,0,255})); + connect(cha.yChaDowEdg, yChaDowEdg) annotation (Line(points={{2,-178},{60, + -178},{60,-200},{140,-200}}, + color={255,0,255})); + connect(PLRs.yOpeMin, yOpeParLoaRatMin) annotation (Line(points={{-160,-187}, + {-130,-187},{-130,340},{140,340}}, + color={0,0,127})); + connect(staUp.y, yUp) annotation (Line(points={{-78,-110},{-50,-110},{-50,80}, + {140,80}}, color={255,0,255})); + connect(staDow.y, yDow) annotation (Line(points={{-78,-230},{-60,-230},{-60, + 40},{138,40}}, color={255,0,255})); + connect(TChiWatRet, lift.u1) annotation (Line(points={{-420,300},{-388,300},{-388, + 46},{-262,46}}, color={0,0,127})); + connect(TChiWatSupSet, lift.u2) annotation (Line(points={{-422,370},{-360,370}, + {-360,34},{-262,34}}, color={0,0,127})); + connect(PLRs.uLif, lift.y) annotation (Line(points={{-184,-180},{-202,-180},{ + -202,40},{-238,40}}, + color={0,0,127})); + connect(capReq.y, yCapReq) annotation (Line(points={{-298,310},{-194,310},{-194, + 390},{140,390}}, color={0,0,127})); + connect(dpChiWatPumSet_remote, staUp.dpChiWatPumSet_remote) annotation (Line( + points={{-420,180},{-148,180},{-148,-111},{-102,-111}}, color={0,0,127})); + connect(dpChiWatPumSet_remote, staDow.dpChiWatPumSet_remote) annotation (Line( + points={{-420,180},{-148,180},{-148,-227},{-102,-227}}, color={0,0,127})); + connect(dpChiWatPum_remote, staUp.dpChiWatPum_remote) annotation (Line(points={{-420, + 150},{-150,150},{-150,-113},{-102,-113}}, color={0,0,127})); + connect(dpChiWatPum_remote, staDow.dpChiWatPum_remote) annotation (Line( + points={{-420,150},{-150,150},{-150,-229},{-102,-229}}, color={0,0,127})); + connect(iniSta.yIni, yIni) annotation (Line(points={{-59,110},{-30,110},{-30,300}, + {140,300}}, color={255,127,0})); + connect(uPla, staUp.uPla) annotation (Line(points={{-420,-100},{-280,-100},{ + -280,-119},{-102,-119}}, color={255,0,255})); + annotation (defaultComponentName = "staSetCon", + Icon(coordinateSystem(extent={{-100,-220},{100,200}}, initialScale=0.2), + graphics={ + Rectangle( + extent={{-100,-220},{100,200}}, + lineColor={0,0,127}, + fillColor={255,255,85}, + fillPattern=FillPattern.Solid), + Text( + extent={{-112,244},{108,206}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-96,88},{-8,54}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="TChiWatSupSet"), + Text( + extent={{-96,66},{-24,34}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="TChiWatSup"), + Text( + extent={{-96,-182},{-40,-198}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="TWsePre"), + Text( + extent={{-98,-160},{-24,-178}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="TChiWatRet"), + Text( + extent={{-98,-196},{-14,-222}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="VChiWat_flow"), + Text( + extent={{-96,-128},{8,-152}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uTowFanSpeMax"), + Text( + extent={{-94,-10},{0,-32}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="dpChiWatPumSet_local", + visible=(not have_serChi) and have_locSen), + Text( + extent={{-96,-28},{-10,-48}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="dpChiWatPum_local", + visible=(not have_serChi) and have_locSen), + Text( + extent={{-96,8},{-48,-10}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uLifMin", + visible=anyVsdCen), + Text( + extent={{-96,32},{-46,14}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uLifMax", + visible=anyVsdCen), + Text( + extent={{-98,112},{-68,92}}, + textColor={244,125,35}, + pattern=LinePattern.Dash, + textString="uSta"), + Text( + extent={{-98,200},{-46,180}}, + textColor={217,67,180}, + pattern=LinePattern.Dash, + textString="uWseSta"), + Text( + extent={{-100,180},{-50,164}}, + textColor={217,67,180}, + pattern=LinePattern.Dash, + textString="chaPro"), + Text( + extent={{-96,142},{-68,120}}, + textColor={217,67,180}, + pattern=LinePattern.Dash, + textString="uPla"), + Text( + extent={{-96,160},{-44,142}}, + textColor={217,67,180}, + pattern=LinePattern.Dash, + textString="uChiAva"), + Text( + extent={{62,-116},{94,-100}}, + textColor={244,125,35}, + pattern=LinePattern.Dash, + textString="ySta"), + Text( + extent={{42,74},{94,50}}, + textColor={217,67,180}, + pattern=LinePattern.Dash, + textString="yChaEdg"), + Text( + extent={{40,-24},{92,-52}}, + textColor={217,67,180}, + pattern=LinePattern.Dash, + textString="yChiSet[]"), + Text( + extent={{-98,-110},{-48,-126}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="uTunPar"), + Text( + extent={{-98,-90},{-46,-108}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="TOutWet"), + Text( + extent={{28,112},{94,70}}, + textColor={217,67,180}, + pattern=LinePattern.Dash, + textString="yChaUpEdg"), + Text( + extent={{16,50},{94,14}}, + textColor={217,67,180}, + pattern=LinePattern.Dash, + textString="yChaDowEdg"), + Text( + extent={{-12,-154},{96,-200}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yOpeParLoaRatMin"), + Text( + extent={{54,194},{98,170}}, + textColor={217,67,180}, + pattern=LinePattern.Dash, + textString="yUp"), + Text( + extent={{52,164},{100,140}}, + textColor={217,67,180}, + pattern=LinePattern.Dash, + textString="yDow"), + Text( + extent={{42,-198},{94,-220}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yCapReq"), + Text( + extent={{-96,-48},{8,-72}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="dpChiWatPumSet_remote", + visible=(not have_serChi) and (not have_locSen)), + Text( + extent={{-96,-68},{8,-92}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="dpChiWatPum_remote", + visible=(not have_serChi) and (not have_locSen)), + Text( + extent={{62,-98},{94,-82}}, + textColor={244,125,35}, + pattern=LinePattern.Dash, + textString="yIni")}), Diagram( + coordinateSystem(preserveAspectRatio=false, + extent={{-400,-300},{120,420}})), +Documentation(info=" +

                      +The sequence is a chiller stage status setpoint controller that outputs the +chiller stage integer index ySta, chiller stage change trigger signal +y and a chiller status vector for the current stage yChi. +

                      +

                      +It is implemented according to ASHRAE Guideline36-2021, section 5.20.4.1 - 15. +

                      +

                      +The controller contains the following subsequences: +

                      + +", +revisions=" +
                        +
                      • +April 14, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end SetpointController; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Capacities.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Capacities.mo new file mode 100644 index 00000000000..e31bd037bc6 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Capacities.mo @@ -0,0 +1,335 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences; +block Capacities + "Returns design and minimal stage capacities for current and next available higher and lower stage" + + parameter Integer nSta = 3 + "Number of chiller stages, does not include zero stage"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLow + "Current stage is the lowest available stage" + annotation (Placement(transformation(extent={{-240,-80},{-200,-40}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uHig + "Current stage is the highest available stage" + annotation (Placement(transformation(extent={{-240,-110},{-200,-70}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput u( + final min=0, + final max=nSta) "Chiller stage" + annotation (Placement(transformation(extent={{-240,100},{-200,140}}), + iconTransformation(extent={{-140,10},{-100,50}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uUp( + final min=0, + final max=nSta) "Next available higher stage" + annotation (Placement(transformation(extent={{-240,40},{-200,80}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uDown( + final min=0, + final max=nSta) "Next available lower stage" + annotation (Placement(transformation(extent={{-240,-40},{-200,0}}), + iconTransformation(extent={{-140,-50},{-100,-10}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uDesCap[nSta]( + final quantity=fill("HeatFlowRate", nSta), + final unit=fill("W", nSta)) "Design stage capacities" + annotation (Placement(transformation(extent={{-240,160},{-200,200}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uMinCap[nSta]( + final quantity=fill("HeatFlowRate", nSta), + final unit=fill("W", nSta)) "Unload stage capacities" + annotation (Placement(transformation(extent={{-240,-200},{-200,-160}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yDes( + final unit="W", + final quantity="HeatFlowRate") "Design capacity of the current stage" + annotation (Placement(transformation(extent={{200,160},{240,200}}), + iconTransformation(extent={{100,60},{140,100}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yDowDes( + final unit="W", + final quantity="HeatFlowRate") "Design capacity of the next available lower stage" + annotation (Placement(transformation(extent={{200,0},{240,40}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yUpDes( + final unit="W", + final quantity="HeatFlowRate") "Design capacity of the next available higher stage" + annotation (Placement(transformation(extent={{200,40},{240,80}}), + iconTransformation(extent={{100,20},{140,60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yMin( + final unit="W", + final quantity="HeatFlowRate") "Minimum capacity of the current stage" + annotation (Placement(transformation(extent={{200,-40},{240,0}}), + iconTransformation(extent={{100,-60},{140,-20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yUpMin( + final unit="W", + final quantity="HeatFlowRate") "Minimum capacity of the next available higher stage" + annotation (Placement(transformation(extent={{200,-110},{240,-70}}), + iconTransformation(extent={{100,-100},{140,-60}}))); + +protected + final parameter Real larGai = 10 + "Large gain"; + + Buildings.Controls.OBC.CDL.Routing.RealExtractor cap( + final nin=nSta) + "Extracts the design capacity at the current stage" + annotation (Placement(transformation(extent={{-10,170},{10,190}}))); + + Buildings.Controls.OBC.CDL.Routing.RealExtractor dowCap( + final nin=nSta) + "Extracts the design capacity of one stage lower than the current stage" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + + Buildings.Controls.OBC.CDL.Routing.RealExtractor upCapMin( + final nin=nSta) + "Extracts minimal capacity of the next higher stage" + annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); + + Buildings.Controls.OBC.CDL.Routing.RealExtractor upCap( + final nin=nSta) + "Extracts the design capacity of the next stage" + annotation (Placement(transformation(extent={{0,80},{20,100}}))); + + Buildings.Controls.OBC.CDL.Routing.RealExtractor capMin( + final nin=nSta) + "Extracts the minimum capacity of the current stage" + annotation (Placement(transformation(extent={{0,-150},{20,-130}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Switch" + annotation (Placement(transformation(extent={{160,50},{180,70}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "Switch" + annotation (Placement(transformation(extent={{160,-100},{180,-80}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi1 + "Outputs minimum current stage capacity as design stage down capacity if operating in the lowest available stage" + annotation (Placement(transformation(extent={{160,10},{180,30}}))); + + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( + final k=larGai) + "Ouputs a very large and unachievable staging up capacity when current is the highest available stage" + annotation (Placement(transformation(extent={{80,110},{100,130}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[3] + "Convert boolean to real" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply mul + "Ensure zero output when the index is out of range" + annotation (Placement(transformation(extent={{30,140},{50,160}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 + "Ensure zero output when the index is out of range" + annotation (Placement(transformation(extent={{60,-130},{80,-110}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply mul2 + "Ensure zero output when the index is out of range" + annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply mul3 + "Ensure zero output when the index is out of range" + annotation (Placement(transformation(extent={{60,60},{80,80}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply mul4 + "Ensure zero output when the index is out of range" + annotation (Placement(transformation(extent={{60,30},{80,50}}))); + Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold intGreEquThr[3]( + final t=fill(1, 3)) "Check if index is in the range" + annotation (Placement(transformation(extent={{-160,70},{-140,90}}))); + Buildings.Controls.OBC.CDL.Integers.LessEqualThreshold intLesEquThr[3]( + final t=fill(nSta, 3)) "Check if index is in the range" + annotation (Placement(transformation(extent={{-160,-10},{-140,10}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt[3]( + final k=fill(1, 3)) + "Dummy index so the extractor will not have out of range index" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); + Buildings.Controls.OBC.CDL.Logical.And and2[3] + "Check if index is in the range" + annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi[3] "Valid index" + annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); +equation + connect(swi2.y, yUpDes) annotation (Line(points={{182,60},{220,60}}, color={0,0,127})); + connect(swi4.y, yUpMin) annotation (Line(points={{182,-90},{220,-90}}, color={0,0,127})); + connect(uMinCap, upCapMin.u) annotation (Line(points={{-220,-180},{-20,-180},{ + -20,-60},{-2,-60}}, color={0,0,127})); + connect(uMinCap, capMin.u) annotation (Line(points={{-220,-180},{-20,-180},{-20, + -140},{-2,-140}}, color={0,0,127})); + connect(uDesCap, cap.u) annotation (Line(points={{-220,180},{-12,180}}, + color={0,0,127})); + connect(uDesCap, dowCap.u) annotation (Line(points={{-220,180},{-20,180},{-20, + 0},{-2,0}}, color={0,0,127})); + connect(uDesCap, upCap.u) annotation (Line(points={{-220,180},{-20,180},{-20,90}, + {-2,90}}, color={0,0,127})); + connect(uLow, swi1.u2) annotation (Line(points={{-220,-60},{-50,-60},{-50,20}, + {158,20}}, color={255,0,255})); + connect(uHig, swi2.u2) annotation (Line(points={{-220,-90},{140,-90},{140,60}, + {158,60}}, color={255,0,255})); + connect(uHig, swi4.u2) annotation (Line(points={{-220,-90},{158,-90}}, + color={255,0,255})); + connect(gai.y, swi2.u1) annotation (Line(points={{102,120},{120,120},{120,68}, + {158,68}}, color={0,0,127})); + connect(gai.y, swi4.u1) annotation (Line(points={{102,120},{120,120},{120,-82}, + {158,-82}},color={0,0,127})); + connect(swi1.y, yDowDes) annotation (Line(points={{182,20},{220,20}}, color={0,0,127})); + connect(cap.y, yDes) annotation (Line(points={{12,180},{220,180}}, + color={0,0,127})); + connect(intGreEquThr.y, and2.u1) + annotation (Line(points={{-138,80},{-122,80}}, color={255,0,255})); + connect(intLesEquThr.y, and2.u2) annotation (Line(points={{-138,0},{-130,0},{-130, + 72},{-122,72}}, color={255,0,255})); + connect(and2.y, intSwi.u2) annotation (Line(points={{-98,80},{-90,80},{-90,30}, + {-82,30}}, color={255,0,255})); + connect(conInt.y, intSwi.u3) annotation (Line(points={{-98,0},{-90,0},{-90,22}, + {-82,22}}, color={255,127,0})); + connect(and2.y, booToRea.u) + annotation (Line(points={{-98,80},{-82,80}}, color={255,0,255})); + connect(cap.y, mul.u1) annotation (Line(points={{12,180},{20,180},{20,156},{28, + 156}}, color={0,0,127})); + connect(mul.y, gai.u) annotation (Line(points={{52,150},{60,150},{60,120},{78, + 120}}, color={0,0,127})); + connect(capMin.y, mul1.u2) annotation (Line(points={{22,-140},{40,-140},{40,-126}, + {58,-126}}, color={0,0,127})); + connect(mul1.y, yMin) annotation (Line(points={{82,-120},{130,-120},{130,-20}, + {220,-20}}, color={0,0,127})); + connect(mul1.y, swi1.u1) annotation (Line(points={{82,-120},{130,-120},{130,28}, + {158,28}}, color={0,0,127})); + connect(u, intGreEquThr[1].u) annotation (Line(points={{-220,120},{-190,120},{ + -190,80},{-162,80}}, color={255,127,0})); + connect(u, intLesEquThr[1].u) annotation (Line(points={{-220,120},{-190,120},{ + -190,0},{-162,0}}, color={255,127,0})); + connect(u, intSwi[1].u1) annotation (Line(points={{-220,120},{-190,120},{-190, + 38},{-82,38}}, color={255,127,0})); + connect(booToRea[1].y, mul1.u1) annotation (Line(points={{-58,80},{-30,80},{-30, + -114},{58,-114}}, color={0,0,127})); + connect(booToRea[1].y, mul.u2) annotation (Line(points={{-58,80},{-30,80},{-30, + 144},{28,144}}, color={0,0,127})); + connect(intSwi[1].y, cap.index) annotation (Line(points={{-58,30},{-40,30},{-40, + 160},{0,160},{0,168}}, color={255,127,0})); + connect(intSwi[1].y, capMin.index) annotation (Line(points={{-58,30},{-40,30}, + {-40,-160},{10,-160},{10,-152}}, color={255,127,0})); + connect(mul2.y, swi4.u3) annotation (Line(points={{82,-40},{100,-40},{100,-98}, + {158,-98}}, color={0,0,127})); + connect(upCapMin.y, mul2.u2) annotation (Line(points={{22,-60},{40,-60},{40,-46}, + {58,-46}}, color={0,0,127})); + connect(booToRea[2].y, mul2.u1) annotation (Line(points={{-58,80},{-30,80},{-30, + -34},{58,-34}}, color={0,0,127})); + connect(intSwi[2].y, upCapMin.index) annotation (Line(points={{-58,30},{-40,30}, + {-40,-80},{10,-80},{10,-72}}, color={255,127,0})); + connect(upCap.y, mul3.u1) annotation (Line(points={{22,90},{40,90},{40,76},{58, + 76}}, color={0,0,127})); + connect(mul3.y, swi2.u3) annotation (Line(points={{82,70},{100,70},{100,52},{158, + 52}}, color={0,0,127})); + connect(booToRea[2].y, mul3.u2) annotation (Line(points={{-58,80},{-10,80},{ + -10,64},{58,64}}, + color={0,0,127})); + connect(intSwi[2].y, upCap.index) + annotation (Line(points={{-58,30},{10,30},{10,78}}, color={255,127,0})); + connect(mul4.y, swi1.u3) annotation (Line(points={{82,40},{100,40},{100,12},{158, + 12}}, color={0,0,127})); + connect(dowCap.y, mul4.u2) + annotation (Line(points={{22,0},{40,0},{40,34},{58,34}}, color={0,0,127})); + connect(booToRea[3].y, mul4.u1) annotation (Line(points={{-58,80},{-30,80},{-30, + 46},{58,46}}, color={0,0,127})); + connect(intSwi[3].y, dowCap.index) annotation (Line(points={{-58,30},{-40,30}, + {-40,-20},{10,-20},{10,-12}}, color={255,127,0})); + connect(uUp, intGreEquThr[2].u) annotation (Line(points={{-220,60},{-180,60},{ + -180,80},{-162,80}}, color={255,127,0})); + connect(uUp, intLesEquThr[2].u) annotation (Line(points={{-220,60},{-180,60},{ + -180,0},{-162,0}}, color={255,127,0})); + connect(uUp, intSwi[2].u1) annotation (Line(points={{-220,60},{-180,60},{-180, + 38},{-82,38}}, color={255,127,0})); + connect(uDown, intGreEquThr[3].u) annotation (Line(points={{-220,-20},{-170,-20}, + {-170,80},{-162,80}}, color={255,127,0})); + connect(uDown, intLesEquThr[3].u) annotation (Line(points={{-220,-20},{-170,-20}, + {-170,0},{-162,0}}, color={255,127,0})); + connect(uDown, intSwi[3].u1) annotation (Line(points={{-220,-20},{-170,-20},{-170, + 38},{-82,38}}, color={255,127,0})); +annotation (defaultComponentName = "cap", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name")}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-200,-200},{200,200}})), +Documentation(info=" +

                      +This subsequence is not directly specified in Guideline36 as it provides +a side calculation pertaining to generalization of the staging +sequences for any number of chillers and stages provided by the +user. +

                      +

                      +Based on: +

                      +
                        +
                      • +the current chiller stage u index +
                      • +
                      • +the next available higher chiller stage uUp index +
                      • +
                      • +the next available lower chiller stage uDown index +
                      • +
                      • +boolean inputs that determine if the current stage is +any of the following: the highest uHigh or the +lowest uLow available chiller stage +
                      • +
                      +

                      +the subsequence selects from the design stage capacity uDesCap +and the minimal stage capacity uMinCap vectors +the following variables and outputs them: +

                      +
                        +
                      • +the design capacities of the current yDes, first available higher +yUpDes and first available lower stage yDowDes +
                      • +
                      • +the minimal capacity of the current yMin and first available higher +stage yUpMin +
                      • +
                      +

                      +for the purpose of calculating the operative part load ratios +(OPLR) up and down, respectively. The OPLR is defined in 1711 March 2020 draft section 5.2.4.6. +

                      +

                      +For numerical reasons and to ensure expected behavior in corner cases such as +when the plant operates at the highest or the lowest available stage, the +sequence implements the following: +

                      +
                        +
                      • +if operating at the lowest available chiller stage, the minimal capacity +of that stage is returned as the stage down design capacity. +
                      • +
                      • +if operating at the highest stage, the design and minimal stage up conditionals are set to +a value significantly larger than the design capacity of the highest stage. +This ensures numerical stability and satisfies the staging down conditionals. +
                      • +
                      +", +revisions=" +
                        +
                      • +January 13, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end Capacities; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/CapacityRequirement.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/CapacityRequirement.mo new file mode 100644 index 00000000000..e2fc87c5ca6 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/CapacityRequirement.mo @@ -0,0 +1,190 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences; +block CapacityRequirement + "Cooling capacity requirement" + + parameter Real avePer( + final unit="s", + final quantity="Time")=300 + "Time period for the rolling average"; + + parameter Real holPer( + final unit="s", + final quantity="Time", + displayUnit="h")=900 + "Time period for the value hold at stage change"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput chaPro + "Stage change process status, true = on, false = off" + annotation (Placement(transformation(extent={{-180,90},{-140,130}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final unit="K", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-180,-10},{-140,30}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatRet( + final unit="K", + final quantity="ThermodynamicTemperature") + "Chilled water return temperature" + annotation (Placement(transformation(extent={{-180,-70},{-140,-30}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( + final quantity="VolumeFlowRate", + final unit="m3/s") "Measured chilled water flow rate" + annotation (Placement(transformation(extent={{-180,-150},{-140,-110}}), + iconTransformation(extent={{-140,-30},{-100,10}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput y( + final quantity="HeatFlowRate", + final unit="W") "Chilled water cooling capacity requirement" + annotation (Placement(transformation(extent={{140,110},{180,150}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + constant Real rhoWat( + final unit="kg/m3", + final quantity="Density", + displayUnit="kg/m3")=1000 "Water density"; + + constant Real cpWat( + final unit="J/(kg.K)", + final quantity="SpecificEntropy", + displayUnit="J/(kg.K)")=4184 + "Specific heat capacity of water"; + + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam + "Triggered sampler" + annotation (Placement(transformation(extent={{-40,120},{-20,140}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch" + annotation (Placement(transformation(extent={{80,120},{100,140}}))); + + Buildings.Controls.OBC.CDL.Logical.Edge edg "Edge" + annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol( + final trueHoldDuration=holPer, + final falseHoldDuration=0) "True hold" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant density( + final k = rhoWat) + "Water density" + annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant speHeaCap( + final k = cpWat) + "Specific heat capacity of water" + annotation (Placement(transformation(extent={{-120,-160},{-100,-140}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minLim( + final k=0) + "Minimum capacity requirement limit" + annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 + "Find input difference" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + + Buildings.Controls.OBC.CDL.Reals.MovingAverage movMea( + final delta=avePer) + "Moving average" + annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); + + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Product" + annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); + + Buildings.Controls.OBC.CDL.Reals.Multiply pro1 "Product" + annotation (Placement(transformation(extent={{-80,-130},{-60,-110}}))); + + Buildings.Controls.OBC.CDL.Reals.Multiply pro2 "Product" + annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max "Maximum of two inputs" + annotation (Placement(transformation(extent={{100,-80},{120,-60}}))); + +equation + connect(sub1.y, pro.u1) annotation (Line(points={{-58,-20},{10,-20},{10,-64}, + {18,-64}},color={0,0,127})); + connect(pro.y, movMea.u) + annotation (Line(points={{42,-70},{58,-70}}, color={0,0,127})); + connect(speHeaCap.y, pro1.u2) annotation (Line(points={{-98,-150},{-90,-150},{ + -90,-126},{-82,-126}}, color={0,0,127})); + connect(pro1.y, pro2.u2) annotation (Line(points={{-58,-120},{-50,-120},{-50,-86}, + {-22,-86}}, color={0,0,127})); + connect(pro.u2, pro2.y) annotation (Line(points={{18,-76},{10,-76},{10,-80},{2, + -80}}, color={0,0,127})); + connect(pro1.u1, density.y) annotation (Line(points={{-82,-114},{-90,-114},{-90, + -100},{-98,-100}}, color={0,0,127})); + connect(VChiWat_flow, pro2.u1) annotation (Line(points={{-160,-130},{-130,-130}, + {-130,-74},{-22,-74}}, color={0,0,127})); + connect(max.u1, minLim.y) annotation (Line(points={{98,-64},{90,-64},{90,-20}, + {82,-20}}, color={0,0,127})); + connect(movMea.y, max.u2) annotation (Line(points={{82,-70},{90,-70},{90,-76}, + {98,-76}}, color={0,0,127})); + connect(max.y, triSam.u) annotation (Line(points={{122,-70},{130,-70},{130,20}, + {-60,20},{-60,130},{-42,130}}, color={0,0,127})); + connect(chaPro, edg.u) + annotation (Line(points={{-160,110},{-102,110}}, color={255,0,255})); + connect(edg.y, triSam.trigger) annotation (Line(points={{-78,110},{-30,110},{-30, + 118}}, color={255,0,255})); + connect(triSam.y, swi.u1) annotation (Line(points={{-18,130},{10,130},{10,138}, + {78,138}}, color={0,0,127})); + connect(max.y, swi.u3) annotation (Line(points={{122,-70},{130,-70},{130,60},{ + 60,60},{60,122},{78,122}}, color={0,0,127})); + connect(swi.y, y) + annotation (Line(points={{102,130},{160,130}},color={0,0,127})); + connect(chaPro, truFalHol.u) annotation (Line(points={{-160,110},{-120,110},{ + -120,80},{-42,80}}, color={255,0,255})); + connect(truFalHol.y, swi.u2) annotation (Line(points={{-18,80},{40,80},{40, + 130},{78,130}}, color={255,0,255})); + connect(TChiWatSupSet, sub1.u2) annotation (Line(points={{-160,10},{-120,10},{ + -120,-26},{-82,-26}}, color={0,0,127})); + connect(TChiWatRet, sub1.u1) annotation (Line(points={{-160,-50},{-100,-50},{-100, + -14},{-82,-14}}, color={0,0,127})); + + annotation (defaultComponentName = "capReq", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-62,88},{60,-76}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Load")}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-140,-180},{140,160}})), +Documentation(info=" +

                      +Calculates cooling capacity requirement based on the measured chilled water return temperature TChiWatRet, +calculated chilled water supply temperature setpoint +TChiWatSupSet and the measured chilled water flow VChiWat_flow.
                      +The calculation is according to Guideline36-2021, section 5.20.4.8. +

                      +

                      +When a stage change process is in progress, as indicated by a boolean input +chaPro, the capacity requirement is kept constant for the longer of +holPer and the duration of the change process.
                      +The calculation is according to Guideline36-2021, section 5.20.4.9. +

                      +", +revisions=" +
                        +
                      • +July 5, 2019, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end CapacityRequirement; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Change.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Change.mo new file mode 100644 index 00000000000..2b4def86f65 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Change.mo @@ -0,0 +1,467 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences; +block Change "Calculates the chiller stage signal" + + parameter Integer nSta = 3 + "Number of chiller stages, does not include zero stage"; + + parameter Real delayStaCha( + final unit="s", + final quantity="Time", + displayUnit="h")=900 + "Hold period for each stage change"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enable signal" + annotation (Placement(transformation(extent={{-480,150},{-440,190}}), + iconTransformation(extent={{-140,-120},{-100,-80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uUp + "Stage up status" + annotation (Placement(transformation(extent={{-480,-60},{-440,-20}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uDow + "Stage down signal" + annotation (Placement(transformation(extent={{-480,-160},{-440,-120}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uIni( + final min=0, + final max=nSta) + "Initial chiller stage (at plant enable)" + annotation (Placement(transformation(extent={{-480,220},{-440,260}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uAvaUp( + final min=0, + final max=nSta) + "Next available stage up" + annotation (Placement(transformation(extent={{-480,90},{-440,130}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uAvaDow( + final min=0, + final max=nSta) + "Next available stage down" + annotation (Placement(transformation(extent={{-480,10},{-440,50}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChaEdg + "Chiller stage change edge signal" + annotation (Placement(transformation(extent={{440,-102},{480,-62}}), + iconTransformation(extent={{100,-60},{140,-20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChaUpEdg + "Chiller stage up change edge signal" + annotation (Placement(transformation(extent={{440,-62},{480,-22}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChaDowEdg + "Chiller stage down change edge signal" + annotation (Placement(transformation(extent={{440,-142},{480,-102}}), + iconTransformation(extent={{100,-100},{140,-60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput ySta( + final min=0, + final max = nSta) + "Chiller stage integer setpoint" + annotation (Placement(transformation(extent={{440,150},{480,190}}), + iconTransformation(extent={{100,20},{140,60}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Or or2 "Logical or" + annotation (Placement(transformation(extent={{-380,-90},{-360,-70}}))); + + Buildings.Controls.OBC.CDL.Logical.Edge edg1 + "Boolean signal change" + annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); + + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam "Triggered sampler" + annotation (Placement(transformation(extent={{110,60},{130,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch switch1 "Switch" + annotation (Placement(transformation(extent={{-240,60},{-220,80}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea "Type converter" + annotation (Placement(transformation(extent={{-320,20},{-300,40}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Type converter" + annotation (Placement(transformation(extent={{200,190},{220,210}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea1 "Type converter" + annotation (Placement(transformation(extent={{-320,100},{-300,120}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea2 + "Integer to real conversion" + annotation (Placement(transformation(extent={{-40,230},{-20,250}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold holIniSta( + final trueHoldDuration=delayStaCha, + final falseHoldDuration=0) + "Holds stage switched to initial upon plant start" + annotation (Placement(transformation(extent={{-320,160},{-300,180}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch switch2 "Switch" + annotation (Placement(transformation(extent={{160,190},{180,210}}))); + + Buildings.Controls.OBC.CDL.Logical.Or or1 "Logical or" + annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); + + Buildings.Controls.OBC.CDL.Logical.And and2 + "Ensures the stage is changed at high load increases/decreases where a stage up or a stage down signal is uninterrupted after a single stage change as an another one is needed right away" + annotation (Placement(transformation(extent={{0,-140},{20,-120}}))); + + Buildings.Controls.OBC.CDL.Logical.Timer tim "Timer" + annotation (Placement(transformation(extent={{-80,-240},{-60,-220}}))); + + Buildings.Controls.OBC.CDL.Logical.And and1 "Logical andEnsures the stage is changed at high load increases/decreases where a stage up or a stage down signal is uninterrupted after a single stage change as an another one is needed right away" + annotation (Placement(transformation(extent={{-140,-200},{-120,-180}}))); + + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesEquThr( + final t=delayStaCha) "Less equal threshold" + annotation (Placement(transformation(extent={{-40,-240},{-20,-220}}))); + + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam1 + "Triggered sampler" + annotation (Placement(transformation(extent={{180,0},{200,20}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Type conveter" + annotation (Placement(transformation(extent={{60,0},{80,20}}))); + + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( + final t=0.5) "Greater than a threshold" + annotation (Placement(transformation(extent={{-20,80},{0,100}}))); + + Buildings.Controls.OBC.CDL.Logical.Latch lat1 + "Ensures initial stage is held until the first stage change signal after the initial stage phase is over" + annotation (Placement(transformation(extent={{100,190},{120,210}}))); + + Buildings.Controls.OBC.CDL.Logical.And and3 "And" + annotation (Placement(transformation(extent={{40,110},{60,130}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold staChaHol1( + final trueHoldDuration=delayStaCha, + final falseHoldDuration=0) + "Ensures stage change delay is kept at long stage up or down signals that cause multiple consecutive stage changes " + annotation (Placement(transformation(extent={{-80,-180},{-60,-160}}))); + + Buildings.Controls.OBC.CDL.Logical.Edge edg + "Detects plant start" + annotation (Placement(transformation(extent={{-380,160},{-360,180}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not3 "Logical not" + annotation (Placement(transformation(extent={{-260,-70},{-240,-50}}))); + + Buildings.Controls.OBC.CDL.Logical.And and6 "Logical and" + annotation (Placement(transformation(extent={{-180,-90},{-160,-70}}))); + + Buildings.Controls.OBC.CDL.Logical.Or or3 "Logical or" + annotation (Placement(transformation(extent={{160,-60},{180,-40}}))); + + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg + "Detects plant start" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold staChaHol2( + final trueHoldDuration=delayStaCha, + final falseHoldDuration=0) + "Stage change hold" + annotation (Placement(transformation(extent={{80,-60},{100,-40}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold staChaHol3( + final trueHoldDuration=delayStaCha, + final falseHoldDuration=0) + "Stage change hold" + annotation (Placement(transformation(extent={{340,-260},{360,-240}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{372,-260},{392,-240}}))); + + Buildings.Controls.OBC.CDL.Integers.Change cha + "Check if there is stage change" + annotation (Placement(transformation(extent={{300,90},{320,110}}))); + Buildings.Controls.OBC.CDL.Logical.And and4 + "Consider staging up only if stage down signal is not on" + annotation (Placement(transformation(extent={{-320,60},{-300,80}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" + annotation (Placement(transformation(extent={{-380,40},{-360,60}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{180,-170},{200,-150}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu + "Check if the stage setpoint is zero" + annotation (Placement(transformation(extent={{240,-170},{260,-150}}))); + Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and" + annotation (Placement(transformation(extent={{280,-140},{300,-120}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi1 "Logical switch" + annotation (Placement(transformation(extent={{380,-132},{400,-112}}))); + Buildings.Controls.OBC.CDL.Logical.And and7 "Logical and" + annotation (Placement(transformation(extent={{280,-100},{300,-80}}))); + Buildings.Controls.OBC.CDL.Logical.And and8 "Logical and" + annotation (Placement(transformation(extent={{280,-60},{300,-40}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi2 "Logical switch" + annotation (Placement(transformation(extent={{380,-92},{400,-72}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi3 "Logical switch" + annotation (Placement(transformation(extent={{380,-52},{400,-32}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt + "Convert boolean input to integer output" + annotation (Placement(transformation(extent={{-120,140},{-100,160}}))); + Buildings.Controls.OBC.CDL.Integers.Multiply mulInt + "Stage zero when the plant is not enabled" + annotation (Placement(transformation(extent={{240,160},{260,180}}))); + Buildings.Controls.OBC.CDL.Logical.And and9 + "Logical and" + annotation (Placement(transformation(extent={{-220,-90},{-200,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con2(final k=true) + "Constant true" + annotation (Placement(transformation(extent={{180,-220},{200,-200}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=1, + final delayOnInit=true) + "Check if it has passed initial time" + annotation (Placement(transformation(extent={{240,-220},{260,-200}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre2 + "Previous value" + annotation (Placement(transformation(extent={{380,-190},{400,-170}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre1 + "Previous value" + annotation (Placement(transformation(extent={{0,-240},{20,-220}}))); +equation + connect(switch1.y,triSam. u) + annotation (Line(points={{-218,70},{108,70}}, color={0,0,127})); + connect(intToRea1.y,switch1. u1) annotation (Line(points={{-298,110},{-260,110}, + {-260,78},{-242,78}}, color={0,0,127})); + connect(intToRea.y,switch1. u3) annotation (Line(points={{-298,30},{-260,30},{ + -260,62},{-242,62}}, color={0,0,127})); + connect(edg.y,holIniSta. u) + annotation (Line(points={{-358,170},{-322,170}}, color={255,0,255})); + connect(triSam.y,switch2. u3) annotation (Line(points={{132,70},{140,70},{140, + 192},{158,192}}, color={0,0,127})); + connect(uIni,intToRea2. u) annotation (Line(points={{-460,240},{-42,240}}, + color={255,127,0})); + connect(intToRea2.y,switch2. u1) annotation (Line(points={{-18,240},{140,240}, + {140,208},{158,208}}, color={0,0,127})); + connect(tim.y,lesEquThr. u) annotation (Line(points={{-58,-230},{-42,-230}}, + color={0,0,127})); + connect(triSam1.u,booToRea. y) + annotation (Line(points={{178,10},{82,10}}, color={0,0,127})); + connect(edg.y,lat1. u) annotation (Line(points={{-358,170},{-340,170},{-340, + 200},{98,200}}, color={255,0,255})); + connect(switch2.y,reaToInt. u) + annotation (Line(points={{182,200},{198,200}}, color={0,0,127})); + connect(and3.y,lat1. clr) annotation (Line(points={{62,120},{80,120},{80,194}, + {98,194}}, color={255,0,255})); + connect(and1.y,staChaHol1. u) annotation (Line(points={{-118,-190},{-100,-190}, + {-100,-170},{-82,-170}}, color={255,0,255})); + connect(uUp, or2.u1) annotation (Line(points={{-460,-40},{-410,-40},{-410,-80}, + {-382,-80}}, color={255,0,255})); + connect(uDow, or2.u2) annotation (Line(points={{-460,-140},{-400,-140},{-400,-88}, + {-382,-88}}, color={255,0,255})); + connect(uAvaUp, intToRea1.u) + annotation (Line(points={{-460,110},{-322,110}}, color={255,127,0})); + connect(uAvaDow, intToRea.u) + annotation (Line(points={{-460,30},{-322,30}}, color={255,127,0})); + connect(holIniSta.y, not3.u) annotation (Line(points={{-298,170},{-280,170},{ + -280,-60},{-262,-60}}, color={255,0,255})); + connect(and6.y, and1.u1) annotation (Line(points={{-158,-80},{-150,-80},{-150, + -190},{-142,-190}}, color={255,0,255})); + connect(and6.y, edg1.u) + annotation (Line(points={{-158,-80},{-82,-80}},color={255,0,255})); + connect(uPla, booToRea.u) annotation (Line(points={{-460,170},{-420,170},{ + -420,10},{58,10}}, color={255,0,255})); + connect(uPla, falEdg.u) annotation (Line(points={{-460,170},{-420,170},{-420, + -20},{-82,-20}}, color={255,0,255})); + connect(falEdg.y, or3.u1) annotation (Line(points={{-58,-20},{140,-20},{140,-50}, + {158,-50}}, color={255,0,255})); + connect(uPla, edg.u) + annotation (Line(points={{-460,170},{-382,170}}, color={255,0,255})); + connect(and3.u1, and6.y) annotation (Line(points={{38,120},{-150,120},{-150, + -80},{-158,-80}}, color={255,0,255})); + connect(or1.y, staChaHol2.u) annotation (Line(points={{62,-50},{78,-50}}, + color={255,0,255})); + connect(staChaHol2.y, triSam.trigger) annotation (Line(points={{102,-50},{120, + -50},{120,58}}, color={255,0,255})); + connect(edg1.y, or3.u2) annotation (Line(points={{-58,-80},{140,-80},{140,-58}, + {158,-58}}, color={255,0,255})); + connect(staChaHol3.y, not1.u) + annotation (Line(points={{362,-250},{370,-250}}, color={255,0,255})); + connect(uUp, and4.u1) annotation (Line(points={{-460,-40},{-410,-40},{-410,70}, + {-322,70}}, color={255,0,255})); + connect(uDow, not2.u) annotation (Line(points={{-460,-140},{-400,-140},{-400,50}, + {-382,50}}, color={255,0,255})); + connect(not2.y, and4.u2) annotation (Line(points={{-358,50},{-340,50},{-340,62}, + {-322,62}}, color={255,0,255})); + connect(and4.y, switch1.u2) annotation (Line(points={{-298,70},{-242,70}}, + color={255,0,255})); + connect(conInt.y, intEqu.u1) annotation (Line(points={{202,-160},{238,-160}}, + color={255,127,0})); + connect(intEqu.y, and5.u2) annotation (Line(points={{262,-160},{270,-160},{ + 270,-138},{278,-138}}, color={255,0,255})); + connect(and5.y,logSwi1. u3) annotation (Line(points={{302,-130},{378,-130}}, + color={255,0,255})); + connect(and6.y, and2.u1) annotation (Line(points={{-158,-80},{-150,-80},{-150, + -130},{-2,-130}}, color={255,0,255})); + connect(and7.y, logSwi2.u3) annotation (Line(points={{302,-90},{378,-90}}, + color={255,0,255})); + connect(and8.y, logSwi3.u3) annotation (Line(points={{302,-50},{378,-50}}, + color={255,0,255})); + connect(intEqu.y, and7.u2) annotation (Line(points={{262,-160},{270,-160},{ + 270,-98},{278,-98}}, color={255,0,255})); + connect(intEqu.y, and8.u2) annotation (Line(points={{262,-160},{270,-160},{ + 270,-58},{278,-58}}, color={255,0,255})); + connect(or3.y, triSam1.trigger) annotation (Line(points={{182,-50},{190,-50},{ + 190,-2}}, color={255,0,255})); + connect(triSam1.y, greThr1.u) annotation (Line(points={{202,10},{210,10},{210, + 40},{-40,40},{-40,90},{-22,90}}, color={0,0,127})); + connect(greThr1.y, and3.u2) annotation (Line(points={{2,90},{20,90},{20,112},{ + 38,112}}, color={255,0,255})); + connect(cha.down, and5.u1) annotation (Line(points={{322,94},{350,94},{350,20}, + {240,20},{240,-130},{278,-130}}, color={255,0,255})); + connect(cha.y, and7.u1) annotation (Line(points={{322,100},{360,100},{360,10}, + {250,10},{250,-90},{278,-90}}, color={255,0,255})); + connect(cha.up, and8.u1) annotation (Line(points={{322,106},{370,106},{370,0}, + {260,0},{260,-50},{278,-50}}, color={255,0,255})); + connect(cha.up, logSwi3.u1) annotation (Line(points={{322,106},{370,106},{370, + -34},{378,-34}}, color={255,0,255})); + connect(cha.y, logSwi2.u1) annotation (Line(points={{322,100},{360,100},{360, + -74},{378,-74}}, color={255,0,255})); + connect(cha.down, logSwi1.u1) annotation (Line(points={{322,94},{350,94},{350, + -114},{378,-114}}, color={255,0,255})); + connect(logSwi1.y, yChaDowEdg) + annotation (Line(points={{402,-122},{460,-122}}, color={255,0,255})); + connect(logSwi2.y, yChaEdg) + annotation (Line(points={{402,-82},{460,-82}}, color={255,0,255})); + connect(logSwi3.y, yChaUpEdg) + annotation (Line(points={{402,-42},{460,-42}}, color={255,0,255})); + connect(uPla, booToInt.u) annotation (Line(points={{-460,170},{-420,170},{ + -420,150},{-122,150}}, color={255,0,255})); + connect(booToInt.y, mulInt.u2) annotation (Line(points={{-98,150},{200,150},{ + 200,164},{238,164}}, color={255,127,0})); + connect(reaToInt.y, mulInt.u1) annotation (Line(points={{222,200},{230,200},{ + 230,176},{238,176}}, color={255,127,0})); + connect(mulInt.y, ySta) + annotation (Line(points={{262,170},{460,170}}, color={255,127,0})); + connect(mulInt.y, cha.u) annotation (Line(points={{262,170},{280,170},{280, + 100},{298,100}}, color={255,127,0})); + connect(mulInt.y, intEqu.u2) annotation (Line(points={{262,170},{280,170},{ + 280,100},{220,100},{220,-168},{238,-168}}, color={255,127,0})); + connect(and9.y, and6.u1) + annotation (Line(points={{-198,-80},{-182,-80}}, color={255,0,255})); + connect(not3.y, and9.u2) annotation (Line(points={{-238,-60},{-232,-60},{-232, + -88},{-222,-88}}, color={255,0,255})); + connect(or2.y, and9.u1) + annotation (Line(points={{-358,-80},{-222,-80}}, color={255,0,255})); + connect(con2.y, truDel.u) + annotation (Line(points={{202,-210},{238,-210}}, color={255,0,255})); + connect(truDel.y, logSwi3.u2) annotation (Line(points={{262,-210},{340,-210},{ + 340,-42},{378,-42}}, color={255,0,255})); + connect(truDel.y, logSwi2.u2) annotation (Line(points={{262,-210},{340,-210},{ + 340,-82},{378,-82}}, color={255,0,255})); + connect(truDel.y, logSwi1.u2) annotation (Line(points={{262,-210},{340,-210},{ + 340,-122},{378,-122}}, color={255,0,255})); + connect(edg1.y, or1.u1) annotation (Line(points={{-58,-80},{-20,-80},{-20,-50}, + {38,-50}}, color={255,0,255})); + connect(lat1.y, switch2.u2) + annotation (Line(points={{122,200},{158,200}}, color={255,0,255})); + connect(logSwi2.y, pre2.u) annotation (Line(points={{402,-82},{420,-82},{420, + -98},{320,-98},{320,-180},{378,-180}}, color={255,0,255})); + connect(pre2.y, staChaHol3.u) annotation (Line(points={{402,-180},{420,-180}, + {420,-220},{320,-220},{320,-250},{338,-250}}, color={255,0,255})); + connect(not1.y, and6.u2) annotation (Line(points={{394,-250},{420,-250},{420, + -280},{-190,-280},{-190,-88},{-182,-88}}, color={255,0,255})); + connect(and2.y, or1.u2) annotation (Line(points={{22,-130},{30,-130},{30,-58}, + {38,-58}}, color={255,0,255})); + connect(and1.y, tim.u) annotation (Line(points={{-118,-190},{-100,-190},{-100, + -230},{-82,-230}}, color={255,0,255})); + connect(lesEquThr.y, pre1.u) + annotation (Line(points={{-18,-230},{-2,-230}}, color={255,0,255})); + connect(pre1.y, and1.u2) annotation (Line(points={{22,-230},{30,-230},{30, + -260},{-150,-260},{-150,-198},{-142,-198}}, color={255,0,255})); + connect(staChaHol1.y, and2.u2) annotation (Line(points={{-58,-170},{-48,-170}, + {-48,-138},{-2,-138}}, color={255,0,255})); + annotation (defaultComponentName = "cha", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-112,150},{108,112}}, + textColor={0,0,255}, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false, + extent={{-440,-300},{440,300}})), +Documentation(info=" +

                      +This subsequence is not directly specified in Guideline36 as it provides a side +calculation pertaining to generalization of the staging sequences for any number +of chillers and stages provided by the user. +

                      +

                      +This subsequence is used to generate the chiller stage setpoint +ySta and a boolean vector of +chiller status setpoint indices y +for the ySta stage. +

                      +

                      +The inputs to the subsequece are: +

                      + +

                      +If stage down and stage up happen at the same time for any faulty reason the staging down is performed. +

                      +

                      +If stage down or stage up signal is held for a time longer than delayStaCha +multiple consecutive stage change signals are issued. +

                      +

                      +At plant enable the intial stage uIni is held for at least delayStaCha +and until any stage up or down signal is generated. +

                      +

                      +Per Guideline36-2021, section 5.20.4.15.a. Each stage shall have a minimum runtime +of delayStaCha. +

                      +", +revisions=" +
                        +
                      • +April 14, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end Change; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/ChillerIndices.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/ChillerIndices.mo new file mode 100644 index 00000000000..32245e0326c --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/ChillerIndices.mo @@ -0,0 +1,136 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences; +block ChillerIndices "Returns chiller indices for the current stage" + + parameter Integer nSta = 3 + "Number of chiller stages"; + + parameter Integer nChi = 2 + "Number of chillers"; + + parameter Integer staMat[nSta, nChi] = {{1,0},{0,1},{1,1}} + "Staging matrix with stages in rows and chillers in columns"; + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput u( + final min=0, + final max=nSta, + final start=0) "Current chiller stage" + annotation (Placement(transformation(extent={{-160,40},{-120,80}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChi[nChi] + "Chiller status setpoint vector for the current stage" + annotation (Placement(transformation(extent={{120,-60},{160,-20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + final parameter Integer staInd[nSta] = {i for i in 1:nSta} + "Stage index vector"; + + final parameter Integer staIndMat[nSta, nChi] = {j for i in 1:nChi, j in 1:nSta} + "Matrix of staging matrix dimensions with stage indices in each column"; + + final parameter Integer lowDia[nSta, nSta] = {if i<=j then 1 else 0 for i in 1:nSta, j in 1:nSta} + "Lower diagonal unit matrix"; + + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep( + final nout=nSta) "Replicates signal to a length equal the stage count" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); + + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep1[nSta]( + final nout=fill(nChi, nSta)) "Replicates signal to dimensions of the staging matrix" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staIndMatr[nSta,nChi]( + final k=staIndMat) "Matrix with stage index in each column" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + + Buildings.Controls.OBC.CDL.Integers.Equal intEqu1[nSta,nChi] + "Outputs a zero matrix populated with ones in the current stage index row" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant chiStaMatr[nSta,nChi]( + final k=staMat) "Staging matrix" + annotation (Placement(transformation(extent={{-80,-56},{-60,-36}}))); + + Buildings.Controls.OBC.CDL.Reals.MatrixMax matMax( + final nRow=nSta, + final nCol=nChi, + final rowMax=false) "Column-wise matrix maximum" + annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); + + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold chiInSta[nChi](t=fill(0.5, nChi)) + "Identifies chillers designated to operate in a given stage" + annotation (Placement(transformation(extent={{80,-50},{100,-30}}))); + + Buildings.Controls.OBC.CDL.Integers.Multiply proInt[nSta,nChi] + "Outputs a zero matrix populated with ones for any available chiller in the current stage" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[nSta,nChi]( + final integerTrue=fill(1, nSta, nChi), + final integerFalse=fill(0, nSta, nChi)) + "Type converter" + annotation (Placement(transformation(extent={{40,50},{60,70}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea[nSta,nChi] + "Type converter" + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + +equation + connect(intRep.y, intRep1.u) + annotation (Line(points={{-78,60},{-62,60}}, color={255,127,0})); + connect(intRep1.y, intEqu1.u1) + annotation (Line(points={{-38,60},{-2,60}}, color={255,127,0})); + connect(matMax.y, chiInSta.u) + annotation (Line(points={{62,-40},{78,-40}}, color={0,0,127})); + connect(staIndMatr.y, intEqu1.u2) annotation (Line(points={{-38,20},{-20,20},{ + -20,52},{-2,52}}, color={255,127,0})); + connect(chiInSta.y, yChi) + annotation (Line(points={{102,-40},{140,-40}}, color={255,0,255})); + connect(proInt.y, intToRea.u) + annotation (Line(points={{-18,-40},{-2,-40}}, color={255,127,0})); + connect(intToRea.y, matMax.u) + annotation (Line(points={{22,-40},{38,-40}}, color={0,0,127})); + connect(intEqu1.y, booToInt.u) + annotation (Line(points={{22,60},{38,60}}, color={255,0,255})); + connect(chiStaMatr.y, proInt.u2) annotation (Line(points={{-58,-46},{-42,-46}}, + color={255,127,0})); + connect(u, intRep.u) annotation (Line(points={{-140,60},{-102,60}}, + color={255,127,0})); + connect(booToInt.y, proInt.u1) annotation (Line(points={{62,60},{80,60},{80,-10}, + {-50,-10},{-50,-34},{-42,-34}}, color={255,127,0})); + annotation (defaultComponentName = "chiInd", + Icon(coordinateSystem(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={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name")}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-120,-100},{120,100}})), +Documentation(info=" +

                      +This subsequence is not directly specified in Guideline36-2021 as it provides +a side calculation pertaining to generalization of the staging +sequences for any number of chillers and stages provided by the +user. +

                      +

                      +The subsequence outputs a vector of chiller indices yChi +for a stage index input u given a staging matrix staMat. +

                      +", +revisions=" +
                        +
                      • +April 15, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end ChillerIndices; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Configurator.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Configurator.mo new file mode 100644 index 00000000000..7ea92cdb0e7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Configurator.mo @@ -0,0 +1,311 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences; +block Configurator "Configures chiller staging" + + parameter Integer nSta = 3 + "Number of chiller stages, does not include zero stage"; + + parameter Integer nChi = 2 + "Number of chillers"; + + parameter Real chiDesCap[nChi]( + final unit=fill("W",nChi), + final quantity=fill("HeatFlowRate",nChi), + displayUnit=fill("W",nChi)) + "Design chiller capacities vector" + annotation (Evaluate=true); + + parameter Real chiMinCap[nChi]( + final unit=fill("W",nChi), + final quantity=fill("HeatFlowRate",nChi), + displayUnit=fill("W",nChi)) + "Chiller minimum cycling loads vector" + annotation (Evaluate=true); + + parameter Integer chiTyp[nChi]={ + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.constantSpeedCentrifugal} + "Chiller type"; + + parameter Integer staMat[nSta, nChi] = {{1,0},{0,1},{1,1}} + "Staging matrix with stage as row index and chiller as column index"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiAva[nChi] + "Chiller availability status vector. Chiller may be deemend unavailable due to unavailability of a dedicated chilled or condenser water pump" + annotation (Placement(transformation(extent={{-260,-60},{-220,-20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yAva[nSta] + "Stage availability status vector" + annotation (Placement(transformation(extent={{220,-100},{260,-60}}), + iconTransformation(extent={{100,-100},{140,-60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yTyp[nSta]( + final max=fill(nSta, nSta)) "Chiller stage types vector" + annotation (Placement(transformation(extent={{220,-140},{260,-100}}), + iconTransformation(extent={{100,-60},{140,-20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yDesCap[nSta]( + final unit=fill("W", nSta), + final quantity=fill("HeatFlowRate", nSta)) "Stage design capacities vector" + annotation (Placement(transformation(extent={{220,0},{260,40}}), + iconTransformation(extent={{100,60},{140,100}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yMinCap[nSta]( + final unit=fill("W", nSta), + final quantity=fill("HeatFlowRate", nSta)) "Unload stage capacities vector" + annotation (Placement(transformation(extent={{220,-40},{260,0}}), + iconTransformation(extent={{100,20},{140,60}}))); + +protected + final parameter Integer chiTypMat[nSta, nChi] = {chiTyp[i] for i in 1:nChi, j in 1:nSta} + "Chiller type array expanded to allow for element-wise multiplication with the staging matrix"; + + Buildings.Controls.OBC.CDL.Utilities.Assert assMes1( + final message="The chillers must be tagged in order of design capacity if unequally sized") + "Asserts whether chillers are tagged in ascending order with regards to capacity" + annotation (Placement(transformation(extent={{60,160},{80,180}}))); + + Buildings.Controls.OBC.CDL.Reals.Sort sort1( + final nin=nChi) "Ascending sort" + annotation (Placement(transformation(extent={{-140,160},{-120,180}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub1[nChi] + "Subtracts signals" + annotation (Placement(transformation(extent={{-100,160},{-80,180}}))); + + Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax( + final nin=nChi) "Maximum value in a vector input" + annotation (Placement(transformation(extent={{-60,160},{-40,180}}))); + + Buildings.Controls.OBC.CDL.Reals.Abs abs "Absolute values" + annotation (Placement(transformation(extent={{-20,160},{0,180}}))); + + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr1( + final t=0.5) "Less threshold" + annotation (Placement(transformation(extent={{20,160},{40,180}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiDesCaps[nChi]( + final k=chiDesCap) "Design chiller capacities vector" + annotation (Placement(transformation(extent={{-200,100},{-180,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiMinCaps[nChi]( + final k=chiMinCap) "Chiller unload capacities vector" + annotation (Placement(transformation(extent={{-200,60},{-180,80}}))); + + Buildings.Controls.OBC.CDL.Reals.MatrixGain staDesCaps( + final K=staMat) "Matrix gain for design capacities" + annotation (Placement(transformation(extent={{-140,100},{-120,120}}))); + + Buildings.Controls.OBC.CDL.Reals.MatrixGain staMinCaps( + final K=staMat) "Matrix gain from minimal capacities" + annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); + + Buildings.Controls.OBC.CDL.Reals.MatrixGain sumNumChi( + final K=staMat) + "Outputs the total chiller count per stage vector" + annotation (Placement(transformation(extent={{-140,10},{-120,30}}))); + + Buildings.Controls.OBC.CDL.Reals.MatrixGain sumNumAvaChi( + final K=staMat) + "Outputs the available chiller count per stage vector" + annotation (Placement(transformation(extent={{-140,-50},{-120,-30}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant oneVec[nChi]( + final k=fill(1, nChi)) "Mocks a case with all chillers available" + annotation (Placement(transformation(extent={{-200,10},{-180,30}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChi] + "Type converter" + annotation (Placement(transformation(extent={{-200,-50},{-180,-30}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub2[nSta] + "Subtracts count of available chillers from the design count, at each stage" + annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); + + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr[nSta]( + final t=fill(0.5, nSta)) + "Checks if the count of available chillers in each stage equals the design count" + annotation (Placement(transformation(extent={{-40,-20},{-20,0}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiStaMat[nSta,nChi]( + final k=staMat) "Staging matrix" + annotation (Placement(transformation(extent={{-200,-170},{-180,-150}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant staType[nSta,nChi]( + final k=chiTypMat) "Chiller stage type matrix" + annotation (Placement(transformation(extent={{-200,-110},{-180,-90}}))); + + Buildings.Controls.OBC.CDL.Reals.Multiply pro[nSta,nChi] + "Element-wise product" + annotation (Placement(transformation(extent={{-140,-130},{-120,-110}}))); + + Buildings.Controls.OBC.CDL.Reals.MatrixMax matMax( + final nRow=nSta, + final nCol=nChi) "Row-wise matrix maximum" + annotation (Placement(transformation(extent={{-100,-130},{-80,-110}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt[nSta] + "Type converter" + annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); + + Buildings.Controls.OBC.CDL.Reals.Sort sort( + final nin=nSta) "Vector sort" + annotation (Placement(transformation(extent={{20,-180},{40,-160}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea1[nSta] + "Type converter" + annotation (Placement(transformation(extent={{-20,-180},{0,-160}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1[nSta] + "Type converter" + annotation (Placement(transformation(extent={{60,-180},{80,-160}}))); + + Buildings.Controls.OBC.CDL.Integers.Equal intEqu[nSta] "Integer equality" + annotation (Placement(transformation(extent={{100,-160},{120,-140}}))); + + Buildings.Controls.OBC.CDL.Utilities.Assert assMes( + final message="It could be that the chillers are not being staged in an order + recommended by ASHRAE RP1711 or Guideline 36. + Please make sure to follow the recommendation that is: + any positive displacement machines first, + any variable speed centrifugal next and any constant speed centrifugal last.") + "Assert block" + annotation (Placement(transformation(extent={{180,-160},{200,-140}}))); + + Buildings.Controls.OBC.CDL.Logical.MultiAnd mulAnd( + final nin=nSta) "Logical and with a vector input" + annotation (Placement(transformation(extent={{140,-160},{160,-140}}))); + +equation + connect(chiDesCaps.y, staDesCaps.u) annotation (Line(points={{-178,110},{-142, + 110}}, color={0,0,127})); + connect(chiMinCaps.y, staMinCaps.u) annotation (Line(points={{-178,70},{-142,70}}, + color={0,0,127})); + connect(uChiAva, booToRea.u) + annotation (Line(points={{-240,-40},{-202,-40}}, color={255,0,255})); + connect(booToRea.y, sumNumAvaChi.u) + annotation (Line(points={{-178,-40},{-142,-40}}, color={0,0,127})); + connect(sumNumChi.y, sub2.u1) annotation (Line(points={{-118,20},{-100,20},{-100, + -4},{-82,-4}}, color={0,0,127})); + connect(sumNumAvaChi.y, sub2.u2) annotation (Line(points={{-118,-40},{-100.5,-40}, + {-100.5,-16},{-82,-16}}, color={0,0,127})); + connect(sub2.y,lesThr. u) + annotation (Line(points={{-58,-10},{-42,-10}}, color={0,0,127})); + connect(lesThr.y, yAva) annotation (Line(points={{-18,-10},{60,-10},{60,-80},{ + 240,-80}}, color={255,0,255})); + connect(chiStaMat.y,pro. u2) annotation (Line(points={{-178,-160},{-160,-160}, + {-160,-126},{-142,-126}}, color={0,0,127})); + connect(pro.y,matMax. u) + annotation (Line(points={{-118,-120},{-102,-120}}, color={0,0,127})); + connect(matMax.y,reaToInt. u) + annotation (Line(points={{-78,-120},{-62,-120}}, color={0,0,127})); + connect(reaToInt.y, yTyp) annotation (Line(points={{-38,-120},{240,-120}}, + color={255,127,0})); + connect(reaToInt.y, intToRea1.u) annotation (Line(points={{-38,-120},{-30, + -120},{-30,-170},{-22,-170}}, + color={255,127,0})); + connect(intToRea1.y, sort.u) + annotation (Line(points={{2,-170},{18,-170}}, color={0,0,127})); + connect(sort.y, reaToInt1.u) + annotation (Line(points={{42,-170},{58,-170}}, color={0,0,127})); + connect(reaToInt.y,intEqu. u1) annotation (Line(points={{-38,-120},{90,-120},{ + 90,-150},{98,-150}}, color={255,127,0})); + connect(reaToInt1.y,intEqu. u2) annotation (Line(points={{82,-170},{90,-170},{ + 90,-158},{98,-158}}, color={255,127,0})); + connect(mulAnd.y, assMes.u) + annotation (Line(points={{162,-150},{178,-150}}, color={255,0,255})); + connect(intEqu.y, mulAnd.u) annotation (Line(points={{122,-150},{138,-150}}, + color={255,0,255})); + connect(staType.y, pro.u1) annotation (Line(points={{-178,-100},{-160,-100},{-160, + -114},{-142,-114}}, color={0,0,127})); + connect(staDesCaps.y, yDesCap) annotation (Line(points={{-118,110},{100,110},{ + 100,20},{240,20}}, color={0,0,127})); + connect(staMinCaps.y, yMinCap) annotation (Line(points={{-118,70},{80,70},{80, + -20},{240,-20}}, color={0,0,127})); + connect(oneVec.y, sumNumChi.u) + annotation (Line(points={{-178,20},{-142,20}}, color={0,0,127})); + connect(sort1.u, chiDesCaps.y) annotation (Line(points={{-142,170},{-160, + 170},{-160,110},{-178,110}}, color={0,0,127})); + connect(sort1.y, sub1.u1) annotation (Line(points={{-118,170},{-110,170},{-110, + 176},{-102,176}}, color={0,0,127})); + connect(chiDesCaps.y, sub1.u2) annotation (Line(points={{-178,110},{-160,110}, + {-160,150},{-110,150},{-110,164},{-102,164}}, color={0,0,127})); + connect(sub1.y, multiMax.u) + annotation (Line(points={{-78,170},{-62,170}}, color={0,0,127})); + connect(multiMax.y, abs.u) + annotation (Line(points={{-38,170},{-22,170}}, color={0,0,127})); + connect(abs.y, lesThr1.u) + annotation (Line(points={{2,170},{18,170}}, color={0,0,127})); + connect(lesThr1.y, assMes1.u) + annotation (Line(points={{42,170},{58,170}}, color={255,0,255})); + annotation (defaultComponentName = "conf", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name")}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-220,-200},{220,200}})), +Documentation(info=" +

                      +This subsequence is not directly specified in Guideline36-2021 as it provides +a side calculation pertaining to generalization of the staging +sequences for any number of chillers and stages provided by the +user. +

                      +

                      +Given the staging matrix input parameter staMat the staging configurator calculates: +

                      +
                        +
                      • +Stage availability vector yAva from the chiller availability uChiAva +input vector according to Guideline36-2021, section 5.20.4.13 +
                      • +
                      • +Design stage capacity vector yDesCap from the design chiller capacity vector +input parameter chiDesCap. +The chillers need to be tagged in order of ascending chiller capacity if unequally sized. This is +according to section 3.1.7.5.a of Guideline36-2021, otherwise a warning is thrown. +
                      • +
                      • +Minimum stage capacity vector yMinCap from the chiller minimum cycling load input +parameter chiMinCap according to section 3.1.7.6.a of Guideline36-2021. +
                      • +
                      • +Stage type vector yTyp from the chiller type vector input parameter +uChiTyp, as listed in section 5.20.4.14. Chiller types are defined in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.
                        +Stage type is, based on the chiller types in that stage and in the recommended staging order: +
                          +
                        • +Positive displacement, for any stage with only positive displacement chiller(s) +
                        • +
                        • +Variable speed centirfugal, for any stage with any variable speed chiller(s) and no constant speed chiller(s) +
                        • +
                        • +Constant speed centirfugal, for any stage with any constant speed centrifugal chiller(s)
                          +
                        • +
                        +This stage type is used in the + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.PartLoadRatios +subsequence to determine the stage up and down part load ratios. +
                      • +
                      +", +revisions=" +
                        +
                      • +June 7, 2019, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end Configurator; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Down.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Down.mo new file mode 100644 index 00000000000..a8935b61597 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Down.mo @@ -0,0 +1,338 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences; +block Down "Generates a stage down signal" + + parameter Boolean have_WSE = true + "true = plant has a WSE, false = plant does not have WSE"; + + parameter Boolean have_serChi = false + "true = series chillers plant; false = parallel chillers plant"; + + parameter Boolean have_locSen=false + "Flag of local DP sensor: true=local DP sensor hardwired to controller" + annotation (Dialog(enable=not have_serChi)); + + parameter Integer nRemSen=2 + "Total number of remote differential pressure sensors" + annotation (Dialog(enable=not have_serChi)); + + parameter Real parLoaRatDelay( + final unit="s", + final quantity="Time", + displayUnit="h")=900 + "Enable delay for operating and staging part load ratio condition"; + + parameter Real faiSafTruDelay( + final unit="s", + final quantity="Time", + displayUnit="h")=900 + "Enable delay for failsafe condition"; + + parameter Real faiSafTDif( + final unit="K", + final quantity="TemperatureDifference", + displayUnit="degC")=1 + "Offset between the chilled water supply temperature and its setpoint for the failsafe condition"; + + parameter Real TDif( + final unit="K", + final quantity="TemperatureDifference", + displayUnit="degC")=1 + "Offset between the chilled water supply temperature and its setpoint" + annotation(Evaluate=true, Dialog(enable=have_WSE)); + + parameter Real TDifHys( + final unit="K", + final quantity="TemperatureDifference", + displayUnit="degC")=1 + "Hysteresis deadband for temperature" + annotation(Evaluate=true, Dialog(enable=have_WSE)); + + parameter Real faiSafDpDif( + final unit="Pa", + final quantity="PressureDifference", + displayUnit="Pa")=2 * 6895 + "Offset between the chilled water pump differential static pressure and its setpoint"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWseSta if have_WSE + "WSE status" + annotation (Placement(transformation(extent={{-220,-150},{-180,-110}}), + iconTransformation(extent={{-140,-130},{-100,-90}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput u + "Chiller stage" + annotation (Placement(transformation(extent={{-220,-180},{-180,-140}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uOpeDow(final unit="1") + "Next available stage down operating part load ratio (OPLR)" + annotation (Placement( + transformation(extent={{-220,190},{-180,230}}), iconTransformation( + extent={{-140,90},{-100,130}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uStaDow(final unit="1") + "Next available stage down staging part load ratio (SPLR)" + annotation (Placement(transformation(extent={{-220,150},{-180,190}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final unit="K", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-220,-60},{-180,-20}}), + iconTransformation(extent={{-140,-32},{-100,8}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup( + final unit="K", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-220,110},{-180,150}}), + iconTransformation(extent={{-140,-52},{-100,-12}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPumSet_local( + final unit="Pa", + final quantity="PressureDifference") + if (not have_serChi) and have_locSen + "Chilled water pump differential static pressure setpoint for local pressure sensor" + annotation (Placement(transformation(extent={{-220,80},{-180,120}}), + iconTransformation(extent={{-140,50},{-100,90}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPum_local( + final unit="Pa", + final quantity="PressureDifference") if (not have_serChi) and have_locSen + "Chilled water pump differential static pressure" + annotation (Placement(transformation(extent={{-220,50},{-180,90}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPumSet_remote[nRemSen]( + final unit=fill("Pa", nRemSen), + final quantity=fill("PressureDifference",nRemSen)) + if (not have_serChi) and (not have_locSen) + "Chilled water differential pressure setpoint for remote sensor" + annotation (Placement(transformation(extent={{-220,10},{-180,50}}), + iconTransformation(extent={{-140,10},{-100,50}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPum_remote[nRemSen]( + final unit=fill("Pa", nRemSen), + final quantity=fill("PressureDifference",nRemSen)) + if (not have_serChi) and (not have_locSen) + "Chilled water differential pressure from remote sensor" + annotation (Placement(transformation(extent={{-220,-20},{-180,20}}), + iconTransformation(extent={{-140,-10},{-100,30}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TWsePre( + final quantity="ThermodynamicTemperature", + final unit="K") if have_WSE + "Predicted waterside economizer outlet temperaturePredicted WSE outlet temperature" + annotation (Placement(transformation(extent={{-220,-90},{-180,-50}}), + iconTransformation(extent={{-140,-72},{-100,-32}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uTowFanSpeMax if have_WSE + "Maximum cooling tower fan speed" + annotation (Placement(transformation(extent={{-220,-120},{-180,-80}}), + iconTransformation(extent={{-140,-92},{-100,-52}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Stage down signal" + annotation (Placement(transformation(extent={{180,-10},{200,10}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.FailsafeCondition faiSafCon( + final have_serChi=have_serChi, + final have_locSen=have_locSen, + final nRemSen=nRemSen, + final faiSafTruDelay=faiSafTruDelay, + final TDif=TDif, + final dpDif=faiSafDpDif) + "Failsafe condition of the next lower stage" + annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); + + Buildings.Controls.OBC.CDL.Logical.And and0 "And for staging down" + annotation (Placement(transformation(extent={{20,80},{40,100}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch logSwi "Logical switch" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + + Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr( + final t=1) + "Switches staging down rules" + annotation (Placement(transformation(extent={{-120,-170},{-100,-150}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysTSup( + final uLow=TDif - TDifHys, + final uHigh=TDif) if have_WSE + "Checks if the predicted downstream WSE chilled water supply temperature is higher than its setpoint plus an offset" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + + Buildings.Controls.OBC.CDL.Logical.And and1 if have_WSE + "Or for staging up" + annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not0 if have_WSE + "Outputs true if signal is below maximum" + annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not1 + "Logical not" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 if have_WSE + "Temperature difference" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( + final uHigh=0.99, + final uLow=0.98) if have_WSE + "Checks if the signal is at its maximum" + annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel1( + final delayTime=parLoaRatDelay, + final delayOnInit=true) + "Delays a true signal" + annotation (Placement(transformation(extent={{-40,180},{-20,200}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysDow( + final uLow=0, + final uHigh=0.05) + "Checks if the operating PLR of the next available stage down exceeds the staging down PLR for that stage" + annotation (Placement(transformation(extent={{-80,180},{-60,200}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 + "Subtracts part load ratios" + annotation (Placement(transformation(extent={{-120,180},{-100,200}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant noWSEcoSig( + final k=false) if not have_WSE + "Staging from 1 to 0 for plants without a WSE is depends on the plant disable sequence" + annotation (Placement(transformation(extent={{20,-20},{40,0}}))); + + Buildings.Controls.OBC.CDL.Logical.And and2 if have_WSE + "Logical and" + annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); + +equation + connect(TChiWatSupSet, faiSafCon.TChiWatSupSet) annotation (Line(points={{-200, + -40},{-160,-40},{-160,59},{-82,59}},color={0,0,127})); + connect(dpChiWatPumSet_local, faiSafCon.dpChiWatPumSet_local) annotation ( + Line(points={{-200,100},{-130,100},{-130,51},{-82,51}}, color={0,0,127})); + connect(dpChiWatPum_local, faiSafCon.dpChiWatPum_local) annotation (Line( + points={{-200,70},{-140,70},{-140,48},{-82,48}}, color={0,0,127})); + connect(u, intGreThr.u) + annotation (Line(points={{-200,-160},{-122,-160}}, color={255,127,0})); + connect(sub1.y,hysTSup. u) + annotation (Line(points={{-58,-60},{-42,-60}}, color={0,0,127})); + connect(TChiWatSup, faiSafCon.TChiWatSup) annotation (Line(points={{-200,130}, + {-120,130},{-120,56},{-82,56}}, color={0,0,127})); + connect(hys.y, not0.u) + annotation (Line(points={{-98,-100},{-82,-100}}, color={255,0,255})); + connect(uTowFanSpeMax, hys.u) annotation ( + Line(points={{-200,-100},{-122,-100}},color={0,0,127})); + connect(hysTSup.y, and1.u1) annotation (Line(points={{-18,-60},{-2,-60}}, + color={255,0,255})); + connect(not1.y, and0.u2) annotation (Line(points={{-18,50},{0,50},{0,82},{18,82}}, + color={255,0,255})); + connect(intGreThr.y, logSwi.u2) annotation (Line(points={{-98,-160},{90,-160}, + {90,0},{98,0}}, color={255,0,255})); + connect(not0.y, and1.u2) annotation (Line(points={{-58,-100},{-10,-100},{-10,-68}, + {-2,-68}}, color={255,0,255})); + connect(sub2.y, hysDow.u) + annotation (Line(points={{-98,190},{-82,190}}, color={0,0,127})); + connect(TChiWatSupSet, sub1.u1) annotation (Line(points={{-200,-40},{-160,-40}, + {-160,-54},{-82,-54}}, color={0,0,127})); + connect(TWsePre, sub1.u2) annotation (Line(points={{-200,-70},{-140,-70},{-140, + -66},{-82,-66}}, color={0,0,127})); + connect(noWSEcoSig.y, logSwi.u3) annotation (Line(points={{42,-10},{70,-10},{70, + -8},{98,-8}}, color={255,0,255})); + connect(hysDow.y, truDel1.u) + annotation (Line(points={{-58,190},{-42,190}}, color={255,0,255})); + connect(truDel1.y, and0.u1) annotation (Line(points={{-18,190},{0,190},{0,90}, + {18,90}}, color={255,0,255})); + connect(and0.y, logSwi.u1) annotation (Line(points={{42,90},{70,90},{70,8},{98, + 8}}, color={255,0,255})); + connect(logSwi.y, y) + annotation (Line(points={{122,0},{190,0}}, color={255,0,255})); + connect(faiSafCon.y, not1.u) + annotation (Line(points={{-58,50},{-42,50}}, color={255,0,255})); + connect(dpChiWatPumSet_remote, faiSafCon.dpChiWatPumSet_remote) annotation ( + Line(points={{-200,30},{-130,30},{-130,44},{-82,44}}, color={0,0,127})); + connect(dpChiWatPum_remote, faiSafCon.dpChiWatPum_remote) annotation (Line( + points={{-200,0},{-120,0},{-120,41},{-82,41}}, color={0,0,127})); + connect(uOpeDow, sub2.u2) annotation (Line(points={{-200,210},{-160,210},{-160, + 184},{-122,184}}, color={0,0,127})); + connect(uStaDow, sub2.u1) annotation (Line(points={{-200,170},{-140,170},{-140, + 196},{-122,196}}, color={0,0,127})); + connect(and1.y, and2.u1) + annotation (Line(points={{22,-60},{38,-60}}, color={255,0,255})); + connect(uWseSta, and2.u2) annotation (Line(points={{-200,-130},{30,-130},{30,-68}, + {38,-68}}, color={255,0,255})); + connect(and2.y, logSwi.u3) annotation (Line(points={{62,-60},{80,-60},{80,-8}, + {98,-8}}, color={255,0,255})); + annotation (defaultComponentName = "staDow", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name"), + Rectangle(extent={{-80,-10},{-20,-22}}, lineColor={0,0,127}), + Rectangle(extent={{-80,-28},{-20,-40}}, lineColor={0,0,127}), + Rectangle(extent={{-76,-22},{-72,-28}}, lineColor={0,0,127}), + Rectangle(extent={{-28,-22},{-24,-28}}, lineColor={0,0,127}), + Rectangle(extent={{20,-10},{80,-22}}, lineColor={0,0,127}), + Rectangle(extent={{20,-28},{80,-40}}, lineColor={0,0,127}), + Rectangle(extent={{24,-22},{28,-28}}, lineColor={0,0,127}), + Rectangle(extent={{72,-22},{76,-28}}, lineColor={0,0,127}), + Rectangle(extent={{-80,30},{-20,18}}, lineColor={0,0,127}), + Rectangle(extent={{-80,12},{-20,0}}, lineColor={0,0,127}), + Rectangle(extent={{-76,18},{-72,12}}, lineColor={0,0,127}), + Rectangle(extent={{-28,18},{-24,12}}, lineColor={0,0,127})}), + Diagram( + coordinateSystem(preserveAspectRatio=false, + extent={{-180,-200},{180,240}})), +Documentation(info=" +

                      +Outputs a boolean stage down signal y when: +

                      +
                        +
                      • +Operating uOpeDow part load ratio of the next available stage down is below +its staging uStaDow part load ratio for at least parLoaRatDelay, and +
                      • +
                      • +Failsafe condition is not true. +
                      • +
                      +

                      +If the plant has a WSE, staging from the lowest available chiller stage to +WSE stage occurs when: +

                        +
                      • +WSE is enabled, and +
                      • +
                      • +The predicted WSE return temperature TWsePre is sufficently under the +chilled water supply temperature setpoint TChiWatSupSet for defined periods of time, and +
                      • +
                      • +Maximum cooling tower fan speed uTowFanSpeMax is below 100% +
                      • +
                      +

                      +The implementation is according to ASHRAE Guideline36-2021, section 5.20.4.15. +and can be used for both primary-only plants with and without a WSE. +

                      +", +revisions=" +
                        +
                      • +January 02, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end Down; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/EfficiencyCondition.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/EfficiencyCondition.mo new file mode 100644 index 00000000000..d8190ebcde8 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/EfficiencyCondition.mo @@ -0,0 +1,89 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences; +block EfficiencyCondition + "Efficiency condition used in staging up and down" + + parameter Real effConTruDelay( + final unit="s", + final quantity="Time", + displayUnit="h")=900 + "Enable delay"; + + parameter Real sigDif = 0.05 + "Signal hysteresis deadband"; + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uOpe( + final unit="1") + "Operative part load ratio of the current stage" + annotation (Placement(transformation(extent={{-140,0},{-100,40}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uStaUp( + final unit="1") + "Staging part load ratio of the next stage up" + annotation (Placement(transformation(extent={{-140,-40},{-100,0}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Efficiency condition for chiller staging" + annotation (Placement(transformation(extent={{80,-20},{120,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=effConTruDelay, + final delayOnInit=true) + "Delays a true signal" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysOpe( + final uLow=0, + final uHigh=sigDif) + "Checks if the current stage operating part load ratio exceeds the stage up part load ratio" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub + "Subtracts part load ratios" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(truDel.y, y) + annotation (Line(points={{42,0},{100,0}},color={255,0,255})); + connect(hysOpe.y, truDel.u) + annotation (Line(points={{2,0},{18,0}}, color={255,0,255})); + connect(sub.y, hysOpe.u) + annotation (Line(points={{-38,0},{-22,0}}, color={0,0,127})); + connect(uOpe, sub.u1) annotation (Line(points={{-120,20},{-80,20},{-80,6},{-62, + 6}}, color={0,0,127})); + connect(uStaUp, sub.u2) annotation (Line(points={{-120,-20},{-80,-20},{-80,-6}, + {-62,-6}}, color={0,0,127})); + +annotation (defaultComponentName = "effCon", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name")}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-100,-60},{80,60}})), +Documentation(info=" +

                      +Efficiency condition used in staging up and down for plants primary-only and +primary-secondary plants, both with and without a water side economizer. +It is implemented according to the specification provided in section 5.20.4.15 of +Guideline36-2021. +

                      +", +revisions=" +
                        +
                      • +April 5, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end EfficiencyCondition; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/FailsafeCondition.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/FailsafeCondition.mo new file mode 100644 index 00000000000..dd5de59cf94 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/FailsafeCondition.mo @@ -0,0 +1,230 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences; +block FailsafeCondition + "Failsafe condition used in staging up and down" + + parameter Boolean have_serChi = false + "true = series chillers plant; false = parallel chillers plant"; + + parameter Boolean have_locSen = false + "Flag of local DP sensor: true=local DP sensor hardwired to controller" + annotation (Dialog(enable=not have_serChi)); + + parameter Integer nRemSen=2 + "Total number of remote differential pressure sensors" + annotation (Dialog(enable=not have_serChi)); + + parameter Real faiSafTruDelay( + final unit="s", + final quantity="Time", + displayUnit="h")=900 + "Enable delay"; + + parameter Real TDif( + final unit="K", + final quantity="TemperatureDifference", + displayUnit="degC")=1 + "Offset between the chilled water supply temperature and its setpoint"; + + parameter Real TDifHys( + final unit="K", + final quantity="TemperatureDifference", + displayUnit="degC")=1 + "Temperature hysteresis deadband"; + + parameter Real dpDif( + final unit="Pa", + final quantity="PressureDifference", + displayUnit="Pa")=2 * 6895 + "Offset between the chilled water differential pressure and its setpoint"; + + parameter Real dpDifHys( + final unit="Pa", + final quantity="PressureDifference", + displayUnit="Pa")=0.5 * 6895 + "Pressure difference hysteresis deadband"; + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final unit="K", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-180,70},{-140,110}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup( + final unit="K", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-180,30},{-140,70}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPumSet_local( + final unit="Pa", + final quantity="PressureDifference") + if (not have_serChi) and have_locSen + "Chilled water differential pressure setpoint for local pressure sensor" + annotation (Placement(transformation(extent={{-180,0},{-140,40}}), + iconTransformation(extent={{-140,-10},{-100,30}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPum_local( + final unit="Pa", + final quantity="PressureDifference") if (not have_serChi) and have_locSen + "Chilled water differential pressure from local pressure sensor" + annotation (Placement(transformation(extent={{-180,-40},{-140,0}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPumSet_remote[nRemSen]( + final unit=fill("Pa", nRemSen), + final quantity=fill("PressureDifference", nRemSen)) + if (not have_serChi) and (not have_locSen) + "Chilled water differential pressure setpoint for remote sensor" + annotation (Placement(transformation(extent={{-180,-80},{-140,-40}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPum_remote[nRemSen]( + final unit=fill("Pa", nRemSen), + final quantity=fill("PressureDifference", nRemSen)) + if (not have_serChi) and (not have_locSen) + "Chilled water differential pressure from remote sensor" + annotation (Placement(transformation(extent={{-180,-120},{-140,-80}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Failsafe condition for chiller staging" + annotation (Placement(transformation(extent={{140,-20},{180,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysdpSup( + final uLow=dpDif - dpDifHys, + final uHigh=dpDif) if (not have_serChi) and have_locSen + "Checks how closely the chilled water pump differential pressure aproaches its setpoint from below" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysTSup( + final uLow=TDif - TDifHys, + final uHigh=TDif) + "Checks if the chilled water supply temperature is higher than its setpoint plus an offset" + annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysdpSup1[nRemSen]( + final uLow=fill(dpDif - dpDifHys, nRemSen), + final uHigh=fill(dpDif, nRemSen)) + if (not have_serChi) and (not have_locSen) + "Checks how closely the chilled water pump differential pressure aproaches its setpoint from below" + annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=false) if have_serChi + "Virtual signal for series chiller plants" + annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=faiSafTruDelay, + final delayOnInit=false) + "Delays a true signal" + annotation (Placement(transformation(extent={{-20,70},{0,90}}))); + + Buildings.Controls.OBC.CDL.Logical.Or or1 "Logical or" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub0 + "Adder for temperatures" + annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 + if (not have_serChi) and have_locSen + "Subtracts differential pressures" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr( + final nin=nRemSen) + if (not have_serChi) and (not have_locSen) + "Check if there is any true input" + annotation (Placement(transformation(extent={{20,-90},{40,-70}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub2[nRemSen] + if (not have_serChi) and (not have_locSen) + "Subtracts differential pressures" + annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel1[nRemSen]( + final delayTime=fill(faiSafTruDelay,nRemSen), + final delayOnInit=fill(false, nRemSen)) + if (not have_serChi) and (not have_locSen) "Delays a true signal" + annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel2( + final delayTime=faiSafTruDelay, + final delayOnInit=false) + if (not have_serChi) and have_locSen "Delays a true signal" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + +equation + connect(sub1.y, hysdpSup.u) + annotation (Line(points={{-78,0},{-62,0}}, color={0,0,127})); + connect(dpChiWatPumSet_local, sub1.u1) annotation (Line(points={{-160,20},{-120, + 20},{-120,6},{-102,6}}, color={0,0,127})); + connect(dpChiWatPum_local, sub1.u2) annotation (Line(points={{-160,-20},{-120, + -20},{-120,-6},{-102,-6}}, color={0,0,127})); + connect(sub0.y, hysTSup.u) + annotation (Line(points={{-78,80},{-62,80}}, color={0,0,127})); + connect(sub2.y, hysdpSup1.u) + annotation (Line(points={{-78,-80},{-62,-80}}, color={0,0,127})); + connect(dpChiWatPumSet_remote, sub2.u1) annotation (Line(points={{-160,-60},{-120, + -60},{-120,-74},{-102,-74}}, color={0,0,127})); + connect(dpChiWatPum_remote, sub2.u2) annotation (Line(points={{-160,-100},{-120, + -100},{-120,-86},{-102,-86}}, color={0,0,127})); + connect(or1.y, y) + annotation (Line(points={{122,0},{160,0}}, color={255,0,255})); + connect(hysTSup.y, truDel.u) + annotation (Line(points={{-38,80},{-22,80}}, color={255,0,255})); + connect(hysdpSup1.y, truDel1.u) + annotation (Line(points={{-38,-80},{-22,-80}}, color={255,0,255})); + connect(hysdpSup.y, truDel2.u) + annotation (Line(points={{-38,0},{-22,0}}, color={255,0,255})); + connect(truDel.y, or1.u1) annotation (Line(points={{2,80},{80,80},{80,0},{98,0}}, + color={255,0,255})); + connect(truDel2.y, or1.u2) annotation (Line(points={{2,0},{60,0},{60,-8},{98,-8}}, + color={255,0,255})); + connect(con.y, or1.u2) annotation (Line(points={{2,-40},{60,-40},{60,-8},{98,-8}}, + color={255,0,255})); + connect(mulOr.y, or1.u2) annotation (Line(points={{42,-80},{60,-80},{60,-8},{98, + -8}}, color={255,0,255})); + connect(truDel1.y, mulOr.u) + annotation (Line(points={{2,-80},{18,-80}}, color={255,0,255})); + connect(TChiWatSupSet, sub0.u2) annotation (Line(points={{-160,90},{-130,90},{ + -130,74},{-102,74}}, color={0,0,127})); + connect(TChiWatSup, sub0.u1) annotation (Line(points={{-160,50},{-120,50},{-120, + 86},{-102,86}}, color={0,0,127})); + +annotation (defaultComponentName = "faiSafCon", + Icon(coordinateSystem(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={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name")}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-140,-120},{140,120}})), +Documentation(info=" +

                      +Failsafe condition used in staging up and down, implemented according to the +specification provided in section 5.20.4.15 of Guideline36-2021. The subsequence +applies to primary-only plants with and without a WSE. The sequence contains a +boolean flag to differentiate between parallel and series chiller plants. +

                      +", +revisions=" +
                        +
                      • +January 21, 2019, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end FailsafeCondition; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Initial.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Initial.mo new file mode 100644 index 00000000000..bf44985915a --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Initial.mo @@ -0,0 +1,240 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences; +block Initial "Outputs the initial stage" + + parameter Boolean have_WSE = true + "true = plant has a WSE, false = plant does not have WSE"; + + parameter Real wseDt = 1 + "Offset for checking waterside economizer leaving water temperature" + annotation (Dialog(tab="Advanced", enable=have_WSE)); + + parameter Real heaExcAppDes( + final unit="K", + final quantity="TemperatureDifference", + displayUnit="degC")=2 + "Design heat exchanger approach" + annotation (Dialog(group="Waterside economizer", enable=have_WSE)); + + parameter Real cooTowAppDes( + final unit="K", + final quantity="TemperatureDifference", + displayUnit="degC")=2 + "Design cooling tower approach" + annotation (Dialog(group="Waterside economizer", enable=have_WSE)); + + parameter Real TOutWetDes( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=288.15 + "Design outdoor air wet bulb temperature" + annotation (Dialog(group="Waterside economizer", enable=have_WSE)); + + parameter Real VHeaExcDes_flow( + final unit="m3/s", + final quantity="VolumeFlowRate", + displayUnit="m3/s")=0.01 + "Desing heat exchanger chilled water flow rate" + annotation (Dialog(group="Waterside economizer", enable=have_WSE)); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uUp + "First higher available chiller stage" + annotation (Placement(transformation(extent={{-280,-60},{-240,-20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TOutWet( + final unit="K", + final quantity="ThermodynamicTemperature") if have_WSE + "Outdoor air wet bulb temperature" + annotation (Placement(transformation(extent={{-280,50},{-240,90}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uTunPar if have_WSE + "Tuning parameter as at last plant disable" + annotation (Placement(transformation(extent={{-280,-20},{-240,20}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final unit="K", + final quantity="ThermodynamicTemperature") if have_WSE + "Chilled water supply setpoint" + annotation (Placement(transformation(extent={{-280,90},{-240,130}}), + iconTransformation(extent={{-140,10},{-100,50}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yIni + "Initial chiller plant stage" + annotation (Placement(transformation(extent={{240,-10},{260,10}}), + iconTransformation(extent={{100,-10},{120,10}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enable signal" + annotation (Placement(transformation(extent={{-280,-110},{-240,-70}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + + Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam + "Samples first available stage up at plant enable" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + + Buildings.Controls.OBC.CDL.Logical.Edge edg( + final pre_u_start=false) "Rising edge" + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); + +//protected + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.PredictedOutletTemperature + wseTOut( + final heaExcAppDes=heaExcAppDes, + final cooTowAppDes=cooTowAppDes, + final TOutWetDes=TOutWetDes, + final VHeaExcDes_flow=VHeaExcDes_flow) if have_WSE + "Waterside economizer outlet temperature predictor" + annotation (Placement(transformation(extent={{-160,20},{-140,40}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea "Type converter" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Type converter" + annotation (Placement(transformation(extent={{160,30},{180,50}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant staZer( + final k=0) + "Zero stage" + annotation (Placement(transformation(extent={{0,100},{20,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys1( + final uLow=0, + final uHigh=wseDt) if have_WSE + "Check if the initial predicted heat exchange leaving water temperature is greater than chilled water supply temperature setpoint less offset" + annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 if have_WSE + "Difference between predicted heat exchanger leaving water temperature and chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{60,80},{80,100}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant noWSE( + final k=false) if not have_WSE "Replacement signal for no WSE case" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3( + final k=VHeaExcDes_flow) if have_WSE + "Design heat exchanger chiller water flow rate" + annotation (Placement(transformation(extent={{-220,20},{-200,40}}))); + +equation + connect(reaToInt.y, yIni) + annotation (Line(points={{182,40},{200,40},{200,0},{250,0}}, color={255,127,0})); + connect(sub1.y,hys1. u) + annotation (Line(points={{-78,90},{-62,90}}, color={0,0,127})); + connect(noWSE.y,swi. u2) + annotation (Line(points={{-38,50},{-20,50},{-20,90},{58,90}}, + color={255,0,255})); + connect(hys1.y,swi. u2) + annotation (Line(points={{-38,90},{58,90}}, color={255,0,255})); + connect(wseTOut.TOutWet,TOutWet) + annotation (Line(points={{-162,38},{-180,38},{-180,70},{-260,70}}, + color={0,0,127})); + connect(con3.y,wseTOut. VChiWat_flow) + annotation (Line(points={{-198,30},{-162,30}}, + color={0,0,127})); + connect(wseTOut.uTunPar,uTunPar) + annotation (Line(points={{-162,22},{-180,22},{-180,0},{-260,0}}, + color={0,0,127})); + connect(TChiWatSupSet,sub1. u1) + annotation (Line(points={{-260,110},{-170,110},{-170,96},{-102,96}}, + color={0,0,127})); + connect(staZer.y,swi. u1) + annotation (Line(points={{22,110},{40,110},{40,98},{58,98}}, color={0,0,127})); + connect(uUp, intToRea.u) annotation (Line(points={{-260,-40},{-100,-40},{-100, + 0},{-62,0}}, color={255,127,0})); + connect(swi.y, reaToInt.u) annotation (Line(points={{82,90},{140,90},{140,40}, + {158,40}}, color={0,0,127})); + connect(intToRea.y, triSam.u) + annotation (Line(points={{-38,0},{-12,0}}, color={0,0,127})); + connect(triSam.y, swi.u3) + annotation (Line(points={{12,0},{40,0},{40,82},{58,82}}, color={0,0,127})); + connect(uPla, edg.u) + annotation (Line(points={{-260,-90},{-62,-90}}, color={255,0,255})); + connect(edg.y, triSam.trigger) + annotation (Line(points={{-38,-90},{0,-90},{0,-12}}, color={255,0,255})); + connect(wseTOut.y, sub1.u2) annotation (Line(points={{-138,30},{-120,30},{ + -120,84},{-102,84}}, color={0,0,127})); +annotation (defaultComponentName = "iniSta", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Line( + points={{-54,-50},{-2,-50},{-2,54},{50,54}}, + color={244,125,35}, + thickness=0.5), + Text( + extent={{-68,-44},{58,-114}}, + textColor={0,0,0}, + lineThickness=0.5, + textString="At Enable")}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-240,-140},{240,140}})), +Documentation(info=" +

                      +This subsequence is not directly specified in Guideline36-2021 as it provides a side +calculation pertaining to generalization of the staging sequences for any +number of chillers and stages provided by the user. +

                      +

                      +Determines the initial stage upon plant startup for both plants with and +without a WSE. It is implemented according to section 5.20.4.15 of Guideline36-2021, +under part g. (primary-only) and part p. (primary-secondary) plants. +

                      +

                      +The initial stage yIni is defined as: +

                      +

                      +When the plant is enabled and the plant has no waterside economizer +(have_WSE=false), the initial stage will be the lowest available +stage uUp. +

                      +

                      +When the plant is enabled and the plant has waterside economizer +(have_WSE=true), the initial stage will be: +

                      + +

                      +The following state machine chart illustrates the initial stage selection for plants with a waterside economizer: +

                      +

                      +\"Image +

                      +", +revisions=" +
                        +
                      • +January 19, 2021, by Milica Grahovac:
                        +Added state chart illustration. +
                      • +
                      • +March 12, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end Initial; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/PartLoadRatios.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/PartLoadRatios.mo new file mode 100644 index 00000000000..b839e75eb61 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/PartLoadRatios.mo @@ -0,0 +1,731 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences; +block PartLoadRatios + "Operating and staging part load ratios with chiller type reset" + + parameter Boolean anyVsdCen = true + "Plant contains at least one variable speed centrifugal chiller"; + + parameter Integer nSta = 3 + "Number of chiller stages, does not include zero stage"; + + parameter Real posDisMult( + final unit = "1", + final min = 0, + final max = 1)=0.8 + "Positive displacement chiller type staging multiplier"; + + parameter Real conSpeCenMult( + final unit = "1", + final min = 0, + final max = 1)=0.9 + "Constant speed centrifugal chiller type staging multiplier"; + + parameter Real anyOutOfScoMult( + final unit = "1", + final min = 0, + final max = 1)=0.9 + "Outside of G36 recommended staging order chiller type SPLR multiplier" + annotation(Evaluate=true, __cdl(ValueInReference=False)); + + parameter Real varSpeStaMin( + final unit = "1", + final min = 0.1, + final max = 1)=0.45 + "Minimum stage up or down part load ratio for variable speed centrifugal stage types" + annotation(Evaluate=true, Dialog(enable=anyVsdCen)); + + parameter Real varSpeStaMax( + final unit = "1", + final min = varSpeStaMin, + final max = 1)=0.9 + "Maximum stage up or down part load ratio for variable speed centrifugal stage types" + annotation(Evaluate=true, Dialog(enable=anyVsdCen)); + + parameter Real avePer( + final unit="s", + final quantity="Time")=300 + "Moving mean time period for staging multiplier calculation for variable speed centrifugal stage types" + annotation(Evaluate=true, Dialog(enable=anyVsdCen)); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput u( + final min=0, + final max=nSta) "Chiller stage" + annotation (Placement(transformation(extent={{-420,220},{-380,260}}), + iconTransformation(extent={{-140,-140},{-100,-100}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uUp( + final min=0, + final max=nSta) "Next available stage up" + annotation ( + Placement(transformation(extent={{-420,180},{-380,220}}), + iconTransformation(extent={{-140,-160},{-100,-120}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uDown( + final min=0, + final max=nSta) "Next available stage down" + annotation ( + Placement(transformation(extent={{-420,20},{-380,60}}), + iconTransformation(extent={{-140,-180},{-100,-140}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uTyp[nSta]( + final min=fill(1, nSta), + final max=fill(3, nSta)) "Design chiller stage types" + annotation (Placement( + transformation(extent={{-420,280},{-380,320}}), iconTransformation( + extent={{-140,-100},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uUpCapDes( + final unit="W", + final quantity="HeatFlowRate") + "Design capacity of the next available stage up" + annotation (Placement(transformation(extent={{-420,-200},{-380,-160}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uCapReq( + final unit="W", + final quantity="HeatFlowRate") + "Chilled water cooling capacity requirement" + annotation (Placement(transformation(extent={{-420,-30},{-380,10}}), + iconTransformation(extent={{-140,120},{-100,160}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uCapDes( + final unit="W", + final quantity="HeatFlowRate") + "Design capacity of the current stage" + annotation (Placement(transformation(extent={{-420,-100},{-380,-60}}), + iconTransformation(extent={{-140,100},{-100,140}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uUpCapMin( + final unit="W", + final quantity="HeatFlowRate") + "Minimal capacity of the next available stage up" + annotation (Placement(transformation(extent={{-420,-300},{-380,-260}}), + iconTransformation(extent={{-140,10},{-100,50}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uDowCapDes( + final unit="W", + final quantity="HeatFlowRate") + "Design capacity of next available stage down" + annotation (Placement(transformation(extent={{-420,-150},{-380,-110}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uLifMin( + final unit="K", + final quantity="TemperatureDifference") if anyVsdCen + "Minimum chiller lift" + annotation (Placement(transformation(extent={{-420,-450},{-380,-410}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uLifMax( + final unit="K", + final quantity="TemperatureDifference") if anyVsdCen + "Maximum chiller lift" + annotation (Placement(transformation(extent={{-420,-380},{-380,-340}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uLif( + final unit="K", + final quantity="TemperatureDifference") if anyVsdCen + "Chiller lift" + annotation (Placement(transformation(extent={{-420,-590},{-380,-550}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uCapMin( + final unit="W", + final quantity="HeatFlowRate") + "Minimal capacity of the current stage" + annotation (Placement(transformation(extent={{-420,-240},{-380,-200}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOpeUp(final unit="1", + final min=0) "Operating part load ratio of the next higher stage" + annotation (Placement(transformation(extent={{380,-140},{420,-100}}), + iconTransformation(extent={{100,40},{140,80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOpeDow(final unit="1", + final min=0) "Operating part load ratio of the next stage down" + annotation (Placement(transformation(extent={{380,-100},{420,-60}}), + iconTransformation(extent={{100,20},{140,60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOpeMin(final unit="1", + final min=0) "Minimum operating part load ratio at current stage" + annotation (Placement(transformation(extent={{380,-220},{420,-180}}), + iconTransformation(extent={{100,-90},{140,-50}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOpe( + final unit="1", + final min=0) "Operating part load ratio of the current stage" + annotation ( + Placement(transformation(extent={{380,-60},{420,-20}}), + iconTransformation(extent={{100,60},{140,100}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yStaDow( + final unit="1", + final min = 0) + "Staging down part load ratio" + annotation (Placement(transformation(extent={{380,-180},{420,-140}}), + iconTransformation(extent={{100,-50},{140,-10}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yStaUp( + final unit="1", + final min = 0) + "Staging up part load ratio" + annotation (Placement(transformation(extent={{380,-20},{420,20}}), + iconTransformation(extent={{100,-30},{140,10}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOpeUpMin( + final unit="1", + final min=0) + "Minimum operating part load ratio of the next available stage up" + annotation (Placement(transformation(extent={{380,-260},{420,-220}}), + iconTransformation(extent={{100,-110},{140,-70}}))); + +protected + final parameter Real small = Buildings.Controls.OBC.CDL.Constants.small + "Small number to avoid division with zero"; + + Buildings.Controls.OBC.CDL.Reals.Divide opePlrSta + "Calculates operating part load ratio at the current stage" + annotation (Placement(transformation(extent={{-200,-60},{-180,-40}}))); + + Buildings.Controls.OBC.CDL.Routing.IntegerExtractor extCurTyp( + final nin=nSta) "Extract current stage type" + annotation (Placement(transformation(extent={{-120,290},{-100,310}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant one( + final k=1) "Stage 1" + annotation (Placement(transformation(extent={{-360,130},{-340,150}}))); + + Buildings.Controls.OBC.CDL.Routing.IntegerExtractor extUpTyp( + final nin=nSta) + "Extract stage type for the first higher available stage" + annotation (Placement(transformation(extent={{-120,200},{-100,220}}))); + + Buildings.Controls.OBC.CDL.Routing.IntegerExtractor extDowTyp( + final nin=nSta) + "Extract stage type for the first lower available stage" + annotation (Placement(transformation(extent={{-120,110},{-100,130}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi + "Logical switch" + annotation (Placement(transformation(extent={{200,140},{220,160}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conSpeCenTyp( + final k=Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.constantSpeedCentrifugal) + "Stage type with any constant speed centrifugal chillers" + annotation (Placement(transformation(extent={{-20,130},{0,150}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant posDisTyp( + final k=Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement) + "Stage type with none but positive displacement chillers" + annotation (Placement(transformation(extent={{-20,70},{0,90}}))); + + Buildings.Controls.OBC.CDL.Integers.Equal intEqu "Equality" + annotation (Placement(transformation(extent={{60,160},{80,180}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant posDisTypMult( + final k=posDisMult) + "Positive displacement chiller type SPLR multiplier" + annotation (Placement(transformation(extent={{-140,-120},{-120,-100}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conSpeCenTypMult( + final k=conSpeCenMult) + "Constant speed centrifugal chiller type SPLR multiplier" + annotation (Placement(transformation(extent={{-140,-40},{-120,-20}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Logical switch" + annotation (Placement(transformation(extent={{160,60},{180,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Logical switch" + annotation (Placement(transformation(extent={{100,-190},{120,-170}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Logical switch" + annotation (Placement(transformation(extent={{60,-240},{80,-220}}))); + + Buildings.Controls.OBC.CDL.Integers.Equal intEqu1 "Logical equality" + annotation (Placement(transformation(extent={{60,100},{80,120}}))); + + Buildings.Controls.OBC.CDL.Integers.Equal intEqu2 "Logical equality" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + + Buildings.Controls.OBC.CDL.Reals.Divide minOpePlrUp + "Calculates minimum OPLR of one stage up" + annotation (Placement(transformation(extent={{-200,-200},{-180,-180}}))); + + Buildings.Controls.OBC.CDL.Reals.Divide opePlrUp + "Calculates operating part load ratio at the next stage up" + annotation (Placement(transformation(extent={{-200,-150},{-180,-130}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const( + final k=0.9) if anyVsdCen "Constant" + annotation (Placement(transformation(extent={{-200,-360},{-180,-340}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 + if anyVsdCen "Subtract" + annotation (Placement(transformation(extent={{-80,-420},{-60,-400}}))); + + Buildings.Controls.OBC.CDL.Reals.Divide div if anyVsdCen + "Division" + annotation (Placement(transformation(extent={{-20,-370},{0,-350}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const1( + final k=0.4) if anyVsdCen "Constant" + annotation (Placement(transformation(extent={{-200,-480},{-180,-460}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const2( + final k=1.4) if anyVsdCen "Constant" + annotation (Placement(transformation(extent={{-200,-560},{-180,-540}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 + if anyVsdCen "Subtract" + annotation (Placement(transformation(extent={{-80,-500},{-60,-480}}))); + + Buildings.Controls.OBC.CDL.Reals.Multiply mult0 if anyVsdCen "Multiplier" + annotation (Placement(transformation(extent={{-140,-460},{-120,-440}}))); + + Buildings.Controls.OBC.CDL.Reals.Multiply mult1 if anyVsdCen "Multiplier" + annotation (Placement(transformation(extent={{-140,-540},{-120,-520}}))); + + Buildings.Controls.OBC.CDL.Reals.Multiply mult2 if anyVsdCen "Multiplier" + annotation (Placement(transformation(extent={{40,-440},{60,-420}}))); + + Buildings.Controls.OBC.CDL.Reals.Multiply mult3 if anyVsdCen "Multiplier" + annotation (Placement(transformation(extent={{100,-510},{120,-490}}))); + + Buildings.Controls.OBC.CDL.Reals.Add add3 if anyVsdCen "Add" + annotation (Placement(transformation(extent={{160,-482},{180,-462}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const3( + final k=-1) if not anyVsdCen + "Constant" + annotation (Placement(transformation(extent={{100,20},{120,40}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const4( + final k=-1) if not anyVsdCen + "Constant" + annotation (Placement(transformation(extent={{0,-260},{20,-240}}))); + + Buildings.Controls.OBC.CDL.Utilities.Assert cheStaTyp( + final message="Recommended staging order got violated or an unlisted chiller type got provided when staging up") + "Chiller type outside of recommenation when staging up" + annotation (Placement(transformation(extent={{300,280},{320,300}}))); + + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( + final t=-0.5) + "Less than threshold" + annotation (Placement(transformation(extent={{260,200},{280,220}}))); + + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( + final t=-0.5) "Less than threshold" + annotation (Placement(transformation(extent={{200,-110},{220,-90}}))); + + Buildings.Controls.OBC.CDL.Reals.Divide opePlrDow + "Calculates operating part load ratio of the next stage down" + annotation (Placement(transformation(extent={{-200,-90},{-180,-70}}))); + + Buildings.Controls.OBC.CDL.Reals.Divide minOpePlr + "Calculates minimum OPLR of the current stage" + annotation (Placement(transformation(extent={{-200,-240},{-180,-220}}))); + + Buildings.Controls.OBC.CDL.Integers.Equal intEqu3 "Integer equal" + annotation (Placement(transformation(extent={{60,240},{80,260}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "Switch" + annotation (Placement(transformation(extent={{160,-170},{180,-150}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const5( + final k=1) + "If staging down to stage 0 set staging down part load to 1" + annotation (Placement(transformation(extent={{100,-150},{120,-130}}))); + + Buildings.Controls.OBC.CDL.Integers.Equal intEqu4 "Equality" + annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); + + Buildings.Controls.OBC.CDL.Integers.Max maxInt "Maximum" + annotation (Placement(transformation(extent={{-300,260},{-280,280}}))); + + Buildings.Controls.OBC.CDL.Integers.Max maxIntUp "Maximum" + annotation (Placement(transformation(extent={{-300,170},{-280,190}}))); + + Buildings.Controls.OBC.CDL.Integers.Max maxIntDown "Maximum" + annotation (Placement(transformation(extent={{-300,60},{-280,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max if anyVsdCen "Maximum" + annotation (Placement(transformation(extent={{220,-420},{240,-400}}))); + + Buildings.Controls.OBC.CDL.Reals.Min min if anyVsdCen "Minimum" + annotation (Placement(transformation(extent={{260,-380},{280,-360}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxLim( + final k=varSpeStaMax) if anyVsdCen "Constant" + annotation (Placement(transformation(extent={{160,-360},{180,-340}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minLim( + final k=varSpeStaMin) if anyVsdCen "Constant" + annotation (Placement(transformation(extent={{160,-420},{180,-400}}))); + + Buildings.Controls.OBC.CDL.Utilities.Assert cheStaTyp1( + final message="Recommended staging order got violated or an unlisted chiller type got provided when staging down") + "Chiller type outside of recommenation when staging down" + annotation (Placement(transformation(extent={{260,-20},{280,0}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conSpeCenTypMult1( + final k=anyOutOfScoMult) + "Outside of G36 recommended staging order chiller type SPLR multiplier" + annotation (Placement(transformation(extent={{200,20},{220,40}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi5 + "Logical switch" + annotation (Placement(transformation(extent={{320,220},{340,240}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch swi6 + "Logical switch" + annotation (Placement(transformation(extent={{260,-110},{280,-90}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant smaNum( + final k=small) "Small constant" + annotation (Placement(transformation(extent={{-360,-54},{-340,-34}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max1 + "Maximum output to avoid zero denominator in downstream" + annotation (Placement(transformation(extent={{-300,-60},{-280,-40}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max2 + "Maximum output to avoid zero denominator in downstream" + annotation (Placement(transformation(extent={{-300,-110},{-280,-90}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max3 + "Maximum output to avoid zero denominator in downstream" + annotation (Placement(transformation(extent={{-300,-170},{-280,-150}}))); + + Buildings.Controls.OBC.CDL.Reals.MovingAverage movMea( + final delta=avePer) if anyVsdCen "Moving mean" + annotation (Placement(transformation(extent={{300,-330},{320,-310}}))); + + Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr[3]( + final t=fill(nSta, 3)) + "Check if index is out of the range" + annotation (Placement(transformation(extent={{-240,140},{-220,160}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi[3] + "Valid index" + annotation (Placement(transformation(extent={{-180,80},{-160,100}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt[3]( + final k=fill(nSta, 3)) + "Dummy index so the extractor will not have out of range index" + annotation (Placement(transformation(extent={{-240,230},{-220,250}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi1[3] + "Valid value" + annotation (Placement(transformation(extent={{-80,140},{-60,160}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant con[3]( + final k=fill(-1, 3)) "Dummy stage" + annotation (Placement(transformation(extent={{-180,160},{-160,180}}))); + +equation + connect(intEqu.u2, conSpeCenTyp.y) annotation (Line(points={{58,162},{10,162}, + {10,140},{2,140}}, color={255,127,0})); + connect(opePlrSta.y, yOpe) annotation (Line(points={{-178,-50},{0,-50},{0,-40}, + {400,-40}}, color={0,0,127})); + connect(posDisTyp.y, intEqu1.u2) annotation (Line(points={{2,80},{10,80},{10,102}, + {58,102}}, color={255,127,0})); + connect(intEqu1.y, swi1.u2) annotation (Line(points={{82,110},{140,110},{140,70}, + {158,70}},color={255,0,255})); + connect(swi1.y, swi.u3) annotation (Line(points={{182,70},{190,70},{190,142},{ + 198,142}}, color={0,0,127})); + connect(posDisTyp.y, intEqu2.u2) annotation (Line(points={{2,80},{10,80},{10,22}, + {18,22}}, color={255,127,0})); + connect(swi3.y, swi2.u3) annotation (Line(points={{82,-230},{90,-230},{90,-188}, + {98,-188}}, color={0,0,127})); + connect(intEqu2.y, swi3.u2) annotation (Line(points={{42,30},{50,30},{50,-230}, + {58,-230}}, color={255,0,255})); + connect(opePlrUp.y, yOpeUp) annotation (Line(points={{-178,-140},{0,-140},{0,-120}, + {400,-120}}, color={0,0,127})); + connect(minOpePlrUp.y, yOpeUpMin) annotation (Line(points={{-178,-190},{-60,-190}, + {-60,-280},{240,-280},{240,-240},{400,-240}}, color={0,0,127})); + connect(uLifMin, sub2.u2) annotation (Line(points={{-400,-430},{-240,-430},{-240, + -416},{-82,-416}}, color={0,0,127})); + connect(const.y, div.u1) annotation (Line(points={{-178,-350},{-40,-350},{-40, + -354},{-22,-354}}, color={0,0,127})); + connect(sub2.y, div.u2) annotation (Line(points={{-58,-410},{-40,-410},{-40,-366}, + {-22,-366}}, color={0,0,127})); + connect(const1.y, mult0.u2) annotation (Line(points={{-178,-470},{-160,-470},{ + -160,-456},{-142,-456}}, color={0,0,127})); + connect(uLifMax, mult0.u1) annotation (Line(points={{-400,-360},{-220,-360},{-220, + -444},{-142,-444}}, color={0,0,127})); + connect(uLifMin, mult1.u1) annotation (Line(points={{-400,-430},{-240,-430},{-240, + -524},{-142,-524}}, + color={0,0,127})); + connect(const2.y, mult1.u2) annotation (Line(points={{-178,-550},{-160,-550},{ + -160,-536},{-142,-536}}, color={0,0,127})); + connect(mult0.y, sub1.u1) annotation (Line(points={{-118,-450},{-110,-450},{-110, + -484},{-82,-484}}, color={0,0,127})); + connect(mult1.y, sub1.u2) annotation (Line(points={{-118,-530},{-108,-530},{-108, + -496},{-82,-496}}, color={0,0,127})); + connect(div.y, mult2.u1) annotation (Line(points={{2,-360},{20,-360},{20,-424}, + {38,-424}}, color={0,0,127})); + connect(sub1.y, mult2.u2) annotation (Line(points={{-58,-490},{20,-490},{20,-436}, + {38,-436}}, color={0,0,127})); + connect(div.y, mult3.u1) annotation (Line(points={{2,-360},{80,-360},{80,-494}, + {98,-494}}, + color={0,0,127})); + connect(uLif, mult3.u2) annotation (Line(points={{-400,-570},{80,-570},{80,-506}, + {98,-506}}, color={0,0,127})); + connect(mult3.y, add3.u2) annotation (Line(points={{122,-500},{130,-500},{130, + -478},{158,-478}}, color={0,0,127})); + connect(mult2.y, add3.u1) annotation (Line(points={{62,-430},{140,-430},{140,-466}, + {158,-466}}, color={0,0,127})); + connect(swi.y,greThr. u) annotation (Line(points={{222,150},{248,150},{248,210}, + {258,210}}, color={0,0,127})); + connect(uLifMax, sub2.u1) annotation (Line(points={{-400,-360},{-220,-360},{-220, + -404},{-82,-404}}, color={0,0,127})); + connect(opePlrDow.y, yOpeDow) + annotation (Line(points={{-178,-80},{400,-80}}, color={0,0,127})); + connect(minOpePlr.y, yOpeMin) annotation (Line(points={{-178,-230},{-40,-230}, + {-40,-200},{400,-200}}, color={0,0,127})); + connect(conSpeCenTypMult.y, swi.u1) annotation (Line(points={{-118,-30},{0,-30}, + {0,-20},{96,-20},{96,158},{198,158}}, color={0,0,127})); + connect(posDisTypMult.y, swi1.u1) annotation (Line(points={{-118,-110},{-20,-110}, + {-20,50},{40,50},{40,78},{158,78}}, color={0,0,127})); + connect(posDisTypMult.y, swi3.u1) annotation (Line(points={{-118,-110},{-20,-110}, + {-20,-222},{58,-222}}, color={0,0,127})); + connect(conSpeCenTypMult.y, swi2.u1) annotation (Line(points={{-118,-30},{40,-30}, + {40,-172},{98,-172}},color={0,0,127})); + connect(conSpeCenTyp.y, intEqu3.u2) annotation (Line(points={{2,140},{10,140}, + {10,242},{58,242}}, color={255,127,0})); + connect(intEqu3.y, swi2.u2) annotation (Line(points={{82,250},{90,250},{90,-180}, + {98,-180}},color={255,0,255})); + connect(uCapMin, minOpePlr.u1) annotation (Line(points={{-400,-220},{-300,-220}, + {-300,-224},{-202,-224}}, color={0,0,127})); + connect(uUpCapMin, minOpePlrUp.u1) annotation (Line(points={{-400,-280},{-220, + -280},{-220,-184},{-202,-184}}, color={0,0,127})); + connect(intEqu.y, swi.u2) annotation (Line(points={{82,170},{160,170},{160,150}, + {198,150}}, color={255,0,255})); + connect(const4.y, swi3.u3) annotation (Line(points={{22,-250},{40,-250},{40,-238}, + {58,-238}}, color={0,0,127})); + connect(const3.y, swi1.u3) annotation (Line(points={{122,30},{140,30},{140,62}, + {158,62}}, color={0,0,127})); + connect(swi2.y, swi4.u3) annotation (Line(points={{122,-180},{140,-180},{140,-168}, + {158,-168}}, color={0,0,127})); + connect(const5.y, swi4.u1) annotation (Line(points={{122,-140},{140,-140},{140, + -152},{158,-152}}, color={0,0,127})); + connect(u, intEqu4.u2) annotation (Line(points={{-400,240},{-330,240},{-330,2}, + {-142,2}}, color={255,127,0})); + connect(one.y, intEqu4.u1) annotation (Line(points={{-338,140},{-320,140},{-320, + 10},{-142,10}}, color={255,127,0})); + connect(intEqu4.y, swi4.u2) annotation (Line(points={{-118,10},{20,10},{20,-160}, + {158,-160}}, color={255,0,255})); + connect(one.y, maxInt.u2) annotation (Line(points={{-338,140},{-320,140},{-320, + 264},{-302,264}}, color={255,127,0})); + connect(u, maxInt.u1) annotation (Line(points={{-400,240},{-330,240},{-330,276}, + {-302,276}}, color={255,127,0})); + connect(one.y, maxIntUp.u2) annotation (Line(points={{-338,140},{-320,140},{-320, + 174},{-302,174}}, color={255,127,0})); + connect(uUp, maxIntUp.u1) annotation (Line(points={{-400,200},{-340,200},{-340, + 186},{-302,186}}, color={255,127,0})); + connect(one.y, maxIntDown.u1) annotation (Line(points={{-338,140},{-320,140},{ + -320,76},{-302,76}}, color={255,127,0})); + connect(uDown, maxIntDown.u2) annotation (Line(points={{-400,40},{-340,40},{-340, + 64},{-302,64}}, color={255,127,0})); + connect(add3.y, max.u2) annotation (Line(points={{182,-472},{200,-472},{200,-416}, + {218,-416}}, color={0,0,127})); + connect(minLim.y, max.u1) annotation (Line(points={{182,-410},{200,-410},{200, + -404},{218,-404}}, color={0,0,127})); + connect(max.y, min.u2) annotation (Line(points={{242,-410},{250,-410},{250,-376}, + {258,-376}}, color={0,0,127})); + connect(maxLim.y, min.u1) annotation (Line(points={{182,-350},{220,-350},{220, + -364},{258,-364}}, color={0,0,127})); + connect(swi4.y, greThr1.u) annotation (Line(points={{182,-160},{192,-160},{192, + -100},{198,-100}}, color={0,0,127})); + connect(swi.y, swi5.u1) annotation (Line(points={{222,150},{240,150},{240,238}, + {318,238}}, color={0,0,127})); + connect(greThr.y, swi5.u2) annotation (Line(points={{282,210},{290,210},{290,230}, + {318,230}}, color={255,0,255})); + connect(greThr.y, cheStaTyp.u) annotation (Line(points={{282,210},{290,210},{290, + 290},{298,290}}, color={255,0,255})); + connect(conSpeCenTypMult1.y, swi5.u3) annotation (Line(points={{222,30},{300,30}, + {300,222},{318,222}}, color={0,0,127})); + connect(swi5.y, yStaUp) annotation (Line(points={{342,230},{354,230},{354,0}, + {400,0}},color={0,0,127})); + connect(swi6.y, yStaDow) annotation (Line(points={{282,-100},{290,-100},{290,-160}, + {400,-160}}, color={0,0,127})); + connect(greThr1.y, swi6.u2) + annotation (Line(points={{222,-100},{258,-100}}, color={255,0,255})); + connect(swi4.y, swi6.u1) annotation (Line(points={{182,-160},{240,-160},{240,-92}, + {258,-92}}, color={0,0,127})); + connect(conSpeCenTypMult1.y, swi6.u3) annotation (Line(points={{222,30},{250,30}, + {250,-108},{258,-108}}, color={0,0,127})); + connect(greThr1.y, cheStaTyp1.u) annotation (Line(points={{222,-100},{230,-100}, + {230,-10},{258,-10}}, color={255,0,255})); + connect(max1.y, opePlrSta.u2) annotation (Line(points={{-278,-50},{-240,-50}, + {-240,-56},{-202,-56}}, color={0,0,127})); + connect(smaNum.y, max1.u1) annotation (Line(points={{-338,-44},{-302,-44}}, + color={0,0,127})); + connect(max1.y, minOpePlr.u2) annotation (Line(points={{-278,-50},{-260,-50},{ + -260,-236},{-202,-236}}, color={0,0,127})); + connect(max2.y, opePlrDow.u2) annotation (Line(points={{-278,-100},{-240,-100}, + {-240,-86},{-202,-86}}, color={0,0,127})); + connect(smaNum.y, max2.u1) annotation (Line(points={{-338,-44},{-320,-44},{-320, + -94},{-302,-94}}, color={0,0,127})); + connect(uDowCapDes, max2.u2) annotation (Line(points={{-400,-130},{-330,-130}, + {-330,-106},{-302,-106}}, color={0,0,127})); + connect(max3.y, opePlrUp.u2) annotation (Line(points={{-278,-160},{-240,-160}, + {-240,-146},{-202,-146}}, color={0,0,127})); + connect(max3.y, minOpePlrUp.u2) annotation (Line(points={{-278,-160},{-240, + -160},{-240,-196},{-202,-196},{-202,-196}}, color={0,0,127})); + connect(smaNum.y, max3.u1) annotation (Line(points={{-338,-44},{-320,-44},{-320, + -154},{-302,-154}}, color={0,0,127})); + connect(uUpCapDes, max3.u2) annotation (Line(points={{-400,-180},{-320,-180},{ + -320,-166},{-302,-166}}, color={0,0,127})); + connect(uCapDes, max1.u2) annotation (Line(points={{-400,-80},{-330,-80},{-330, + -56},{-302,-56}}, color={0,0,127})); + connect(uCapReq, opePlrSta.u1) annotation (Line(points={{-400,-10},{-220,-10}, + {-220,-44},{-202,-44}}, color={0,0,127})); + connect(uCapReq, opePlrDow.u1) annotation (Line(points={{-400,-10},{-220,-10}, + {-220,-74},{-202,-74}}, color={0,0,127})); + connect(uCapReq, opePlrUp.u1) annotation (Line(points={{-400,-10},{-220,-10},{ + -220,-134},{-202,-134}}, color={0,0,127})); + connect(min.y, movMea.u) annotation (Line(points={{282,-370},{290,-370},{290,-320}, + {298,-320}}, color={0,0,127})); + connect(movMea.y, swi3.u3) annotation (Line(points={{322,-320},{340,-320},{340, + -300},{50,-300},{50,-238},{58,-238}}, color={0,0,127})); + connect(movMea.y, swi1.u3) annotation (Line(points={{322,-320},{340,-320},{340, + -260},{150,-260},{150,62},{158,62}}, color={0,0,127})); + connect(uTyp, extCurTyp.u) + annotation (Line(points={{-400,300},{-122,300}}, color={255,127,0})); + connect(uTyp, extUpTyp.u) annotation (Line(points={{-400,300},{-140,300},{ + -140,210},{-122,210}}, color={255,127,0})); + connect(uTyp, extDowTyp.u) annotation (Line(points={{-400,300},{-140,300},{-140, + 120},{-122,120}}, color={255,127,0})); + connect(maxInt.y, intGreThr[1].u) annotation (Line(points={{-278,270},{-260,270}, + {-260,150},{-242,150}}, color={255,127,0})); + connect(intGreThr.y, intSwi.u2) annotation (Line(points={{-218,150},{-190,150}, + {-190,90},{-182,90}}, color={255,0,255})); + connect(maxInt.y, intSwi[1].u3) annotation (Line(points={{-278,270},{-200,270}, + {-200,82},{-182,82}}, color={255,127,0})); + connect(intSwi[1].y, extCurTyp.index) annotation (Line(points={{-158,90},{-150, + 90},{-150,280},{-110,280},{-110,288}}, color={255,127,0})); + connect(maxIntUp.y, intGreThr[2].u) annotation (Line(points={{-278,180},{-260, + 180},{-260,150},{-242,150}}, color={255,127,0})); + connect(conInt.y, intSwi.u1) annotation (Line(points={{-218,240},{-210,240},{-210, + 98},{-182,98}}, color={255,127,0})); + connect(intSwi[2].y, extUpTyp.index) annotation (Line(points={{-158,90},{-150, + 90},{-150,190},{-110,190},{-110,198}}, color={255,127,0})); + connect(maxIntDown.y, intGreThr[3].u) annotation (Line(points={{-278,70},{-260, + 70},{-260,150},{-242,150}}, color={255,127,0})); + connect(maxIntUp.y, intSwi[2].u3) annotation (Line(points={{-278,180},{-200,180}, + {-200,82},{-182,82}}, color={255,127,0})); + connect(intSwi[3].y, extDowTyp.index) annotation (Line(points={{-158,90},{-110, + 90},{-110,108}}, color={255,127,0})); + connect(maxIntDown.y, intSwi[3].u3) annotation (Line(points={{-278,70},{-200,70}, + {-200,82},{-182,82}}, color={255,127,0})); + connect(intGreThr.y, intSwi1.u2) + annotation (Line(points={{-218,150},{-82,150}}, color={255,0,255})); + connect(con.y, intSwi1.u1) annotation (Line(points={{-158,170},{-100,170},{-100, + 158},{-82,158}}, color={255,127,0})); + connect(extCurTyp.y, intSwi1[1].u3) annotation (Line(points={{-98,300},{-90,300}, + {-90,142},{-82,142}}, color={255,127,0})); + connect(extUpTyp.y, intSwi1[2].u3) annotation (Line(points={{-98,210},{-90,210}, + {-90,142},{-82,142}}, color={255,127,0})); + connect(extDowTyp.y, intSwi1[3].u3) annotation (Line(points={{-98,120},{-90,120}, + {-90,142},{-82,142}}, color={255,127,0})); + connect(intSwi1[1].y, intEqu3.u1) annotation (Line(points={{-58,150},{-50,150}, + {-50,250},{58,250}}, color={255,127,0})); + connect(intSwi1[1].y, intEqu1.u1) annotation (Line(points={{-58,150},{-50,150}, + {-50,110},{58,110}}, color={255,127,0})); + connect(intSwi1[2].y, intEqu.u1) annotation (Line(points={{-58,150},{-40,150}, + {-40,170},{58,170}}, color={255,127,0})); + connect(intSwi1[3].y, intEqu2.u1) annotation (Line(points={{-58,150},{-40,150}, + {-40,30},{18,30}}, color={255,127,0})); + annotation (defaultComponentName = "PLRs", + Icon(coordinateSystem(extent={{-100,-200},{100,200}}), graphics={ + Text( + extent={{-100,240},{100,200}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-100,-200},{100,200}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-60,36},{64,-42}}, + textColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="PLR")}), Diagram( + coordinateSystem(preserveAspectRatio=false, + extent={{-380,-600},{380,340}})), +Documentation(info=" +

                      +Calculates operative part load ratios (OPLR) per sections 5.20.4.5, section 5.20.4.9, +section 5.20.4.10 and stage part load ratios (SPLR, up or down) per section 5.20.4.14 +of Guideline36-2021. +

                      +

                      +OPLR is a ratio of the current capacity requirement to a given design or minimal +stage capacity, such as: +

                      +
                        +
                      • +Current stage design OPLR(y). +
                      • +
                      • +Current stage minimal OPLR(yMin). +
                      • +
                      • +Next available higher stage nominal OPLR(yUp). +
                      • +
                      • +Next available higher stage minimal OPLR(yUpMin). +
                      • +
                      +

                      +SPLRup yStaUp or SPLRdown yStaDown value depends on the +stage type staTyp as indicated in the table below. +Note that the rules are prioritized by stage type column, from left to right +

                      +

                      +The stage type is determined by the + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Configurator +subsequence based on the type of chillers staged. +

                      + + + + + + + + + + + + + + + + + + + + + + + + +
                      Row: Stage / Column: Stage TypeAny Constant Speed CentrifugalAll Positive DisplacementAny Variable Speed and no Constant Speed Centrifugal
                      Next Available UpyStaUp=conSpeCenMultN/A>N/A
                      CurrentyStaDown=conSpeCenMultyStaUp=posDisMultyStaUp=f(uLif, uLifMin, uLifMax)
                      Next Available DownN/AyStaDown=posDisMultyStaDown=f(uLif, uLifMin, uLifMax)
                      +

                      +For operation outside of the recommended staging order as provided in the table +above a constant SPLRup and SPLRdown value anyOutOfScoMult is set to prevent +simulation interruption, accompanied with a warning. +

                      +", +revisions=" +
                        +
                      • +January 03, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end PartLoadRatios; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Status.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Status.mo new file mode 100644 index 00000000000..05ac2491338 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Status.mo @@ -0,0 +1,377 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences; +block Status + "Outputs current stage chiller index vector, current, next available lower and higher stage index and whether curent stage is the lowest and/or the highest available stage" + + parameter Integer nSta = 3 + "Number of chiller stages, does not include zero stage"; + + parameter Integer nChi = 2 + "Number of chillers"; + + parameter Integer staMat[nSta, nChi] = {{1,0},{0,1},{1,1}} + "Staging matrix with stages in rows and chillers in columns"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uAva[nSta]( + final start = fill(true, nSta)) "Stage availability status" + annotation (Placement(transformation(extent={{-460,-100},{-420,-60}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput u( + final min=0, + final max=nSta, + final start = 0) "Current chiller stage" + annotation (Placement(transformation(extent={{-460,60},{-420,100}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yHig + "If true current stage is the highest available stage" + annotation (Placement(transformation(extent={{440,20},{480,60}}), + iconTransformation(extent={{100,-30},{140,10}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLow + "If true current stage is the lowest available stage" + annotation (Placement(transformation(extent={{440,-110},{480,-70}}), + iconTransformation(extent={{100,-60},{140,-20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yAvaCur + "Current stage availability status" + annotation (Placement(transformation(extent={{440,-260},{480,-220}}), + iconTransformation(extent={{100,-90},{140,-50}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yAvaUp( + final min=0, + final max=nSta) + "Next available higher stage" + annotation (Placement(transformation(extent={{440,60},{480,100}}), + iconTransformation(extent={{100,50},{140,90}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yAvaDow( + final min=0, + final max=nSta) + "Next available lower stage" + annotation (Placement(transformation(extent={{440,-60},{480,-20}}), + iconTransformation(extent={{100,20},{140,60}}))); + +protected + final parameter Integer staInd[nSta] = {i for i in 1:nSta} + "Stage index vector"; + + final parameter Integer staIndMat[nSta, nChi] = {j for i in 1:nChi, j in 1:nSta} + "Matrix of staging matrix dimensions with stage indices in each column"; + + final parameter Integer lowDia[nSta, nSta] = {if i<=j then 1 else 0 for i in 1:nSta, j in 1:nSta} + "Lower diagonal unit matrix"; + + Buildings.Controls.OBC.CDL.Logical.Not not1 "Not unavailable" + annotation (Placement(transformation(extent={{-60,-180},{-40,-160}}))); + + Buildings.Controls.OBC.CDL.Integers.Switch intSwi2 "Switch" + annotation (Placement(transformation(extent={{260,-220},{280,-200}}))); + + Buildings.Controls.OBC.CDL.Integers.Switch intSwi3 "Switch" + annotation (Placement(transformation(extent={{360,70},{380,90}}))); + + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep( + final nout=nSta) "Replicates signal to a length equal the stage count" + annotation (Placement(transformation(extent={{-300,190},{-280,210}}))); + + Buildings.Controls.OBC.CDL.Integers.Multiply proInt1[nSta] + "Outputs a vector of stage indices for any available stage above the current stage" + annotation (Placement(transformation(extent={{-60,100},{-40,120}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staIndx[nSta]( + final k=staInd) "Stage index vector" + annotation (Placement(transformation(extent={{-240,120},{-220,140}}))); + + Buildings.Controls.OBC.CDL.Integers.Greater intGre[nSta] + "Identifies stages that are above the current stage" + annotation (Placement(transformation(extent={{-180,80},{-160,100}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1[nSta]( + final integerTrue=fill(1, nSta), + final integerFalse=fill(nSta + 1, nSta)) + "Type converter that outputs a value larger than the stage count for any false input" + annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); + + Buildings.Controls.OBC.CDL.Logical.And and2[nSta] + "Identifies any available stages above the current stage" + annotation (Placement(transformation(extent={{-140,70},{-120,90}}))); + + Buildings.Controls.OBC.CDL.Reals.MultiMin multiMin( + final nin=nSta) + "Minimum of a vector input" + annotation (Placement(transformation(extent={{20,100},{40,120}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea1[nSta] + "Type converter" + annotation (Placement(transformation(extent={{-20,100},{0,120}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Type converter" + annotation (Placement(transformation(extent={{60,100},{80,120}}))); + + Buildings.Controls.OBC.CDL.Integers.Less intLes[nSta] + "Identifies stages that are below the current stage" + annotation (Placement(transformation(extent={{-180,-80},{-160,-60}}))); + + Buildings.Controls.OBC.CDL.Logical.And and1[nSta] + "Identifies any available stage below the current stage" + annotation (Placement(transformation(extent={{-140,-100},{-120,-80}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt2[nSta]( + integerTrue=fill(1, nSta), integerFalse=fill(0, nSta)) + "Type converter that outputs zero for any false input" + annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); + + Buildings.Controls.OBC.CDL.Integers.Multiply proInt2[nSta] + "Outputs vector of stage indices for any available stage below the current stage" + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea3[nSta] + "Type converter" + annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); + + Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax( + final nin=nSta) + "Maximum of a vector input" + annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Type converter" + annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); + + Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr( + final t=nSta) "True if there are no higher available stages" + annotation (Placement(transformation(extent={{100,100},{120,120}}))); + + Buildings.Controls.OBC.CDL.Integers.Switch intSwi + "If no higher stage is available, output current stage" + annotation (Placement(transformation(extent={{180,100},{200,120}}))); + + Buildings.Controls.OBC.CDL.Integers.LessEqualThreshold intLesEquThr( + final t=0) + "If the current stage is the lowest available the input value equals 0" + annotation (Placement(transformation(extent={{100,-80},{120,-60}}))); + + Buildings.Controls.OBC.CDL.Integers.Switch intSwi1 "Logical switch" + annotation (Placement(transformation(extent={{180,-80},{200,-60}}))); + + Buildings.Controls.OBC.CDL.Routing.BooleanExtractor extStaAva( + final nin=nSta) "Extracts stage availability for the current stage" + annotation (Placement(transformation(extent={{-200,-140},{-180,-120}}))); + + Buildings.Controls.OBC.CDL.Utilities.Assert cheStaAva1( + final message="There are no available chiller stages. The staging cannot be performed.") + "Checks if any stage is available" + annotation (Placement(transformation(extent={{-320,-50},{-300,-30}}))); + + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr( + final nin=nSta) "Logical or" + annotation (Placement(transformation(extent={{-360,-50},{-340,-30}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=0) "Zero" + annotation (Placement(transformation(extent={{100,-40},{120,-20}}))); + + Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" + annotation (Placement(transformation(extent={{220,70},{240,90}}))); + + Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold intGreEquThr( + final t=1) + "Check if index is in the range" + annotation (Placement(transformation(extent={{-380,-120},{-360,-100}}))); + Buildings.Controls.OBC.CDL.Integers.LessEqualThreshold intLesEquThr1( + final t=nSta) + "Check if index is in the range" + annotation (Placement(transformation(extent={{-380,-200},{-360,-180}}))); + Buildings.Controls.OBC.CDL.Logical.And and3 "Check if index is in the range" + annotation (Placement(transformation(extent={{-320,-120},{-300,-100}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1( + final k=1) + "Dummy index so the extractor will not have out of range index" + annotation (Placement(transformation(extent={{-320,-200},{-300,-180}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi4 "Valid index" + annotation (Placement(transformation(extent={{-260,-160},{-240,-140}}))); + Buildings.Controls.OBC.CDL.Logical.And and5 "Chiller availability" + annotation (Placement(transformation(extent={{-140,-180},{-120,-160}}))); + +equation + connect(staIndx.y, intGre.u1) annotation (Line(points={{-218,130},{-200,130},{ + -200,90},{-182,90}}, color={255,127,0})); + connect(intRep.y, intGre.u2) annotation (Line(points={{-278,200},{-260,200},{ + -260,82},{-182,82}}, color={255,127,0})); + connect(intGre.y, and2.u1) annotation (Line(points={{-158,90},{-150,90},{-150, + 80},{-142,80}},color={255,0,255})); + connect(uAva, and2.u2) annotation (Line(points={{-440,-80},{-220,-80},{-220,72}, + {-142,72}}, color={255,0,255})); + connect(staIndx.y, proInt1.u1) annotation (Line(points={{-218,130},{-70,130},{ + -70,116},{-62,116}}, color={255,127,0})); + connect(booToInt1.y, proInt1.u2) annotation (Line(points={{-78,80},{-70,80},{-70, + 104},{-62,104}}, color={255,127,0})); + connect(proInt1.y, intToRea1.u) + annotation (Line(points={{-38,110},{-22,110}}, color={255,127,0})); + connect(intToRea1.y, multiMin.u) annotation (Line(points={{2,110},{18,110}}, + color={0,0,127})); + connect(intRep.y, intLes.u2) annotation (Line(points={{-278,200},{-260,200},{ + -260,-78},{-182,-78}}, color={255,127,0})); + connect(staIndx.y, intLes.u1) annotation (Line(points={{-218,130},{-200,130},{ + -200,-70},{-182,-70}}, color={255,127,0})); + connect(uAva, and1.u2) annotation (Line(points={{-440,-80},{-220,-80},{-220,-98}, + {-142,-98}}, color={255,0,255})); + connect(intLes.y, and1.u1) annotation (Line(points={{-158,-70},{-150,-70},{-150, + -90},{-142,-90}}, color={255,0,255})); + connect(proInt2.y, intToRea3.u) + annotation (Line(points={{-38,-70},{-22,-70}}, color={255,127,0})); + connect(intToRea3.y, multiMax.u) annotation (Line(points={{2,-70},{18,-70}}, + color={0,0,127})); + connect(staIndx.y, proInt2.u1) annotation (Line(points={{-218,130},{-200,130}, + {-200,-40},{-70,-40},{-70,-64},{-62,-64}}, color={255,127,0})); + connect(booToInt2.y, proInt2.u2) annotation (Line(points={{-78,-90},{-70,-90}, + {-70,-76},{-62,-76}}, color={255,127,0})); + connect(multiMax.y, reaToInt1.u) + annotation (Line(points={{42,-70},{58,-70}}, color={0,0,127})); + connect(multiMin.y, reaToInt.u) + annotation (Line(points={{42,110},{58,110}}, color={0,0,127})); + connect(reaToInt.y, intGreThr.u) + annotation (Line(points={{82,110},{98,110}}, color={255,127,0})); + connect(intGreThr.y, intSwi.u2) + annotation (Line(points={{122,110},{178,110}}, color={255,0,255})); + connect(intGreThr.y, yHig) annotation (Line(points={{122,110},{140,110},{140,40}, + {460,40}}, color={255,0,255})); + connect(reaToInt1.y, intLesEquThr.u) + annotation (Line(points={{82,-70},{98,-70}}, color={255,127,0})); + connect(intLesEquThr.y, intSwi1.u2) + annotation (Line(points={{122,-70},{178,-70}}, color={255,0,255})); + connect(intLesEquThr.y, yLow) annotation (Line(points={{122,-70},{140,-70},{140, + -90},{460,-90}}, color={255,0,255})); + connect(and2.y, booToInt1.u) + annotation (Line(points={{-118,80},{-102,80}}, color={255,0,255})); + connect(intGreThr.y, and4.u1) + annotation (Line(points={{122,110},{140,110},{140,80},{218,80}}, + color={255,0,255})); + connect(and4.y, intSwi3.u2) + annotation (Line(points={{242,80},{358,80}}, color={255,0,255})); + connect(uAva, mulOr.u) annotation (Line(points={{-440,-80},{-380,-80},{-380,-40}, + {-362,-40}}, color={255,0,255})); + connect(mulOr.y, cheStaAva1.u) + annotation (Line(points={{-338,-40},{-322,-40}}, color={255,0,255})); + connect(and1.y, booToInt2.u) + annotation (Line(points={{-118,-90},{-102,-90}}, color={255,0,255})); + connect(u, intRep.u) annotation (Line(points={{-440,80},{-400,80},{-400,200},{ + -302,200}}, color={255,127,0})); + connect(conInt.y, intSwi1.u1) annotation (Line(points={{122,-30},{160,-30},{160, + -62},{178,-62}}, color={255,127,0})); + connect(intSwi1.y, yAvaDow) annotation (Line(points={{202,-70},{320,-70},{320, + -40},{460,-40}}, color={255,127,0})); + connect(intSwi1.y, intSwi2.u1) annotation (Line(points={{202,-70},{220,-70},{220, + -202},{258,-202}}, color={255,127,0})); + connect(intSwi2.y, intSwi3.u1) annotation (Line(points={{282,-210},{350,-210}, + {350,88},{358,88}}, color={255,127,0})); + connect(u, intSwi2.u3) annotation (Line(points={{-440,80},{-400,80},{-400,-218}, + {258,-218}}, color={255,127,0})); + connect(intSwi.y, intSwi3.u3) annotation (Line(points={{202,110},{340,110},{340, + 72},{358,72}}, color={255,127,0})); + connect(u, intSwi.u1) annotation (Line(points={{-440,80},{-400,80},{-400,160}, + {160,160},{160,118},{178,118}}, color={255,127,0})); + connect(reaToInt.y, intSwi.u3) annotation (Line(points={{82,110},{90,110},{90, + 90},{160,90},{160,102},{178,102}}, color={255,127,0})); + connect(reaToInt1.y, intSwi1.u3) annotation (Line(points={{82,-70},{90,-70},{90, + -100},{170,-100},{170,-78},{178,-78}}, color={255,127,0})); + connect(intSwi3.y, yAvaUp) + annotation (Line(points={{382,80},{460,80}}, color={255,127,0})); + connect(uAva, extStaAva.u) annotation (Line(points={{-440,-80},{-220,-80},{-220, + -130},{-202,-130}}, color={255,0,255})); + connect(not1.y, intSwi2.u2) annotation (Line(points={{-38,-170},{210,-170},{210, + -210},{258,-210}},color={255,0,255})); + connect(not1.y, and4.u2) annotation (Line(points={{-38,-170},{210,-170},{210,72}, + {218,72}}, color={255,0,255})); + connect(u, intGreEquThr.u) annotation (Line(points={{-440,80},{-400,80},{-400, + -110},{-382,-110}}, color={255,127,0})); + connect(u, intLesEquThr1.u) annotation (Line(points={{-440,80},{-400,80},{-400, + -190},{-382,-190}}, color={255,127,0})); + connect(intGreEquThr.y, and3.u1) + annotation (Line(points={{-358,-110},{-322,-110}}, color={255,0,255})); + connect(intLesEquThr1.y, and3.u2) annotation (Line(points={{-358,-190},{-340,-190}, + {-340,-118},{-322,-118}}, color={255,0,255})); + connect(intSwi4.y, extStaAva.index) annotation (Line(points={{-238,-150},{-190, + -150},{-190,-142}}, color={255,127,0})); + connect(and3.y, intSwi4.u2) annotation (Line(points={{-298,-110},{-280,-110},{ + -280,-150},{-262,-150}}, color={255,0,255})); + connect(u, intSwi4.u1) annotation (Line(points={{-440,80},{-400,80},{-400,-142}, + {-262,-142}}, color={255,127,0})); + connect(conInt1.y, intSwi4.u3) annotation (Line(points={{-298,-190},{-290,-190}, + {-290,-158},{-262,-158}}, color={255,127,0})); + connect(extStaAva.y, and5.u1) annotation (Line(points={{-178,-130},{-160,-130}, + {-160,-170},{-142,-170}}, color={255,0,255})); + connect(and5.y, not1.u) + annotation (Line(points={{-118,-170},{-62,-170}}, color={255,0,255})); + connect(and5.y, yAvaCur) annotation (Line(points={{-118,-170},{-100,-170},{-100, + -240},{460,-240}}, color={255,0,255})); + connect(and3.y, and5.u2) annotation (Line(points={{-298,-110},{-280,-110},{-280, + -178},{-142,-178}}, color={255,0,255})); + annotation (defaultComponentName = "sta", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name")}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-420,-280},{440,280}})), +Documentation(info=" +

                      +This subsequence is not directly specified in Guideline36-2021 as it provides a +side calculation pertaining to generalization of the staging sequences for any +number of chillers and stages provided by the user. +

                      +

                      +Based on the current stage u and stage availability vector +uAva the sequence outputs: +

                      +
                        +
                      • +Integer indices of: the current stage y, first available higher stage +yUp and the first available lower stage yDown. +
                      • +
                      • +Boolean status outputs to show if the current operating stage u is: +
                          +
                        • +Available, u +
                        • +
                        • +The highest available stage, yHig +
                        • +
                        • +The lowest available stage, yLow +
                        • +
                        +
                      • +
                      +

                      +The purpose of this sequence is to: +

                      +
                        +
                      • +Provide inputs for the stage up and down conditionals such that staging into +unavailable stages is avoided. +
                      • +
                      • +Change the stage to the first available higher stage in an event that the current +stage becomes unavailable. +
                      • +
                      +", +revisions=" +
                        +
                      • +June 10, 2019, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end Status; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Up.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Up.mo new file mode 100644 index 00000000000..f78f6447f97 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Up.mo @@ -0,0 +1,383 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences; +block Up "Generates a stage up signal" + parameter Boolean have_WSE = true + "true = plant has a WSE, false = plant does not have WSE"; + + parameter Boolean have_serChi = false + "true = series chillers plant; false = parallel chillers plant"; + + parameter Boolean have_locSen=false + "Flag of local DP sensor: true=local DP sensor hardwired to controller" + annotation (Dialog(enable=not have_serChi)); + + parameter Integer nRemSen=2 + "Total number of remote differential pressure sensors" + annotation (Dialog(enable=not have_serChi)); + + parameter Real effConTruDelay( + final unit="s", + final quantity="Time")=900 + "Enable delay for efficiency condition"; + + parameter Real faiSafTruDelay( + final unit="s", + final quantity="Time")=900 + "Enable delay for failsafe condition"; + + parameter Real shortTDelay( + final unit="s", + final quantity="Time")=600 + "Short enable delay for staging from zero to first available stage up" + annotation(Evaluate=true, Dialog(enable=have_WSE)); + + parameter Real longTDelay( + final unit="s", + final quantity="Time")=1200 + "Long enable delay for staging from zero to first available stage up" + annotation(Evaluate=true, Dialog(enable=have_WSE)); + + parameter Real faiSafTDif( + final unit="K", + final quantity="TemperatureDifference")=1 + "Offset between the chilled water supply temperature and its setpoint"; + + parameter Real TDifHys( + final unit="K", + final quantity="TemperatureDifference")=1 + "Hysteresis deadband for temperature"; + + parameter Real smallTDif( + final unit="K", + final quantity="TemperatureDifference")=1 + "Offset between the chilled water supply temperature and its setpoint for the long condition" + annotation(Evaluate=true, Dialog(enable=have_WSE)); + + parameter Real largeTDif( + final unit="K", + final quantity="TemperatureDifference")=2 + "Offset between the chilled water supply temperature and its setpoint for the short condition" + annotation(Evaluate=true, Dialog(enable=have_WSE)); + + parameter Real faiSafDpDif( + final unit="Pa", + final quantity="PressureDifference", + displayUnit="Pa")=2 * 6895 + "Offset between the chilled water differential pressure and its setpoint"; + + parameter Real dpDifHys( + final unit="Pa", + final quantity="PressureDifference", + displayUnit="Pa")=0.5 * 6895 + "Pressure difference hysteresis deadband"; + + parameter Real effConSigDif( + final min=0, + final max=1, + final unit="1") = 0.05 + "Signal hysteresis deadband"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uAvaCur + "Current stage availability status" + annotation (Placement(transformation(extent={{-200,0},{-160,40}}), + iconTransformation(extent={{-140,-90},{-100,-50}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput u + "Chiller stage" + annotation (Placement(transformation(extent={{-200,-120},{-160,-80}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uOpe( + final unit="1") + "Operating part load ratio of the current stage" + annotation (Placement(transformation(extent={{-200,180},{-160,220}}), + iconTransformation(extent={{-140,90},{-100,130}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uStaUp( + final unit="1") + "Staging part load ratio of the next stage up" + annotation (Placement(transformation(extent={{-200,150},{-160,190}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPumSet_local( + final unit="Pa", + final quantity="PressureDifference") + if (not have_serChi) and have_locSen + "Chilled water pump Diferential static pressure setpoint for local sensor" + annotation (Placement(transformation(extent={{-200,120},{-160,160}}), + iconTransformation(extent={{-140,10},{-100,50}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPum_local( + final unit="Pa", + final quantity="PressureDifference") if (not have_serChi) and have_locSen + "Chilled water pump Diferential static pressure" + annotation (Placement(transformation(extent={{-200,90},{-160,130}}), + iconTransformation(extent={{-140,-10},{-100,30}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPumSet_remote[nRemSen]( + final unit=fill("Pa", nRemSen), + final quantity=fill("PressureDifference",nRemSen)) + if (not have_serChi) and (not have_locSen) + "Chilled water differential pressure setpoint for remote sensor" + annotation (Placement(transformation(extent={{-200,60},{-160,100}}), + iconTransformation(extent={{-140,-30},{-100,10}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatPum_remote[nRemSen]( + final unit=fill("Pa", nRemSen), + final quantity=fill("PressureDifference",nRemSen)) + if (not have_serChi) and (not have_locSen) + "Chilled water differential pressure from remote sensor" + annotation (Placement(transformation(extent={{-200,30},{-160,70}}), + iconTransformation(extent={{-140,-50},{-100,-10}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final unit="K", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-200,-50},{-160,-10}}), + iconTransformation(extent={{-140,50},{-100,90}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup( + final unit="K", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-200,-90},{-160,-50}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enable signal" + annotation (Placement(transformation(extent={{-200,-200},{-160,-160}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y "Stage up signal" + annotation (Placement(transformation(extent={{160,-200},{200,-160}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.FailsafeCondition faiSafCon( + final have_serChi=have_serChi, + final faiSafTruDelay=faiSafTruDelay, + final have_locSen=have_locSen, + final nRemSen=nRemSen, + final TDif=faiSafTDif, + final TDifHys=TDifHys, + final dpDif=faiSafDpDif, + final dpDifHys=dpDifHys) + "Failsafe condition of the current stage" + annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.EfficiencyCondition effCon( + final effConTruDelay = effConTruDelay, + final sigDif=effConSigDif) + "Efficiency condition of the current stage" + annotation (Placement(transformation(extent={{-100,170},{-80,190}}))); + + Buildings.Controls.OBC.CDL.Logical.Or orStaUp + "Or for staging up" + annotation (Placement(transformation(extent={{20,110},{40,130}}))); + + Buildings.Controls.OBC.CDL.Logical.Or or2 + "Or for staging up" + annotation (Placement(transformation(extent={{-40,110},{-20,130}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch logSwi "Logical switch" + annotation (Placement(transformation(extent={{80,70},{100,90}}))); + + Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr if have_WSE + "Switches staging up rules" + annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysTSup( + final uLow=smallTDif - TDifHys, + final uHigh=smallTDif, + final pre_y_start=false) if have_WSE + "Checks if the chilled water supply temperature is higher than its setpoint plus an offset" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysTSup1( + final uLow=largeTDif - TDifHys, + final uHigh=largeTDif, + final pre_y_start=false) if have_WSE + "Checks if the chilled water supply temperature is higher than its setpoint plus an offset" + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + + Buildings.Controls.OBC.CDL.Logical.Or orStaUp1 if have_WSE + "Or for staging up" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 if have_WSE + "Temperature difference" + annotation (Placement(transformation(extent={{-120,-40},{-100,-20}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=longTDelay, + final delayOnInit=true) + if have_WSE + "Delays a true signal" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel1( + final delayTime=shortTDelay, + final delayOnInit=true) + if have_WSE + "Delays a true signal" + annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant noWSE( + final k=true) if not have_WSE + "Replacement signal for when a plant does not have a WSE" + annotation (Placement(transformation(extent={{-20,70},{0,90}}))); + + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + + Buildings.Controls.OBC.CDL.Logical.Switch logSwi1 + "Logical switch" + annotation (Placement(transformation(extent={{120,-190},{140,-170}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant noUp( + final k=false) + "No stage up signal when it is in initial stage" + annotation (Placement(transformation(extent={{40,-150},{60,-130}}))); + + Buildings.Controls.OBC.CDL.Logical.Latch lat + "If it is in initial stage, there will be stage up signal when enabling plant" + annotation (Placement(transformation(extent={{40,-190},{60,-170}}))); + +equation + connect(uOpe, effCon.uOpe) annotation (Line(points={{-180,200},{-150,200},{-150, + 185},{-102,185}},color={0,0,127})); + connect(uStaUp, effCon.uStaUp) annotation (Line(points={{-180,170},{-150,170}, + {-150,175},{-102,175}},color={0,0,127})); + connect(TChiWatSupSet, faiSafCon.TChiWatSupSet) annotation (Line(points={{-180, + -30},{-140,-30},{-140,109},{-102,109}}, color={0,0,127})); + connect(TChiWatSup, faiSafCon.TChiWatSup) annotation (Line(points={{-180,-70}, + {-130,-70},{-130,106},{-102,106}}, color={0,0,127})); + connect(dpChiWatPumSet_local, faiSafCon.dpChiWatPumSet_local) annotation ( + Line(points={{-180,140},{-120,140},{-120,101},{-102,101}}, color={0,0,127})); + connect(dpChiWatPum_local, faiSafCon.dpChiWatPum_local) annotation (Line( + points={{-180,110},{-150,110},{-150,98},{-102,98}}, color={0,0,127})); + connect(intGreThr.y, logSwi.u2) annotation (Line(points={{-98,-100},{20,-100}, + {20,80},{78,80}}, color={255,0,255})); + connect(orStaUp.y, logSwi.u1) annotation (Line(points={{42,120},{60,120},{60,88}, + {78,88}}, color={255,0,255})); + connect(sub1.y, hysTSup1.u) + annotation (Line(points={{-98,-30},{-80,-30},{-80,-60},{-62,-60}}, color={0,0,127})); + connect(hysTSup.y, truDel.u) + annotation (Line(points={{-38,0},{-22,0}}, color={255,0,255})); + connect(hysTSup1.y, truDel1.u) + annotation (Line(points={{-38,-60},{-22,-60}}, color={255,0,255})); + connect(truDel.y, orStaUp1.u1) annotation (Line(points={{2,0},{38,0}}, + color={255,0,255})); + connect(truDel1.y, orStaUp1.u2) annotation (Line(points={{2,-60},{10,-60},{10, + -8},{38,-8}}, color={255,0,255})); + connect(orStaUp1.y, logSwi.u3) annotation (Line(points={{62,0},{70,0},{70,72}, + {78,72}}, color={255,0,255})); + connect(noWSE.y, logSwi.u2) + annotation (Line(points={{2,80},{78,80}}, color={255,0,255})); + connect(noWSE.y, logSwi.u3) annotation (Line(points={{2,80},{30,80},{30,72},{78, + 72}}, color={255,0,255})); + connect(u, intGreThr.u) + annotation (Line(points={{-180,-100},{-122,-100}}, color={255,127,0})); + connect(sub1.y, hysTSup.u) annotation (Line(points={{-98,-30},{-80,-30},{-80, + 0},{-62,0}}, + color={0,0,127})); + connect(TChiWatSup, sub1.u1) annotation (Line(points={{-180,-70},{-130,-70},{ + -130,-24},{-122,-24}}, + color={0,0,127})); + connect(TChiWatSupSet, sub1.u2) annotation (Line(points={{-180,-30},{-140,-30}, + {-140,-36},{-122,-36}}, color={0,0,127})); + connect(uAvaCur, not1.u) + annotation (Line(points={{-180,20},{-122,20}}, color={255,0,255})); + connect(dpChiWatPumSet_remote, faiSafCon.dpChiWatPumSet_remote) annotation ( + Line(points={{-180,80},{-150,80},{-150,94},{-102,94}}, color={0,0,127})); + connect(dpChiWatPum_remote, faiSafCon.dpChiWatPum_remote) annotation (Line( + points={{-180,50},{-120,50},{-120,91},{-102,91}}, color={0,0,127})); + connect(lat.y, logSwi1.u2) + annotation (Line(points={{62,-180},{118,-180}}, color={255,0,255})); + connect(logSwi.y, logSwi1.u3) annotation (Line(points={{102,80},{110,80},{110, + -188},{118,-188}}, color={255,0,255})); + connect(logSwi1.y, y) + annotation (Line(points={{142,-180},{180,-180}}, color={255,0,255})); + connect(noUp.y, logSwi1.u1) annotation (Line(points={{62,-140},{100,-140},{100, + -172},{118,-172}}, color={255,0,255})); + connect(logSwi.y, lat.clr) annotation (Line(points={{102,80},{110,80},{110,-110}, + {20,-110},{20,-186},{38,-186}}, color={255,0,255})); + connect(not1.y, orStaUp.u2) annotation (Line(points={{-98,20},{10,20},{10,112}, + {18,112}}, color={255,0,255})); + connect(faiSafCon.y, or2.u2) annotation (Line(points={{-78,100},{-60,100},{-60, + 112},{-42,112}}, color={255,0,255})); + connect(effCon.y, or2.u1) annotation (Line(points={{-78,180},{-60,180},{-60,120}, + {-42,120}}, color={255,0,255})); + connect(or2.y, orStaUp.u1) + annotation (Line(points={{-18,120},{18,120}}, color={255,0,255})); + connect(uPla, lat.u) + annotation (Line(points={{-180,-180},{38,-180}}, color={255,0,255})); + annotation (defaultComponentName = "staUp", + Icon(coordinateSystem(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={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name"), + Rectangle(extent={{-80,-10},{-20,-22}}, lineColor={0,0,127}), + Rectangle(extent={{-80,-28},{-20,-40}}, lineColor={0,0,127}), + Rectangle(extent={{-76,-22},{-72,-28}}, lineColor={0,0,127}), + Rectangle(extent={{-28,-22},{-24,-28}}, lineColor={0,0,127}), + Rectangle(extent={{20,-10},{80,-22}}, lineColor={0,0,127}), + Rectangle(extent={{20,-28},{80,-40}}, lineColor={0,0,127}), + Rectangle(extent={{24,-22},{28,-28}}, lineColor={0,0,127}), + Rectangle(extent={{72,-22},{76,-28}}, lineColor={0,0,127}), + Rectangle(extent={{20,30},{80,18}}, lineColor={0,0,127}), + Rectangle(extent={{20,12},{80,0}}, lineColor={0,0,127}), + Rectangle(extent={{24,18},{28,12}}, lineColor={0,0,127}), + Rectangle(extent={{72,18},{76,12}}, lineColor={0,0,127}), + Line(points={{130,-48}}, color={0,0,127})}), Diagram( + coordinateSystem(preserveAspectRatio=false, + extent={{-160,-220},{160,220}})), +Documentation(info=" +

                      +Outputs a boolean stage up signal y based on the various plant +operation conditions that get provided as input signals. +It is implemented according to Guideline36-2021, section 5.20.4.15 and applies to +primary-only plant with and without a WSE. +

                      +

                      +The stage up signal becomes true when: +

                      +
                        +
                      • +Current stage becomes unavailable, or +
                      • +
                      • +Efficiency condition is true, or +
                      • +
                      • +Failsafe condition is true. +
                      • +
                      +

                      +If have_WSE boolean flag is true, staging up from WSE only to the first +available stage occurs when the chilled water supply temperature is sufficienctly +above its setpoint for either a shorter or a longer time period +

                      +

                      +Note that when the plant is enabled in chiller mode, the stage up signal will keep +false. The plant will control by the + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Enable. +

                      +", +revisions=" +
                        +
                      • +March 15, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +")); +end Up; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_u.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_u.mo new file mode 100644 index 00000000000..495d658e2d5 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_u.mo @@ -0,0 +1,162 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model Capacities_u + "Validate stage capacities subsequence for chiller stage inputs" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Capacities + staCap0(final nSta=3) + "Outputs design capacitites at the current and stage one lower" + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Capacities + staCap1(final nSta=3) + "Outputs design capacitites at the current and stage one lower" + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Capacities + staCap2(final nSta=3) + "Outputs design capacitites at the current and stage one lower" + annotation (Placement(transformation(extent={{60,0},{80,20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Capacities + staCap3(final nSta=3) + "Outputs design capacitites at the current and stage one lower" + annotation (Placement(transformation(extent={{140,0},{160,20}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desStaCap[3]( + final k={2e5,1e6,1.5e6}) "Design stage capacities" + annotation (Placement(transformation(extent={{-140,100},{-120,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minStaCap[3]( + final k={4e4,2e5,3e5}) "Minimum stage capacities" + annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage0(final k=0) + "Chiller stage" + annotation (Placement(transformation(extent={{-140,20},{-120,40}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage1(final k=1) + "Chiller stage" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage2(final k=2) + "Chiller stage" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con(final k=true) + "Boolean signal" + annotation (Placement(transformation(extent={{-140,-100},{-120,-80}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage3(final k=3) + "Chiller stage" + annotation (Placement(transformation(extent={{100,20},{120,40}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage4(final k=3) + "Chiller stage" + annotation (Placement(transformation(extent={{100,-20},{120,0}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage5(final k=3) + "Chiller stage" + annotation (Placement(transformation(extent={{20,-20},{40,0}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage6(final k=3) + "Chiller stage" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage7(final k=1) + "Chiller stage" + annotation (Placement(transformation(extent={{-140,-20},{-120,0}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1(final k=false) + "Boolean signal" + annotation (Placement(transformation(extent={{-140,-60},{-120,-40}}))); + +equation + connect(stage0.y, staCap0.u) + annotation (Line(points={{-118,30},{-110,30},{-110,13},{-102,13}}, + color={255,127,0})); + connect(stage1.y, staCap1.u) + annotation (Line(points={{-38,30},{-30,30},{-30,13},{-22,13}}, + color={255,127,0})); + connect(stage2.y, staCap2.u) + annotation (Line(points={{42,30},{50,30},{50,13},{58,13}}, color={255,127,0})); + connect(stage3.y, staCap3.u) annotation (Line(points={{122,30},{130,30},{130,13}, + {138,13}}, color={255,127,0})); + connect(stage0.y, staCap0.uDown) annotation (Line(points={{-118,30},{-110,30}, + {-110,7},{-102,7}}, color={255,127,0})); + connect(staCap0.uUp, stage7.y) annotation (Line(points={{-102,10},{-116,10},{-116, + -10},{-118,-10}}, color={255,127,0})); + connect(stage0.y, staCap1.uDown) annotation (Line(points={{-118,30},{-70,30},{ + -70,7},{-22,7}}, color={255,127,0})); + connect(stage6.y, staCap1.uUp) annotation (Line(points={{-38,-10},{-30,-10},{-30, + 10},{-22,10}}, color={255,127,0})); + connect(stage1.y, staCap2.uDown) annotation (Line(points={{-38,30},{10,30},{10, + 7},{58,7}}, color={255,127,0})); + connect(staCap2.uUp, stage5.y) annotation (Line(points={{58,10},{50,10},{50,-10}, + {42,-10}}, color={255,127,0})); + connect(stage2.y, staCap3.uDown) annotation (Line(points={{42,30},{90,30},{90, + 7},{138,7}}, color={255,127,0})); + connect(staCap3.uUp, stage4.y) annotation (Line(points={{138,10},{130,10},{130, + -10},{122,-10}}, color={255,127,0})); + connect(desStaCap.y, staCap0.uDesCap) annotation (Line(points={{-118,110},{ + -106,110},{-106,19},{-102,19}}, color={0,0,127})); + connect(minStaCap.y, staCap0.uMinCap) annotation (Line(points={{-118,70},{-108, + 70},{-108,16},{-102,16}}, color={0,0,127})); + connect(desStaCap.y, staCap1.uDesCap) annotation (Line(points={{-118,110},{ + -24,110},{-24,19},{-22,19}}, color={0,0,127})); + connect(minStaCap.y, staCap1.uMinCap) annotation (Line(points={{-118,70},{-26, + 70},{-26,16},{-22,16}}, color={0,0,127})); + connect(desStaCap.y, staCap2.uDesCap) annotation (Line(points={{-118,110},{54, + 110},{54,19},{58,19}}, color={0,0,127})); + connect(minStaCap.y, staCap2.uMinCap) annotation (Line(points={{-118,70},{52,70}, + {52,16},{58,16}}, color={0,0,127})); + connect(desStaCap.y, staCap3.uDesCap) annotation (Line(points={{-118,110},{ + 134,110},{134,19},{138,19}}, color={0,0,127})); + connect(staCap3.uMinCap, minStaCap.y) annotation (Line(points={{138,16},{132,16}, + {132,70},{-118,70}}, color={0,0,127})); + connect(con1.y, staCap1.uHig) annotation (Line(points={{-118,-50},{-28,-50},{-28, + 4},{-22,4}}, color={255,0,255})); + connect(con.y, staCap1.uLow) annotation (Line(points={{-118,-90},{-26,-90},{-26, + 1},{-22,1}}, color={255,0,255})); + connect(staCap0.uHig, con1.y) annotation (Line(points={{-102,4},{-110,4},{-110, + -50},{-118,-50}}, color={255,0,255})); + connect(staCap0.uLow, con.y) annotation (Line(points={{-102,1},{-108,1},{-108, + -90},{-118,-90}}, color={255,0,255})); + connect(con1.y, staCap2.uHig) annotation (Line(points={{-118,-50},{52,-50},{52, + 4},{58,4}}, color={255,0,255})); + connect(con1.y, staCap2.uLow) annotation (Line(points={{-118,-50},{54,-50},{54, + 1},{58,1}}, color={255,0,255})); + connect(con.y, staCap3.uHig) annotation (Line(points={{-118,-90},{132,-90},{132, + 4},{138,4}}, color={255,0,255})); + connect(con1.y, staCap3.uLow) annotation (Line(points={{-118,-50},{134,-50},{134, + 1},{138,1}}, color={255,0,255})); +annotation ( + experiment(StopTime=10.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_u.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Capacities. +

                      +", revisions=" +
                        +
                      • +January 15, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-180,-120},{180,140}}))); +end Capacities_u; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_uLow_uHig.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_uLow_uHig.mo new file mode 100644 index 00000000000..d55254e547e --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_uLow_uHig.mo @@ -0,0 +1,126 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model Capacities_uLow_uHig + "Validate stage capacities subsequence for highest and lowest available stage inputs" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Capacities + staCap0(final nSta=3) + "Nominal capacitites at the current and stage one lower" + annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Capacities + staCap1(final nSta=3) + "Nominal capacitites at the current and stage one lower" + annotation (Placement(transformation(extent={{20,0},{40,20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Capacities + staCap2(final nSta=3) + "Nominal capacitites at the current and stage one lower" + annotation (Placement(transformation(extent={{100,0},{120,20}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desStaCap[3]( + final k={2e5,1e6,1.5e6}) "Design stage capacities" + annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minStaCap[3]( + final k={4e4,2e5,3e5}) "Minimum stage capacities" + annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage0(final k=2) + "Chiller stage" + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage2(final k=2) + "Chiller stage" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con(final k=true) + "Boolean signal" + annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage6(final k=3) + "Chiller stage" + annotation (Placement(transformation(extent={{-20,-20},{0,0}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage7(final k=1) + "Chiller stage" + annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1(final k=false) + "Boolean signal" + annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); + +equation + connect(stage0.y, staCap0.u) + annotation (Line(points={{-78,30},{-70,30},{-70,13},{-62,13}}, + color={255,127,0})); + connect(stage2.y, staCap2.u) + annotation (Line(points={{82,30},{90,30},{90,13},{98,13}}, color={255,127,0})); + connect(stage0.y, staCap1.uDown) annotation (Line(points={{-78,30},{-20,30},{-20, + 7},{18,7}}, color={255,127,0})); + connect(stage6.y, staCap1.uUp) annotation (Line(points={{2,-10},{10,-10},{10,10}, + {18,10}}, color={255,127,0})); + connect(desStaCap.y, staCap0.uDesCap) annotation (Line(points={{-78,110},{-66, + 110},{-66,19},{-62,19}}, color={0,0,127})); + connect(minStaCap.y, staCap0.uMinCap) annotation (Line(points={{-78,70},{-68,70}, + {-68,16},{-62,16}}, color={0,0,127})); + connect(desStaCap.y, staCap1.uDesCap) annotation (Line(points={{-78,110},{16, + 110},{16,19},{18,19}}, color={0,0,127})); + connect(minStaCap.y, staCap1.uMinCap) annotation (Line(points={{-78,70},{14,70}, + {14,16},{18,16}}, color={0,0,127})); + connect(desStaCap.y, staCap2.uDesCap) annotation (Line(points={{-78,110},{94, + 110},{94,19},{98,19}}, color={0,0,127})); + connect(minStaCap.y, staCap2.uMinCap) annotation (Line(points={{-78,70},{92,70}, + {92,16},{98,16}}, color={0,0,127})); + connect(con1.y, staCap1.uHig) annotation (Line(points={{-78,-50},{12,-50},{12, + 4},{18,4}}, color={255,0,255})); + connect(con.y, staCap1.uLow) annotation (Line(points={{-78,-90},{14,-90},{14,1}, + {18,1}}, color={255,0,255})); + connect(staCap0.uUp, stage0.y) annotation (Line(points={{-62,10},{-70,10},{-70, + 30},{-78,30}}, color={255,127,0})); + connect(stage7.y, staCap0.uDown) annotation (Line(points={{-78,-10},{-70,-10}, + {-70,7},{-62,7}}, color={255,127,0})); + connect(con1.y, staCap0.uLow) annotation (Line(points={{-78,-50},{-66,-50},{-66, + 1},{-62,1}}, color={255,0,255})); + connect(con.y, staCap0.uHig) annotation (Line(points={{-78,-90},{-68,-90},{-68, + 4},{-62,4}}, color={255,0,255})); + connect(con.y, staCap2.uHig) annotation (Line(points={{-78,-90},{92,-90},{92,4}, + {98,4}}, color={255,0,255})); + connect(con.y, staCap2.uLow) annotation (Line(points={{-78,-90},{94,-90},{94,1}, + {98,1}}, color={255,0,255})); + connect(stage2.y, staCap2.uUp) annotation (Line(points={{82,30},{90,30},{90,10}, + {98,10}}, color={255,127,0})); + connect(stage2.y, staCap2.uDown) annotation (Line(points={{82,30},{90,30},{90, + 7},{98,7}}, color={255,127,0})); + connect(stage0.y, staCap1.u) annotation (Line(points={{-78,30},{0,30},{0,13},{ + 18,13}}, color={255,127,0})); +annotation ( + experiment(StopTime=10.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_uLow_uHig.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Capacities. +

                      +", revisions=" +
                        +
                      • +January 15, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-120,-120},{140,140}}))); +end Capacities_uLow_uHig; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/CapacityRequirement.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/CapacityRequirement.mo new file mode 100644 index 00000000000..0cce8f4d09f --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/CapacityRequirement.mo @@ -0,0 +1,155 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model CapacityRequirement + "Validates the cooling capacity requirement calculation" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.CapacityRequirement + capReq "Capacity requirement when no stage chage occurs" + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.CapacityRequirement + capReq1 "Capacity requirement when stage change occurs and the process is shorter than 15 minutes" + annotation (Placement(transformation(extent={{20,0},{40,20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.CapacityRequirement + capReq2 "Capacity requirement when stage change occurs and the process is longer than 15 minutes" + annotation (Placement(transformation(extent={{120,0},{140,20}}))); + +protected + parameter Real TChiWatSupSet( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=285.15 + "Chilled water supply set temperature"; + + parameter Real aveTChiWatRet( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=288.15 + "Average measured chilled water return temperature"; + + parameter Real aveVChiWat_flow( + final quantity="VolumeFlowRate", + final unit="m3/s") = 0.02 + "Average measured chilled water flow rate"; + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet( + final k=TChiWatSupSet) "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-140,10},{-120,30}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatRet( + final amplitude=2, + final freqHz=1/300, + final offset=aveTChiWatRet) "Chilled water return temeprature" + annotation (Placement(transformation(extent={{-140,-30},{-120,-10}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiWatFlow( + final freqHz=1/600, + final offset=aveVChiWat_flow, + final amplitude=0.01) "Chilled water flow" + annotation (Placement(transformation(extent={{-140,-70},{-120,-50}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chaPro(final k=false) + "Stage change is not in process" + annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet1( + final k=TChiWatSupSet) "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatRet1( + final amplitude=2, + final freqHz=1/300, + final offset=aveTChiWatRet) "Chilled water return temeprature" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiWatFlow1( + final freqHz=1/600, + final offset=aveVChiWat_flow, + final amplitude=0.01) "Chilled water flow" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chaPro1( + final period=24*60, + final shift=5*60) + "Stage change process status signal" + annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet2( + final k= TChiWatSupSet) "Chilled water supply temperature" + annotation (Placement(transformation(extent={{60,10},{80,30}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatRet2( + final amplitude=2, + final freqHz=1/300, + final offset=aveTChiWatRet) "Chilled water return temeprature" + annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiWatFlow2( + final freqHz=1/600, + final offset=aveVChiWat_flow, + final amplitude=0.01) "Chilled water flow" + annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chaPro2( + final period=32*60, + final shift=5*60) + "Stage change process status signal" + annotation (Placement(transformation(extent={{60,60},{80,80}}))); + +equation + connect(TCWSupSet.y, capReq.TChiWatSupSet) annotation (Line(points={{-118,20}, + {-90,20},{-90,19},{-82,19}}, color={0,0,127})); + connect(TChiWatRet.y, capReq.TChiWatRet) annotation (Line(points={{-118,-20}, + {-100,-20},{-100,14},{-82,14}}, + color={0,0,127})); + connect(chiWatFlow.y, capReq.VChiWat_flow) annotation (Line(points={{-118,-60}, + {-88,-60},{-88,9},{-82,9}},color={0,0,127})); + connect(chaPro.y, capReq.chaPro) annotation (Line(points={{-118,70},{-86,70}, + {-86,2},{-82,2}}, color={255,0,255})); + connect(TCWSupSet1.y, capReq1.TChiWatSupSet) annotation (Line(points={{-18,20}, + {10,20},{10,19},{18,19}}, color={0,0,127})); + connect(TChiWatRet1.y, capReq1.TChiWatRet) annotation (Line(points={{-18,-20}, + {0,-20},{0,14},{18,14}}, + color={0,0,127})); + connect(chiWatFlow1.y, capReq1.VChiWat_flow) annotation (Line(points={{-18,-60}, + {12,-60},{12,9},{18,9}}, color={0,0,127})); + connect(chaPro1.y, capReq1.chaPro) annotation (Line(points={{-18,70},{14,70}, + {14,2},{18,2}}, color={255,0,255})); + connect(TCWSupSet2.y, capReq2.TChiWatSupSet) annotation (Line(points={{82,20}, + {110,20},{110,19},{118,19}}, color={0,0,127})); + connect(TChiWatRet2.y, capReq2.TChiWatRet) annotation (Line(points={{82,-20}, + {100,-20},{100,14},{118,14}}, + color={0,0,127})); + connect(chiWatFlow2.y, capReq2.VChiWat_flow) annotation (Line(points={{82,-60}, + {112,-60},{112,9},{118,9}}, color={0,0,127})); + connect(chaPro2.y, capReq2.chaPro) annotation (Line(points={{82,70},{114,70}, + {114,2},{118,2}}, color={255,0,255})); +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/CapacityRequirement.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.CapacityRequirement. +

                      +", revisions=" +
                        +
                      • +December 1, 2019, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-160,-100},{160,100}}))); +end CapacityRequirement; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Change.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Change.mo new file mode 100644 index 00000000000..dab6ca7b8f7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Change.mo @@ -0,0 +1,345 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model Change + "Validates chiller stage status setpoint signal generation for plants with WSE" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Change + cha(final nSta=10) + "Controls for stage up signal variations" + annotation (Placement(transformation(extent={{-40,180},{-20,200}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Change + cha1(final nSta=10) + "Controls for stage down signal variations" + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Change + cha2 + "Controls for stage up/stage down signal interaction" + annotation (Placement(transformation(extent={{-40,-180},{-20,-160}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol( + final trueHoldDuration=10, + final falseHoldDuration=0) + "Short true hold to have stage change edge signals be better visible" + annotation (Placement(transformation(extent={{0,120},{20,140}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol1( + final trueHoldDuration=10, + final falseHoldDuration=0) + "Short true hold to have stage change edge signals be better visible" + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol2( + final trueHoldDuration=10, + final falseHoldDuration=0) + "Short true hold to have stage change edge signals be better visible" + annotation (Placement(transformation(extent={{0,-240},{20,-220}}))); + +protected + parameter Real TChiWatSupSet( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=285.15 + "Chilled water supply set temperature"; + + parameter Real aveTChiWatRet( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=288.15 + "Average measured chilled water return temperature"; + + parameter Real minStaRuntime( + final unit="s", + final quantity="Time", + displayUnit="h")=900 + "Minimum stage runtime"; + + parameter Real aveVChiWat_flow( + final unit="m3/s", + final quantity="VolumeFlowRate", + displayUnit="m3/s")=0.05 + "Average measured chilled water flow rate"; + + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timeTable( + final table=[0,0; 600,0; 600,1; 1200,1; 1200,0; 2500,0; 2500,1; 3700,1; 3700,0; 4300, + 0; 4300,1; 4500,1; 4500,0; 6000,0; 6000,1; 9200,1; 9200,0; 12000,0; + 12000,1; 14000,1; 14000,0]) + "Stage up signal for the first exampe and stage down signal for the second example from the top" + annotation (Placement(transformation(extent={{-160,220},{-140,240}}))); + + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( + final t=0.5) "Greater than threshold" + annotation (Placement(transformation(extent={{-120,220},{-100,240}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea + "Type converter" + annotation (Placement(transformation(extent={{20,180},{40,200}}))); + + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol( + final samplePeriod=1) "Zero order hold" + annotation (Placement(transformation(extent={{60,180},{80,200}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Type converter" + annotation (Placement(transformation(extent={{100,180},{120,200}}))); + + Buildings.Controls.OBC.CDL.Integers.Add addInt + "Adder" + annotation (Placement(transformation(extent={{140,200},{160,220}}))); + + Buildings.Controls.OBC.CDL.Integers.Subtract addInt1 "Adder" + annotation (Placement(transformation(extent={{140,160},{160,180}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea1 + "Type converter" + annotation (Placement(transformation(extent={{20,0},{40,20}}))); + + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol1( + final samplePeriod=1) "Zero order hold" + annotation (Placement(transformation(extent={{60,0},{80,20}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Type converter" + annotation (Placement(transformation(extent={{100,0},{120,20}}))); + + Buildings.Controls.OBC.CDL.Integers.Add addInt2 "Adder" + annotation (Placement(transformation(extent={{140,20},{160,40}}))); + + Buildings.Controls.OBC.CDL.Integers.Subtract addInt3 "Addder" + annotation (Placement(transformation(extent={{140,-20},{160,0}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timeTable2( + final table=[0,0; 800,0; 800,1; 2700,1; 2700,0; 4500,0; 4500,1; 5200,1; 5200,0; + 6000,0; 6000,1; 6900,1; 6900,0; 7800,0; 7800,1; 8700,1; 8700,0; 12000,0; + 12000,1; 14000,1; 14000,0]) + "Stage up signal, if simultaneous stage up and down signals are generated the plant will stage down" + annotation (Placement(transformation(extent={{-160,-140},{-140,-120}}))); + + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( + final t=0.5) "Greater threshold" + annotation (Placement(transformation(extent={{-120,-140},{-100,-120}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea2 + "Type converter" + annotation (Placement(transformation(extent={{20,-180},{40,-160}}))); + + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol2( + final samplePeriod=1) "Zero order hold" + annotation (Placement(transformation(extent={{60,-180},{80,-160}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 + "Type converter" + annotation (Placement(transformation(extent={{100,-180},{120,-160}}))); + + Buildings.Controls.OBC.CDL.Integers.Add addInt4 "Adder" + annotation (Placement(transformation(extent={{140,-160},{160,-140}}))); + + Buildings.Controls.OBC.CDL.Integers.Subtract addInt5 "Adder" + annotation (Placement(transformation(extent={{140,-200},{160,-180}}))); + + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( + final t=0.5) "Greater than threshold" + annotation (Placement(transformation(extent={{-120,-180},{-100,-160}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant noStaChaSig( + final k=false) + "No stage change signal" + annotation (Placement(transformation(extent={{-200,100},{-180,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timeTable1( + final table=[0,0; 1600,0; 1600,1; 2400,1; 2400,0; 3700,0; 3700,1; 5900,1; 5900, + 0; 6900,0; 6900,1; 7800,1; 7800,0; 12000,0; 12000,1; 14000,1; 14000,0]) + "Stage down signal" + annotation (Placement(transformation(extent={{-160,-180},{-140,-160}}))); + + Buildings.Controls.OBC.CDL.Integers.Max maxInt "Maximum" + annotation (Placement(transformation(extent={{180,140},{200,160}}))); + + Buildings.Controls.OBC.CDL.Integers.Max maxInt1 "Maximum" + annotation (Placement(transformation(extent={{180,-40},{200,-20}}))); + + Buildings.Controls.OBC.CDL.Integers.Max maxInt2 "Maximum" + annotation (Placement(transformation(extent={{180,-220},{200,-200}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant uIni(final k=0) + "Chiller stage" + annotation (Placement(transformation(extent={{-120,260},{-100,280}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant step(final k=1) + "Assuming that the next available stage is always the next stage" + annotation (Placement(transformation(extent={{100,220},{120,240}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant uIni1(final k=7) + "Chiller stage" + annotation (Placement(transformation(extent={{-120,80},{-100,100}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant step1(final k=1) + "Assuming that the next available stage is always the next stage" + annotation (Placement(transformation(extent={{100,40},{120,60}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant uIni2(final k=3) + "Chiller stage" + annotation (Placement(transformation(extent={{-120,-100},{-100,-80}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant step2(final k=1) + "Assuming that the next available stage is always the next stage" + annotation (Placement(transformation(extent={{100,-140},{120,-120}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u3(final k=0) + "Chiller stage" + annotation (Placement(transformation(extent={{140,120},{160,140}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u4(final k=0) + "Chiller stage" + annotation (Placement(transformation(extent={{140,-60},{160,-40}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u5(final k=0) + "Chiller stage" + annotation (Placement(transformation(extent={{140,-240},{160,-220}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timeTable3( + final table=[0,0; 10,0; 10,1; 11000,1; 11000,0; 12000,0; 12000,1; 14000,1; + 14000,0]) "Plant enable" + annotation (Placement(transformation(extent={{-200,20},{-180,40}}))); + + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( + final t=0.5) "Greater than threshold" + annotation (Placement(transformation(extent={{-160,20},{-140,40}}))); + +equation + connect(cha.uIni, uIni.y) annotation (Line(points={{-42,200},{-60,200},{-60, + 270},{-98,270}}, color={255,127,0})); + connect(timeTable.y[1], greThr.u) + annotation (Line(points={{-138,230},{-122,230}}, color={0,0,127})); + connect(cha.ySta, intToRea.u) annotation (Line(points={{-18,194},{0,194},{0, + 190},{18,190}}, color={255,127,0})); + connect(intToRea.y, zerOrdHol.u) + annotation (Line(points={{42,190},{58,190}}, color={0,0,127})); + connect(zerOrdHol.y, reaToInt.u) + annotation (Line(points={{82,190},{98,190}}, color={0,0,127})); + connect(reaToInt.y, addInt.u2) annotation (Line(points={{122,190},{130,190},{ + 130,204},{138,204}}, color={255,127,0})); + connect(reaToInt.y, addInt1.u1) annotation (Line(points={{122,190},{130,190},{ + 130,176},{138,176}}, color={255,127,0})); + connect(step.y, addInt.u1) annotation (Line(points={{122,230},{130,230},{130, + 216},{138,216}}, color={255,127,0})); + connect(step.y, addInt1.u2) annotation (Line(points={{122,230},{126,230},{126, + 164},{138,164}}, color={255,127,0})); + connect(addInt.y, cha.uAvaUp) annotation (Line(points={{162,210},{170,210},{ + 170,250},{-50,250},{-50,196},{-42,196}}, color={255,127,0})); + connect(cha1.uIni, uIni1.y) annotation (Line(points={{-42,20},{-60,20},{-60, + 90},{-98,90}}, color={255,127,0})); + connect(cha1.ySta, intToRea1.u) annotation (Line(points={{-18,14},{0,14},{0, + 10},{18,10}}, color={255,127,0})); + connect(intToRea1.y, zerOrdHol1.u) + annotation (Line(points={{42,10},{58,10}}, color={0,0,127})); + connect(zerOrdHol1.y, reaToInt1.u) + annotation (Line(points={{82,10},{98,10}}, color={0,0,127})); + connect(reaToInt1.y, addInt2.u2) annotation (Line(points={{122,10},{130,10},{ + 130,24},{138,24}},color={255,127,0})); + connect(reaToInt1.y, addInt3.u1) annotation (Line(points={{122,10},{130,10},{ + 130,-4},{138,-4}}, color={255,127,0})); + connect(step1.y, addInt2.u1) annotation (Line(points={{122,50},{130,50},{130, + 36},{138,36}}, color={255,127,0})); + connect(step1.y, addInt3.u2) annotation (Line(points={{122,50},{126,50},{126, + -16},{138,-16}}, color={255,127,0})); + connect(addInt2.y, cha1.uAvaUp) annotation (Line(points={{162,30},{170,30},{ + 170,70},{-50,70},{-50,16},{-42,16}}, color={255,127,0})); + connect(timeTable2.y[1], greThr2.u) + annotation (Line(points={{-138,-130},{-122,-130}}, color={0,0,127})); + connect(cha2.uIni, uIni2.y) annotation (Line(points={{-42,-160},{-60,-160},{-60, + -90},{-98,-90}}, color={255,127,0})); + connect(cha2.ySta, intToRea2.u) annotation (Line(points={{-18,-166},{0,-166}, + {0,-170},{18,-170}},color={255,127,0})); + connect(intToRea2.y, zerOrdHol2.u) + annotation (Line(points={{42,-170},{58,-170}}, color={0,0,127})); + connect(zerOrdHol2.y, reaToInt2.u) + annotation (Line(points={{82,-170},{98,-170}}, color={0,0,127})); + connect(reaToInt2.y, addInt4.u2) annotation (Line(points={{122,-170},{130, + -170},{130,-156},{138,-156}}, color={255,127,0})); + connect(reaToInt2.y, addInt5.u1) annotation (Line(points={{122,-170},{130, + -170},{130,-184},{138,-184}}, color={255,127,0})); + connect(step2.y, addInt4.u1) annotation (Line(points={{122,-130},{130,-130},{ + 130,-144},{138,-144}}, color={255,127,0})); + connect(step2.y, addInt5.u2) annotation (Line(points={{122,-130},{126,-130},{ + 126,-196},{138,-196}}, color={255,127,0})); + connect(addInt4.y, cha2.uAvaUp) annotation (Line(points={{162,-150},{170,-150}, + {170,-110},{-50,-110},{-50,-164},{-42,-164}}, color={255,127,0})); + connect(noStaChaSig.y, cha.uDow) annotation (Line(points={{-178,110},{-170, + 110},{-170,184},{-42,184}}, color={255,0,255})); + connect(noStaChaSig.y, cha1.uUp) annotation (Line(points={{-178,110},{-170, + 110},{-170,60},{-80,60},{-80,8},{-42,8}},color={255,0,255})); + connect(greThr.y, cha.uUp) annotation (Line(points={{-98,230},{-70,230},{-70, + 188},{-42,188}}, color={255,0,255})); + connect(greThr2.y, cha2.uUp) annotation (Line(points={{-98,-130},{-80,-130},{ + -80,-172},{-42,-172}}, color={255,0,255})); + connect(greThr3.y, cha2.uDow) annotation (Line(points={{-98,-170},{-90,-170}, + {-90,-176},{-42,-176}},color={255,0,255})); + connect(greThr.y, cha1.uDow) annotation (Line(points={{-98,230},{-64,230},{ + -64,4},{-42,4}}, color={255,0,255})); + connect(timeTable1.y[1], greThr3.u) + annotation (Line(points={{-138,-170},{-122,-170}}, color={0,0,127})); + connect(cha.yChaEdg, truFalHol.u) annotation (Line(points={{-18,186},{-10,186}, + {-10,130},{-2,130}}, color={255,0,255})); + connect(cha1.yChaEdg, truFalHol1.u) annotation (Line(points={{-18,6},{-10,6}, + {-10,-50},{-2,-50}}, color={255,0,255})); + connect(cha2.yChaEdg, truFalHol2.u) annotation (Line(points={{-18,-174},{-10, + -174},{-10,-230},{-2,-230}}, color={255,0,255})); + connect(maxInt.u2, u3.y) annotation (Line(points={{178,144},{170,144},{170,130}, + {162,130}}, color={255,127,0})); + connect(maxInt.y, cha.uAvaDow) annotation (Line(points={{202,150},{210,150},{210, + 110},{-50,110},{-50,192},{-42,192}}, color={255,127,0})); + connect(u4.y, maxInt1.u2) annotation (Line(points={{162,-50},{170,-50},{170, + -36},{178,-36}}, color={255,127,0})); + connect(maxInt1.y, cha1.uAvaDow) annotation (Line(points={{202,-30},{208,-30}, + {208,-70},{-50,-70},{-50,12},{-42,12}}, color={255,127,0})); + connect(u5.y, maxInt2.u2) annotation (Line(points={{162,-230},{170,-230},{170, + -216},{178,-216}}, color={255,127,0})); + connect(maxInt2.y, cha2.uAvaDow) annotation (Line(points={{202,-210},{208, + -210},{208,-252},{-50,-252},{-50,-168},{-42,-168}}, color={255,127,0})); + connect(timeTable3.y[1], greThr1.u) + annotation (Line(points={{-178,30},{-162,30}}, color={0,0,127})); + connect(greThr1.y, cha.uPla) annotation (Line(points={{-138,30},{-130,30},{ + -130,180},{-42,180}}, color={255,0,255})); + connect(greThr1.y, cha1.uPla) annotation (Line(points={{-138,30},{-130,30},{ + -130,0},{-42,0}}, color={255,0,255})); + connect(greThr1.y, cha2.uPla) annotation (Line(points={{-138,30},{-88,30},{ + -88,-180},{-42,-180}}, color={255,0,255})); + connect(addInt3.y, maxInt1.u1) annotation (Line(points={{162,-10},{170,-10},{ + 170,-24},{178,-24}}, + color={255,127,0})); + connect(addInt5.y, maxInt2.u1) annotation (Line(points={{162,-190},{170,-190}, + {170,-204},{178,-204}}, color={255,127,0})); + connect(addInt1.y, maxInt.u1) annotation (Line(points={{162,170},{170,170},{ + 170,156},{178,156}}, + color={255,127,0})); +annotation ( + experiment(StopTime=14000.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Change.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Change. +

                      +", revisions=" +
                        +
                      • +April 15, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-220,-280},{220,300}}))); +end Change; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/ChillerIndices_u.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/ChillerIndices_u.mo new file mode 100644 index 00000000000..5dce93390e1 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/ChillerIndices_u.mo @@ -0,0 +1,125 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model ChillerIndices_u + "Validates extraction of chiller indices in a given stage" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.ChillerIndices chiInd( + final nSta=3, + final nChi=2, + staMat={{1,0},{0,1},{1,1}}) + "Setup with two chillers and three stages" + annotation (Placement(transformation(extent={{0,80},{20,100}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.ChillerIndices chiInd1( + final nSta=3, + final nChi=2, + staMat={{1,0},{0,1},{1,1}}) + "Setup with two chillers and three stages" + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.ChillerIndices chiInd2( + final nSta=3, + final nChi=2, + staMat={{1,0},{0,1},{1,1}}) + "Setup with two chillers and three stages" + annotation (Placement(transformation(extent={{0,0},{20,20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.ChillerIndices chiInd4( + final nSta=5, + final nChi=3, + staMat={{1,0,0},{1,1,0},{1,0,1},{0,1,1},{1,1,1}}) + "Setup with three chillers and five stages" + annotation (Placement(transformation(extent={{40,60},{60,80}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.ChillerIndices chiInd5( + final nSta=5, + final nChi=3, + final staMat={{1,0,0},{1,1,0},{1,0,1},{0,1,1},{1,1,1}}) + "Setup with three chillers and five stages" + annotation (Placement(transformation(extent={{40,20},{60,40}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.ChillerIndices chiInd6( + final nSta=5, + final nChi=3, + final staMat={{1,0,0},{1,1,0},{1,0,1},{0,1,1},{1,1,1}}) + "Setup with three chillers and five stages" + annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.ChillerIndices chiInd7( + final nSta=5, + final nChi=3, + final staMat={{1,0,0},{1,1,0},{1,0,1},{0,1,1},{1,1,1}}) + "Setup with three chillers and five stages" + annotation (Placement(transformation(extent={{40,-100},{60,-80}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.ChillerIndices chiInd3 + "Setup with default settings that is two chillers and three stages" + annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); + +protected + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u(final k=0) + "Chiller stage" + annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u1(final k=1) + "Chiller stage" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u2(final k=2) + "Chiller stage" + annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u3(final k=3) + "Chiller stage" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u4(final k=5) + "Chiller stage" + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + +equation + connect(u.y, chiInd.u) + annotation (Line(points={{-38,90},{-2,90}}, color={255,127,0})); + connect(u1.y, chiInd1.u) + annotation (Line(points={{-38,50},{-2,50}}, color={255,127,0})); + connect(u2.y, chiInd2.u) + annotation (Line(points={{-38,10},{-2,10}}, color={255,127,0})); + connect(u3.y, chiInd3.u) + annotation (Line(points={{-38,-30},{-2,-30}}, color={255,127,0})); + connect(u.y, chiInd4.u) annotation (Line(points={{-38,90},{-20,90},{-20,70},{ + 38,70}}, color={255,127,0})); + connect(u1.y, chiInd5.u) annotation (Line(points={{-38,50},{-20,50},{-20,30}, + {38,30}}, color={255,127,0})); + connect(u3.y, chiInd6.u) annotation (Line(points={{-38,-30},{-20,-30},{-20,-50}, + {38,-50}}, color={255,127,0})); + connect(u4.y,chiInd7. u) annotation (Line(points={{-38,-70},{0,-70},{0,-90},{38, + -90}}, color={255,127,0})); +annotation ( + experiment(StopTime=10.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/ChillerIndices_u.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.ChillerIndices. +

                      +", revisions=" +
                        +
                      • +March 26, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-80,-120},{80,120}}))); +end ChillerIndices_u; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Configurator_uChiAva.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Configurator_uChiAva.mo new file mode 100644 index 00000000000..e7454d9a0df --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Configurator_uChiAva.mo @@ -0,0 +1,149 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model Configurator_uChiAva "Validate chiller staging configurator subsequence" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Configurator + conf( + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{1,0,1},{0,1,1},{1,1,1}}, + final chiTyp={Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.variableSpeedCentrifugal, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.constantSpeedCentrifugal}, + final chiDesCap={1e6,1.5e6,2e6}, + final chiMinCap={2e5,3e5,4e5}) "Stage configurator" + annotation (Placement(transformation(extent={{20,90},{40,110}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Configurator + conf1( + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{1,0,1},{0,1,1},{1,1,1}}, + final chiTyp={Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.variableSpeedCentrifugal, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.constantSpeedCentrifugal}, + final chiDesCap={1e6,1.5e6,2e6}, + final chiMinCap={2e5,3e5,4e5}) "Stage configurator" + annotation (Placement(transformation(extent={{20,50},{40,70}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Configurator + conf3( + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{1,0,1},{0,1,1},{1,1,1}}, + final chiTyp={Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.variableSpeedCentrifugal, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.constantSpeedCentrifugal}, + final chiDesCap={1e6,1.5e6,2e6}, + final chiMinCap={2e5,3e5,4e5}) "Stage configurator" + annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Configurator + conf4( + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{1,0,1},{0,1,1},{1,1,1}}, + final chiTyp={Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.variableSpeedCentrifugal, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.constantSpeedCentrifugal}, + final chiDesCap={1e6,1.5e6,2e6}, + final chiMinCap={2e5,3e5,4e5}) "Stage configurator" + annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Configurator + conf5( + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{1,0,1},{0,1,1},{1,1,1}}, + final chiTyp={Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.variableSpeedCentrifugal, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.constantSpeedCentrifugal}, + final chiDesCap={1e6,1.5e6,2e6}, + final chiMinCap={2e5,3e5,4e5}) "Stage configurator" + annotation (Placement(transformation(extent={{20,-110},{40,-90}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Configurator + conf2( + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{1,0,1},{0,1,1},{1,1,1}}, + final chiTyp={Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.variableSpeedCentrifugal, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.constantSpeedCentrifugal}, + final chiDesCap={1e6,1.5e6,2e6}, + final chiMinCap={2e5,3e5,4e5}) "Stage configurator" + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiAva[3]( + final k={true,true,true}) + "Chiller availability array" + annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiAva1[3]( + final k={false,true,true}) + "Chiller availability array" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiAva3[3]( + final k={true,true,false}) + "Chiller availability array" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiAva4[3]( + final k={true,false,false}) + "Chiller availability array" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiAva5[3]( + final k={false,false,false}) + "Chiller availability array" + annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiAva2[3]( + final k={false,false,true}) + "Chiller availability array" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + +equation + connect(chiAva.y, conf.uChiAva) + annotation (Line(points={{-18,100},{18,100}},color={255,0,255})); + connect(chiAva1.y, conf1.uChiAva) + annotation (Line(points={{-18,60},{18,60}}, color={255,0,255})); + connect(chiAva3.y, conf3.uChiAva) + annotation (Line(points={{-18,-20},{18,-20}}, color={255,0,255})); + connect(chiAva4.y, conf4.uChiAva) + annotation (Line(points={{-18,-60},{18,-60}}, color={255,0,255})); + connect(chiAva5.y, conf5.uChiAva) + annotation (Line(points={{-18,-100},{18,-100}}, color={255,0,255})); + connect(chiAva2.y, conf2.uChiAva) + annotation (Line(points={{-18,20},{18,20}}, color={255,0,255})); +annotation ( + experiment(StopTime=10.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Configurator_uChiAva.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Configurator. +

                      +", revisions=" +
                        +
                      • +June 7, 2019,by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-60,-120},{60,120}}))); +end Configurator_uChiAva; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Down.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Down.mo new file mode 100644 index 00000000000..f87c6684c54 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Down.mo @@ -0,0 +1,226 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model Down "Validate change stage down condition sequence" + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Down + withWSE(have_locSen=true) + "Generates stage down signal" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Down + withWSE1(have_locSen=true) + "Generates stage down signal" + annotation (Placement(transformation(extent={{140,40},{160,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Down + noWSE(have_WSE=false, have_locSen=true) + "Generates stage down signal for a plant with a WSE" + annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); + +protected + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage2( + final k=2) + "Second stage" + annotation (Placement(transformation(extent={{-160,-100},{-140,-80}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant WSESta( + final k=true) + "Waterside economizer status" + annotation (Placement(transformation(extent={{-120,-80},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage1( + final k=1) "2nd stage" + annotation (Placement(transformation(extent={{20,-100},{40,-80}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant WSESta1( + final k=true) "WSE status" + annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet( + final k=273.15 + 14) "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-160,-20},{-140,0}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWatSet( + final k=65*6895) "Chilled water differential pressure setpoint" + annotation (Placement(transformation(extent={{-120,0},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSup( + final k=273.15 + 14) "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-160,-60},{-140,-40}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWat( + final k=65*6895) + "Chilled water differential pressure" + annotation (Placement(transformation(extent={{-120,-40},{-100,-20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant splrDown( + final k=0.8) + "Staging down part load ratio" + annotation (Placement(transformation(extent={{-160,100},{-140,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin oplrDown( + final amplitude=0.1, + final startTime=0, + final freqHz=1/4800, + final phase(displayUnit="deg") = -1.5707963267949, + final offset=0.75) "Operating part load ratio of the next stage down" + annotation (Placement(transformation(extent={{-120,120},{-100,140}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TWsePre( + final k=273.15 + 14) + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-160,20},{-140,40}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TowFanSpeMax( + final k=0.9) + "Maximum cooling tower speed signal" + annotation (Placement(transformation(extent={{-120,40},{-100,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet1( + final k=273.15 + 14) + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{20,-20},{40,0}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWatSet1( + final k=65*6895) + "Chilled water differential pressure setpoint" + annotation (Placement(transformation(extent={{60,0},{80,20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSup1( + final k=273.15 + 14) + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{20,-60},{40,-40}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWat1( + final k=62*6895) + "Chilled water differential pressure" + annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant oplrDown1(final k=1) + "Operating part load ratio of stage 0" + annotation (Placement(transformation(extent={{60,120},{80,140}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TowFanSpeMax1( + final k=0.9) + "Maximum cooling tower speed signal" + annotation (Placement(transformation(extent={{60,40},{80,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TWsePre1( + final amplitude=4, + final freqHz=1/2100, + final offset=273.15 + 12.5) + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + + CDL.Reals.Sources.Constant splrDown1(final k=1) + "Staging down part load ratio" + annotation (Placement(transformation(extent={{40,80},{60,100}}))); +equation + + connect(TCWSupSet.y, withWSE.TChiWatSupSet) annotation (Line(points={{-138, + -10},{-70,-10},{-70,48.8},{-42,48.8}}, + color={0,0,127})); + connect(TCWSup.y, withWSE.TChiWatSup) annotation (Line(points={{-138,-50},{ + -68,-50},{-68,46.8},{-42,46.8}}, + color={0,0,127})); + connect(dpChiWatSet.y, withWSE.dpChiWatPumSet_local) annotation (Line(points= + {{-98,10},{-76,10},{-76,57},{-42,57}}, color={0,0,127})); + connect(dpChiWat.y, withWSE.dpChiWatPum_local) annotation (Line(points={{-98, + -30},{-72,-30},{-72,55},{-42,55}}, color={0,0,127})); + connect(oplrDown.y, withWSE.uOpeDow) annotation (Line(points={{-98,130},{-70, + 130},{-70,61},{-42,61}}, color={0,0,127})); + connect(splrDown.y, withWSE.uStaDow) annotation (Line(points={{-138,110},{-72, + 110},{-72,59},{-42,59}}, color={0,0,127})); + connect(WSESta.y, withWSE.uWseSta) annotation (Line(points={{-98,-70},{-66, + -70},{-66,39},{-42,39}}, color={255,0,255})); + connect(stage2.y, withWSE.u) annotation (Line(points={{-138,-90},{-62,-90},{ + -62,41},{-42,41}}, color={255,127,0})); + connect(TWsePre.y, withWSE.TWsePre) annotation (Line(points={{-138,30},{-80, + 30},{-80,44.8},{-42,44.8}}, + color={0,0,127})); + connect(TowFanSpeMax.y, withWSE.uTowFanSpeMax) annotation (Line(points={{-98,50}, + {-90,50},{-90,42.8},{-42,42.8}}, color={0,0,127})); + connect(TCWSupSet1.y, withWSE1.TChiWatSupSet) annotation (Line(points={{42,-10}, + {110,-10},{110,48.8},{138,48.8}}, color={0,0,127})); + connect(TCWSup1.y, withWSE1.TChiWatSup) annotation (Line(points={{42,-50},{ + 112,-50},{112,46.8},{138,46.8}}, + color={0,0,127})); + connect(dpChiWatSet1.y, withWSE1.dpChiWatPumSet_local) annotation (Line( + points={{82,10},{104,10},{104,57},{138,57}}, color={0,0,127})); + connect(dpChiWat1.y, withWSE1.dpChiWatPum_local) annotation (Line(points={{82, + -30},{108,-30},{108,55},{138,55}}, color={0,0,127})); + connect(oplrDown1.y, withWSE1.uOpeDow) annotation (Line(points={{82,130},{110, + 130},{110,61},{138,61}}, color={0,0,127})); + connect(WSESta1.y, withWSE1.uWseSta) annotation (Line(points={{82,-70},{114, + -70},{114,39},{138,39}}, color={255,0,255})); + connect(stage1.y, withWSE1.u) annotation (Line(points={{42,-90},{116,-90},{ + 116,41},{138,41}}, color={255,127,0})); + connect(TowFanSpeMax1.y, withWSE1.uTowFanSpeMax) annotation (Line(points={{82,50}, + {90,50},{90,42.8},{138,42.8}}, color={0,0,127})); + connect(TWsePre1.y, withWSE1.TWsePre) annotation (Line(points={{42,30},{106, + 30},{106,44.8},{138,44.8}}, + color={0,0,127})); + connect(oplrDown.y, noWSE.uOpeDow) annotation (Line(points={{-98,130},{-70, + 130},{-70,101},{-42,101}}, color={0,0,127})); + connect(splrDown.y, noWSE.uStaDow) annotation (Line(points={{-138,110},{-72, + 110},{-72,99},{-42,99}}, color={0,0,127})); + connect(dpChiWatSet.y, noWSE.dpChiWatPumSet_local) annotation (Line(points={{ + -98,10},{-82,10},{-82,86},{-56,86},{-56,97},{-42,97}}, color={0,0,127})); + connect(dpChiWat.y, noWSE.dpChiWatPum_local) annotation (Line(points={{-98, + -30},{-86,-30},{-86,84},{-54,84},{-54,95},{-42,95}}, color={0,0,127})); + connect(TCWSup.y, noWSE.TChiWatSup) annotation (Line(points={{-138,-50},{-88, + -50},{-88,82},{-50,82},{-50,86.8},{-42,86.8}}, + color={0,0,127})); + connect(TCWSupSet.y, noWSE.TChiWatSupSet) annotation (Line(points={{-138,-10}, + {-84,-10},{-84,80},{-52,80},{-52,88.8},{-42,88.8}}, + color={0,0,127})); + connect(stage2.y, noWSE.u) annotation (Line(points={{-138,-90},{-64,-90},{-64, + 81},{-42,81}}, color={255,127,0})); + connect(splrDown1.y, withWSE1.uStaDow) annotation (Line(points={{62,90},{100, + 90},{100,59},{138,59}}, color={0,0,127})); +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Down.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Generic.Down. +

                      +", revisions=" +
                        +
                      • +March 26, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-180,-160},{180,180}}), + graphics={ + Text( + extent={{-136,-120},{-76,-142}}, + textColor={0,0,127}, + textString="Tests stage down from stages higher than stage 1. + +The tests assumes a false output of the failsafe condition and +checks functionality for the next available stage down SPLR and OPLR inputs."), + Text( + extent={{38,-120},{98,-142}}, + textColor={0,0,127}, + textString="Tests stage down from stage 1. + +Test assumes WSE is on and +maximum tower fan speed signal +is less than 1. The test ensures stage down gets initiated as the +cooling capacity of the first stage exceeds the demand +given the presence of WSE.")})); +end Down; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/EfficiencyCondition.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/EfficiencyCondition.mo new file mode 100644 index 00000000000..3a26615ff9f --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/EfficiencyCondition.mo @@ -0,0 +1,57 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model EfficiencyCondition "Validate efficiency condition sequence" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.EfficiencyCondition + effCon + "Failsafe condition to test for the operating part load ratio input" + annotation (Placement(transformation(extent={{0,0},{20,20}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Sin oplr( + final amplitude=0.1, + final phase(displayUnit="rad"), + final startTime=0, + final offset=0.85, + final freqHz=1/2100) "Operating part load ratio of the current stage" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant splrUp( + final k=0.8) + "Staging part load ratio of the next stage up" + annotation (Placement(transformation(extent={{-40,-20},{-20,0}}))); + +equation + connect(oplr.y, effCon.uOpe) annotation (Line(points={{-18,30},{-10,30},{-10, + 15},{-2,15}}, color={0,0,127})); + connect(splrUp.y, effCon.uStaUp) annotation (Line(points={{-18,-10},{-10,-10}, + {-10,5},{-2,5}}, color={0,0,127})); +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/EfficiencyCondition.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Generic.EfficiencyCondition. +

                      +", revisions=" +
                        +
                      • +January 28, 2019, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-60,-40},{40,60}}))); +end EfficiencyCondition; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/FailsafeCondition.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/FailsafeCondition.mo new file mode 100644 index 00000000000..0011a15d02d --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/FailsafeCondition.mo @@ -0,0 +1,127 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model FailsafeCondition "Validate failsafe condition sequence" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.FailsafeCondition + faiSafCon0(have_locSen=true) + "Failsafe condition to test for the current stage availability input" + annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.FailsafeCondition + faiSafCon1(have_locSen=true) + "Failsafe condition to test for the chilled water supply temperature and differential pressure inputs" + annotation (Placement(transformation(extent={{120,80},{140,100}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.FailsafeCondition + faiSafCon2(final have_serChi=true) + "Failsafe condition to test for the chilled water supply temperature input for series chillers plant" + annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSup( + final k=273.15 + 18) + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet( + final k=273.15 + 14) + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-140,100},{-120,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWat( + final k=64.1*6895) + "Chilled water differential pressure" + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWatSet( + final k=65*6895) + "Chilled water differential pressure setpoint" + annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet1( + final k=273.15 + 14) + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{20,100},{40,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWatSet1( + final k=65*6895) + "Chilled water differential pressure setpoint" + annotation (Placement(transformation(extent={{60,60},{80,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TCWSup1( + final amplitude=1.5, + final offset=273.15 + 15.5, + final freqHz=1/900) "Chilled water supply temperature" + annotation (Placement(transformation(extent={{20,60},{40,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin dpChiWat2( + final amplitude=6895, + final offset=63*6895, + final freqHz=1/1500, + final startTime=0, + phase=0.78539816339745) + "Chilled water differential pressure" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet2( + final k=273.15 + 14) + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-140,-40},{-120,-20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TCWSup2( + final amplitude=1.5, + final offset=273.15 + 15.5, + final freqHz=1/2100) + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-140,-80},{-120,-60}}))); + +equation + connect(TCWSup.y, faiSafCon0.TChiWatSup) annotation (Line(points={{-118,70},{ + -110,70},{-110,96},{-42,96}}, color={0,0,127})); + connect(TCWSupSet.y, faiSafCon0.TChiWatSupSet) annotation (Line(points={{-118, + 110},{-60,110},{-60,99},{-42,99}}, color={0,0,127})); + connect(dpChiWatSet.y, faiSafCon0.dpChiWatPumSet_local) annotation (Line( + points={{-78,70},{-60,70},{-60,91},{-42,91}}, color={0,0,127})); + connect(dpChiWat.y, faiSafCon0.dpChiWatPum_local) annotation (Line(points={{ + -78,30},{-56,30},{-56,88},{-42,88}}, color={0,0,127})); + connect(TCWSupSet1.y, faiSafCon1.TChiWatSupSet) annotation (Line(points={{42,110}, + {100,110},{100,99},{118,99}}, color={0,0,127})); + connect(dpChiWatSet1.y, faiSafCon1.dpChiWatPumSet_local) annotation (Line( + points={{82,70},{90,70},{90,91},{118,91}}, color={0,0,127})); + connect(TCWSup1.y, faiSafCon1.TChiWatSup) annotation (Line(points={{42,70},{ + 50,70},{50,96},{118,96}}, color={0,0,127})); + connect(dpChiWat2.y, faiSafCon1.dpChiWatPum_local) annotation (Line(points={{ + 82,30},{100,30},{100,88},{118,88}}, color={0,0,127})); + connect(TCWSupSet2.y,faiSafCon2. TChiWatSupSet) annotation (Line(points={{-118, + -30},{-100,-30},{-100,-21},{-42,-21}}, color={0,0,127})); + connect(TCWSup2.y,faiSafCon2. TChiWatSup) annotation (Line(points={{-118,-70}, + {-100,-70},{-100,-40},{-60,-40},{-60,-24},{-42,-24}}, color={0,0,127})); +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/FailsafeCondition.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Generic.FailsafeCondition. +

                      +", revisions=" +
                        +
                      • +January 21, 2019, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-160,-140},{160,140}}))); +end FailsafeCondition; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_WSE.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_WSE.mo new file mode 100644 index 00000000000..0f0e00c2f52 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_WSE.mo @@ -0,0 +1,109 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model Initial_WSE "Validate initial stage sequence for a plant with WSE" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Initial iniStaCol( + final have_WSE=true) "Initial stage is the WSE only stage" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Initial iniStaHot( + final have_WSE=true) + "Initial stage is the lowest available chiller stage" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + +protected + Buildings.Controls.OBC.CDL.Integers.Sources.Constant lowAvaSta( + final k=1) + "Lowest chiller stage that is available " + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin outTemHot( + final amplitude=8, + final freqHz=1/(24*3600), + final phase=-1.5707963267949, + final offset=298.15) + "Measured outdoor air wet bulb temperature on a hot day" + annotation (Placement(transformation(extent={{20,40},{40,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin outTemCol( + final amplitude=8, + final freqHz=1/(24*3600), + final phase=-1.5707963267949, + final offset=278.15) + "Measured outdoor air wet bulb temperature on a cold day" + annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant tunPar( + final k=0.06) + "Assume a constant tuning parameter" + annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet( + final k=285.15) + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant plaSta( + final k=true) + "Plant status" + annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=600, + final delayOnInit=true) "True delay" + annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); + +equation + connect(lowAvaSta.y,iniStaCol. uUp) annotation (Line(points={{-18,-50},{-10,-50}, + {-10,0},{-2,0}}, color={255,127,0})); + connect(TChiWatSupSet.y,iniStaCol. TChiWatSupSet) annotation (Line(points={{-18, + 50},{-10,50},{-10,3},{-2,3}}, color={0,0,127})); + connect(TChiWatSupSet.y, iniStaHot.TChiWatSupSet) annotation (Line(points={{-18, + 50},{-10,50},{-10,20},{50,20},{50,3},{58,3}}, color={0,0,127})); + connect(tunPar.y,iniStaCol. uTunPar) annotation (Line(points={{-58,50},{-50,50}, + {-50,6},{-2,6}}, color={0,0,127})); + connect(tunPar.y, iniStaHot.uTunPar) annotation (Line(points={{-58,50},{-50,50}, + {-50,16},{46,16},{46,6},{58,6}}, color={0,0,127})); + connect(outTemHot.y, iniStaHot.TOutWet) + annotation (Line(points={{42,50},{54,50},{54,9},{58,9}}, color={0,0,127})); + connect(outTemCol.y, iniStaCol.TOutWet) annotation (Line(points={{-58,-10},{-30, + -10},{-30,9},{-2,9}}, color={0,0,127})); + connect(lowAvaSta.y, iniStaHot.uUp) annotation (Line(points={{-18,-50},{50,-50}, + {50,0},{58,0}}, color={255,127,0})); + connect(plaSta.y, truDel.u) + annotation (Line(points={{-98,-50},{-82,-50}}, color={255,0,255})); + connect(truDel.y, iniStaCol.uPla) annotation (Line(points={{-58,-50},{-50,-50}, + {-50,-20},{-20,-20},{-20,-6},{-2,-6}}, color={255,0,255})); + connect(truDel.y, iniStaHot.uPla) annotation (Line(points={{-58,-50},{-50,-50}, + {-50,-20},{40,-20},{40,-6},{58,-6}}, color={255,0,255})); + +annotation ( + experiment(StopTime=86400.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_WSE.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Initial +for chiller plants with WSE. +

                      +", revisions=" +
                        +
                      • +March 14, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-140,-80},{140,80}}))); +end Initial_WSE; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_noWSE.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_noWSE.mo new file mode 100644 index 00000000000..9d599f9662e --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_noWSE.mo @@ -0,0 +1,77 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model Initial_noWSE + "Validate initial stage sequence in case of no WSE" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Initial iniSta( + final have_WSE=false) + "Tests if initial stage is the lowest available stage" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Initial iniSta1( + final have_WSE=false) + "Tests if initial stage is the lowest available stage" + annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); + +protected + Buildings.Controls.OBC.CDL.Integers.Sources.Constant lowAvaSta( + final k=2) + "Lowest chiller stage that is available" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant lowAvaSta1( + final k=2) + "Lowest chiller stage that is available" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=10, + final delayOnInit=true) + "True signal delay" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant plaSta( + final k=true) "Plant status" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(lowAvaSta.y, iniSta.uUp) + annotation (Line(points={{-18,30},{18,30}},color={255,127,0})); + connect(lowAvaSta1.y, iniSta1.uUp) + annotation (Line(points={{-18,-40},{18,-40}}, color={255,127,0})); + connect(plaSta.y, truDel.u) + annotation (Line(points={{-38,0},{-22,0}}, color={255,0,255})); + connect(truDel.y, iniSta.uPla) annotation (Line(points={{2,0},{10,0},{10,24},{ + 18,24}}, color={255,0,255})); + connect(plaSta.y, iniSta1.uPla) annotation (Line(points={{-38,0},{-30,0},{-30, + -20},{0,-20},{0,-46},{18,-46}}, color={255,0,255})); +annotation ( + experiment(StopTime=100.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_noWSE.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Initial + for chiller plants without WSE. +

                      +", revisions=" +
                        +
                      • +March 12, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-80,-60},{80,60}}))); +end Initial_noWSE; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/PartLoadRatios_u_uTyp.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/PartLoadRatios_u_uTyp.mo new file mode 100644 index 00000000000..c431c9dbca6 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/PartLoadRatios_u_uTyp.mo @@ -0,0 +1,600 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model PartLoadRatios_u_uTyp + "Validates the operating and stage part load ratios calculation for chiller stage and stage type inputs" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.PartLoadRatios PLRs0( + final anyVsdCen=false, + final nSta=3) + "Stage and operative part load ratios" + annotation (Placement(transformation(extent={{-260,170},{-240,210}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.PartLoadRatios PLRs1( + final anyVsdCen=false, + final nSta=3) + "Stage and operative part load ratios" + annotation (Placement(transformation(extent={{-40,170},{-20,210}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.PartLoadRatios PLRs2( + final anyVsdCen=false, + final nSta=3) + "Stage and operative part load ratios" + annotation (Placement(transformation(extent={{180,170},{200,210}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.PartLoadRatios PLRs3( + final anyVsdCen=false, + final nSta=3) + "Stage and operative part load ratios" + annotation (Placement(transformation(extent={{420,170},{440,210}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.PartLoadRatios PLRs4( + final anyVsdCen=true, + final nSta=3) + "Stage and operative part load ratios" + annotation (Placement(transformation(extent={{-260,-170},{-240,-130}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.PartLoadRatios PLRs5( + final anyVsdCen=true, + final nSta=3) + "Stage and operative part load ratios" + annotation (Placement(transformation(extent={{-40,-170},{-20,-130}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.PartLoadRatios PLRs6( + final anyVsdCen=true, + final nSta=3) + "Stage and operative part load ratios" + annotation (Placement(transformation(extent={{180,-170},{200,-130}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.PartLoadRatios PLRs7( + final anyVsdCen=true, + final nSta=3) + "Stage and operative part load ratios" + annotation (Placement(transformation(extent={{420,-170},{440,-130}}))); + +protected + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staTyp[3]( + final k={Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.constantSpeedCentrifugal, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.constantSpeedCentrifugal}) + "Stage types" + annotation (Placement(transformation(extent={{-420,220},{-400,240}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staTyp4[3]( + final k={Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.variableSpeedCentrifugal, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.constantSpeedCentrifugal}) + "Stage types" + annotation (Placement(transformation(extent={{-420,-270},{-400,-250}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max "Maximum" + annotation (Placement(transformation(extent={{-340,360},{-320,380}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max1 "Maximum" + annotation (Placement(transformation(extent={{-120,360},{-100,380}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max2 "Maximum" + annotation (Placement(transformation(extent={{100,360},{120,380}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max3 "Maximum" + annotation (Placement(transformation(extent={{340,360},{360,380}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max4 "Maximum" + annotation (Placement(transformation(extent={{-340,0},{-320,20}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max5 "Maximum" + annotation (Placement(transformation(extent={{-120,0},{-100,20}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max6 "Maximum" + annotation (Placement(transformation(extent={{100,0},{120,20}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max7 "Maximum" + annotation (Placement(transformation(extent={{340,0},{360,20}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant curSta( + final k=1) "Current chiller stage" + annotation (Placement(transformation(extent={{-420,180},{-400,200}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin capReq3( + final amplitude=6e5, + final freqHz=1/1800, + final offset=9e5, + final startTime=0) + "Capacity requirement" + annotation (Placement(transformation(extent={{-420,380},{-400,400}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staUp( + final k=2) + "Next available chiller stage up" + annotation (Placement(transformation(extent={{-420,140},{-400,160}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staDown( + final k=0) + "Next available chiller stage down" + annotation (Placement(transformation(extent={{-420,100},{-400,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant lowLim( + final k=0) + "Capacity requirement" + annotation (Placement(transformation(extent={{-420,340},{-400,360}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant capDes[3]( + final k={10e5,15e5,25e5}) + "Stage design capacities" + annotation (Placement(transformation(extent={{-380,300},{-360,320}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant capMin[3]( + final k={2e5,3e5,5e5}) + "Stage unload capacities" + annotation (Placement(transformation(extent={{-380,260},{-360,280}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant curSta1( + final k=2) + "Current chiller stage" + annotation (Placement(transformation(extent={{-200,180},{-180,200}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin capReq1( + final amplitude=6e5, + final freqHz=1/1800, + final offset=14e5, + final startTime=0) + "Capacity requirement" + annotation (Placement(transformation(extent={{-200,380},{-180,400}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staUp1( + final k=3) + "Next available chiller stage up" + annotation (Placement(transformation(extent={{-200,140},{-180,160}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staDown1( + final k=1) + "Next available chiller stage down" + annotation (Placement(transformation(extent={{-200,100},{-180,120}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant curSta2( + final k=3) + "Current chiller stage" + annotation (Placement(transformation(extent={{20,180},{40,200}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin capReq2( + final amplitude=6e5, + final freqHz=1/1800, + final offset=19e5, + final startTime=0) + "Capacity requirement" + annotation (Placement(transformation(extent={{20,380},{40,400}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staUp2( + final k=3) + "Next available chiller stage up" + annotation (Placement(transformation(extent={{20,140},{40,160}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staDown2(final k=2) + "Next available chiller stage down" + annotation (Placement(transformation(extent={{20,100},{40,120}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant curSta3( + final k=0) + "Current chiller stage" + annotation (Placement(transformation(extent={{260,180},{280,200}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin capReq4( + final amplitude=6e5, + final freqHz=1/1800, + final offset=5e5, + final startTime=0) + "Capacity requirement" + annotation (Placement(transformation(extent={{260,380},{280,400}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staUp3( + final k=1) + "Next available chiller stage up" + annotation (Placement(transformation(extent={{260,140},{280,160}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staDown3( + final k=0) + "Next available chiller stage down" + annotation (Placement(transformation(extent={{260,100},{280,120}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant curSta4( + final k=1) + "Current chiller stage" + annotation (Placement(transformation(extent={{-420,-310},{-400,-290}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin capReq5( + final amplitude=6e5, + final freqHz=1/1800, + final offset=9e5, + final startTime=0) + "Capacity requirement" + annotation (Placement(transformation(extent={{-420,20},{-400,40}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staUp4( + final k=2) + "Next available chiller stage up" + annotation (Placement(transformation(extent={{-420,-350},{-400,-330}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staDown4( + final k=0) + "Next available chiller stage down" + annotation (Placement(transformation(extent={{-420,-390},{-400,-370}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant lowLim4( + final k=0) + "Capacity requirement" + annotation (Placement(transformation(extent={{-420,-20},{-400,0}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant capDes1[3]( + final k={10e5,15e5,25e5}) "Stage design capacities" + annotation (Placement(transformation(extent={{-380,-60},{-360,-40}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant capMin1[3]( + final k={2e5,3e5,5e5}) + "Stage unload capacities" + annotation (Placement(transformation(extent={{-380,-100},{-360,-80}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant curSta5( + final k=2) + "Current chiller stage" + annotation (Placement(transformation(extent={{-200,-310},{-180,-290}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin capReq6( + final amplitude=6e5, + final freqHz=1/1800, + final offset=14e5, + final startTime=0) + "Capacity requirement" + annotation (Placement(transformation(extent={{-200,20},{-180,40}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staUp5( + final k=3) + "Next available chiller stage up" + annotation (Placement(transformation(extent={{-200,-350},{-180,-330}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staDown5( + final k=1) + "Next available chiller stage down" + annotation (Placement(transformation(extent={{-200,-390},{-180,-370}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant curSta6( + final k=3) + "Current chiller stage" + annotation (Placement(transformation(extent={{20,-310},{40,-290}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin capReq7( + final amplitude=6e5, + final freqHz=1/1800, + final offset=19e5, + final startTime=0) + "Capacity requirement" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staUp6( + final k=3) + "Next available chiller stage up" + annotation (Placement(transformation(extent={{20,-350},{40,-330}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staDown6( + final k=2) + "Next available chiller stage down" + annotation (Placement(transformation(extent={{20,-390},{40,-370}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant curSta7( + final k=0) + "Current chiller stage" + annotation (Placement(transformation(extent={{260,-310},{280,-290}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin capReq8( + final amplitude=6e5, + final freqHz=1/1800, + final offset=5e5, + final startTime=0) + "Capacity requirement" + annotation (Placement(transformation(extent={{260,20},{280,40}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staUp7( + final k=1) + "Next available chiller stage up" + annotation (Placement(transformation(extent={{260,-350},{280,-330}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant staDown7( + final k=0) + "Next available chiller stage down" + annotation (Placement(transformation(extent={{260,-390},{280,-370}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant Lift( + final k=16) "Chiller lift" + annotation (Placement(transformation(extent={{-420,-130},{-400,-110}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant LiftMin( + final k=10) "Minimum chiller lift" + annotation (Placement(transformation(extent={{-420,-220},{-400,-200}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant LiftMax( + final k=20) "Maximum chiller lift" + annotation (Placement(transformation(extent={{-420,-180},{-400,-160}}))); + +equation + + connect(curSta.y, PLRs0.u) annotation (Line(points={{-398,190},{-330,190},{-330, + 178},{-262,178}}, + color={255,127,0})); + connect(staUp.y, PLRs0.uUp) annotation (Line(points={{-398,150},{-320,150},{-320, + 176},{-262,176}}, color={255,127,0})); + connect(staDown.y, PLRs0.uDown) annotation (Line(points={{-398,110},{-310,110}, + {-310,174},{-262,174}}, color={255,127,0})); + connect(max.y, PLRs0.uCapReq) annotation (Line(points={{-318,370},{-290,370},{ + -290,204},{-262,204}}, color={0,0,127})); + connect(capReq3.y, max.u1) annotation (Line(points={{-398,390},{-360,390},{-360, + 376},{-342,376}}, color={0,0,127})); + connect(lowLim.y, max.u2) annotation (Line(points={{-398,350},{-360,350},{-360, + 364},{-342,364}}, color={0,0,127})); + connect(capDes[1].y, PLRs0.uCapDes) annotation (Line(points={{-358,310},{-292, + 310},{-292,202},{-262,202}}, color={0,0,127})); + connect(capDes[2].y, PLRs0.uUpCapDes) annotation (Line(points={{-358,310},{-292, + 310},{-292,200},{-262,200}}, color={0,0,127})); + connect(capMin[1].y, PLRs0.uDowCapDes) annotation (Line(points={{-358,270},{-294, + 270},{-294,198},{-262,198}}, color={0,0,127})); + connect(capMin[1].y, PLRs0.uCapMin) annotation (Line(points={{-358,270},{-294, + 270},{-294,195},{-262,195}}, color={0,0,127})); + connect(capMin[2].y, PLRs0.uUpCapMin) annotation (Line(points={{-358,270},{-296, + 270},{-296,193},{-262,193}}, color={0,0,127})); + connect(staTyp.y, PLRs0.uTyp) annotation (Line(points={{-398,230},{-310,230},{ + -310,182},{-262,182}}, color={255,127,0})); + connect(curSta1.y, PLRs1.u) + annotation (Line(points={{-178,190},{-110,190},{-110,178},{-42,178}}, + color={255,127,0})); + connect(staUp1.y, PLRs1.uUp) annotation (Line(points={{-178,150},{-100,150},{-100, + 176},{-42,176}}, color={255,127,0})); + connect(staDown1.y, PLRs1.uDown) annotation (Line(points={{-178,110},{-90,110}, + {-90,174},{-42,174}}, color={255,127,0})); + connect(max1.y, PLRs1.uCapReq) annotation (Line(points={{-98,370},{-70,370},{-70, + 204},{-42,204}}, color={0,0,127})); + connect(capReq1.y, max1.u1) annotation (Line(points={{-178,390},{-140,390},{-140, + 376},{-122,376}}, color={0,0,127})); + connect(curSta2.y,PLRs2. u) + annotation (Line(points={{42,190},{110,190},{110,178},{178,178}}, + color={255,127,0})); + connect(staUp2.y,PLRs2.uUp) annotation (Line(points={{42,150},{120,150},{120,176}, + {178,176}}, color={255,127,0})); + connect(staDown2.y,PLRs2.uDown) annotation (Line(points={{42,110},{130,110},{130, + 174},{178,174}}, color={255,127,0})); + connect(max2.y,PLRs2.uCapReq) annotation (Line(points={{122,370},{150,370},{150, + 204},{178,204}}, color={0,0,127})); + connect(capReq2.y,max2.u1) annotation (Line(points={{42,390},{80,390},{80,376}, + {98,376}}, color={0,0,127})); + connect(curSta3.y,PLRs3. u) + annotation (Line(points={{282,190},{350,190},{350,178},{418,178}}, + color={255,127,0})); + connect(staUp3.y,PLRs3.uUp) annotation (Line(points={{282,150},{360,150},{360, + 176},{418,176}}, color={255,127,0})); + connect(staDown3.y,PLRs3.uDown) annotation (Line(points={{282,110},{370,110},{ + 370,174},{418,174}}, color={255,127,0})); + connect(max3.y,PLRs3.uCapReq) annotation (Line(points={{362,370},{410,370},{410, + 204},{418,204}}, color={0,0,127})); + connect(capReq4.y,max3.u1) annotation (Line(points={{282,390},{320,390},{320,376}, + {338,376}}, color={0,0,127})); + connect(curSta4.y, PLRs4.u) annotation (Line(points={{-398,-300},{-330,-300},{ + -330,-162},{-262,-162}}, color={255,127,0})); + connect(staUp4.y, PLRs4.uUp) annotation (Line(points={{-398,-340},{-320,-340}, + {-320,-164},{-262,-164}}, color={255,127,0})); + connect(staDown4.y, PLRs4.uDown) annotation (Line(points={{-398,-380},{-310,-380}, + {-310,-166},{-262,-166}}, color={255,127,0})); + connect(max4.y, PLRs4.uCapReq) annotation (Line(points={{-318,10},{-290,10},{-290, + -136},{-262,-136}}, color={0,0,127})); + connect(capReq5.y, max4.u1) annotation (Line(points={{-398,30},{-360,30},{-360, + 16},{-342,16}}, color={0,0,127})); + connect(lowLim4.y, max4.u2) annotation (Line(points={{-398,-10},{-360,-10},{-360, + 4},{-342,4}}, color={0,0,127})); + connect(capDes1[1].y, PLRs4.uCapDes) annotation (Line(points={{-358,-50},{-292, + -50},{-292,-138},{-262,-138}}, color={0,0,127})); + connect(capDes1[2].y, PLRs4.uUpCapDes) annotation (Line(points={{-358,-50},{-292, + -50},{-292,-140},{-262,-140}}, color={0,0,127})); + connect(capMin1[1].y, PLRs4.uDowCapDes) annotation (Line(points={{-358,-90},{-294, + -90},{-294,-142},{-262,-142}}, color={0,0,127})); + connect(capMin1[1].y, PLRs4.uCapMin) annotation (Line(points={{-358,-90},{-294, + -90},{-294,-145},{-262,-145}}, color={0,0,127})); + connect(capMin1[2].y, PLRs4.uUpCapMin) annotation (Line(points={{-358,-90},{-296, + -90},{-296,-147},{-262,-147}}, color={0,0,127})); + connect(staTyp4.y, PLRs4.uTyp) annotation (Line(points={{-398,-260},{-340,-260}, + {-340,-158},{-262,-158}}, color={255,127,0})); + connect(curSta5.y,PLRs5. u) + annotation (Line(points={{-178,-300},{-110,-300},{-110,-162},{-42,-162}}, + color={255,127,0})); + connect(staUp5.y,PLRs5. uUp) annotation (Line(points={{-178,-340},{-100,-340}, + {-100,-164},{-42,-164}}, color={255,127,0})); + connect(staDown5.y,PLRs5. uDown) annotation (Line(points={{-178,-380},{-90, + -380},{-90,-166},{-42,-166}}, + color={255,127,0})); + connect(max5.y,PLRs5. uCapReq) annotation (Line(points={{-98,10},{-70,10},{ + -70,-136},{-42,-136}},color={0,0,127})); + connect(capReq6.y,max5. u1) annotation (Line(points={{-178,30},{-140,30},{-140, + 16},{-122,16}}, color={0,0,127})); + connect(curSta6.y,PLRs6. u) + annotation (Line(points={{42,-300},{110,-300},{110,-162},{178,-162}}, + color={255,127,0})); + connect(staUp6.y,PLRs6.uUp) annotation (Line(points={{42,-340},{120,-340},{ + 120,-164},{178,-164}}, + color={255,127,0})); + connect(staDown6.y,PLRs6.uDown) annotation (Line(points={{42,-380},{130,-380}, + {130,-166},{178,-166}}, color={255,127,0})); + connect(max6.y,PLRs6.uCapReq) annotation (Line(points={{122,10},{150,10},{150, + -136},{178,-136}}, color={0,0,127})); + connect(capReq7.y,max6.u1) annotation (Line(points={{42,30},{80,30},{80,16},{98, + 16}}, color={0,0,127})); + connect(curSta7.y,PLRs7. u) + annotation (Line(points={{282,-300},{350,-300},{350,-162},{418,-162}}, + color={255,127,0})); + connect(staUp7.y,PLRs7.uUp) annotation (Line(points={{282,-340},{360,-340},{ + 360,-164},{418,-164}}, + color={255,127,0})); + connect(staDown7.y,PLRs7.uDown) annotation (Line(points={{282,-380},{370,-380}, + {370,-166},{418,-166}}, color={255,127,0})); + connect(max7.y,PLRs7.uCapReq) annotation (Line(points={{362,10},{390,10},{390, + -136},{418,-136}}, color={0,0,127})); + connect(capReq8.y,max7.u1) annotation (Line(points={{282,30},{320,30},{320,16}, + {338,16}}, color={0,0,127})); + connect(capMin1[1].y,PLRs7.uCapDes) annotation (Line(points={{-358,-90},{388, + -90},{388,-138},{418,-138}}, + color={0,0,127})); + connect(capDes1[1].y,PLRs7.uUpCapDes) annotation (Line(points={{-358,-50},{ + 388,-50},{388,-140},{418,-140}}, + color={0,0,127})); + connect(capMin1[1].y,PLRs7.uDowCapDes) annotation (Line(points={{-358,-90},{ + 386,-90},{386,-142},{418,-142}}, + color={0,0,127})); + connect(capMin1[1].y,PLRs7.uCapMin) annotation (Line(points={{-358,-90},{386, + -90},{386,-145},{418,-145}}, + color={0,0,127})); + connect(capMin1[1].y,PLRs7.uUpCapMin) annotation (Line(points={{-358,-90},{ + 384,-90},{384,-147},{418,-147}}, + color={0,0,127})); + connect(staTyp.y, PLRs1.uTyp) annotation (Line(points={{-398,230},{-90,230},{-90, + 182},{-42,182}}, color={255,127,0})); + connect(staTyp.y, PLRs2.uTyp) annotation (Line(points={{-398,230},{130,230},{130, + 182},{178,182}}, color={255,127,0})); + connect(staTyp4.y, PLRs5.uTyp) annotation (Line(points={{-398,-260},{-120, + -260},{-120,-158},{-42,-158}}, + color={255,127,0})); + connect(staTyp4.y, PLRs6.uTyp) annotation (Line(points={{-398,-260},{100,-260}, + {100,-158},{178,-158}}, color={255,127,0})); + connect(staTyp4.y, PLRs7.uTyp) annotation (Line(points={{-398,-260},{340,-260}, + {340,-158},{418,-158}}, color={255,127,0})); + connect(Lift.y, PLRs4.uLif) annotation (Line(points={{-398,-120},{-360,-120}, + {-360,-150},{-262,-150}},color={0,0,127})); + connect(LiftMax.y, PLRs4.uLifMax) annotation (Line(points={{-398,-170},{-380,-170}, + {-380,-152},{-262,-152}}, color={0,0,127})); + connect(LiftMin.y, PLRs4.uLifMin) annotation (Line(points={{-398,-210},{-360,-210}, + {-360,-154},{-262,-154}}, color={0,0,127})); + connect(Lift.y, PLRs5.uLif) annotation (Line(points={{-398,-120},{-140,-120}, + {-140,-150},{-42,-150}},color={0,0,127})); + connect(LiftMax.y, PLRs5.uLifMax) annotation (Line(points={{-398,-170},{-380, + -170},{-380,-180},{-140,-180},{-140,-152},{-42,-152}}, + color={0,0,127})); + connect(LiftMin.y, PLRs5.uLifMin) annotation (Line(points={{-398,-210},{-130, + -210},{-130,-154},{-42,-154}}, + color={0,0,127})); + connect(Lift.y, PLRs6.uLif) annotation (Line(points={{-398,-120},{80,-120},{ + 80,-150},{178,-150}}, + color={0,0,127})); + connect(Lift.y, PLRs7.uLif) annotation (Line(points={{-398,-120},{320,-120},{ + 320,-150},{418,-150}}, + color={0,0,127})); + connect(LiftMax.y, PLRs6.uLifMax) annotation (Line(points={{-398,-170},{-380, + -170},{-380,-180},{80,-180},{80,-152},{178,-152}}, + color={0,0,127})); + connect(LiftMax.y, PLRs7.uLifMax) annotation (Line(points={{-398,-170},{-380, + -170},{-380,-180},{320,-180},{320,-152},{418,-152}}, + color={0,0,127})); + connect(LiftMin.y, PLRs6.uLifMin) annotation (Line(points={{-398,-210},{92, + -210},{92,-154},{178,-154}}, + color={0,0,127})); + connect(PLRs7.uLifMin, LiftMin.y) annotation (Line(points={{418,-154},{332, + -154},{332,-210},{-398,-210}}, + color={0,0,127})); + connect(staTyp.y, PLRs3.uTyp) annotation (Line(points={{-398,230},{372,230},{372, + 182},{418,182}}, color={255,127,0})); + connect(lowLim.y, max1.u2) annotation (Line(points={{-398,350},{-140,350},{-140, + 364},{-122,364}}, color={0,0,127})); + connect(lowLim.y, max2.u2) annotation (Line(points={{-398,350},{80,350},{80,364}, + {98,364}}, color={0,0,127})); + connect(lowLim.y, max3.u2) annotation (Line(points={{-398,350},{320,350},{320, + 364},{338,364}}, color={0,0,127})); + connect(lowLim4.y, max5.u2) annotation (Line(points={{-398,-10},{-140,-10},{-140, + 4},{-122,4}}, color={0,0,127})); + connect(lowLim4.y, max6.u2) annotation (Line(points={{-398,-10},{80,-10},{80,4}, + {98,4}}, color={0,0,127})); + connect(lowLim4.y, max7.u2) annotation (Line(points={{-398,-10},{320,-10},{320, + 4},{338,4}}, color={0,0,127})); + connect(capDes[2].y, PLRs1.uCapDes) annotation (Line(points={{-358,310},{-72,310}, + {-72,202},{-42,202}}, color={0,0,127})); + connect(capDes[3].y, PLRs1.uUpCapDes) annotation (Line(points={{-358,310},{-72, + 310},{-72,200},{-42,200}}, color={0,0,127})); + connect(capDes[1].y, PLRs1.uDowCapDes) annotation (Line(points={{-358,310},{-72, + 310},{-72,198},{-42,198}}, color={0,0,127})); + connect(capMin[2].y, PLRs1.uCapMin) annotation (Line(points={{-358,270},{-74,270}, + {-74,195},{-42,195}}, color={0,0,127})); + connect(capMin[3].y, PLRs1.uUpCapMin) annotation (Line(points={{-358,270},{-74, + 270},{-74,193},{-42,193}}, color={0,0,127})); + connect(capDes1[2].y, PLRs5.uCapDes) annotation (Line(points={{-358,-50},{-80, + -50},{-80,-138},{-42,-138}}, color={0,0,127})); + connect(capDes1[3].y, PLRs5.uUpCapDes) annotation (Line(points={{-358,-50},{ + -80,-50},{-80,-140},{-42,-140}}, + color={0,0,127})); + connect(capDes1[1].y, PLRs5.uDowCapDes) annotation (Line(points={{-358,-50},{ + -80,-50},{-80,-142},{-42,-142}}, + color={0,0,127})); + connect(capMin1[2].y, PLRs5.uCapMin) annotation (Line(points={{-358,-90},{-90, + -90},{-90,-145},{-42,-145}}, color={0,0,127})); + connect(capMin1[1].y, PLRs5.uUpCapMin) annotation (Line(points={{-358,-90},{ + -90,-90},{-90,-147},{-42,-147}}, + color={0,0,127})); + connect(capDes[3].y, PLRs2.uCapDes) annotation (Line(points={{-358,310},{140,310}, + {140,202},{178,202}}, color={0,0,127})); + connect(capDes[3].y, PLRs2.uUpCapDes) annotation (Line(points={{-358,310},{140, + 310},{140,200},{178,200}}, color={0,0,127})); + connect(capDes[2].y, PLRs2.uDowCapDes) annotation (Line(points={{-358,310},{140, + 310},{140,198},{178,198}}, color={0,0,127})); + connect(capMin[3].y, PLRs2.uCapMin) annotation (Line(points={{-358,270},{138,270}, + {138,195},{178,195}}, color={0,0,127})); + connect(capMin[3].y, PLRs2.uUpCapMin) annotation (Line(points={{-358,270},{138, + 270},{138,193},{178,193}}, color={0,0,127})); + connect(capDes1[3].y, PLRs6.uCapDes) annotation (Line(points={{-358,-50},{140, + -50},{140,-138},{178,-138}}, color={0,0,127})); + connect(capDes1[3].y, PLRs6.uUpCapDes) annotation (Line(points={{-358,-50},{ + 140,-50},{140,-140},{178,-140}}, + color={0,0,127})); + connect(capDes1[2].y, PLRs6.uDowCapDes) annotation (Line(points={{-358,-50},{ + 140,-50},{140,-142},{178,-142}}, + color={0,0,127})); + connect(capMin1[3].y, PLRs6.uCapMin) annotation (Line(points={{-358,-90},{130, + -90},{130,-145},{178,-145}}, color={0,0,127})); + connect(capMin1[3].y, PLRs6.uUpCapMin) annotation (Line(points={{-358,-90},{ + 130,-90},{130,-147},{178,-147}}, + color={0,0,127})); + connect(capMin[1].y, PLRs3.uCapDes) annotation (Line(points={{-358,270},{398,270}, + {398,202},{418,202}}, color={0,0,127})); + connect(capDes[1].y, PLRs3.uUpCapDes) annotation (Line(points={{-358,310},{400, + 310},{400,200},{418,200}}, color={0,0,127})); + connect(capMin[1].y, PLRs3.uDowCapDes) annotation (Line(points={{-358,270},{398, + 270},{398,198},{418,198}}, color={0,0,127})); + connect(capMin[1].y, PLRs3.uCapMin) annotation (Line(points={{-358,270},{398,270}, + {398,195},{418,195}}, color={0,0,127})); + connect(capMin[1].y, PLRs3.uUpCapMin) annotation (Line(points={{-358,270},{398, + 270},{398,193},{418,193}}, color={0,0,127})); +annotation ( + experiment(StopTime=1200.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/PartLoadRatios_u_uTyp.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.PartLoadRatios. +

                      +", revisions=" +
                        +
                      • +January 03, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-480,-420},{480,420}}), + graphics={Text( + extent={{-232,102},{252,40}}, + textColor={127,127,127}, + textString="Stage types: 1 - positive displacement, 2 and 3 - constant speed centrifugal"), + Text( + extent={{-256,-372},{308,-446}}, + textColor={127,127,127}, + textString="Stage types: 1 - positive displacement, 2 - variable speed centrifugal, 3 - constant speed centrifugal")})); +end PartLoadRatios_u_uTyp; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Status_u_uAva.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Status_u_uAva.mo new file mode 100644 index 00000000000..29852fd256a --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Status_u_uAva.mo @@ -0,0 +1,200 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model Status_u_uAva "Validates chiller stage status subsequence" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Status sta( + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{1,1,0},{0,1,1},{1,1,1}}) + "Tests chiller stage status" + annotation (Placement(transformation(extent={{-40,120},{-20,140}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Status sta1( + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{1,1,0},{0,1,1},{1,1,1}}) + "Tests chiller stage status at the first stage" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Status sta2( + final nSta=4, + final nChi=3, + final staMat={{0,1,0},{1,1,0},{0,1,1},{1,1,1}}) + "Tests chiller stage status with no higher stages available" + annotation (Placement(transformation(extent={{120,120},{140,140}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Status sta3( + final nSta=4, + final nChi=3, + final staMat={{0,1,0},{1,1,0},{0,1,1},{1,1,1}}) + "Tests chiller stage status with no lower stages available" + annotation (Placement(transformation(extent={{120,40},{140,60}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Status sta4( + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{1,1,0},{0,1,1},{1,1,1}}) + "Tests chiller stage status at the highest stage" + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Status sta6( + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{1,1,0},{0,1,1},{1,1,1}}) + "Tests for unavailable current stage input" + annotation (Placement(transformation(extent={{120,-60},{140,-40}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Status sta7( + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{1,1,0},{0,1,1},{1,1,1}}) + "Tests for unavailable current stage input, with no higher stages available" + annotation (Placement(transformation(extent={{120,-130},{140,-110}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Status sta5( + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{1,1,0},{0,1,1},{1,1,1}}) + "Tests chiller stage status at zero current stage" + annotation (Placement(transformation(extent={{-40,-140},{-20,-120}}))); + +protected + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u(final k=3) + "Chiller stage" + annotation (Placement(transformation(extent={{-140,100},{-120,120}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u1(final k=2) + "Chiller stage" + annotation (Placement(transformation(extent={{-140,20},{-120,40}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u2(final k=3) + "Chiller stage" + annotation (Placement(transformation(extent={{20,100},{40,120}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u3(final k=1) + "Chiller stage" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u4(final k=4) + "Chiller stage" + annotation (Placement(transformation(extent={{-140,-80},{-120,-60}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u5(final k=2) + "Chiller stage" + annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant u7(final k=0) + "Chiller stage" + annotation (Placement(transformation(extent={{-140,-160},{-120,-140}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant ava[4]( + final k={true,true,true,true}) "Stage availability array" + annotation (Placement(transformation(extent={{-140,140},{-120,160}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant ava1[4]( + final k={false,true,true,true}) "Stage availability array" + annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant ava2[4]( + final k={true,false,true,false}) "Stage availability array" + annotation (Placement(transformation(extent={{20,140},{40,160}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant ava3[4]( + final k={true,false,true,false}) "Stage availability array" + annotation (Placement(transformation(extent={{20,60},{40,80}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant ava6[4]( + final k={true,true,false,false}) "Stage availability array" + annotation (Placement(transformation(extent={{20,-120},{40,-100}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea "Type converter" + annotation (Placement(transformation(extent={{20,-160},{40,-140}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Type converter" + annotation (Placement(transformation(extent={{80,-160},{100,-140}}))); + + Buildings.Controls.OBC.CDL.Discrete.UnitDelay uniDel( + final samplePeriod=1, + final y_start=3) "Unit delay" + annotation (Placement(transformation(extent={{50,-160},{70,-140}}))); + +equation + connect(ava.y, sta.uAva) annotation (Line(points={{-118,150},{-80,150},{-80, + 124},{-42,124}}, + color={255,0,255})); + connect(u.y, sta.u) annotation (Line(points={{-118,110},{-60,110},{-60,136},{ + -42,136}}, + color={255,127,0})); + connect(ava1.y, sta1.uAva) annotation (Line(points={{-118,70},{-80,70},{-80, + 44},{-42,44}}, + color={255,0,255})); + connect(u1.y, sta1.u) annotation (Line(points={{-118,30},{-60,30},{-60,56},{ + -42,56}}, + color={255,127,0})); + connect(ava2.y, sta2.uAva) annotation (Line(points={{42,150},{80,150},{80,124}, + {118,124}}, color={255,0,255})); + connect(u2.y, sta2.u) annotation (Line(points={{42,110},{100,110},{100,136},{ + 118,136}}, + color={255,127,0})); + connect(ava3.y, sta3.uAva) annotation (Line(points={{42,70},{80,70},{80,44},{ + 118,44}}, + color={255,0,255})); + connect(u3.y, sta3.u) annotation (Line(points={{42,30},{100,30},{100,56},{118, + 56}}, color={255,127,0})); + connect(u4.y, sta4.u) annotation (Line(points={{-118,-70},{-80,-70},{-80,-44}, + {-42,-44}}, color={255,127,0})); + connect(u5.y, sta6.u) annotation (Line(points={{42,-70},{100,-70},{100,-44},{ + 118,-44}}, + color={255,127,0})); + connect(ava6.y, sta7.uAva) annotation (Line(points={{42,-110},{80,-110},{80, + -126},{118,-126}}, + color={255,0,255})); + connect(u7.y, sta5.u) annotation (Line(points={{-118,-150},{-80,-150},{-80, + -124},{-42,-124}}, + color={255,127,0})); + connect(ava.y, sta4.uAva) annotation (Line(points={{-118,150},{-100,150},{ + -100,-56},{-42,-56}}, + color={255,0,255})); + connect(ava.y, sta5.uAva) annotation (Line(points={{-118,150},{-100,150},{ + -100,-136},{-42,-136}}, + color={255,0,255})); + connect(ava3.y, sta6.uAva) annotation (Line(points={{42,70},{60,70},{60,-56}, + {118,-56}},color={255,0,255})); + connect(intToRea.y, uniDel.u) + annotation (Line(points={{42,-150},{48,-150}}, color={0,0,127})); + connect(uniDel.y, reaToInt.u) + annotation (Line(points={{72,-150},{78,-150}}, color={0,0,127})); + connect(reaToInt.y, sta7.u) annotation (Line(points={{102,-150},{110,-150},{ + 110,-114},{118,-114}}, + color={255,127,0})); + connect(sta7.yAvaUp, intToRea.u) annotation (Line(points={{142,-113},{148,-113}, + {148,-168},{8,-168},{8,-150},{18,-150}}, color={255,127,0})); +annotation ( + experiment(StopTime=10.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Status_u_uAva.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Status. +

                      +", revisions=" +
                        +
                      • +March 26, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-160,-180},{160,180}}))); +end Status_u_uAva; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Up.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Up.mo new file mode 100644 index 00000000000..a30a0485f89 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Up.mo @@ -0,0 +1,198 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation; +model Up "Validate change stage up condition sequence" + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Up + staUp(have_locSen=true, effConTruDelay=900) + "Generates stage up signal" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Up + staUp1(final have_WSE=true, have_locSen=true) + "Generates stage up signal" + annotation (Placement(transformation(extent={{140,50},{160,70}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant avaCur( + final k=true) + "Current stage availability" + annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant avaCur1( + final k=true) + "Current stage availability" + annotation (Placement(transformation(extent={{80,-70},{100,-50}}))); + + CDL.Logical.Sources.Pulse booPul(final width=0.1, + final period=3600) + "Enabled plant" + annotation (Placement(transformation(extent={{-160,-100},{-140,-80}}))); + CDL.Logical.Not not1 + "Logical not" + annotation (Placement(transformation(extent={{-120,-100},{-100,-80}}))); +protected + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage0( + final k=0) "0th stage" + annotation (Placement(transformation(extent={{-160,110},{-140,130}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant stage1( + final k=1) "1st stage" + annotation (Placement(transformation(extent={{20,110},{40,130}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet( + final k=273.15 + 14) "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-160,-10},{-140,10}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWatSet( + final k=65*6895) "Chilled water differential pressure setpoint" + annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TCWSup( + final amplitude=3, + final freqHz=1/3600, + final offset=273.15 + 16) "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-160,-50},{-140,-30}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin dpChiWat( + final amplitude=6895, + final startTime=300, + final freqHz=1/1200, + final offset=63*6895) "Chilled water differential pressure" + annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin Ope( + final phase(displayUnit="rad"), + final startTime=0, + final offset=0.85, + final freqHz=1/2100, + final amplitude=0.05) "Operating part load ratio of the current stage" + annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant StaUp( + final k=0.8) + "Staging part load ratio of the next stage up" + annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet1( + final k=273.15 + 14) "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWatSet1( + final k=65*6895) + "Chilled water differential pressure setpoint" + annotation (Placement(transformation(extent={{60,10},{80,30}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TCWSup1( + final amplitude=3, + final offset=273.15 + 15.5, + final freqHz=1/3600) + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin dpChiWat1( + final amplitude=6895, + phase=-0.78539816339745, + final startTime=300, + final freqHz=1/1200, + final offset=63*6895) "Chilled water differential pressure" + annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin Ope1( + final amplitude=0.1, + final phase(displayUnit="rad"), + final startTime=0, + final offset=0.85, + final freqHz=1/2100) "Operating part load ratio of the current stage" + annotation (Placement(transformation(extent={{60,90},{80,110}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant StaUp1( + final k=0.8) + "Staging part load ratio of the next stage up" + annotation (Placement(transformation(extent={{60,50},{80,70}}))); + +equation + + connect(StaUp.y, staUp.uStaUp) annotation (Line(points={{-98,60},{-88,60},{ + -88,69},{-42,69}}, color={0,0,127})); + connect(Ope.y, staUp.uOpe) annotation (Line(points={{-98,100},{-80,100},{-80, + 71},{-42,71}}, + color={0,0,127})); + connect(TCWSupSet.y, staUp.TChiWatSupSet) annotation (Line(points={{-138,0},{ + -80,0},{-80,67},{-42,67}}, color={0,0,127})); + connect(TCWSup.y, staUp.TChiWatSup) annotation (Line(points={{-138,-40},{-74, + -40},{-74,65},{-42,65}},color={0,0,127})); + connect(dpChiWatSet.y, staUp.dpChiWatPumSet_local) annotation (Line(points={{-98,20}, + {-68,20},{-68,63},{-42,63}}, color={0,0,127})); + connect(dpChiWat.y, staUp.dpChiWatPum_local) annotation (Line(points={{-98,-20}, + {-62,-20},{-62,61},{-42,61}}, color={0,0,127})); + connect(stage0.y, staUp.u) annotation (Line(points={{-138,120},{-56,120},{-56, + 55},{-42,55}}, color={255,127,0})); + connect(StaUp1.y, staUp1.uStaUp) annotation (Line(points={{82,60},{92,60},{92, + 69},{138,69}}, color={0,0,127})); + connect(Ope1.y, staUp1.uOpe) annotation (Line(points={{82,100},{100,100},{100, + 71},{138,71}}, color={0,0,127})); + connect(TCWSupSet1.y, staUp1.TChiWatSupSet) annotation (Line(points={{42,0},{ + 100,0},{100,67},{138,67}}, color={0,0,127})); + connect(TCWSup1.y, staUp1.TChiWatSup) annotation (Line(points={{42,-40},{106, + -40},{106,65},{138,65}}, color={0,0,127})); + connect(dpChiWatSet1.y, staUp1.dpChiWatPumSet_local) annotation (Line(points={{82,20}, + {112,20},{112,63},{138,63}}, color={0,0,127})); + connect(dpChiWat1.y, staUp1.dpChiWatPum_local) annotation (Line(points={{82,-20}, + {118,-20},{118,61},{138,61}}, color={0,0,127})); + connect(stage1.y, staUp1.u) annotation (Line(points={{42,120},{124,120},{124, + 55},{138,55}}, + color={255,127,0})); + connect(avaCur.y, staUp.uAvaCur) annotation (Line(points={{-78,-60},{-56,-60}, + {-56,53},{-42,53}}, color={255,0,255})); + connect(avaCur1.y, staUp1.uAvaCur) annotation (Line(points={{102,-60},{124, + -60},{124,53},{138,53}}, color={255,0,255})); + connect(booPul.y, not1.u) + annotation (Line(points={{-138,-90},{-122,-90}}, color={255,0,255})); + connect(not1.y, staUp.uPla) annotation (Line(points={{-98,-90},{-50,-90},{-50, + 51},{-42,51}}, color={255,0,255})); + connect(avaCur1.y, staUp1.uPla) annotation (Line(points={{102,-60},{124,-60}, + {124,51},{138,51}}, color={255,0,255})); +annotation ( + experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Up.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Up. +

                      +", revisions=" +
                        +
                      • +March 26, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-180,-140},{180, + 140}}), + graphics={ + Text( + extent={{-138,-110},{-76,-134}}, + textColor={0,0,127}, + textString="Tests stage 0 to stage 1 enable +based on chilled water supply +temperature. + +Other inputs are kept the same +as in the example on the right."), + Text( + extent={{46,-108},{106,-130}}, + textColor={0,0,127}, + textString="Tests stage up enable for any stage above +and including stage 1. In this test the plant has a WSE. +The same applies for any stage in case the plant does not have a WSE.")})); +end Up; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/package.mo new file mode 100644 index 00000000000..c33089f4696 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences; +package Validation "Collection of validation models" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}}), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/package.order new file mode 100644 index 00000000000..ee24e61ea07 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/package.order @@ -0,0 +1,14 @@ +Capacities_u +Capacities_uLow_uHig +CapacityRequirement +Change +ChillerIndices_u +Configurator_uChiAva +Down +EfficiencyCondition +FailsafeCondition +Initial_WSE +Initial_noWSE +PartLoadRatios_u_uTyp +Status_u_uAva +Up diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/package.mo new file mode 100644 index 00000000000..97309c02001 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/package.mo @@ -0,0 +1,40 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints; +package Subsequences "Chiller staging subsequences" +annotation (preferredView="info", Documentation(info=" +

                      This package contains chiller stage setpoint control subsequences.

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Subsequences; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/package.order new file mode 100644 index 00000000000..420994352a2 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/package.order @@ -0,0 +1,13 @@ +Capacities +CapacityRequirement +Change +ChillerIndices +Configurator +Down +EfficiencyCondition +FailsafeCondition +Initial +PartLoadRatios +Status +Up +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_WSE.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_WSE.mo new file mode 100644 index 00000000000..14dd3668963 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_WSE.mo @@ -0,0 +1,436 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Validation; +model SetpointController_WSE + "Validates chiller stage status setpoint signal generation for plants with WSE" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.SetpointController + staSetCon( + final have_WSE=true, + final have_locSen=true, + final chiDesCap={500000,700000}, + final chiMinCap={100000,200000}, + final chiTyp={Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement}) + "Chiller stage setpoint controller" + annotation (Placement(transformation(extent={{60,140},{80,180}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.SetpointController + staSetCon1( + final have_WSE=true, + final have_locSen=true, + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{0,1,0},{1,1,0},{1,1,1}}, + final chiDesCap={300000,400000,500000}, + final chiMinCap={50000,100000,150000}, + final chiTyp={Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.constantSpeedCentrifugal}) + "Chiller stage setpoint controller" + annotation (Placement(transformation(extent={{60,-100},{80,-60}}))); + +protected + parameter Real TChiWatSupSet( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=285.15 + "Chilled water supply set temperature"; + + parameter Real aveTChiWatRet( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=288.15 + "Average measured chilled water return temperature"; + + parameter Real minStaRuntime( + final unit="s", + final quantity="Time", + displayUnit="h")=900 + "Minimum stage runtime"; + + parameter Real aveVChiWat_flow( + final unit="m3/s", + final quantity="VolumeFlowRate", + displayUnit="m3/s")=0.05 + "Average measured chilled water flow rate"; + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatRet( + final amplitude=7, + final offset=273.15 + 15, + final freqHz=1/21600) + "Chilled water return temeprature" + annotation (Placement(transformation(extent={{-200,140},{-180,160}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiWatFlow( + final offset=0, + final freqHz=1/21600, + final amplitude=0.037) + "Chilled water flow" + annotation (Placement(transformation(extent={{-200,100},{-180,120}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiAva[2]( + final k={true,true}) + "Chiller availability vector" + annotation (Placement(transformation(extent={{-120,200},{-100,220}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max "Maximum" + annotation (Placement(transformation(extent={{-160,100},{-140,120}}))); + + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol( + final samplePeriod=10) "Zero order hold" + annotation (Placement(transformation(extent={{140,140},{160,160}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea + "Integer to real conversion" + annotation (Placement(transformation(extent={{100,140},{120,160}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Real to integer conversion" + annotation (Placement(transformation(extent={{180,140},{200,160}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol( + final trueHoldDuration=100, + final falseHoldDuration=0) + "True hold to visualize the stage change initiation" + annotation (Placement(transformation(extent={{100,60},{120,80}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre "Pre block" + annotation (Placement(transformation(extent={{140,60},{160,80}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant plaSta( + final k=true) + "Plant status" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=10, + final delayOnInit=true) "True delay" + annotation (Placement(transformation(extent={{-20,50},{0,70}}))); + + Buildings.Controls.OBC.CDL.Reals.AddParameter wseTPre( + final p=-3) "Predicted WSE outlet temperature" + annotation (Placement(transformation(extent={{0,200},{20,220}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TCWSup( + final height=-2.1, + final duration=300, + final offset=273.15 + 16, + final startTime=1500) "Chilled water supply temperature ramp" + annotation (Placement(transformation(extent={{-120,100},{-100,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable wseSta( + final table=[0,1; 1500,1; 1500,0; 12500,0; + 12500,1; 14000,1], smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments) + "WSE is on during low loads, off during high loads" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( + final t=0.5) "Greater threshold" + annotation (Placement(transformation(extent={{-20,10},{0,30}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatRet1( + final amplitude=7, + final offset=273.15 + 15, + final freqHz=1/21600) + "Chilled water return temeprature" + annotation (Placement(transformation(extent={{-200,-100},{-180,-80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiWatFlow1( + final offset=0, + final freqHz=1/21600, + final amplitude=0.037) + "Chilled water flow" + annotation (Placement(transformation(extent={{-200,-140},{-180,-120}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiAva1[3]( + final k={true,true,true}) + "Chiller availability vector" + annotation (Placement(transformation(extent={{-120,-40},{-100,-20}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max1 "Maximum" + annotation (Placement(transformation(extent={{-160,-140},{-140,-120}}))); + + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol1( + final samplePeriod=10) "Zero order hold" + annotation (Placement(transformation(extent={{140,-100},{160,-80}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea1 + "Type converter" + annotation (Placement(transformation(extent={{100,-100},{120,-80}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Type converter" + annotation (Placement(transformation(extent={{180,-100},{200,-80}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol1(final + trueHoldDuration=100, final falseHoldDuration=0) + "True hold to visualize the stage change initiation" + annotation (Placement(transformation(extent={{100,-180},{120,-160}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre1 "Logical pre" + annotation (Placement(transformation(extent={{140,-180},{160,-160}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant plaSta1( + final k=true) "Plant status" + annotation (Placement(transformation(extent={{-60,-180},{-40,-160}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel1( + final delayTime=10, + final delayOnInit=true) "True delay" + annotation (Placement(transformation(extent={{-20,-180},{0,-160}}))); + + Buildings.Controls.OBC.CDL.Reals.AddParameter wseTPre1( + final p=-3) + "Predicted WSE outlet temperature" + annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TCWSup1( + final height=-2.1, + final duration=300, + final offset=273.15 + 16, + final startTime=1500) "Chilled water supply temperature ramp" + annotation (Placement(transformation(extent={{-120,-140},{-100,-120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable wseSta1( + final table=[0,1; 1500,1; 1500,0; 12500,0; + 12500,1; 14000,1], smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments) + "WSE is on during low loads, off during high loads" + annotation (Placement(transformation(extent={{-60,-220},{-40,-200}}))); + + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( + final t=0.5) "Greater than threshold" + annotation (Placement(transformation(extent={{-20,-220},{0,-200}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWat( + final k=65*6895) + "Chilled water differential pressure" + annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet( + final k=273.15 + 14) + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-120,160},{-100,180}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWatSet( + final k=65*6895) + "Chilled water differential pressure setpoint" + annotation (Placement(transformation(extent={{-120,60},{-100,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zero( + final k=0) "Constant" + annotation (Placement(transformation(extent={{-200,60},{-180,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp maxTowFanSpe( + final height=-0.05, + final duration=60, + final offset=1, + final startTime=13000) "Constant" + annotation (Placement(transformation(extent={{-160,180},{-140,200}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWat1( + final k=65*6895) + "Chilled water differential pressure" + annotation (Placement(transformation(extent={{-120,-230},{-100,-210}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet1( + final k=273.15 + 14) + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-120,-80},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWatSet1( + final k=65*6895) + "Chilled water differential pressure setpoint" + annotation (Placement(transformation(extent={{-120,-180},{-100,-160}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zero1( + final k=0) "Constant" + annotation (Placement(transformation(extent={{-200,-180},{-180,-160}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp maxTowFanSpe1( + final height=-0.05, + final duration=60, + final offset=1, + final startTime=13000) "Constant" + annotation (Placement(transformation(extent={{-160,-60},{-140,-40}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant tunPar( + final k=0.06) + "Assume a constant tuning parameter" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + + Buildings.Controls.OBC.CDL.Reals.AddParameter TOutWet( + final p=-10) + "Predicted WSE outlet temperature" + annotation (Placement(transformation(extent={{-60,120},{-40,140}}))); + + Buildings.Controls.OBC.CDL.Reals.AddParameter TOutWet1( + final p=-10) + "Predicted WSE outlet temperature" + annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); + +equation + connect(dpChiWatSet.y, staSetCon.dpChiWatPumSet_local) annotation (Line( + points={{-98,70},{-92,70},{-92,159.048},{58,159.048}}, color={0,0,127})); + connect(dpChiWat.y, staSetCon.dpChiWatPum_local) annotation (Line(points={{-98,20}, + {-90,20},{-90,157.143},{58,157.143}}, color={0,0,127})); + connect(chiAva.y,staSetCon. uChiAva) annotation (Line(points={{-98,210},{-28, + 210},{-28,175.238},{58,175.238}}, + color={255,0,255})); + connect(zero.y,max. u2) annotation (Line(points={{-178,70},{-170,70},{-170, + 104},{-162,104}}, + color={0,0,127})); + connect(chiWatFlow.y,max. u1) annotation (Line(points={{-178,110},{-170,110}, + {-170,116},{-162,116}},color={0,0,127})); + connect(staSetCon.VChiWat_flow,max. y) annotation (Line(points={{58,140.952}, + {-130,140.952},{-130,110},{-138,110}}, + color={0,0,127})); + connect(TChiWatRet.y,staSetCon. TChiWatRet) annotation (Line(points={{-178, + 150},{-130,150},{-130,144.762},{58,144.762}}, + color={0,0,127})); + connect(staSetCon.ySta,intToRea. u) + annotation (Line(points={{82,150.476},{92,150.476},{92,150},{98,150}}, + color={255,127,0})); + connect(intToRea.y,zerOrdHol. u) + annotation (Line(points={{122,150},{138,150}}, + color={0,0,127})); + connect(zerOrdHol.y,reaToInt. u) + annotation (Line(points={{162,150},{178,150}}, + color={0,0,127})); + connect(reaToInt.y, staSetCon.uSta) annotation (Line(points={{202,150},{210, + 150},{210,100},{50,100},{50,170.476},{58,170.476}}, + color={255,127,0})); + connect(staSetCon.yChaEdg, truFalHol.u) annotation (Line(points={{82,166.667}, + {90,166.667},{90,70},{98,70}}, + color={255,0,255})); + connect(truFalHol.y,pre. u) + annotation (Line(points={{122,70},{138,70}}, color={255,0,255})); + connect(pre.y,staSetCon. chaPro) annotation (Line(points={{162,70},{170,70},{ + 170,50},{36,50},{36,177.143},{58,177.143}}, + color={255,0,255})); + connect(truDel.y,staSetCon. uPla) annotation (Line(points={{2,60},{30,60},{30, + 173.333},{58,173.333}}, + color={255,0,255})); + connect(maxTowFanSpe.y, staSetCon.uTowFanSpeMax) annotation (Line(points={{-138, + 190},{34,190},{34,147.619},{58,147.619}}, + color={0,0,127})); + connect(TCWSupSet.y, wseTPre.u) annotation (Line(points={{-98,170},{-80,170}, + {-80,216},{-16,216},{-16,210},{-2,210}}, color={0,0,127})); + connect(TCWSupSet.y, staSetCon.TChiWatSupSet) annotation (Line(points={{-98,170}, + {-20,170},{-20,167.619},{58,167.619}}, + color={0,0,127})); + connect(TCWSup.y, staSetCon.TChiWatSup) annotation (Line(points={{-98,110},{ + -70,110},{-70,165.714},{58,165.714}}, color={0,0,127})); + connect(greThr.y, staSetCon.uWseSta) annotation (Line(points={{2,20},{32,20}, + {32,179.048},{58,179.048}}, + color={255,0,255})); + connect(dpChiWatSet1.y, staSetCon1.dpChiWatPumSet_local) annotation (Line( + points={{-98,-170},{-92,-170},{-92,-80.9524},{58,-80.9524}}, color={0, + 0,127})); + connect(dpChiWat1.y, staSetCon1.dpChiWatPum_local) annotation (Line(points={{-98, + -220},{-88,-220},{-88,-82.8571},{58,-82.8571}}, color={0,0,127})); + connect(chiAva1.y, staSetCon1.uChiAva) annotation (Line(points={{-98,-30},{ + -28,-30},{-28,-64.7619},{58,-64.7619}}, + color={255,0,255})); + connect(zero1.y, max1.u2) annotation (Line(points={{-178,-170},{-170,-170},{ + -170,-136},{-162,-136}}, color={0,0,127})); + connect(chiWatFlow1.y, max1.u1) annotation (Line(points={{-178,-130},{-170, + -130},{-170,-124},{-162,-124}}, color={0,0,127})); + connect(staSetCon1.VChiWat_flow, max1.y) annotation (Line(points={{58, + -99.0476},{-130,-99.0476},{-130,-130},{-138,-130}}, + color={0,0,127})); + connect(TChiWatRet1.y, staSetCon1.TChiWatRet) annotation (Line(points={{-178, + -90},{-130,-90},{-130,-95.2381},{58,-95.2381}}, + color={0,0,127})); + connect(staSetCon1.ySta, intToRea1.u) + annotation (Line(points={{82,-89.5238},{92,-89.5238},{92,-90},{98,-90}}, + color={255,127,0})); + connect(intToRea1.y, zerOrdHol1.u) + annotation (Line(points={{122,-90},{138,-90}}, color={0,0,127})); + connect(zerOrdHol1.y, reaToInt1.u) + annotation (Line(points={{162,-90},{178,-90}}, color={0,0,127})); + connect(reaToInt1.y, staSetCon1.uSta) annotation (Line(points={{202,-90},{210, + -90},{210,-140},{50,-140},{50,-69.5238},{58,-69.5238}}, + color={255,127,0})); + connect(staSetCon1.yChaEdg, truFalHol1.u) annotation (Line(points={{82, + -73.3333},{90,-73.3333},{90,-170},{98,-170}}, + color={255,0,255})); + connect(truFalHol1.y, pre1.u) + annotation (Line(points={{122,-170},{138,-170}}, color={255,0,255})); + connect(pre1.y, staSetCon1.chaPro) annotation (Line(points={{162,-170},{170, + -170},{170,-190},{36,-190},{36,-62.8571},{58,-62.8571}}, + color={255,0,255})); + connect(plaSta1.y, truDel1.u) + annotation (Line(points={{-38,-170},{-22,-170}}, color={255,0,255})); + connect(truDel1.y, staSetCon1.uPla) annotation (Line(points={{2,-170},{26, + -170},{26,-66.6667},{58,-66.6667}}, + color={255,0,255})); + connect(maxTowFanSpe1.y, staSetCon1.uTowFanSpeMax) annotation (Line(points={{-138, + -50},{34,-50},{34,-92.381},{58,-92.381}}, + color={0,0,127})); + connect(TCWSupSet1.y, wseTPre1.u) annotation (Line(points={{-98,-70},{-80,-70}, + {-80,-24},{-16,-24},{-16,-30},{-2,-30}}, color={0,0,127})); + connect(staSetCon1.TWsePre, wseTPre1.y) annotation (Line(points={{58,-97.1429}, + {30,-97.1429},{30,-30},{22,-30}}, color={0,0,127})); + connect(TCWSupSet1.y, staSetCon1.TChiWatSupSet) annotation (Line(points={{-98,-70}, + {-20,-70},{-20,-72.381},{58,-72.381}}, + color={0,0,127})); + connect(TCWSup1.y, staSetCon1.TChiWatSup) annotation (Line(points={{-98,-130}, + {-70,-130},{-70,-74.2857},{58,-74.2857}}, + color={0,0,127})); + connect(wseSta1.y[1], greThr1.u) + annotation (Line(points={{-38,-210},{-22,-210}}, color={0,0,127})); + connect(greThr1.y, staSetCon1.uWseSta) annotation (Line(points={{2,-210},{32, + -210},{32,-60.9524},{58,-60.9524}}, + color={255,0,255})); + connect(plaSta.y, truDel.u) annotation (Line(points={{-38,60},{-22,60}}, + color={255,0,255})); + connect(wseSta.y[1], greThr.u) + annotation (Line(points={{-38,20},{-22,20}}, color={0,0,127})); + connect(tunPar.y, staSetCon.uTunPar) annotation (Line(points={{-38,100},{20, + 100},{20,149.524},{58,149.524}}, + color={0,0,127})); + connect(tunPar.y, staSetCon1.uTunPar) annotation (Line(points={{-38,100},{40, + 100},{40,-90.4762},{58,-90.4762}}, + color={0,0,127})); + connect(TCWSupSet.y, TOutWet.u) annotation (Line(points={{-98,170},{-80,170},{ + -80,130},{-62,130}}, color={0,0,127})); + connect(TOutWet.y, staSetCon.TOutWet) annotation (Line(points={{-38,130},{0, + 130},{0,151.429},{58,151.429}}, + color={0,0,127})); + connect(wseTPre.y, staSetCon.TWsePre) annotation (Line(points={{22,210},{40, + 210},{40,142.857},{58,142.857}}, + color={0,0,127})); + connect(TCWSupSet1.y, TOutWet1.u) annotation (Line(points={{-98,-70},{-80,-70}, + {-80,-120},{-62,-120}}, color={0,0,127})); + connect(TOutWet1.y, staSetCon1.TOutWet) annotation (Line(points={{-38,-120},{ + 28,-120},{28,-88.5714},{58,-88.5714}}, + color={0,0,127})); +annotation ( + experiment(StopTime=14000.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_WSE.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.SetpointController. +

                      +", revisions=" +
                        +
                      • +March 26, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-220,-240},{220,240}}))); +end SetpointController_WSE; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_noWSE.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_noWSE.mo new file mode 100644 index 00000000000..399ad06793a --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_noWSE.mo @@ -0,0 +1,328 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Validation; +model SetpointController_noWSE + "Validates chiller stage status setpoint signal generation for plants without WSE" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.SetpointController + staSetCon( + have_locSen=true, + final chiDesCap={500000,700000}, + final chiMinCap={100000,200000}, + final chiTyp={Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement}) + "Chiller stage setpoint controller" + annotation (Placement(transformation(extent={{60,140},{84,178}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.SetpointController + staSetCon1( + final have_WSE=false, + have_locSen=true, + final nSta=4, + final nChi=3, + final staMat={{1,0,0},{0,1,0},{1,1,0},{1,1,1}}, + final chiDesCap={300000,400000,500000}, + final chiMinCap={50000,100000,150000}, + final chiTyp={Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.constantSpeedCentrifugal}) + "Chiller stage setpoint controller" + annotation (Placement(transformation(extent={{60,-100},{84,-62}}))); + +protected + Real TChiWatSupSet( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=285.15 + "Chilled water supply set temperature"; + + parameter Real aveTChiWatRet( + final unit="K", + final quantity="ThermodynamicTemperature", + displayUnit="degC")=288.15 + "Average measured chilled water return temperature"; + + parameter Real minStaRuntime( + final unit="s", + final quantity="Time", + displayUnit="h")=900 + "Minimum stage runtime"; + + parameter Real aveVChiWat_flow( + final unit="m3/s", + final quantity="VolumeFlowRate", + displayUnit="m3/s")=0.05 + "Average measured chilled water flow rate"; + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol(final + trueHoldDuration=100, final falseHoldDuration=0) + "False hold to visualize the stage change initiation" + annotation (Placement(transformation(extent={{100,60},{120,80}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol1(final + trueHoldDuration=100, final falseHoldDuration=0) + "False hold to visualize the stage change initiation" + annotation (Placement(transformation(extent={{100,-180},{120,-160}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatRet( + final amplitude=7, + final offset=273.15 + 15, + final freqHz=1/21600) + "Chilled water return temeprature" + annotation (Placement(transformation(extent={{-200,140},{-180,160}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiWatFlow( + final offset=0, + final freqHz=1/21600, + final amplitude=0.037) + "Chilled water flow" + annotation (Placement(transformation(extent={{-200,100},{-180,120}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiAva[2]( + final k={true,true}) + "Chiller availability vector" + annotation (Placement(transformation(extent={{-120,200},{-100,220}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max "Maximum" + annotation (Placement(transformation(extent={{-160,80},{-140,100}}))); + + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol( + final samplePeriod=10) "Short plant start delay" + annotation (Placement(transformation(extent={{140,140},{160,160}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea "Type converter" + annotation (Placement(transformation(extent={{100,140},{120,160}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Type converter" + annotation (Placement(transformation(extent={{180,140},{200,160}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre "Pre block" + annotation (Placement(transformation(extent={{140,60},{160,80}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant plaSta( + final k=true) "Plant status" + annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=10, + final delayOnInit=true) "True delay" + annotation (Placement(transformation(extent={{-20,60},{0,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatRet1( + final amplitude=7, + final offset=273.15 + 15, + final freqHz=1/21600) + "Chilled water return temeprature" + annotation (Placement(transformation(extent={{-200,-100},{-180,-80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiWatFlow1( + final offset=0, + final freqHz=1/21600, + final amplitude=0.037) + "Chilled water flow" + annotation (Placement(transformation(extent={{-200,-140},{-180,-120}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiAva1[3]( + final k={true,true,true}) + "Chiller availability vector" + annotation (Placement(transformation(extent={{-120,-40},{-100,-20}}))); + + Buildings.Controls.OBC.CDL.Reals.Max max1 "Maximum" + annotation (Placement(transformation(extent={{-160,-160},{-140,-140}}))); + + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol1( + final samplePeriod=10) "Zero order hold" + annotation (Placement(transformation(extent={{140,-100},{160,-80}}))); + + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea1 "Type converter" + annotation (Placement(transformation(extent={{100,-100},{120,-80}}))); + + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Type converter" + annotation (Placement(transformation(extent={{180,-100},{200,-80}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre pre1 "Pre block" + annotation (Placement(transformation(extent={{140,-180},{160,-160}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant plaSta1( + final k=true) "Plant status" + annotation (Placement(transformation(extent={{-60,-180},{-40,-160}}))); + + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel1( + final delayTime=10, + final delayOnInit=true) "True delay" + annotation (Placement(transformation(extent={{-20,-180},{0,-160}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWat( + final k=65*6895) + "Chilled water differential pressure" + annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet( + final k=273.15 + 14) + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-120,160},{-100,180}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWatSet( + final k=65*6895) + "Chilled water differential pressure setpoint" + annotation (Placement(transformation(extent={{-120,60},{-100,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSup( + final k=273.15 + 14) + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-120,100},{-100,120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zero( + final k=0) "Constant" + annotation (Placement(transformation(extent={{-200,60},{-180,80}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWat1( + final k=65*6895) + "Chilled water differential pressure" + annotation (Placement(transformation(extent={{-120,-230},{-100,-210}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSupSet1( + final k=273.15 + 14) + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-120,-80},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWatSet1( + final k=65*6895) + "Chilled water differential pressure setpoint" + annotation (Placement(transformation(extent={{-120,-180},{-100,-160}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCWSup1( + final k=273.15 + 14) + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-120,-140},{-100,-120}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zero1( + final k=0) "Constant" + annotation (Placement(transformation(extent={{-200,-180},{-180,-160}}))); + +equation + connect(dpChiWatSet.y, staSetCon.dpChiWatPumSet_local) annotation (Line( + points={{-98,70},{-92,70},{-92,158.095},{57.6,158.095}}, color={0,0,127})); + connect(dpChiWat.y, staSetCon.dpChiWatPum_local) annotation (Line(points={{-98,20}, + {-90,20},{-90,156.286},{57.6,156.286}}, color={0,0,127})); + connect(TCWSupSet.y, staSetCon.TChiWatSupSet) annotation (Line(points={{-98,170}, + {-32,170},{-32,166.238},{57.6,166.238}}, + color={0,0,127})); + connect(chiAva.y, staSetCon.uChiAva) annotation (Line(points={{-98,210},{-28, + 210},{-28,173.476},{57.6,173.476}}, + color={255,0,255})); + connect(TCWSup.y, staSetCon.TChiWatSup) annotation (Line(points={{-98,110},{ + -94,110},{-94,164.429},{57.6,164.429}}, + color={0,0,127})); + connect(zero.y, max.u2) annotation (Line(points={{-178,70},{-170,70},{-170,84}, + {-162,84}}, color={0,0,127})); + connect(chiWatFlow.y, max.u1) annotation (Line(points={{-178,110},{-170,110},{ + -170,96},{-162,96}}, color={0,0,127})); + connect(staSetCon.VChiWat_flow, max.y) annotation (Line(points={{57.6,140.905}, + {-130,140.905},{-130,90},{-138,90}}, + color={0,0,127})); + connect(TChiWatRet.y, staSetCon.TChiWatRet) annotation (Line(points={{-178, + 150},{-130,150},{-130,144.524},{57.6,144.524}}, + color={0,0,127})); + connect(staSetCon.ySta, intToRea.u) + annotation (Line(points={{86.4,149.952},{92,149.952},{92,150},{98,150}}, + color={255,127,0})); + connect(intToRea.y, zerOrdHol.u) + annotation (Line(points={{122,150},{138,150}}, + color={0,0,127})); + connect(zerOrdHol.y, reaToInt.u) + annotation (Line(points={{162,150},{178,150}}, + color={0,0,127})); + connect(reaToInt.y, staSetCon.uSta) annotation (Line(points={{202,150},{210, + 150},{210,100},{50,100},{50,168.952},{57.6,168.952}}, + color={255,127,0})); + connect(staSetCon.yChaEdg, truFalHol.u) annotation (Line(points={{86.4, + 165.333},{90,165.333},{90,70},{98,70}}, + color={255,0,255})); + connect(truFalHol.y, pre.u) + annotation (Line(points={{122,70},{138,70}}, color={255,0,255})); + connect(pre.y, staSetCon.chaPro) annotation (Line(points={{162,70},{170,70},{ + 170,50},{40,50},{40,175.286},{57.6,175.286}}, + color={255,0,255})); + connect(plaSta.y, truDel.u) + annotation (Line(points={{-38,70},{-22,70}}, color={255,0,255})); + connect(truDel.y, staSetCon.uPla) annotation (Line(points={{2,70},{34,70},{34, + 171.667},{57.6,171.667}}, + color={255,0,255})); + connect(dpChiWatSet1.y, staSetCon1.dpChiWatPumSet_local) annotation (Line( + points={{-98,-170},{-92,-170},{-92,-81.9048},{57.6,-81.9048}}, color={0, + 0,127})); + connect(dpChiWat1.y, staSetCon1.dpChiWatPum_local) annotation (Line(points={{-98, + -220},{-90,-220},{-90,-83.7143},{57.6,-83.7143}}, color={0,0,127})); + connect(TCWSupSet1.y, staSetCon1.TChiWatSupSet) annotation (Line(points={{-98,-70}, + {-32,-70},{-32,-73.7619},{57.6,-73.7619}}, + color={0,0,127})); + connect(chiAva1.y, staSetCon1.uChiAva) annotation (Line(points={{-98,-30},{ + -28,-30},{-28,-66.5238},{57.6,-66.5238}}, + color={255,0,255})); + connect(TCWSup1.y, staSetCon1.TChiWatSup) annotation (Line(points={{-98,-130}, + {-94,-130},{-94,-75.5714},{57.6,-75.5714}}, + color={0,0,127})); + connect(zero1.y, max1.u2) annotation (Line(points={{-178,-170},{-170,-170},{ + -170,-156},{-162,-156}}, color={0,0,127})); + connect(chiWatFlow1.y, max1.u1) annotation (Line(points={{-178,-130},{-170, + -130},{-170,-144},{-162,-144}}, color={0,0,127})); + connect(staSetCon1.VChiWat_flow, max1.y) annotation (Line(points={{57.6, + -99.0952},{-130,-99.0952},{-130,-150},{-138,-150}}, + color={0,0,127})); + connect(TChiWatRet1.y, staSetCon1.TChiWatRet) annotation (Line(points={{-178, + -90},{-130,-90},{-130,-95.4762},{57.6,-95.4762}}, + color={0,0,127})); + connect(staSetCon1.ySta, intToRea1.u) + annotation (Line(points={{86.4,-90.0476},{92,-90.0476},{92,-90},{98,-90}}, + color={255,127,0})); + connect(intToRea1.y, zerOrdHol1.u) + annotation (Line(points={{122,-90},{138,-90}}, color={0,0,127})); + connect(zerOrdHol1.y, reaToInt1.u) + annotation (Line(points={{162,-90},{178,-90}}, color={0,0,127})); + connect(reaToInt1.y, staSetCon1.uSta) annotation (Line(points={{202,-90},{210, + -90},{210,-140},{50,-140},{50,-71.0476},{57.6,-71.0476}}, + color={255,127,0})); + connect(staSetCon1.yChaEdg, truFalHol1.u) annotation (Line(points={{86.4, + -74.6667},{90,-74.6667},{90,-170},{98,-170}}, + color={255,0,255})); + connect(truFalHol1.y, pre1.u) + annotation (Line(points={{122,-170},{138,-170}}, color={255,0,255})); + connect(pre1.y, staSetCon1.chaPro) annotation (Line(points={{162,-170},{170, + -170},{170,-190},{40,-190},{40,-64.7143},{57.6,-64.7143}}, + color={255,0,255})); + connect(plaSta1.y, truDel1.u) + annotation (Line(points={{-38,-170},{-22,-170}}, color={255,0,255})); + connect(truDel1.y, staSetCon1.uPla) annotation (Line(points={{2,-170},{34, + -170},{34,-68.3333},{57.6,-68.3333}}, + color={255,0,255})); +annotation ( + experiment( + StopTime=14000, + Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_noWSE.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.SetpointController. +

                      +", revisions=" +
                        +
                      • +March 26, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}),Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-220,-240},{220,240}}))); +end SetpointController_noWSE; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/package.mo new file mode 100644 index 00000000000..48e9af3a874 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/package.mo @@ -0,0 +1,38 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints; +package Validation "Collection of validation models" + + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}}), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/package.order new file mode 100644 index 00000000000..bcc339f4b82 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/package.order @@ -0,0 +1,2 @@ +SetpointController_WSE +SetpointController_noWSE diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/package.mo new file mode 100644 index 00000000000..877214ea6cf --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/package.mo @@ -0,0 +1,11 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging; +package SetPoints "Package for chiller stage setpoint control sequences" + extends Modelica.Icons.Package; + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains chiller stage setpoint control sequences. The implementation +is based on section 5.20.4. in ASHRAE Guideline36-2021. +

                      +")); +end SetPoints; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/package.order new file mode 100644 index 00000000000..45752c2fcd2 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/package.order @@ -0,0 +1,3 @@ +SetpointController +Subsequences +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/package.mo new file mode 100644 index 00000000000..fa6c0f926ff --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/package.mo @@ -0,0 +1,41 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant; +package Staging "Chiller staging sequences" +annotation (preferredView="info", Documentation(info=" +

                      This package contains chiller staging control sequences based on +ASHRAE Guideline36-2021.

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Staging; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/package.order new file mode 100644 index 00000000000..0aa2322c4dc --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/package.order @@ -0,0 +1,2 @@ +Processes +SetPoints diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Controller.mo new file mode 100644 index 00000000000..39dda2ebd53 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Controller.mo @@ -0,0 +1,588 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers; +block Controller "Cooling tower controller" + + parameter Integer nChi=2 "Total number of chillers"; + parameter Integer totSta=5 + "Total number of plant stages, including stage zero and the stages with a WSE, if applicable"; + parameter Integer nTowCel=2 "Total number of cooling tower cells"; + parameter Integer nConWatPum=2 "Total number of condenser water pumps"; + parameter Boolean closeCoupledPlant=false + "True: the plant is close coupled, i.e. the pipe length from the chillers to cooling towers does not exceed approximately 100 feet"; + parameter Boolean have_WSE=true + "Flag to indicate if the plant has waterside economizer"; + parameter Real desCap(unit="W")=1e6 "Plant design capacity" + annotation (Dialog(group="Nominal")); + parameter Real fanSpeMin=0.1 "Minimum tower fan speed" + annotation (Dialog(group="Nominal")); + parameter Real fanSpeMax=1 "Maximum tower fan speed" + annotation (Dialog(group="Nominal")); + + // Fan speed control: when WSE is enabled + parameter Real chiMinCap[nChi]( + final unit=fill("W",nChi))={1e4,1e4} + "Minimum cyclining load below which chiller will begin cycling" + annotation (Dialog(tab="Fan speed", group="WSE enabled", + enable=have_WSE)); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController intOpeCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Controller in the mode when WSE and chillers are enabled" + annotation (Dialog(tab="Fan speed", group="WSE enabled", + enable=have_WSE)); + parameter Real kIntOpe=1 "Gain of controller" + annotation (Dialog(tab="Fan speed", group="WSE enabled", + enable=have_WSE)); + parameter Real TiIntOpe(unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="Fan speed", group="WSE enabled", + enable=have_WSE and (intOpeCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + intOpeCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real TdIntOpe(unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Fan speed", group="WSE enabled", + enable=have_WSE and (intOpeCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + intOpeCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController chiWatCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Controller in the mode when only WSE is enabled" + annotation (Dialog(tab="Fan speed", group="WSE enabled", + enable=have_WSE)); + parameter Real kWSE=1 "Gain of controller" + annotation (Dialog(tab="Fan speed", group="WSE enabled", + enable=have_WSE)); + parameter Real TiWSE(unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="Fan speed", group="WSE enabled", + enable=have_WSE and (chiWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + chiWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real TdWSE(unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Fan speed", group="WSE enabled", + enable=have_WSE and (chiWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + chiWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + + // Fan speed control: controlling condenser return water temperature when WSE is not enabled + parameter Real LIFT_min[nChi]( + final unit=fill("K",nChi))={12,12} + "Minimum LIFT of each chiller" + annotation (Dialog(tab="Fan speed", group="Return temperature control")); + parameter Real TConWatSup_nominal[nChi]( + final unit=fill("K",nChi), + displayUnit=fill("degC",nChi))={293.15,293.15} + "Condenser water supply temperature (condenser entering) of each chiller" + annotation (Dialog(tab="Fan speed", group="Return temperature control")); + parameter Real TConWatRet_nominal[nChi]( + final unit=fill("K",nChi), + displayUnit=fill("degC",nChi))={303.15,303.15} + "Condenser water return temperature (condenser leaving) of each chiller" + annotation (Dialog(tab="Fan speed", group="Return temperature control")); + parameter Real TChiWatSupMin[nChi]( + final unit=fill("K",nChi), + displayUnit=fill("degC",nChi))={278.15,278.15} + "Lowest chilled water supply temperature oc each chiller" + annotation (Dialog(tab="Fan speed", group="Return temperature control")); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController couPlaCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of coupled plant controller" + annotation (Dialog(tab="Fan speed", group="Return temperature control", + enable=closeCoupledPlant)); + parameter Real kCouPla=1 "Gain of controller" + annotation (Dialog(tab="Fan speed", group="Return temperature control", + enable=closeCoupledPlant)); + parameter Real TiCouPla(unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="Fan speed", group="Return temperature control", + enable=closeCoupledPlant and (couPlaCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + couPlaCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real TdCouPla(unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Fan speed", group="Return temperature control", + enable=closeCoupledPlant and (couPlaCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + couPlaCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real yCouPlaMax=1 "Upper limit of output" + annotation (Dialog(tab="Fan speed", group="Return temperature control", + enable=closeCoupledPlant)); + parameter Real yCouPlaMin=0 "Lower limit of output" + annotation (Dialog(tab="Fan speed", group="Return temperature control", + enable=closeCoupledPlant)); + + parameter Real samplePeriod(unit="s")=30 + "Period of sampling condenser water supply and return temperature difference" + annotation (Dialog(tab="Fan speed", group="Return temperature control", + enable=not closeCoupledPlant)); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController supWatCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Condenser supply water temperature controller for less coupled plant" + annotation (Dialog(tab="Fan speed", group="Return temperature control", + enable=not closeCoupledPlant)); + parameter Real kSupCon=1 "Gain of controller" + annotation (Dialog(tab="Fan speed", group="Return temperature control", + enable=not closeCoupledPlant)); + parameter Real TiSupCon(unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="Fan speed", group="Return temperature control", + enable=not closeCoupledPlant and (supWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + supWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real TdSupCon(unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Fan speed", group="Return temperature control", + enable=not closeCoupledPlant and (supWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + supWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real ySupConMax=1 "Upper limit of output" + annotation (Dialog(tab="Fan speed", group="Return temperature control", + enable=not closeCoupledPlant)); + parameter Real ySupConMin=0 "Lower limit of output" + annotation (Dialog(tab="Fan speed", group="Return temperature control", + enable=not closeCoupledPlant)); + parameter Real speChe=0.005 + "Lower threshold value to check fan or pump speed" + annotation (Dialog(tab="Fan speed", group="Advanced")); + parameter Real iniPlaTim(unit="s")=600 + "Time to hold return temperature at initial setpoint after plant being enabled" + annotation (Dialog(tab="Fan speed", group="Advanced")); + parameter Real ramTim(unit="s")=180 + "Time to ramp return water temperature from initial value to setpoint" + annotation (Dialog(tab="Fan speed", group="Advanced")); + parameter Real cheMinFanSpe(unit="s")=300 + "Threshold time for checking duration when tower fan equals to the minimum tower fan speed" + annotation (Dialog(tab="Fan speed", group="Advanced")); + parameter Real cheMaxTowSpe(unit="s")=300 + "Threshold time for checking duration when any enabled chiller maximum cooling speed equals to the minimum tower fan speed" + annotation (Dialog(tab="Fan speed", group="Advanced")); + parameter Real cheTowOff(unit="s")=60 + "Threshold time for checking duration when there is no enabled tower fan" + annotation (Dialog(tab="Fan speed", group="Advanced")); + + // Tower staging + parameter Real staVec[totSta]={0,0.5,1,1.5,2} + "Plant stage vector, element value like x.5 means chiller stage x plus WSE" + annotation (Dialog(tab="Tower staging", group="Nominal")); + parameter Real towCelOnSet[totSta]={0,1,1,2,2} + "Design number of tower fan cells that should be ON, according to current chiller stage and WSE status" + annotation (Dialog(tab="Tower staging")); + parameter Real chaTowCelIsoTim(unit="s")=300 + "Time to slowly change isolation valve" + annotation (Dialog(tab="Tower staging", group="Enable isolation valve")); + + // Water level control + parameter Real watLevMin( + final min=0)=0.7 + "Minimum cooling tower water level recommended by manufacturer" + annotation (Dialog(tab="Makeup water")); + parameter Real watLevMax=1 + "Maximum cooling tower water level recommended by manufacturer" + annotation (Dialog(tab="Makeup water")); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput chiLoa[nChi]( + final unit=fill("W", nChi), + final quantity=fill("HeatFlowRate", nChi)) if have_WSE + "Current cooling load of each chiller" + annotation (Placement(transformation(extent={{-140,220},{-100,260}}), + iconTransformation(extent={{-140,170},{-100,210}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Vector of chiller proven on status: true=ON" + annotation (Placement(transformation(extent={{-140,190},{-100,230}}), + iconTransformation(extent={{-140,150},{-100,190}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWse if have_WSE + "Waterside economizer proven on status: true=ON" + annotation (Placement(transformation(extent={{-140,160},{-100,200}}), + iconTransformation(extent={{-140,130},{-100,170}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uFanSpe( + final min=0, + final max=1, + final unit="1") "Measured fan speed of each tower cell" + annotation (Placement(transformation(extent={{-140,140},{-100,180}}), + iconTransformation(extent={{-140,110},{-100,150}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") if have_WSE + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-140,120},{-100,160}}), + iconTransformation(extent={{-140,90},{-100,130}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-140,100},{-100,140}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput reqPlaCap( + final unit="W", + final quantity="HeatFlowRate") "Current required plant capacity" + annotation (Placement(transformation(extent={{-140,80},{-100,120}}), + iconTransformation(extent={{-140,50},{-100,90}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uMaxTowSpeSet[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Maximum cooling tower speed setpoint from each chiller head pressure control loop" + annotation (Placement(transformation(extent={{-140,50},{-100,90}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uTowSta[nTowCel] + "Vector of tower cell proven on status: true=running tower cell" + annotation (Placement(transformation(extent={{-140,20},{-100,60}}), + iconTransformation(extent={{-140,10},{-100,50}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enabling status" + annotation (Placement(transformation(extent={{-140,0},{-100,40}}), + iconTransformation(extent={{-140,-10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatRet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Condenser water return temperature (condenser leaving)" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-140,-30},{-100,10}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpe[nConWatPum]( + final min=fill(0, nConWatPum), + final max=fill(1, nConWatPum), + final unit=fill("1", nConWatPum)) "Current condenser water pump speed" + annotation (Placement(transformation(extent={{-140,-40},{-100,0}}), + iconTransformation(extent={{-140,-50},{-100,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatSup( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") if not closeCoupledPlant + "Condenser water supply temperature (condenser entering)" + annotation (Placement(transformation(extent={{-140,-60},{-100,-20}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEnaPla + "True: plant is just enabled" + annotation(Placement(transformation(extent={{-140,-90},{-100,-50}}), + iconTransformation(extent={{-140,-90},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiSta + "Current chiller stage" + annotation (Placement(transformation(extent={{-140,-120},{-100,-80}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiStaSet + "Chiller stage setpoint" + annotation (Placement(transformation(extent={{-140,-140},{-100,-100}}), + iconTransformation(extent={{-140,-130},{-100,-90}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uTowStaCha + "Cooling tower stage change command from plant staging process" + annotation (Placement(transformation(extent={{-140,-170},{-100,-130}}), + iconTransformation(extent={{-140,-150},{-100,-110}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uIsoVal[nTowCel]( + final min=fill(0, nTowCel), + final max=fill(1, nTowCel), + final unit=fill("1", nTowCel)) + "Vector of tower cells isolation valve position" + annotation (Placement(transformation(extent={{-140,-240},{-100,-200}}), + iconTransformation(extent={{-140,-190},{-100,-150}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput watLev + "Measured water level" + annotation (Placement(transformation(extent={{-140,-260},{-100,-220}}), + iconTransformation(extent={{-140,-210},{-100,-170}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLeaCel + "Lead tower cell status setpoint" + annotation (Placement(transformation(extent={{100,-50},{140,-10}}), + iconTransformation(extent={{100,90},{140,130}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yIsoVal[nTowCel]( + final min=fill(0, nTowCel), + final max=fill(1, nTowCel), + final unit=fill("1", nTowCel)) + "Cooling tower cells isolation valve position" + annotation (Placement(transformation(extent={{100,-90},{140,-50}}), + iconTransformation(extent={{100,30},{140,70}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yTowSta[nTowCel] + "Vector of tower cells status setpoint" + annotation (Placement(transformation(extent={{100,-130},{140,-90}}), + iconTransformation(extent={{100,-70},{140,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySpeSet[nTowCel]( + final min=fill(0, nTowCel), + final max=fill(1, nTowCel), + final unit=fill("1", nTowCel)) + "Fan speed setpoint of each cooling tower cell" + annotation (Placement(transformation(extent={{100,-170},{140,-130}}), + iconTransformation(extent={{100,-130},{140,-90}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yMakUp + "Makeup water valve On-Off status" + annotation (Placement(transformation(extent={{100,-260},{140,-220}}), + iconTransformation(extent={{100,-190},{140,-150}}))); + +protected + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.Controller towFanSpe( + final nChi=nChi, + final nTowCel=nTowCel, + final nConWatPum=nConWatPum, + final closeCoupledPlant=closeCoupledPlant, + final have_WSE=have_WSE, + final desCap=desCap, + final fanSpeMin=fanSpeMin, + final fanSpeMax=fanSpeMax, + final chiMinCap=chiMinCap, + final intOpeCon=intOpeCon, + final kIntOpe=kIntOpe, + final TiIntOpe=TiIntOpe, + final TdIntOpe=TdIntOpe, + final chiWatCon=chiWatCon, + final kWSE=kWSE, + final TiWSE=TiWSE, + final TdWSE=TdWSE, + final LIFT_min=LIFT_min, + final TConWatSup_nominal=TConWatSup_nominal, + final samplePeriod=samplePeriod, + final cheMinFanSpe=cheMinFanSpe, + final cheMaxTowSpe=cheMaxTowSpe, + final cheTowOff=cheTowOff, + final iniPlaTim=iniPlaTim, + final ramTim=ramTim, + final TConWatRet_nominal=TConWatRet_nominal, + final TChiWatSupMin=TChiWatSupMin, + final couPlaCon=couPlaCon, + final kCouPla=kCouPla, + final TiCouPla=TiCouPla, + final TdCouPla=TdCouPla, + final yCouPlaMax=yCouPlaMax, + final yCouPlaMin=yCouPlaMin, + final supWatCon=supWatCon, + final kSupCon=kSupCon, + final TiSupCon=TiSupCon, + final TdSupCon=TdSupCon, + final ySupConMax=ySupConMax, + final ySupConMin=ySupConMin, + final speChe=speChe) "Tower fan speed" + annotation (Placement(transformation(extent={{-20,20},{0,60}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Controller towSta( + final have_WSE=have_WSE, + final nTowCel=nTowCel, + final nConWatPum=nConWatPum, + final totSta=totSta, + final staVec=staVec, + final towCelOnSet=towCelOnSet, + final chaTowCelIsoTim=chaTowCelIsoTim, + final speChe=speChe) "Cooling tower staging" + annotation (Placement(transformation(extent={{-20,-60},{0,-40}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.WaterLevel makUpWat( + final watLevMin=watLevMin, + final watLevMax=watLevMax) + "Make up water control" + annotation (Placement(transformation(extent={{-20,-250},{0,-230}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[nTowCel] "Logical switch" + annotation (Placement(transformation(extent={{60,-160},{80,-140}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer[nTowCel]( + final k=fill(0, nTowCel)) "Zero constant" + annotation (Placement(transformation(extent={{0,-190},{20,-170}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep( + final nout=nTowCel) "Replicate real input" + annotation (Placement(transformation(extent={{20,30},{40,50}}))); + +equation + connect(towSta.yTowSta, yTowSta) + annotation (Line(points={{2,-54},{20,-54},{20,-110},{120,-110}}, color={255,0,255})); + connect(towSta.yIsoVal, yIsoVal) + annotation (Line(points={{2,-50},{40,-50},{40,-70},{120,-70}}, color={0,0,127})); + connect(towSta.yTowSta, swi.u2) + annotation (Line(points={{2,-54},{20,-54},{20,-150},{58,-150}}, color={255,0,255})); + connect(towFanSpe.ySpeSet, reaRep.u) + annotation (Line(points={{2,40},{18,40}}, color={0,0,127})); + connect(reaRep.y, swi.u1) + annotation (Line(points={{42,40},{50,40},{50,-142},{58,-142}}, color={0,0,127})); + connect(zer.y, swi.u3) + annotation (Line(points={{22,-180},{40,-180},{40,-158},{58,-158}}, + color={0,0,127})); + connect(towFanSpe.chiLoa, chiLoa) + annotation (Line(points={{-22,59},{-40,59},{-40,240},{-120,240}}, color={0,0,127})); + connect(towFanSpe.uChi, uChi) + annotation (Line(points={{-22,56},{-44,56},{-44,210},{-120,210}}, color={255,0,255})); + connect(towFanSpe.uWse, uWse) annotation (Line(points={{-22,53},{-48,53},{-48, + 180},{-120,180}}, color={255,0,255})); + connect(towFanSpe.uFanSpe,uFanSpe) + annotation (Line(points={{-22,50},{-52,50},{-52,160},{-120,160}}, color={0,0,127})); + connect(towFanSpe.TChiWatSup, TChiWatSup) + annotation (Line(points={{-22,47},{-56,47},{-56,140},{-120,140}}, color={0,0,127})); + connect(towFanSpe.TChiWatSupSet, TChiWatSupSet) + annotation (Line(points={{-22,44},{-60,44},{-60,120},{-120,120}}, color={0,0,127})); + connect(towFanSpe.reqPlaCap, reqPlaCap) + annotation (Line(points={{-22,41},{-64,41},{-64,100},{-120,100}}, color={0,0,127})); + connect(towFanSpe.uMaxTowSpeSet, uMaxTowSpeSet) + annotation (Line(points={{-22,38},{-68,38},{-68,70},{-120,70}}, color={0,0,127})); + connect(towFanSpe.uTow, uTowSta) annotation (Line(points={{-22,35},{-76,35},{-76, + 40},{-120,40}}, color={255,0,255})); + connect(towFanSpe.uPla, uPla) + annotation (Line(points={{-22,29},{-84,29},{-84,20},{-120,20}}, color={255,0,255})); + connect(towFanSpe.TConWatRet, TConWatRet) + annotation (Line(points={{-22,26},{-80,26},{-80,0},{-120,0}}, color={0,0,127})); + connect(towFanSpe.uConWatPumSpe, uConWatPumSpe) + annotation (Line(points={{-22,23},{-72,23},{-72,-20},{-120,-20}}, color={0,0,127})); + connect(towFanSpe.TConWatSup, TConWatSup) + annotation (Line(points={{-22,21},{-68,21},{-68,-40},{-120,-40}}, color={0,0,127})); + connect(towSta.uChiSta, uChiSta) + annotation (Line(points={{-22,-41},{-64,-41},{-64,-100},{-120,-100}}, color={255,127,0})); + connect(towSta.uIsoVal, uIsoVal) + annotation (Line(points={{-22,-57},{-40,-57},{-40,-220},{-120,-220}}, color={0,0,127})); + connect(makUpWat.watLev, watLev) + annotation (Line(points={{-22,-240},{-120,-240}}, color={0,0,127})); + connect(makUpWat.yMakUp, yMakUp) + annotation (Line(points={{2,-240},{120,-240}}, color={255,0,255})); + connect(uTowSta, towSta.uTowSta) + annotation (Line(points={{-120,40},{-76,40},{-76,-59},{-22,-59}}, color={255,0,255})); + connect(towSta.uChiStaSet, uChiStaSet) annotation (Line(points={{-22,-43},{-60, + -43},{-60,-120},{-120,-120}}, color={255,127,0})); + connect(towSta.uTowStaCha, uTowStaCha) annotation (Line(points={{-22,-45},{-56, + -45},{-56,-150},{-120,-150}}, color={255,0,255})); + connect(uWse, towSta.uWse) annotation (Line(points={{-120,180},{-48,180},{-48, + -47},{-22,-47}}, color={255,0,255})); + connect(uConWatPumSpe, towSta.uConWatPumSpe) annotation (Line(points={{-120,-20}, + {-72,-20},{-72,-53},{-22,-53}}, color={0,0,127})); + connect(towSta.yLeaCel, yLeaCel) annotation (Line(points={{2,-46},{40,-46},{40, + -30},{120,-30}}, color={255,0,255})); + connect(uEnaPla, towSta.uEnaPla) annotation (Line(points={{-120,-70},{-48,-70}, + {-48,-49},{-22,-49}}, color={255,0,255})); + connect(swi.y, ySpeSet) + annotation (Line(points={{82,-150},{120,-150}}, color={0,0,127})); + connect(uPla, towSta.uPla) annotation (Line(points={{-120,20},{-84,20},{-84,-51}, + {-22,-51}}, color={255,0,255})); +annotation ( + defaultComponentName="towCon", + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-200},{100,200}}), graphics={ + Rectangle( + extent={{-100,-200},{100,200}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,248},{100,210}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-98,-120},{-26,-136}}, + textColor={255,0,255}, + textString="uTowStaCha"), + Text( + extent={{-100,196},{-62,184}}, + textColor={0,0,127}, + textString="chiLoa", + visible=have_WSE), + Text( + extent={{-98,-82},{-50,-98}}, + textColor={255,127,0}, + textString="uChiSta"), + Text( + extent={{-98,-100},{-32,-118}}, + textColor={255,127,0}, + textString="uChiStaSet"), + Text( + extent={{48,-160},{100,-176}}, + textColor={255,0,255}, + textString="yMakUp"), + Text( + extent={{-98,38},{-54,24}}, + textColor={255,0,255}, + textString="uTowSta"), + Text( + extent={{-98,18},{-68,4}}, + textColor={255,0,255}, + textString="uPla"), + Text( + extent={{-100,178},{-70,164}}, + textColor={255,0,255}, + textString="uChi"), + Text( + extent={{-96,158},{-66,144}}, + textColor={255,0,255}, + textString="uWse", + visible=have_WSE), + Text( + extent={{-100,138},{-50,124}}, + textColor={0,0,127}, + textString="uFanSpe"), + Text( + extent={{-98,118},{-34,102}}, + textColor={0,0,127}, + textString="TChiWatSup", + visible=have_WSE), + Text( + extent={{-98,80},{-34,64}}, + textColor={0,0,127}, + textString="reqPlaCap"), + Text( + extent={{-96,98},{-16,82}}, + textColor={0,0,127}, + textString="TChiWatSupSet"), + Text( + extent={{-98,60},{-14,42}}, + textColor={0,0,127}, + textString="uMaxTowSpeSet"), + Text( + extent={{-96,-22},{-12,-40}}, + textColor={0,0,127}, + textString="uConWatPumSpe"), + Text( + extent={{-100,-2},{-36,-18}}, + textColor={0,0,127}, + textString="TConWatRet"), + Text( + extent={{-98,-42},{-34,-58}}, + textColor={0,0,127}, + textString="TConWatSup", + visible=not closeCoupledPlant), + Text( + extent={{-100,-178},{-56,-192}}, + textColor={0,0,127}, + textString="watLev"), + Text( + extent={{-98,-160},{-54,-176}}, + textColor={0,0,127}, + textString="uIsoVal"), + Text( + extent={{54,-100},{98,-116}}, + textColor={0,0,127}, + textString="ySpeSet"), + Text( + extent={{46,-40},{98,-56}}, + textColor={255,0,255}, + textString="yTowSta"), + Text( + extent={{54,58},{98,42}}, + textColor={0,0,127}, + textString="yIsoVal"), + Text( + extent={{48,120},{100,104}}, + textColor={255,0,255}, + textString="yLeaCel"), + Text( + extent={{-96,-64},{-58,-78}}, + textColor={255,0,255}, + textString="uEnaPla")}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-260},{100,260}})), +Documentation(info=" +

                      +Block that controls cooling tower cells enabling status yTowSta, +the supply isolation valve positions yIsoVal of each cell and the +cell fan operating speed ySpeSet. +This is implemented according to ASHRAE Guideline36-2021, section 5.20.12. +The section specifies sequences to control cooling tower. +It includes three subsequences: +

                      + +", revisions=" +
                        +
                      • +September 14, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Controller.mo new file mode 100644 index 00000000000..74c17aaccf0 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Controller.mo @@ -0,0 +1,439 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed; +block Controller "Tower fan speed control" + + parameter Integer nChi=2 "Total number of chillers"; + parameter Integer nTowCel=4 "Total number of cooling tower cells"; + parameter Integer nConWatPum=2 "Total number of condenser water pumps"; + parameter Boolean closeCoupledPlant=true + "Flag to indicate if the plant is close coupled"; + parameter Boolean have_WSE=true + "Flag to indicate if the plant has waterside economizer"; + parameter Real desCap( + final unit="W", + final quantity="HeatFlowRate")=1e6 "Plant design capacity"; + parameter Real fanSpeMin=0.1 "Minimum tower fan speed"; + parameter Real fanSpeMax=1 "Maximum tower fan speed" + annotation (Dialog(enable=have_WSE)); + parameter Real chiMinCap[nChi]( + each final unit="W", + final quantity=fill("HeatFlowRate", nChi))={1e4,1e4} + "Minimum cyclining load below which chiller will begin cycling" + annotation (Dialog(tab="WSE Enabled", group="Integrated", enable=have_WSE)); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController intOpeCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(tab="WSE Enabled", group="Integrated", enable=have_WSE)); + parameter Real kIntOpe=1 "Gain of controller" + annotation (Dialog(tab="WSE Enabled", group="Integrated",enable=have_WSE)); + parameter Real TiIntOpe(final quantity="Time", final unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="WSE Enabled", group="Integrated", + enable=have_WSE and (intOpeCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + intOpeCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real TdIntOpe(final quantity="Time", final unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="WSE Enabled", group="Integrated", + enable=have_WSE and (intOpeCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + intOpeCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController chiWatCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(tab="WSE Enabled", group="WSE-only",enable=have_WSE)); + parameter Real kWSE=1 "Gain of controller" + annotation (Dialog(tab="WSE Enabled", group="WSE-only",enable=have_WSE)); + parameter Real TiWSE(final quantity="Time", final unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="WSE Enabled", group="WSE-only", + enable=have_WSE and (chiWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + chiWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real TdWSE(final quantity="Time", final unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="WSE Enabled", group="WSE-only", + enable=have_WSE and (chiWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + chiWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real LIFT_min[nChi]( + final unit=fill("K",nChi), + final quantity=fill("TemperatureDifference",nChi))={12,12} "Minimum LIFT of each chiller" + annotation (Dialog(tab="Return temperature control", group="Setpoint")); + parameter Real TConWatSup_nominal[nChi]( + final unit=fill("K",nChi), + final quantity=fill("ThermodynamicTemperature",nChi), + displayUnit=fill("degC",nChi))={293.15,293.15} + "Design condenser water supply temperature (condenser entering) of each chiller" + annotation (Dialog(tab="Return temperature control", group="Setpoint")); + parameter Real TConWatRet_nominal[nChi]( + final unit=fill("K",nChi), + final quantity=fill("ThermodynamicTemperature",nChi), + displayUnit=fill("degC",nChi))={303.15,303.15} + "Design condenser water return temperature (condenser leaving) of each chiller" + annotation (Dialog(tab="Return temperature control", group="Setpoint")); + parameter Real TChiWatSupMin[nChi]( + final unit=fill("K",nChi), + final quantity=fill("ThermodynamicTemperature",nChi), + displayUnit=fill("degC",nChi))={278.15,278.15} + "Lowest chilled water supply temperature of each chiller" + annotation (Dialog(tab="Return temperature control", group="Setpoint")); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController couPlaCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller" + annotation (Dialog(tab="Return temperature control", group="Coupled plant", + enable=closeCoupledPlant)); + parameter Real kCouPla=1 "Gain of controller" + annotation (Dialog(tab="Return temperature control", group="Coupled plant", + enable=closeCoupledPlant)); + parameter Real TiCouPla(final quantity="Time", final unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="Return temperature control", group="Coupled plant", + enable=closeCoupledPlant and (couPlaCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + couPlaCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real TdCouPla(final quantity="Time", final unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Return temperature control", group="Coupled plant", + enable=closeCoupledPlant and (couPlaCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + couPlaCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real yCouPlaMax=1 "Upper limit of output" + annotation (Dialog(tab="Return temperature control", group="Coupled plant", + enable=closeCoupledPlant)); + parameter Real yCouPlaMin=0 "Lower limit of output" + annotation (Dialog(tab="Return temperature control", group="Coupled plant", + enable=closeCoupledPlant)); + parameter Real samplePeriod=30 + "Period of sampling condenser water supply and return temperature difference" + annotation (Dialog(tab="Return temperature control", group="Less coupled plant", + enable=not closeCoupledPlant)); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController supWatCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller" + annotation (Dialog(tab="Return temperature control", group="Less coupled plant", + enable=not closeCoupledPlant)); + parameter Real kSupCon=1 "Gain of controller" + annotation (Dialog(tab="Return temperature control", group="Less coupled plant", + enable=not closeCoupledPlant)); + parameter Real TiSupCon(final quantity="Time", final unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="Return temperature control", group="Less coupled plant", + enable=not closeCoupledPlant and (supWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + supWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real TdSupCon(final quantity="Time", final unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Return temperature control", group="Less coupled plant", + enable=not closeCoupledPlant and (supWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + supWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real ySupConMax=1 "Upper limit of output" + annotation (Dialog(tab="Return temperature control", + group="Less coupled plant", enable=not closeCoupledPlant)); + parameter Real ySupConMin=0 "Lower limit of output" + annotation (Dialog(tab="Return temperature control", + group="Less coupled plant", enable=not closeCoupledPlant)); + parameter Real speChe=0.005 "Lower threshold value to check fan or pump speed" + annotation (Dialog(tab="Advanced")); + parameter Real cheMinFanSpe(final quantity="Time", final unit="s")=300 + "Threshold time for checking duration when tower fan equals to the minimum tower fan speed" + annotation (Dialog(tab="Advanced", group="Return temperature control: Enable tower")); + parameter Real cheMaxTowSpe(final quantity="Time", final unit="s")=300 + "Threshold time for checking duration when any enabled chiller maximum cooling speed equals to the minimum tower fan speed" + annotation (Dialog(tab="Advanced", group="Return temperature control: Enable tower")); + parameter Real cheTowOff(final quantity="Time", final unit="s")=60 + "Threshold time for checking duration when there is no enabled tower fan" + annotation (Dialog(tab="Advanced", group="Return temperature control: Enable tower")); + parameter Real iniPlaTim(final quantity="Time", final unit="s")=600 + "Time to hold return temperature to initial setpoint after plant being enabled" + annotation (Dialog(tab="Advanced", group="Return temperature control: Setpoint")); + parameter Real ramTim(final quantity="Time", final unit="s")=180 + "Time to ramp return water temperature from initial value to setpoint" + annotation (Dialog(tab="Advanced", group="Return temperature control: Setpoint")); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput chiLoa[nChi](final unit=fill( + "W", nChi), final quantity=fill("HeatFlowRate", nChi)) + if have_WSE "Current load of each chiller" + annotation (Placement(transformation(extent={{-140,120},{-100,160}}), + iconTransformation(extent={{-140,170},{-100,210}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller enabling status: true=ON" + annotation (Placement(transformation(extent={{-140,100},{-100,140}}), + iconTransformation(extent={{-140,140},{-100,180}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWse if have_WSE + "Waterside economizer enabling status: true=ON" + annotation (Placement(transformation(extent={{-140,80},{-100,120}}), + iconTransformation(extent={{-140,110},{-100,150}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uFanSpe( + final min=0, + final max=1, + final unit="1") "Measured tower fan speed" + annotation (Placement(transformation(extent={{-140,60},{-100,100}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") if have_WSE + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}), + iconTransformation(extent={{-140,50},{-100,90}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-140,10},{-100,50}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput reqPlaCap( + final unit="W", + final quantity="HeatFlowRate") "Current required plant capacity" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-140,-10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uMaxTowSpeSet[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Maximum cooling tower speed setpoint from each chiller head pressure control loop" + annotation (Placement(transformation(extent={{-140,-50},{-100,-10}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uTow[nTowCel] + "Cooling tower cell operating status: true=running tower cell" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enabling status" + annotation (Placement(transformation(extent={{-140,-120},{-100,-80}}), + iconTransformation(extent={{-140,-130},{-100,-90}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatRet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Condenser water return temperature (condenser leaving)" + annotation (Placement(transformation(extent={{-140,-140},{-100,-100}}), + iconTransformation(extent={{-140,-160},{-100,-120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpe[nConWatPum]( + final min=fill(0, nConWatPum), + final max=fill(1, nConWatPum), + final unit=fill("1", nConWatPum)) "Current condenser water pump speed" + annotation (Placement(transformation(extent={{-140,-160},{-100,-120}}), + iconTransformation(extent={{-140,-190},{-100,-150}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatSup( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") if not closeCoupledPlant + "Condenser water supply temperature (condenser entering)" + annotation (Placement(transformation(extent={{-140,-180},{-100,-140}}), + iconTransformation(extent={{-140,-210},{-100,-170}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySpeSet( + final min=0, + final max=1, + final unit="1") "Fan speed setpoint of each cooling tower cell" + annotation (Placement(transformation(extent={{100,-60},{140,-20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Controller + fanSpeRetTem( + final nChi=nChi, + final nTowCel=nTowCel, + final nConWatPum=nConWatPum, + final have_WSE=have_WSE, + final closeCoupledPlant=closeCoupledPlant, + final desCap=desCap, + final fanSpeMin=fanSpeMin, + final LIFT_min=LIFT_min, + final TConWatRet_nominal=TConWatRet_nominal, + final TConWatSup_nominal=TConWatSup_nominal, + final TChiWatSupMin=TChiWatSupMin, + final cheMinFanSpe=cheMinFanSpe, + final cheMaxTowSpe=cheMaxTowSpe, + final cheTowOff=cheTowOff, + final iniPlaTim=iniPlaTim, + final ramTim=ramTim, + final couPlaCon=couPlaCon, + final kCouPla=kCouPla, + final TiCouPla=TiCouPla, + final yCouPlaMax=yCouPlaMax, + final yCouPlaMin=yCouPlaMin, + final TdCouPla=TdCouPla, + final supWatCon=supWatCon, + final kSupCon=kSupCon, + final TiSupCon=TiSupCon, + final TdSupCon=TdSupCon, + final ySupConMax=ySupConMax, + final ySupConMin=ySupConMin, + final speChe=speChe) + "Fan speed control based on condenser water return temperature control" + annotation (Placement(transformation(extent={{20,-60},{60,-20}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Controller + fanSpeWse( + final nChi=nChi, + final chiMinCap=chiMinCap, + final fanSpeMin=fanSpeMin, + final intOpeCon=intOpeCon, + final kIntOpe=kIntOpe, + final TiIntOpe=TiIntOpe, + final TdIntOpe=TdIntOpe, + final fanSpeMax=fanSpeMax, + final fanSpeChe=speChe, + final chiWatCon=chiWatCon, + final kWSE=kWSE, + final TiWSE=TiWSE, + final TdWSE=TdWSE) if have_WSE + "Tower fan speed when waterside economizer is enabled" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + +equation + connect(fanSpeWse.ySpeSet, fanSpeRetTem.uTowSpeWSE) + annotation (Line(points={{-18,50},{0,50},{0,-22},{18,-22}}, color={0,0,127})); + connect(fanSpeWse.chiLoa, chiLoa) + annotation (Line(points={{-42,59},{-60,59},{-60,140},{-120,140}}, + color={0,0,127})); + connect(fanSpeWse.uChi, uChi) + annotation (Line(points={{-42,56},{-64,56},{-64,120},{-120,120}}, + color={255,0,255})); + connect(fanSpeWse.uWse, uWse) annotation (Line(points={{-42,52},{-68,52},{-68, + 100},{-120,100}}, color={255,0,255})); + connect(fanSpeWse.uFanSpe,uFanSpe) + annotation (Line(points={{-42,48},{-72,48},{-72,80},{-120,80}}, + color={0,0,127})); + connect(fanSpeWse.TChiWatSup, TChiWatSup) + annotation (Line(points={{-42,44},{-76,44},{-76,60},{-120,60}}, + color={0,0,127})); + connect(fanSpeWse.TChiWatSupSet, TChiWatSupSet) + annotation (Line(points={{-42,41},{-60,41},{-60,30},{-120,30}}, + color={0,0,127})); + connect(uChi, fanSpeRetTem.uChi) + annotation (Line(points={{-120,120},{-64,120},{-64,-25},{18,-25}}, + color={255,0,255})); + connect(uWse, fanSpeRetTem.uWse) annotation (Line(points={{-120,100},{-68,100}, + {-68,-28},{18,-28}}, color={255,0,255})); + connect(fanSpeRetTem.reqPlaCap, reqPlaCap) + annotation (Line(points={{18,-31},{-76,-31},{-76,0},{-120,0}}, + color={0,0,127})); + connect(fanSpeRetTem.uMaxTowSpeSet, uMaxTowSpeSet) + annotation (Line(points={{18,-34},{-80,-34},{-80,-30},{-120,-30}}, + color={0,0,127})); + connect(uFanSpe,fanSpeRetTem.uFanSpe) + annotation (Line(points={{-120,80},{-72,80},{-72,-37},{18,-37}}, + color={0,0,127})); + connect(fanSpeRetTem.uTow, uTow) annotation (Line(points={{18,-40},{-68,-40},{ + -68,-60},{-120,-60}}, color={255,0,255})); + connect(TChiWatSupSet, fanSpeRetTem.TChiWatSupSet) + annotation (Line(points={{-120,30},{-60,30},{-60,-46},{18,-46}}, + color={0,0,127})); + connect(fanSpeRetTem.uPla, uPla) + annotation (Line(points={{18,-49},{-60,-49},{-60,-100},{-120,-100}}, + color={255,0,255})); + connect(fanSpeRetTem.TConWatRet, TConWatRet) + annotation (Line(points={{18,-52},{-56,-52},{-56,-120},{-120,-120}}, + color={0,0,127})); + connect(fanSpeRetTem.uConWatPumSpe, uConWatPumSpe) + annotation (Line(points={{18,-55},{-52,-55},{-52,-140},{-120,-140}}, + color={0,0,127})); + connect(fanSpeRetTem.TConWatSup, TConWatSup) + annotation (Line(points={{18,-58},{-48,-58},{-48,-160},{-120,-160}}, + color={0,0,127})); + connect(fanSpeRetTem.ySpeSet,ySpeSet) + annotation (Line(points={{62,-40},{120,-40}}, + color={0,0,127})); + +annotation ( + defaultComponentName="towFanSpe", + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-200},{100,200}}), + graphics={ + Rectangle( + extent={{-100,-200},{100,200}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,248},{100,210}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-100,170},{-64,154}}, + textColor={255,0,255}, + textString="uChi"), + Text( + extent={{-100,200},{-50,182}}, + textColor={0,0,127}, + textString="chiLoa", + visible=have_WSE), + Text( + extent={{-98,110},{-48,92}}, + textColor={0,0,127}, + textString="uFanSpe"), + Text( + extent={{-100,80},{-26,64}}, + textColor={0,0,127}, + textString="TChiWatSup", + visible=have_WSE), + Text( + extent={{-98,52},{-14,34}}, + textColor={0,0,127}, + textString="TChiWatSupSet"), + Text( + extent={{-96,20},{-40,2}}, + textColor={0,0,127}, + textString="reqPlaCap"), + Text( + extent={{-100,-10},{-8,-24}}, + textColor={0,0,127}, + textString="uMaxTowSpeSet"), + Text( + extent={{-96,-130},{-28,-148}}, + textColor={0,0,127}, + textString="TConWatRet"), + Text( + extent={{-94,-158},{10,-176}}, + textColor={0,0,127}, + textString="uConWatPumSpe"), + Text( + extent={{-98,-180},{-16,-200}}, + textColor={0,0,127}, + textString="TConWatSup", + visible=not closeCoupledPlant), + Text( + extent={{48,10},{98,-8}}, + textColor={0,0,127}, + textString="ySpeSet"), + Text( + extent={{-96,140},{-60,124}}, + textColor={255,0,255}, + textString="uWse", + visible=have_WSE), + Text( + extent={{-100,-40},{-64,-56}}, + textColor={255,0,255}, + textString="uTow"), + Text( + extent={{-100,-100},{-64,-116}}, + textColor={255,0,255}, + textString="uPla")}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-180},{100,160}})), +Documentation(info=" +

                      +Block that outputs cooling tower fan speed ySpeSet. This is implemented +according to ASHRAE Guideline36-2021, section 5.20.12.2, itema and c. +These sections specifies sequences to control tower fan speed in the mode +when waterside economizer (if the plant does have it) is enabled or disabled, for +maintaining condenser water return temperature at its setpoint. This control is +used for plants with dynamic load profiles, i.e. those for which PLR may change +by more than approximately 25% in any hour. +It includes two subsequences: +

                      + +", revisions=" +
                        +
                      • +September 14, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Controller.mo new file mode 100644 index 00000000000..aa496eb38d4 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Controller.mo @@ -0,0 +1,249 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE; +block Controller "Tower fan speed control when waterside economizer is enabled" + + parameter Integer nChi=2 "Total number of chillers"; + parameter Real fanSpeMin=0.1 "Minimum tower fan speed"; + parameter Real fanSpeMax=1 "Maximum tower fan speed"; + parameter Real chiMinCap[nChi]( + each final unit="W", + final quantity=fill("HeatFlowRate", nChi))={1e4,1e4} + "Minimum cyclining load below which chiller will begin cycling" + annotation (Dialog(tab="Integrated operation")); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController intOpeCon=Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(tab="Integrated operation", group="Controller")); + parameter Real kIntOpe=1 "Gain of controller" + annotation (Dialog(tab="Integrated operation", group="Controller")); + parameter Real TiIntOpe(final quantity="Time", final unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="Integrated operation", group="Controller", + enable=intOpeCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + intOpeCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + parameter Real TdIntOpe(final quantity="Time", final unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Integrated operation", group="Controller", + enable=intOpeCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + intOpeCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + parameter Real fanSpeChe=0.005 "Lower threshold value to check fan speed" + annotation (Dialog(tab="WSE-only")); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController chiWatCon=Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(tab="WSE-only", group="Controller")); + parameter Real kWSE=1 "Gain of controller" + annotation (Dialog(tab="WSE-only", group="Controller")); + parameter Real TiWSE(final quantity="Time", final unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="WSE-only", group="Controller", + enable=chiWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + chiWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + parameter Real TdWSE(final quantity="Time", final unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="WSE-only", group="Controller", + enable=chiWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + chiWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput chiLoa[nChi]( + final unit=fill("W", nChi), + final quantity=fill("HeatFlowRate", nChi)) + "Current load of each chiller" + annotation (Placement(transformation(extent={{-140,60},{-100,100}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller enabling status: true=ON" + annotation (Placement(transformation(extent={{-140,20},{-100,60}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWse + "Waterside economizer enabling status: true=ON" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uFanSpe( + final min=0, + final max=1, + final unit="1") "Measured tower fan speed" + annotation (Placement(transformation(extent={{-140,-50},{-100,-10}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-140,-110},{-100,-70}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySpeSet( + final min=0, + final max=1, + final unit="1") + "Tower fan speed setpoint when WSE is enabled and there is any chiller running" + annotation (Placement(transformation(extent={{100,-20},{140,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.IntegratedOperation + intOpe( + final nChi=nChi, + final chiMinCap=chiMinCap, + final fanSpeMin=fanSpeMin, + final fanSpeMax=fanSpeMax, + final conTyp=intOpeCon, + final k=kIntOpe, + final Ti=TiIntOpe, + final Td=TdIntOpe) + "Tower fan speed when the waterside economizer is enabled and the chillers are running" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.WSEOperation + wseOpe( + final fanSpeMin=fanSpeMin, + final fanSpeMax=fanSpeMax, + final fanSpeChe=fanSpeChe, + final chiWatCon=chiWatCon, + final k=kWSE, + final Ti=TiWSE, + final Td=TdWSE) + "Tower fan speed when the waterside economizer is running alone" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr(final nin=nChi) "Logical or" + annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{0,30},{20,50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Logical switch" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) "Zero constant" + annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); + +equation + connect(intOpe.uChi, uChi) + annotation (Line(points={{-42,88},{-80,88},{-80,40},{-120,40}}, color={255,0,255})); + connect(intOpe.chiLoa, chiLoa) + annotation (Line(points={{-42,80},{-120,80}}, color={0,0,127})); + connect(wseOpe.uFanSpe,uFanSpe) + annotation (Line(points={{-42,-52},{-60,-52},{-60,-30},{-120,-30}}, color={0,0,127})); + connect(wseOpe.TChiWatSup, TChiWatSup) + annotation (Line(points={{-42,-60},{-120,-60}}, color={0,0,127})); + connect(wseOpe.TChiWatSupSet, TChiWatSupSet) + annotation (Line(points={{-42,-68},{-60,-68},{-60,-90},{-120,-90}}, color={0,0,127})); + connect(mulOr.y, swi.u2) + annotation (Line(points={{-18,40},{-2,40}}, color={255,0,255})); + connect(intOpe.ySpeSet, swi.u1) + annotation (Line(points={{-18,80},{-10,80},{-10,48},{-2,48}}, color={0,0,127})); + connect(wseOpe.ySpeSet, swi.u3) + annotation (Line(points={{-18,-60},{-10,-60},{-10,32},{-2,32}}, color={0,0,127})); + connect(uWse, swi1.u2) + annotation (Line(points={{-120,0},{58,0}}, color={255,0,255})); + connect(swi.y, swi1.u1) + annotation (Line(points={{22,40},{40,40},{40,8},{58,8}}, color={0,0,127})); + connect(zer.y, swi1.u3) + annotation (Line(points={{22,-30},{40,-30},{40,-8},{58,-8}}, color={0,0,127})); + connect(swi1.y,ySpeSet) + annotation (Line(points={{82,0},{120,0}}, color={0,0,127})); + connect(uChi, mulOr.u) + annotation (Line(points={{-120,40},{-42,40}}, color={255,0,255})); + connect(uWse, intOpe.uWse) + annotation (Line(points={{-120,0},{-60,0},{-60,72},{-42,72}}, color={255,0,255})); + +annotation ( + defaultComponentName="towFanSpeWse", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Polygon( + points={{-20,80},{20,80},{0,10},{-20,80}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-40,10},{40,-10}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,-10},{-20,-80},{20,-80},{0,-10}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,-80},{76,-94}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{76,-78},{78,-96}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{78,-78},{80,-96}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,100},{-50,82}}, + textColor={0,0,127}, + textString="chiLoa"), + Text( + extent={{-100,70},{-64,54}}, + textColor={255,0,255}, + textString="uChi"), + Text( + extent={{-96,30},{-66,12}}, + textColor={255,0,255}, + textString="uWse"), + Text( + extent={{-96,-10},{-52,-26}}, + textColor={0,0,127}, + textString="uFanSpe"), + Text( + extent={{-96,-52},{-40,-66}}, + textColor={0,0,127}, + textString="TChiWatSup"), + Text( + extent={{-96,-82},{-24,-98}}, + textColor={0,0,127}, + textString="TChiWatSupSet"), + Text( + extent={{54,12},{98,-6}}, + textColor={0,0,127}, + textString="ySpeSet")}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

                      +Block that outputs cooling tower fan speed ySpeSet when waterside +economizer is enabled. This is implemented according to ASHRAE Guideline36-2021, +section 5.20.12.2, item c. It includes two subsequences: +

                      + +", revisions=" +
                        +
                      • +August 9, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/IntegratedOperation.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/IntegratedOperation.mo new file mode 100644 index 00000000000..9edd005814e --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/IntegratedOperation.mo @@ -0,0 +1,317 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences; +block IntegratedOperation + "Tower fan speed control when the waterside economizer is enabled and the chillers are running" + + parameter Integer nChi = 2 "Total number of chillers"; + parameter Real chiMinCap[nChi]( + each final unit="W", + final quantity=fill("HeatFlowRate", nChi))={1e4, 1e4} + "Minimum cyclining load below which chiller will begin cycling"; + parameter Real fanSpeMin = 0.1 "Minimum cooling tower fan speed"; + parameter Real fanSpeMax = 1 "Maximum cooling tower fan speed"; + parameter Buildings.Controls.OBC.CDL.Types.SimpleController conTyp= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(group="Load controller")); + parameter Real k=1 "Gain of controller" + annotation (Dialog(group="Load controller")); + parameter Real Ti(final quantity="Time", final unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(group="Load controller", + enable=conTyp==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + conTyp==Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + parameter Real Td(final quantity="Time", final unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(group="Load controller", + enable=conTyp==Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + conTyp==Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + parameter Real yMax=1 "Upper limit of load controller output" + annotation (Dialog(group="Load controller")); + parameter Real yMin=0 "Lower limit of load controller output" + annotation (Dialog(group="Load controller")); + parameter Real intModTim(final quantity="Time", final unit="s")=600 + "Threshold time after switching from WSE-only mode to integrated mode" + annotation (Dialog(tab="Advanced")); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Vector of chillers proven on status: true=ON" + annotation (Placement(transformation(extent={{-200,80},{-160,120}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput chiLoa[nChi]( + final unit=fill("W", nChi), + final quantity=fill("HeatFlowRate", nChi)) "Current load of each chiller" + annotation (Placement(transformation(extent={{-200,40},{-160,80}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWse + "Waterside economizer enabling status: true=ON" + annotation (Placement(transformation(extent={{-200,-20},{-160,20}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySpeSet( + final min=0, + final max=1, + final unit="1") + "Tower fan speed setpoint when WSE is enabled and there is any chiller running" + annotation (Placement(transformation(extent={{160,-100},{200,-60}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Reals.Switch fanSpe + "Switch from the holding maximum speed to regulated speed" + annotation (Placement(transformation(extent={{120,-90},{140,-70}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiMinCycLoa[nChi]( + final k=chiMinCap) + "Minimum cycling load of each chiller" + annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[nChi] "Logical switch" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer[nChi]( + final k=fill(0, nChi)) "Zero constant" + annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); + Buildings.Controls.OBC.CDL.Reals.PIDWithReset loaCon( + final controllerType=conTyp, + final k=k, + final Ti=Ti, + final Td=Td, + final yMax=yMax, + final yMin=yMin, + final reverseActing=false, + final y_reset=yMax) + "Controller to maintain chiller load at the sum of minimum cycling load of operating chillers" + annotation (Placement(transformation(extent={{80,90},{100,110}}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum totMinCycLoa( + final k=fill(1.1, nChi), + final nin=nChi) + "Sum of minimum cycling load for the operating chillers" + annotation (Placement(transformation(extent={{-20,90},{0,110}}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum totLoa( + final nin=nChi) "Total load of operating chillers" + annotation (Placement(transformation(extent={{-20,50},{0,70}}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum minCycLoa(final nin=nChi) + "Sum of minimum cycling load for all chillers" + annotation (Placement(transformation(extent={{-20,130},{0,150}}))); + Buildings.Controls.OBC.CDL.Reals.Divide div "Output first input divided by second input" + annotation (Placement(transformation(extent={{40,90},{60,110}}))); + Buildings.Controls.OBC.CDL.Reals.Divide div1 "Output first input divided by second input" + annotation (Placement(transformation(extent={{40,50},{60,70}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr chiOn(final nin=nChi) + "Check if there is any chiller running" + annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Reals.Line regFanSpe "Regulated fan speed" + annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1( + final k=yMin) "Load control minimum limit" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( + final k=yMax) + "Load control maximum limit" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTowSpe( + final k=fanSpeMin) + "Minimum speed" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTowSpe( + final k=fanSpeMax) + "Maximum tower fan speed" + annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg "Output true at the moment when input becomes true" + annotation (Placement(transformation(extent={{-60,-150},{-40,-130}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 + "Check if it switches from WSE only mode to integrated operation mode" + annotation (Placement(transformation(extent={{0,-120},{20,-100}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat + "Logical latch, maintain ON signal until condition changes" + annotation (Placement(transformation(extent={{40,-120},{60,-100}}))); + Buildings.Controls.OBC.CDL.Logical.Timer intOpeTim( + final t=intModTim) + "Count the time after plant switching from WSE-only mode to integrated operation mode" + annotation (Placement(transformation(extent={{80,-120},{100,-100}}))); + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg "Output true when input becomes false" + annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Logical.And and3 "Logical and" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre + "Breaks algebraic loops by an infinitesimal small time delay" + annotation (Placement(transformation(extent={{0,-150},{20,-130}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 + "Logical and" + annotation (Placement(transformation(extent={{0,10},{20,30}}))); + +equation + connect(uChi, swi.u2) + annotation (Line(points={{-180,100},{-62,100}}, color={255,0,255})); + connect(chiMinCycLoa.y, swi.u1) + annotation (Line(points={{-98,140},{-80,140},{-80,108},{-62,108}}, color={0,0,127})); + connect(zer.y, swi.u3) + annotation (Line(points={{-98,80},{-80,80},{-80,92},{-62,92}}, color={0,0,127})); + connect(minCycLoa.y, div.u2) + annotation (Line(points={{2,140},{20,140},{20,94},{38,94}}, color={0,0,127})); + connect(minCycLoa.y, div1.u2) + annotation (Line(points={{2,140},{20,140},{20,54},{38,54}}, color={0,0,127})); + connect(totLoa.y, div1.u1) + annotation (Line(points={{2,60},{10,60},{10,66},{38,66}}, color={0,0,127})); + connect(totMinCycLoa.y, div.u1) + annotation (Line(points={{2,100},{10,100},{10,106},{38,106}}, color={0,0,127})); + connect(div.y, loaCon.u_s) + annotation (Line(points={{62,100},{78,100}}, color={0,0,127})); + connect(div1.y, loaCon.u_m) + annotation (Line(points={{62,60},{90,60},{90,88}}, color={0,0,127})); + connect(loaCon.y, regFanSpe.u) annotation (Line(points={{102,100},{120,100},{120, + 0},{40,0},{40,-40},{58,-40}}, color={0,0,127})); + connect(zer1.y, regFanSpe.x1) annotation (Line(points={{22,-20},{30,-20},{30,-32}, + {58,-32}}, color={0,0,127})); + connect(minTowSpe.y, regFanSpe.f1) annotation (Line(points={{-18,-20},{-10,-20}, + {-10,-36},{58,-36}}, color={0,0,127})); + connect(maxTowSpe.y, regFanSpe.f2) annotation (Line(points={{22,-60},{30,-60}, + {30,-48},{58,-48}}, color={0,0,127})); + connect(one.y, regFanSpe.x2) annotation (Line(points={{-18,-60},{-10,-60},{-10, + -44},{58,-44}}, color={0,0,127})); + connect(chiOn.y, edg.u) + annotation (Line(points={{-98,20},{-90,20},{-90,-140},{-62,-140}}, color={255,0,255})); + connect(uWse, and1.u1) + annotation (Line(points={{-180,0},{-70,0},{-70,-110},{-2,-110}}, color={255,0,255})); + connect(edg.y, and1.u2) + annotation (Line(points={{-38,-140},{-20,-140},{-20,-118},{-2,-118}}, color={255,0,255})); + connect(and1.y, lat.u) + annotation (Line(points={{22,-110},{38,-110}}, color={255,0,255})); + connect(lat.y, intOpeTim.u) + annotation (Line(points={{62,-110},{78,-110}}, color={255,0,255})); + connect(lat.y, fanSpe.u2) + annotation (Line(points={{62,-110},{70,-110},{70,-80},{118,-80}}, color={255,0,255})); + connect(regFanSpe.y, fanSpe.u3) + annotation (Line(points={{82,-40},{100,-40},{100,-88},{118,-88}}, color={0,0,127})); + connect(maxTowSpe.y, fanSpe.u1) + annotation (Line(points={{22,-60},{30,-60},{30,-72},{118,-72}}, color={0,0,127})); + connect(fanSpe.y,ySpeSet) + annotation (Line(points={{142,-80},{180,-80}}, color={0,0,127})); + connect(chiMinCycLoa.y, minCycLoa.u) + annotation (Line(points={{-98,140},{-22,140}}, color={0,0,127})); + connect(swi.y, totMinCycLoa.u) + annotation (Line(points={{-38,100},{-22,100}}, color={0,0,127})); + connect(chiLoa, totLoa.u) + annotation (Line(points={{-180,60},{-22,60}}, color={0,0,127})); + connect(uChi,chiOn. u) + annotation (Line(points={{-180,100},{-140,100},{-140,20},{-122,20}}, + color={255,0,255})); + connect(lat.y, falEdg.u) + annotation (Line(points={{62,-110},{70,-110},{70,-80},{-140,-80},{-140,-60}, + {-122,-60}}, color={255,0,255})); + connect(chiOn.y, and3.u1) + annotation (Line(points={{-98,20},{-62,20}}, color={255,0,255})); + connect(falEdg.y, and3.u2) + annotation (Line(points={{-98,-60},{-80,-60},{-80,12},{-62,12}}, + color={255,0,255})); + connect(pre.y, lat.clr) + annotation (Line(points={{22,-140},{30,-140},{30,-116},{38,-116}}, + color={255,0,255})); + connect(intOpeTim.passed, pre.u) + annotation (Line(points={{102,-118},{120,-118},{120,-154},{-10,-154}, + {-10,-140},{-2,-140}}, color={255,0,255})); + connect(and3.y, and2.u1) + annotation (Line(points={{-38,20},{-2,20}}, color={255,0,255})); + connect(uWse, and2.u2) + annotation (Line(points={{-180,0},{-20,0},{-20,12},{-2,12}}, color={255,0,255})); + connect(and2.y, loaCon.trigger) + annotation (Line(points={{22,20},{84,20},{84,88}}, color={255,0,255})); +annotation ( + defaultComponentName="wseTowSpeIntOpe", + 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={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-40,10},{40,-10}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-20,80},{20,80},{0,10},{-20,80}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,-10},{-20,-80},{20,-80},{0,-10}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,-40},{80,-46}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,-56},{80,-68}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{44,-46},{48,-56}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{72,-46},{76,-56}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,-80},{76,-94}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{76,-78},{78,-96}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{78,-78},{80,-96}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-160,-160},{160,160}})), +Documentation(info=" +

                      +Block that outputs cooling tower fan speed ySpeSet when both waterside +economizer and chillers are enabled, i.e. integrated operation. This is implemented +according to ASHRAE Guideline36-2021, section 5.20.12.2, item c.1. +

                      +

                      +When the waterside economizer is enabled (uWse=true) and chillers +are running (uChi=true): +

                      +
                        +
                      1. +Fan speed shall be equal to waterside economizer tower maximum speed. +
                      2. +
                      3. +The waterside economizer tower maximum speed shall be reset by a direct acting PID +loop maintaining the chiller load at 110% of the sum of minimum cycling load for +the operating chillers. Map the tower maximum speed from minimum speed +fanSpeMin at 0% loop output to 100% speed at 100% loop output. +Bias the loop to launch from 100% output. +
                      4. +
                      5. +When starting integrated operation after previously operating with only the waterside +economizer, hold the tower maximum speed at 100% for 10 minutes (intModTim) +to give the chiller time to get up to speed and produce at least minimum cycling +load, then enable the loop. +
                      6. +
                      +", revisions=" +
                        +
                      • +August 9, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end IntegratedOperation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/IntegratedOperation.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/IntegratedOperation.mo new file mode 100644 index 00000000000..fcdaab6a005 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/IntegratedOperation.mo @@ -0,0 +1,116 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.Validation; +model IntegratedOperation + "Validates cooling tower fan speed control sequence for integrated operation of chillers and WSE" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.IntegratedOperation + intOpe(final nChi=2, final chiMinCap={1e4,1e4}, + k=0.5, + Ti=5) + "Tower fan speed control when chiller and waterside economizer are running" + annotation (Placement(transformation(extent={{70,-40},{90,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant wseSta(final k=true) "WSE status" + annotation (Placement(transformation(extent={{20,-90},{40,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.05, final period=4000) + "Boolean pulse" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Buildings.Controls.OBC.CDL.Logical.Not chiSta "First chiller status" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiSta1(final k=false) + "Second chiller status" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(final k=0) + "Zero constant" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( + final amplitude=0.15*1e4, + final freqHz=1/1200, + final offset=1.1*1e4, + final startTime=100) "Chiller load" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + +equation + connect(booPul.y, chiSta.u) + annotation (Line(points={{-58,80},{-42,80}}, color={255,0,255})); + connect(chiSta.y, intOpe.uChi[1]) + annotation (Line(points={{-18,80},{60,80},{60,-22.5},{68,-22.5}}, + color={255,0,255})); + connect(chiSta1.y, intOpe.uChi[2]) + annotation (Line(points={{-18,50},{60,50},{60,-21.5},{68,-21.5}}, + color={255,0,255})); + connect(con.y, intOpe.chiLoa[2]) + annotation (Line(points={{-58,-60},{40,-60},{40,-29.5},{68,-29.5}}, + color={0,0,127})); + connect(chiSta.y, swi.u2) + annotation (Line(points={{-18,80},{60,80},{60,0},{-20,0},{-20,-30}, + {-2,-30}}, color={255,0,255})); + connect(con.y, swi.u3) + annotation (Line(points={{-58,-60},{-20,-60},{-20,-38},{-2,-38}}, color={0,0,127})); + connect(sin.y, swi.u1) + annotation (Line(points={{-58,0},{-40,0},{-40,-22},{-2,-22}}, color={0,0,127})); + connect(swi.y, intOpe.chiLoa[1]) + annotation (Line(points={{22,-30},{46,-30},{46,-30.5},{68,-30.5}}, + color={0,0,127})); + connect(wseSta.y, intOpe.uWse) annotation (Line(points={{42,-80},{60,-80},{60, + -38},{68,-38}}, color={255,0,255})); + +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/IntegratedOperation.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.IntegratedOperation. +

                      +

                      +The waterside economizer keeps operating and the chiller 1 is proven on since 200 seconds. Thus the plant +switches from the economizer only operation +to the integrated operation. +

                      +
                        +
                      • +When the operation switches to the integrated operation, in the first 10 minutes, which is the period from +200 seconds to 800 seconds, the fan speed is held +at 100%. +
                      • +
                      • +At the moment when the 10 minutes period ends, it enabled the PID controller and its output is reset to 100%. +Thus the fan speed begins at 100% speed. +
                      • +
                      • +When the sum of the running chiller load becomes greater than the sum of the running chillers' minimum load, +the control increases the fan speed. This shows the direct acting of the PID controller. +
                      • +
                      +

                      +Note that this sequence does not control the fan speed when the ecnomizer is running only. Thus the fan +speed setpoint ySpeSet before 200 seconds is not +validate. +For the control when the economizer runs only, please see the example +in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.Validation.WSEOperation. +

                      +", revisions=" +
                        +
                      • +August 12, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false))); +end IntegratedOperation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/WSEOperation.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/WSEOperation.mo new file mode 100644 index 00000000000..6be6d6086ce --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/WSEOperation.mo @@ -0,0 +1,104 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.Validation; +model WSEOperation + "Validates cooling tower fan speed control sequence for WSE running only" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.WSEOperation + wseOpe( + fanSpeMin=0.1, + fanSpeMax=1, + chiWatCon=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, + k=0.1, + Ti=5) + "Tower fan speed control when there is only waterside economizer is running" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiSup( + amplitude=0.5, + freqHz=1/1800, + offset=273.15 + 7.1) + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiSupSet( + k=273.15 + 7) + "Chilled water supply water setpoint" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1( + height=3, + duration=3600, + startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add real inputs" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + Buildings.Controls.OBC.CDL.Discrete.UnitDelay fanSpe( + samplePeriod=1) + "Current fan speed" + annotation (Placement(transformation(extent={{-20,50},{0,70}}))); + +equation + connect(chiSupSet.y, wseOpe.TChiWatSupSet) + annotation (Line(points={{42,-30},{50,-30},{50,22},{58,22}}, color={0,0,127})); + connect(chiSup.y, add2.u1) + annotation (Line(points={{-58,20},{-40,20},{-40,6},{-22,6}}, color={0,0,127})); + connect(ram1.y, add2.u2) + annotation (Line(points={{-58,-20},{-40,-20},{-40,-6},{-22,-6}}, color={0,0,127})); + connect(add2.y, wseOpe.TChiWatSup) + annotation (Line(points={{2,0},{20,0},{20,30},{58,30}}, color={0,0,127})); + connect(wseOpe.ySpeSet, fanSpe.u) annotation (Line(points={{82,30},{90,30},{90, + 80},{-30,80},{-30,60},{-22,60}}, color={0,0,127})); + connect(fanSpe.y, wseOpe.uFanSpe) annotation (Line(points={{2,60},{20,60},{20, + 38},{58,38}}, color={0,0,127})); +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/WSEOperation.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.WSEOperation. +It shows following control process: +

                      +
                        +
                      • +In the begining period, the chilled water supply temperature is greater than the setpoint. +The direct acting PID controller increases the output to the maximum output so that +the fan speed setpoint is 1. The measured fan speed becomes 1. +
                      • +
                      • +In the following period, the chilled water supply temperature gradually reduces and +till to becomes lower than the setpoint, the PID controller decreases the output to +the minimum so that the fan speed setpoint becomes the minimum. The measured speed +becomes the minimum as well. +
                      • +
                      • +In the next period, after a 300 seconds during which both the chilled water supply +temperature is lower than the setpoint and the fan speed stays at minimum value, +the fan cycles off that the fan speed setpoint becomes zero. Thus the measured +speed becomes zero. +
                      • +
                      • +After the fan has cycled off for more than 180 seconds, and the chilled water supply +temperature becomes greater than the setpoint plus 1 °F, the fan turns on and +the direct PID controller increases the output to the maximum output +and so the fan speed setpoint becomes 1. The measured speed becomes 1. +
                      • +
                      +", revisions=" +
                        +
                      • +August 12, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{120,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end WSEOperation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/package.mo new file mode 100644 index 00000000000..a9f95982c91 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences; +package Validation "Collection of validation models" + +annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})}), +preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +")); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/package.order new file mode 100644 index 00000000000..15a6b4c37ee --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/package.order @@ -0,0 +1,2 @@ +IntegratedOperation +WSEOperation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/WSEOperation.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/WSEOperation.mo new file mode 100644 index 00000000000..a165aa71d48 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/WSEOperation.mo @@ -0,0 +1,296 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences; +block WSEOperation + "Tower fan speed control when the waterside economizer is running alone" + + parameter Real fanSpeMin=0.1 "Minimum tower fan speed"; + parameter Real fanSpeMax=1 "Maximum tower fan speed"; + parameter Real fanSpeChe = 0.05 "Lower threshold value to check fan speed"; + parameter Buildings.Controls.OBC.CDL.Types.SimpleController chiWatCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(group="Chilled water controller")); + parameter Real k=1 "Gain of controller" + annotation (Dialog(group="Chilled water controller")); + parameter Real Ti(final quantity="Time", final unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(group="Chilled water controller", + enable=chiWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + chiWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + parameter Real Td(final quantity="Time", final unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(group="Chilled water controller", + enable=chiWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + chiWatCon==Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + parameter Real yMax=1 + "Upper limit of chilled water controller output" + annotation (Dialog(group="Chilled water controller")); + parameter Real yMin=0 + "Lower limit of chilled water controller output" + annotation (Dialog(group="Chilled water controller")); + parameter Real cheCycOffTim(final quantity="Time", final unit="s")=300 + "Threshold time for checking if fan should cycle off" + annotation (Dialog(tab="Advanced")); + parameter Real minCycOffTim(final quantity="Time", final unit="s")=180 + "Minimum time of fan cycling off" + annotation (Dialog(tab="Advanced")); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uFanSpe( + final unit="1") "Measured tower fan speed" + annotation (Placement(transformation(extent={{-280,106},{-240,146}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-280,-54},{-240,-14}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-280,-160},{-240,-120}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySpeSet( + final min=0, + final max=1, + final unit="1") + "Tower fan speed setpoint when WSE is enabled and there is any chiller running" + annotation (Placement(transformation(extent={{240,140},{280,180}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Logical.Latch fanCycOff "Cycle off fan" + annotation (Placement(transformation(extent={{100,150},{120,170}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.And and2 + "Check if the fan is at minimum speed and the chiller water supply temperature is lower than the setpoint" + annotation (Placement(transformation(extent={{0,150},{20,170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTowSpe( + final k=fanSpeMin) "Minimum tower speed" + annotation (Placement(transformation(extent={{-220,30},{-200,50}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract dFanSpe + "Different between measured fan speed and the minimum fan speed" + annotation (Placement(transformation(extent={{-140,110},{-120,130}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys2( + final uLow=fanSpeChe, + final uHigh=fanSpeChe + 0.005) + "Check if tower fan speed is greater than minimum speed" + annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" + annotation (Placement(transformation(extent={{-60,110},{-40,130}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract dTChiSup + "Difference between chilled water supply temperature and its setpoint" + annotation (Placement(transformation(extent={{-200,-50},{-180,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys1( + final uLow=-0.1, + final uHigh=0.1) + "Check if chilled water supply temperature is greater than setpoint" + annotation (Placement(transformation(extent={{-100,150},{-80,170}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-60,150},{-40,170}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{200,150},{220,170}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys3( + final uLow=0.5*5/9, + final uHigh=1.5*5/9) + "Check if chilled water supply temperature is greater than setpoint by a threshold delta" + annotation (Placement(transformation(extent={{-160,-50},{-140,-30}}))); + Buildings.Controls.OBC.CDL.Reals.PIDWithReset chiWatTemCon( + final controllerType=chiWatCon, + final k=k, + final Ti=Ti, + final Td=Td, + final yMax=yMax, + final yMin=yMin, + final reverseActing=false, + final y_reset=0) + "Controller to maintain chilled water supply temperature at setpoint" + annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( + final k=yMin) + "Minimum output from chilled water supply temperature control loop, default to be zero" + annotation (Placement(transformation(extent={{80,-110},{100,-90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( + final k=yMax) + "Maximum output from chilled water supply temperature control loop" + annotation (Placement(transformation(extent={{-20,-190},{0,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTowSpe( + final k=fanSpeMax) + "Maximum tower fan speed" + annotation (Placement(transformation(extent={{80,-190},{100,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Line lin + "Output the value of the input x along a line specified by two points" + annotation (Placement(transformation(extent={{160,-150},{180,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys4( + final uLow=fanSpeChe, + final uHigh=fanSpeChe + 0.005) + "Check if tower fan speed is greater than zero" + annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); + Buildings.Controls.OBC.CDL.Logical.Not fanOff + "Check if the fan cycles off" + annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); + Buildings.Controls.OBC.CDL.Logical.And cycOn + "Check if the fan should be turned on" + annotation (Placement(transformation(extent={{40,60},{60,80}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=cheCycOffTim) + "Check if the fan should cycle off" + annotation (Placement(transformation(extent={{40,150},{60,170}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay cycOffTim( + final delayTime=minCycOffTim) + "Check if the fan has been cycled off for threshold time" + annotation (Placement(transformation(extent={{-20,60},{0,80}}))); + +equation + connect(uFanSpe, dFanSpe.u1) + annotation (Line(points={{-260,126},{-142,126}},color={0,0,127})); + connect(dFanSpe.y, hys2.u) + annotation (Line(points={{-118,120},{-102,120}}, color={0,0,127})); + connect(hys2.y, not2.u) + annotation (Line(points={{-78,120},{-62,120}},color={255,0,255})); + connect(TChiWatSup, dTChiSup.u1) + annotation (Line(points={{-260,-34},{-202,-34}}, color={0,0,127})); + connect(hys1.y, not1.u) + annotation (Line(points={{-78,160},{-62,160}},color={255,0,255})); + connect(dTChiSup.y, hys1.u) + annotation (Line(points={{-178,-40},{-170,-40},{-170,160},{-102,160}}, + color={0,0,127})); + connect(not1.y, and2.u1) + annotation (Line(points={{-38,160},{-2,160}},color={255,0,255})); + connect(not2.y, and2.u2) + annotation (Line(points={{-38,120},{-20,120},{-20,152},{-2,152}}, + color={255,0,255})); + connect(fanCycOff.y, swi.u2) + annotation (Line(points={{122,160},{198,160}}, color={255,0,255})); + connect(dTChiSup.y, hys3.u) + annotation (Line(points={{-178,-40},{-162,-40}}, color={0,0,127})); + connect(zer.y, lin.x1) + annotation (Line(points={{102,-100},{140,-100},{140,-132},{158,-132}}, + color={0,0,127})); + connect(chiWatTemCon.y, lin.u) + annotation (Line(points={{-118,-140},{158,-140}}, color={0,0,127})); + connect(one.y, lin.x2) + annotation (Line(points={{2,-180},{20,-180},{20,-144},{158,-144}}, + color={0,0,127})); + connect(maxTowSpe.y, lin.f2) + annotation (Line(points={{102,-180},{140,-180},{140,-148},{158,-148}}, + color={0,0,127})); + connect(lin.y, swi.u3) + annotation (Line(points={{182,-140},{190,-140},{190,152},{198,152}}, + color={0,0,127})); + connect(swi.y,ySpeSet) + annotation (Line(points={{222,160},{260,160}}, color={0,0,127})); + connect(minTowSpe.y, dFanSpe.u2) + annotation (Line(points={{-198,40},{-160,40},{-160,114},{-142,114}}, + color={0,0,127})); + connect(minTowSpe.y, lin.f1) + annotation (Line(points={{-198,40},{-100,40},{-100,-136},{158,-136}}, + color={0,0,127})); + connect(zer.y, swi.u1) + annotation (Line(points={{102,-100},{140,-100},{140,168},{198,168}}, + color={0,0,127})); + connect(TChiWatSupSet, chiWatTemCon.u_s) + annotation (Line(points={{-260,-140},{-142,-140}},color={0,0,127})); + connect(TChiWatSup, chiWatTemCon.u_m) + annotation (Line(points={{-260,-34},{-230,-34},{-230,-172},{-130,-172}, + {-130,-152}}, color={0,0,127})); + connect(TChiWatSupSet, dTChiSup.u2) + annotation (Line(points={{-260,-140},{-220,-140},{-220,-46},{-202,-46}}, + color={0,0,127})); + connect(and2.y, truDel.u) + annotation (Line(points={{22,160},{38,160}}, color={255,0,255})); + connect(truDel.y, fanCycOff.u) + annotation (Line(points={{62,160},{98,160}}, color={255,0,255})); + connect(hys4.y, fanOff.u) + annotation (Line(points={{-78,70},{-62,70}}, color={255,0,255})); + connect(hys3.y, cycOn.u2) + annotation (Line(points={{-138,-40},{20,-40},{20,62},{38,62}}, color={255,0,255})); + connect(uFanSpe, hys4.u) + annotation (Line(points={{-260,126},{-190,126},{-190,70},{-102,70}}, + color={0,0,127})); + connect(cycOn.y, fanCycOff.clr) annotation (Line(points={{62,70},{80,70},{80, + 154},{98,154}}, color={255,0,255})); + connect(fanOff.y, cycOffTim.u) + annotation (Line(points={{-38,70},{-22,70}}, color={255,0,255})); + connect(cycOffTim.y, cycOn.u1) + annotation (Line(points={{2,70},{38,70}}, color={255,0,255})); + connect(cycOn.y, chiWatTemCon.trigger) + annotation (Line(points={{62,70},{80,70},{80,-80},{-160,-80},{-160,-160}, + {-136,-160},{-136,-152}}, color={255,0,255})); + +annotation ( + defaultComponentName="wseTowSpeWSEOpe", + 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={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-40,10},{40,-10}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-20,80},{20,80},{0,10},{-20,80}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,-10},{-20,-80},{20,-80},{0,-10}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,-80},{76,-94}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{76,-78},{78,-96}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{78,-78},{80,-96}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-240,-200},{240,200}})), +Documentation(info=" +

                      +Block that output cooling tower fan speed yTowSpe when only waterside +economizer is running. This is implemented +according to ASHRAE Guideline36-2021, section 5.20.12.2, item c.2. +

                      +
                        +
                      1. +Fan speed shall be modulated to maintain chilled water supply temperature +TChiWatSup at setpoint TChiWatSupSet by a direct acting +PID loop that resets fan speed from minimum fanSpeMin at 0% loop output to +maximum fanSpeMax at 100% loop output. +
                      2. +
                      3. +If chilled water supply temperature TChiWatSup drops below setpoint +and fans have been at minimum speed fanSpeMin for 5 minutes (cheCycOffTim), +fans shall cycle off for at lease 3 minutes (minCycOffTim) and until +TChiWatSup rises above setpoint by 1 °F. +
                      4. +
                      +", revisions=" +
                        +
                      • +August 9, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end WSEOperation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/package.mo new file mode 100644 index 00000000000..fc118184632 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/package.mo @@ -0,0 +1,46 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE; +package Subsequences "Package of subsequences for tower fan speed control with waterside economizer being enabled" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains subsequences for cooling tower fan speed control when the waterside +economizer is enabled. +The implementation is based on section 5.20.12.2, item c in ASHRAE Guideline36-2021. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end Subsequences; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/package.order new file mode 100644 index 00000000000..70436fa5c3f --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/package.order @@ -0,0 +1,3 @@ +IntegratedOperation +WSEOperation +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Validation/Controller.mo new file mode 100644 index 00000000000..cf547cc1a8b --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Validation/Controller.mo @@ -0,0 +1,144 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Validation; +model Controller + "Validation sequence of controlling tower fan speed when waterside economizer is enabled" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Controller + wseOpe( + kWSE=0.1, + TiWSE=5) + "Tower fan speed control when waterside economizer is enabled" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiSupSet( + k=273.15 + 7) + "Chilled water supply water setpoint" + annotation (Placement(transformation(extent={{-100,-140},{-80,-120}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Logical switch" + annotation (Placement(transformation(extent={{20,100},{40,120}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1(k=0) + "Zero constant" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( + amplitude=0.1*1e4, + freqHz=1/1200, + offset=1.05*1e4, + startTime=180) "Chiller load" + annotation (Placement(transformation(extent={{-100,120},{-80,140}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + width=0.5, + period=4000) + "Boolean pulse" + annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); + Buildings.Controls.OBC.CDL.Logical.Not chiSta1 "First chiller status" + annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiSta2( + k=false) "Second chiller status" + annotation (Placement(transformation(extent={{20,60},{40,80}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse wseSta( + width=0.95, + period=3700) + "Waterside economizer enabling status" + annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); + Buildings.Controls.OBC.CDL.Discrete.UnitDelay fanSpe( + samplePeriod=1) + "Current fan speed" + annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTab( + table=[0,280.4; 400,279.9; 1000,281.65; 1600,280.4], + smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.HoldLastPoint) + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); + +equation + connect(booPul1.y, chiSta1.u) + annotation (Line(points={{-78,40},{-42,40}}, color={255,0,255})); + connect(con1.y, swi1.u3) + annotation (Line(points={{-78,90},{-60,90},{-60,102},{18,102}}, color={0,0,127})); + connect(sin.y, swi1.u1) + annotation (Line(points={{-78,130},{-60,130},{-60,118},{18,118}}, color={0,0,127})); + connect(chiSta1.y, swi1.u2) + annotation (Line(points={{-18,40},{0,40},{0,110},{18,110}}, color={255,0,255})); + connect(chiSta2.y, wseOpe.uChi[2]) + annotation (Line(points={{42,70},{70,70},{70,6},{98,6}}, color={255,0,255})); + connect(chiSta1.y, wseOpe.uChi[1]) + annotation (Line(points={{-18,40},{70,40},{70,6},{98,6}}, color={255,0,255})); + connect(swi1.y, wseOpe.chiLoa[1]) + annotation (Line(points={{42,110},{80,110},{80,9},{98,9}}, color={0,0,127})); + connect(con1.y, wseOpe.chiLoa[2]) + annotation (Line(points={{-78,90},{-60,90},{-60,9},{98,9}}, color={0,0,127})); + connect(wseSta.y, wseOpe.uWse) + annotation (Line(points={{-18,-30},{40,-30},{40,2},{98,2}}, color={255,0,255})); + connect(chiSupSet.y, wseOpe.TChiWatSupSet) + annotation (Line(points={{-78,-130},{70,-130},{70,-9},{98,-9}}, color={0,0,127})); + connect(wseOpe.ySpeSet, fanSpe.u) annotation (Line(points={{122,0},{130,0},{130, + -80},{-110,-80},{-110,-60},{-102,-60}}, color={0,0,127})); + connect(fanSpe.y, wseOpe.uFanSpe) annotation (Line(points={{-78,-60},{50,-60}, + {50,-2},{98,-2}},color={0,0,127})); + connect(timTab.y[1], wseOpe.TChiWatSup) annotation (Line(points={{-38,-100},{60, + -100},{60,-6},{98,-6}},color={0,0,127})); +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Validation/Controller.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Controller. +

                      +

                      +In this example, at 2000 seconds the plant changes from economizer-only mode to integration mode which +have both the chiller and economizer operating. It then changes to chiller-only mode at 3530 seconds. +It implements following processes: +

                      +
                        +
                      • +From 0 to 400 seconds, the chilled water supply temperature is greater than the setpoint. The direct PID controller +increases the output to the maximum output and the fan speed setpoint becomes 1. +
                      • +
                      • +From 400 to 1000 seconds, the chilled water supply temperature becomes lower than the setpoint. The PID controller decreases +the output to the minimum and the fan speed setpoint becomes the minimum. After the fan stays at minimum speed for 300 +seconds and the chilled water supply temperature is lower than the setpoint, the fan cycles off. +
                      • +
                      • +From 1000 to 1600 seconds, the chilled water supply temperature becomes greater than the setpoint by 1.5 °C. In the +meantime, the fan has been cycled off for 180 seconds (ranging from 895 seconds to 1075 seconds). The fan starts to run +again and the PID control increases the output to maximum and the fan speed setpoint becomes 1. +
                      • +
                      • +From 1600 to 2000 seconds, the chilled water supply temperature is reduced but still keeps higher than +the setpoint and the fan speed setpoint keeps to be 1. +
                      • +
                      • +At 2000 seconds, the plant changes from economizer-only mode to integration mode. It keeps the fan speed +setpoint to be maximum for 10 minutes (ranging from 2000 seconds to 2600 seconds). +
                      • +
                      • +From 2600 to 3515 seconds, the direct acting PID maintains to the chiller load at 110% of the sum of the minimum +cycling load for the operating chiller. +
                      • +
                      • +After the 3515 seconds, it becomes chiller only mode and the fan speed control becomes invalide. +
                      • +
                      +", revisions=" +
                        +
                      • +August 12, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-140,-160},{140,160}}))); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Validation/package.mo new file mode 100644 index 00000000000..cae386b1b2d --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE; +package Validation "Collection of validation models" + +annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})}), +preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +")); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Validation/package.order new file mode 100644 index 00000000000..8cba75e31a7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Validation/package.order @@ -0,0 +1 @@ +Controller diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/package.mo new file mode 100644 index 00000000000..5212406ac84 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/package.mo @@ -0,0 +1,46 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed; +package EnabledWSE "Package of sequences for control tower fan speed when waterside economizer is enabled" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains sequences for cooling tower fan speed control when the waterside +economizer is enabled. +The implementation is based on section 5.20.12.2, item c in ASHRAE Guideline36-2021. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end EnabledWSE; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/package.order new file mode 100644 index 00000000000..9ffbffcb990 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/package.order @@ -0,0 +1,3 @@ +Controller +Subsequences +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Controller.mo new file mode 100644 index 00000000000..701f54705ec --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Controller.mo @@ -0,0 +1,659 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature; +block Controller + "Cooling tower speed control to maintain condenser water return temperature at setpoint" + + parameter Integer nChi=2 "Total number of chillers"; + parameter Integer nTowCel=4 "Total number of cooling tower cells"; + parameter Integer nConWatPum=2 "Total number of condenser water pumps"; + parameter Boolean have_WSE=true "Flag to indicate if the plant has waterside economizer"; + parameter Boolean closeCoupledPlant=true "Flag to indicate if the plant is close coupled"; + parameter Real desCap( + final unit="W", + final quantity="HeatFlowRate")= 1e6 "Plant design capacity"; + parameter Real fanSpeMin=0.1 "Minimum tower fan speed"; + parameter Real LIFT_min[nChi]( + final unit=fill("K",nChi), + final quantity=fill("TemperatureDifference",nChi))={12,12} "Minimum LIFT of each chiller" + annotation (Dialog(tab="Setpoint")); + parameter Real TConWatSup_nominal[nChi]( + final unit=fill("K",nChi), + final quantity=fill("ThermodynamicTemperature",nChi), + displayUnit=fill("degC",nChi))={293.15,293.15} + "Design condenser water supply temperature (condenser entering) of each chiller" + annotation (Dialog(tab="Setpoint")); + parameter Real TConWatRet_nominal[nChi]( + final unit=fill("K",nChi), + final quantity=fill("ThermodynamicTemperature",nChi), + displayUnit=fill("degC",nChi))={303.15, 303.15} + "Design condenser water return temperature (condenser leaving) of each chiller" + annotation (Dialog(tab="Setpoint")); + parameter Real TChiWatSupMin[nChi]( + final unit=fill("K",nChi), + final quantity=fill("ThermodynamicTemperature",nChi), + displayUnit=fill("degC",nChi)) = {278.15, 278.15} + "Lowest chilled water supply temperature of each chiller" + annotation (Dialog(tab="Setpoint")); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController couPlaCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(tab="Coupled plant", group="Controller", enable=closeCoupledPlant)); + parameter Real kCouPla=1 "Gain of controller" + annotation (Dialog(tab="Coupled plant", group="Controller", enable=closeCoupledPlant)); + parameter Real TiCouPla( + final quantity="Time", + final unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="Coupled plant", + group="Controller", + enable=closeCoupledPlant and (couPlaCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + couPlaCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real TdCouPla( + final quantity="Time", + final unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Coupled plant", group="Controller", + enable=closeCoupledPlant and (couPlaCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + couPlaCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real yCouPlaMax=1 "Upper limit of output" + annotation (Dialog(tab="Coupled plant", group="Controller", enable=closeCoupledPlant)); + parameter Real yCouPlaMin=0 "Lower limit of output" + annotation (Dialog(tab="Coupled plant", group="Controller", enable=closeCoupledPlant)); + + parameter Real samplePeriod=30 + "Period of sampling condenser water supply and return temperature difference" + annotation (Dialog(tab="Less coupled plant", + group="Return water temperature controller", + enable=not closeCoupledPlant)); + parameter Buildings.Controls.OBC.CDL.Types.SimpleController supWatCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller" + annotation (Dialog(tab="Less coupled plant", + group="Supply water temperature controller", + enable=not closeCoupledPlant)); + parameter Real kSupCon=1 "Gain of controller" + annotation (Dialog(tab="Less coupled plant", + group="Supply water temperature controller", + enable=not closeCoupledPlant)); + parameter Real TiSupCon( + final quantity="Time", + final unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(tab="Less coupled plant", + group="Supply water temperature controller", + enable=not closeCoupledPlant and (supWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PI or + supWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real TdSupCon( + final quantity="Time", + final unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Less coupled plant", + group="Supply water temperature controller", + enable=not closeCoupledPlant and (supWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + supWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID))); + parameter Real ySupConMax=1 "Upper limit of output" + annotation (Dialog(tab="Less coupled plant", + group="Supply water temperature controller", + enable=not closeCoupledPlant)); + parameter Real ySupConMin=0 "Lower limit of output" + annotation (Dialog(tab="Less coupled plant", + group="Supply water temperature controller", + enable=not closeCoupledPlant)); + + parameter Real speChe=0.01 "Lower threshold value to check fan or pump speed" + annotation (Dialog(tab="Advanced")); + parameter Real cheMinFanSpe( + final quantity="Time", + final unit="s")=300 + "Threshold time for checking duration when tower fan equals to the minimum tower fan speed" + annotation (Dialog(tab="Advanced", group="Enable tower")); + parameter Real cheMaxTowSpe( + final quantity="Time", + final unit="s")=300 + "Threshold time for checking duration when any enabled chiller maximum cooling speed equals to the minimum tower fan speed" + annotation (Dialog(tab="Advanced", group="Enable tower")); + parameter Real cheTowOff( + final quantity="Time", + final unit="s")=60 + "Threshold time for checking duration when there is no enabled tower fan" + annotation (Dialog(tab="Advanced", group="Enable tower")); + parameter Real iniPlaTim( + final quantity="Time", + final unit="s")=600 + "Time to hold return temperature to initial setpoint after plant being enabled" + annotation (Dialog(tab="Advanced", + group="Setpoint: Plant startup")); + parameter Real ramTim( + final quantity="Time", + final unit="s")=180 + "Time to ramp return water temperature from initial value to setpoint" + annotation (Dialog(tab="Advanced", + group="Setpoint: Plant startup")); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uTowSpeWSE( + final min=0, + final max=1, + final unit="1") if have_WSE + "Cooling tower speed when the waterside economizer is enabled" + annotation (Placement(transformation(extent={{-200,220},{-160,260}}), + iconTransformation(extent={{-240,160},{-200,200}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller enabling status: true=ON" + annotation (Placement(transformation(extent={{-200,190},{-160,230}}), + iconTransformation(extent={{-240,130},{-200,170}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWse if have_WSE + "Waterside economizer status: true=ON" + annotation (Placement(transformation(extent={{-200,150},{-160,190}}), + iconTransformation(extent={{-240,100},{-200,140}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput reqPlaCap( + final unit="W", + final quantity="HeatFlowRate") "Current required plant capacity" + annotation (Placement(transformation(extent={{-200,80},{-160,120}}), + iconTransformation(extent={{-240,70},{-200,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uMaxTowSpeSet[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Maximum cooling tower speed setpoint from each chiller head pressure control loop" + annotation (Placement(transformation(extent={{-200,20},{-160,60}}), + iconTransformation(extent={{-240,40},{-200,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uFanSpe( + final min=0, + final max=1, + final unit="1") "Measured speed of current enabled tower fans" + annotation (Placement(transformation(extent={{-200,-10},{-160,30}}), + iconTransformation(extent={{-240,10},{-200,50}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uTow[nTowCel] + "Cooling tower operating status: true=running tower cell" + annotation (Placement(transformation(extent={{-200,-50},{-160,-10}}), + iconTransformation(extent={{-240,-20},{-200,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final quantity="ThermodynamicTemperature", + displayUnit="degC", + final unit="K") "Chilled water supply setpoint temperature" + annotation (Placement(transformation(extent={{-200,-100},{-160,-60}}), + iconTransformation(extent={{-240,-80},{-200,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enabling status" + annotation (Placement(transformation(extent={{-200,-140},{-160,-100}}), + iconTransformation(extent={{-240,-110},{-200,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatRet( + final quantity="ThermodynamicTemperature", + displayUnit="degC", + final unit="K") "Condenser water return temperature (condenser leaving)" + annotation (Placement(transformation(extent={{-200,-180},{-160,-140}}), + iconTransformation(extent={{-240,-140},{-200,-100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpe[nConWatPum]( + final min=fill(0, nConWatPum), + final max=fill(1, nConWatPum), + final unit=fill("1", nConWatPum)) "Current condenser water pump speed" + annotation (Placement(transformation(extent={{-200,-220},{-160,-180}}), + iconTransformation(extent={{-240,-170},{-200,-130}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatSup( + final quantity="ThermodynamicTemperature", + displayUnit="degC", + final unit="K") if not closeCoupledPlant + "Condenser water supply temperature (condenser entering)" + annotation (Placement(transformation(extent={{-200,-300},{-160,-260}}), + iconTransformation(extent={{-240,-200},{-200,-160}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySpeSet( + final min=0, + final max=1, + final unit="1") "Fan speed setpoint of each cooling tower cell" + annotation (Placement(transformation(extent={{160,190},{200,230}}), + iconTransformation(extent={{200,-20},{240,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConWatSupSet( + final quantity="ThermodynamicTemperature", + displayUnit="degC", + final unit="K") if not closeCoupledPlant + "Condenser water supply temperature setpoint" + annotation (Placement(transformation(extent={{160,-232},{200,-192}}), + iconTransformation(extent={{200,-210},{240,-170}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Setpoint conWatRetSet( + final nChi=nChi, + final LIFT_min=LIFT_min, + final iniPlaTim=iniPlaTim, + final ramTim=ramTim, + final TConWatRet_nominal=TConWatRet_nominal, + final TChiWatSupMin=TChiWatSupMin) "Return temperature setpoint" + annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Enable enaTow( + final nChi=nChi, + final nTowCel=nTowCel, + final fanSpeChe=speChe, + final fanSpeMin=fanSpeMin, + final cheMinFanSpe=cheMinFanSpe, + final cheMaxTowSpe=cheMaxTowSpe, + final cheTowOff=cheTowOff) "Enable and disable cooling tower fans" + annotation (Placement(transformation(extent={{40,10},{60,30}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Coupled + couTowSpe( + final nChi=nChi, + final nConWatPum=nConWatPum, + final fanSpeMin=fanSpeMin, + final pumSpeChe=speChe, + final controllerType=couPlaCon, + final k=kCouPla, + final Ti=TiCouPla, + final Td=TdCouPla, + final yMax=yCouPlaMax, + final yMin=yCouPlaMin) if closeCoupledPlant + "Tower fan speed control when the plant is close coupled" + annotation (Placement(transformation(extent={{40,-140},{60,-120}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.LessCoupled + lesCouTowSpe( + final nChi=nChi, + final nConWatPum=nConWatPum, + final pumSpeChe=speChe, + final fanSpeMin=fanSpeMin, + final samplePeriod=samplePeriod, + final iniPlaTim=iniPlaTim, + final TConWatSup_nominal=TConWatSup_nominal, + final TConWatRet_nominal=TConWatRet_nominal, + final supWatCon=supWatCon, + final kSupCon=kSupCon, + final TiSupCon=TiSupCon, + final TdSupCon=TdSupCon, + final ySupConMax=ySupConMax, + final ySupConMin=ySupConMin) if not closeCoupledPlant + "Tower fan speed control when the plant is not close coupled" + annotation (Placement(transformation(extent={{40,-230},{60,-210}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr( + final nin=nChi) "Check if any chiller is enabled" + annotation (Placement(transformation(extent={{-120,200},{-100,220}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 if have_WSE + "Waterside economizer is not enabled" + annotation (Placement(transformation(extent={{-120,160},{-100,180}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 + "Any chiller is enabled and waterside economizer is not enabled" + annotation (Placement(transformation(extent={{-20,200},{0,220}}))); + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter parLoaRat( + final k=1/desCap) "Plant partial load ratio" + annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); + Buildings.Controls.OBC.CDL.Reals.Line plrTowMaxSpe + "Tower maximum speed resetted by partial load ratio" + annotation (Placement(transformation(extent={{-20,90},{0,110}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi + "Switch the speed when the fan is enabled or disabled " + annotation (Placement(transformation(extent={{120,10},{140,30}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1 + "Switch between when waterside economizer is enabled and disabled" + annotation (Placement(transformation(extent={{100,200},{120,220}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant lowPlrTowMaxSpe( + final k=0.7) + "Lower bound of tower maximum speed" + annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( + final k=0) "Zero constant" + annotation (Placement(transformation(extent={{-60,130},{-40,150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hal( + final k=0.5) "Constant 0.5" + annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uppPlrTowMaxSpe( + final k=1) + "Upper bound of tower maximum speed" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1(final k=0) + "Zero constant" + annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant tru( + final k=true) if not have_WSE "True constant" + annotation (Placement(transformation(extent={{-80,160},{-60,180}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer2( + final k=0) if not have_WSE + "Zero constant" + annotation (Placement(transformation(extent={{40,160},{60,180}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis proOn[nConWatPum]( + final uLow=fill(speChe, nConWatPum), + final uHigh=fill(2*speChe, nConWatPum)) + "Check if the condenser water pump is proven on" + annotation (Placement(transformation(extent={{-140,-270},{-120,-250}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[nConWatPum] + "Convert boolean input to integer output" + annotation (Placement(transformation(extent={{-100,-270},{-80,-250}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum mulSumInt( + final nin=nConWatPum) "Sum up integer inputs" + annotation (Placement(transformation(extent={{-40,-270},{-20,-250}}))); + +equation + connect(uWse, not1.u) + annotation (Line(points={{-180,170},{-122,170}}, color={255,0,255})); + connect(mulOr.y, and2.u1) + annotation (Line(points={{-98,210},{-22,210}}, color={255,0,255})); + connect(not1.y, and2.u2) + annotation (Line(points={{-98,170},{-90,170},{-90,202},{-22,202}}, + color={255,0,255})); + connect(reqPlaCap, parLoaRat.u) + annotation (Line(points={{-180,100},{-122,100}}, color={0,0,127})); + connect(zer.y, plrTowMaxSpe.x1) + annotation (Line(points={{-38,140},{-30,140},{-30,108},{-22,108}}, + color={0,0,127})); + connect(lowPlrTowMaxSpe.y, plrTowMaxSpe.f1) + annotation (Line(points={{-98,140},{-70,140},{-70,104},{-22,104}}, + color={0,0,127})); + connect(parLoaRat.y, plrTowMaxSpe.u) + annotation (Line(points={{-98,100},{-22,100}}, color={0,0,127})); + connect(hal.y, plrTowMaxSpe.x2) + annotation (Line(points={{-98,60},{-70,60},{-70,96},{-22,96}}, + color={0,0,127})); + connect(uppPlrTowMaxSpe.y, plrTowMaxSpe.f2) + annotation (Line(points={{-38,60},{-30,60},{-30,92},{-22,92}}, + color={0,0,127})); + connect(uChi, conWatRetSet.uChi) + annotation (Line(points={{-180,210},{-140,210},{-140,-62},{-42,-62}}, + color={255,0,255})); + connect(parLoaRat.y, conWatRetSet.uOpeParLoaRat) + annotation (Line(points={{-98,100},{-80,100},{-80,-67},{-42,-67}}, + color={0,0,127})); + connect(conWatRetSet.TChiWatSupSet, TChiWatSupSet) + annotation (Line(points={{-42,-73},{-80,-73},{-80,-80},{-180,-80}}, + color={0,0,127})); + connect(conWatRetSet.uPla, uPla) + annotation (Line(points={{-42,-78},{-60,-78},{-60,-120},{-180,-120}}, + color={255,0,255})); + connect(enaTow.uMaxTowSpeSet, uMaxTowSpeSet) + annotation (Line(points={{38,29},{-120,29},{-120,40},{-180,40}}, + color={0,0,127})); + connect(enaTow.uFanSpe,uFanSpe) + annotation (Line(points={{38,26},{-130,26},{-130,10},{-180,10}}, + color={0,0,127})); + connect(enaTow.uTow, uTow) + annotation (Line(points={{38,14},{-110,14},{-110,-30},{-180,-30}}, + color={255,0,255})); + connect(conWatRetSet.TConWatRetSet, couTowSpe.TConWatRetSet) + annotation (Line(points={{-18,-70},{0,-70},{0,-120},{38,-120}}, + color={0,0,127})); + connect(couTowSpe.TConWatRet, TConWatRet) + annotation (Line(points={{38,-124},{-100,-124},{-100,-160},{-180,-160}}, + color={0,0,127})); + connect(couTowSpe.uConWatPumSpe, uConWatPumSpe) + annotation (Line(points={{38,-128},{-80,-128},{-80,-200},{-180,-200}}, + color={0,0,127})); + connect(uMaxTowSpeSet, couTowSpe.uMaxTowSpeSet) + annotation (Line(points={{-180,40},{-120,40},{-120,-132},{38,-132}}, + color={0,0,127})); + connect(plrTowMaxSpe.y, couTowSpe.plrTowMaxSpe) + annotation (Line(points={{2,100},{20,100},{20,-140},{38,-140}}, + color={0,0,127})); + connect(conWatRetSet.TConWatRetSet, lesCouTowSpe.TConWatRetSet) + annotation (Line(points={{-18,-70},{0,-70},{0,-210},{38,-210}}, + color={0,0,127})); + connect(TConWatRet, lesCouTowSpe.TConWatRet) + annotation (Line(points={{-180,-160},{-100,-160},{-100,-212},{38,-212}}, + color={0,0,127})); + connect(uConWatPumSpe, lesCouTowSpe.uConWatPumSpe) + annotation (Line(points={{-180,-200},{-80,-200},{-80,-218},{38,-218}}, + color={0,0,127})); + connect(lesCouTowSpe.TConWatSup, TConWatSup) + annotation (Line(points={{38,-222},{0,-222},{0,-280},{-180,-280}}, + color={0,0,127})); + connect(uMaxTowSpeSet, lesCouTowSpe.uMaxTowSpeSet) + annotation (Line(points={{-180,40},{-120,40},{-120,-225},{38,-225}}, + color={0,0,127})); + connect(plrTowMaxSpe.y, lesCouTowSpe.plrTowMaxSpe) + annotation (Line(points={{2,100},{20,100},{20,-230},{38,-230}}, + color={0,0,127})); + connect(enaTow.yTow, swi.u2) + annotation (Line(points={{62,20},{118,20}}, color={255,0,255})); + connect(couTowSpe.ySpeSet, swi.u1) + annotation (Line(points={{62,-130},{100,-130},{100,28},{118,28}}, + color={0,0,127})); + connect(lesCouTowSpe.ySpeSet, swi.u1) + annotation (Line(points={{62,-220},{100,-220},{100,28},{118,28}}, + color={0,0,127})); + connect(zer1.y, swi.u3) + annotation (Line(points={{62,-20},{80,-20},{80,12},{118,12}}, + color={0,0,127})); + connect(tru.y, and2.u2) + annotation (Line(points={{-58,170},{-40,170},{-40,202},{-22,202}}, + color={255,0,255})); + connect(and2.y, swi1.u2) + annotation (Line(points={{2,210},{98,210}}, color={255,0,255})); + connect(swi.y, swi1.u1) + annotation (Line(points={{142,20},{150,20},{150,190},{60,190},{60,218}, + {98,218}}, color={0,0,127})); + connect(uTowSpeWSE, swi1.u3) + annotation (Line(points={{-180,240},{80,240},{80,202},{98,202}}, + color={0,0,127})); + connect(zer2.y, swi1.u3) + annotation (Line(points={{62,170},{80,170},{80,202},{98,202}}, + color={0,0,127})); + connect(swi1.y,ySpeSet) + annotation (Line(points={{122,210},{180,210}}, color={0,0,127})); + connect(uChi, mulOr.u) + annotation (Line(points={{-180,210},{-122,210}}, color={255,0,255})); + connect(uConWatPumSpe, proOn.u) + annotation (Line(points={{-180,-200},{-150,-200},{-150,-260},{-142,-260}}, + color={0,0,127})); + connect(proOn.y, booToInt.u) + annotation (Line(points={{-118,-260},{-102,-260}}, color={255,0,255})); + connect(mulSumInt.y, enaTow.uConWatPumNum) + annotation (Line(points={{-18,-260},{10,-260},{10,11},{38,11}}, + color={255,127,0})); + connect(booToInt.y, mulSumInt.u) + annotation (Line(points={{-78,-260},{-42,-260}}, + color={255,127,0})); + connect(conWatRetSet.TConWatRetSet, enaTow.TTowSet) + annotation (Line(points={{-18,-70},{0,-70},{0,22},{38,22}}, color={0,0,127})); + connect(TConWatRet, enaTow.TTow) annotation (Line(points={{-180,-160},{-100, + -160},{-100,18},{38,18}}, color={0,0,127})); + connect(uChi, couTowSpe.uChi) + annotation (Line(points={{-180,210},{-140,210},{-140,-136},{38,-136}}, + color={255,0,255})); + connect(uChi, lesCouTowSpe.uChi) + annotation (Line(points={{-180,210},{-140,210},{-140,-227},{38,-227}}, + color={255,0,255})); + connect(uPla, lesCouTowSpe.uPla) + annotation (Line(points={{-180,-120},{-60,-120},{-60,-215},{38,-215}}, + color={255,0,255})); + connect(lesCouTowSpe.TConWatSupSet, TConWatSupSet) + annotation (Line(points={{62,-212},{180,-212}}, color={0,0,127})); + +annotation ( + defaultComponentName="towFanSpe", + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-200,-200}, + {200,200}}), graphics={ + Rectangle( + extent={{-200,-200},{200,200}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-200,280},{200,200}}, + textColor={0,0,255}, + textString="%name"), + Polygon( + points={{-40,160},{40,160},{0,20},{-40,160}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,20},{80,-20}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,-20},{-40,-160},{60,-160},{0,-20}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Polygon( + points={{120,-104},{140,-104},{150,-120},{140,-136},{120,-136},{110,-120}, + {120,-104}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{128,-136},{132,-160}}, + lineColor={200,200,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Line(points={{100,-160}}, color={28,108,200}), + Rectangle( + extent={{92,-160},{170,-170}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{114,-110},{144,-128}}, + textColor={28,108,200}, + textString="CWRT"), + Text( + extent={{-200,160},{-158,142}}, + textColor={255,0,255}, + textString="uChi"), + Text( + extent={{-196,188},{-118,172}}, + textColor={0,0,127}, + textString="uTowSpeWSE", + visible=have_WSE), + Text( + extent={{-200,130},{-154,114}}, + textColor={255,0,255}, + textString="uWse", + visible=have_WSE), + Text( + extent={{-198,12},{-160,-6}}, + textColor={255,0,255}, + textString="uTow"), + Text( + extent={{-200,-80},{-160,-98}}, + textColor={255,0,255}, + textString="uPla"), + Text( + extent={{-200,100},{-126,82}}, + textColor={0,0,127}, + textString="reqPlaCap"), + Text( + extent={{-196,72},{-104,54}}, + textColor={0,0,127}, + textString="uMaxTowSpeSet"), + Text( + extent={{-200,40},{-134,22}}, + textColor={0,0,127}, + textString="uFanSpe"), + Text( + extent={{-198,-50},{-118,-68}}, + textColor={0,0,127}, + textString="TChiWatSupSet"), + Text( + extent={{-200,-112},{-114,-128}}, + textColor={0,0,127}, + textString="TConWatRet"), + Text( + extent={{-196,-142},{-94,-158}}, + textColor={0,0,127}, + textString="uConWatPumSpe"), + Text( + extent={{-198,-170},{-118,-188}}, + textColor={0,0,127}, + textString="TConWatSup", + visible=not closeCoupledPlant), + Text( + extent={{122,12},{200,-6}}, + textColor={0,0,127}, + textString="ySpeSet"), + Text( + extent={{114,-178},{194,-196}}, + textColor={0,0,127}, + textString="TConWatSupSet", + visible=not closeCoupledPlant)}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-160,-300},{160,280}}), graphics={ + Text( + extent={{-148,280},{-78,262}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Left, + textString="When there is no WSE:"), + Text( + extent={{-148,264},{-24,258}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Left, + textString="- if no chiller is enabled, then tower fan speed should be zero;"), + Text( + extent={{-148,258},{-14,248}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Left, + textString="- if any chiller is enabled, then control fan speed with sequence here;"), + Text( + extent={{6,278},{70,266}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Left, + textString="When there is WSE:"), + Text( + extent={{6,264},{150,256}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Left, + textString="- if WSE is not enabled, then control fan speed with sequence here;"), + Text( + extent={{6,256},{150,248}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Left, + textString="- if WSE is enabled, then fan speed will be controlled by uTowSpeWSE;")}), +Documentation(info=" +

                      +Block that outputs cooling tower fan speed ySpeSet for maintaining +condenser water return temperature at setpoint. This is implemented +according to ASHRAE Guideline36-2021, section 5.20.12.2, +item a. It includes four subsequences: +

                      + +", revisions=" +
                        +
                      • +August 9, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Coupled.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Coupled.mo new file mode 100644 index 00000000000..68a624b8bbe --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Coupled.mo @@ -0,0 +1,236 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences; +block Coupled + "Sequence of defining cooling tower fan speed when the plant is close coupled" + + parameter Integer nChi = 2 "Total number of chillers"; + parameter Integer nConWatPum = 2 "Total number of condenser water pumps"; + parameter Real fanSpeMin = 0.1 "Minimum cooling tower fan speed"; + parameter Real pumSpeChe = 0.01 + "Lower threshold value to check if condenser water pump is proven on"; + parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller" + annotation (Dialog(group="Controller")); + parameter Real k=1 "Gain of controller" + annotation (Dialog(group="Controller")); + parameter Real Ti( + final quantity="Time", + final unit="s")=0.5 + "Time constant of integrator block" + annotation (Dialog(group="Controller")); + parameter Real Td( + final quantity="Time", + final unit="s")=0.1 + "Time constant of derivative block" + annotation (Dialog(group="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="Controller")); + parameter Real yMin=0 "Lower limit of output" + annotation (Dialog(group="Controller")); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatRetSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Condenser water return temperature setpoint" + annotation (Placement(transformation(extent={{-160,60},{-120,100}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatRet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Condenser water return temperature (condenser leaving)" + annotation (Placement(transformation(extent={{-160,20},{-120,60}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpe[nConWatPum]( + final min=fill(0, nConWatPum), + final max=fill(1, nConWatPum), + final unit=fill("1", nConWatPum)) "Current condenser water pump speed" + annotation (Placement(transformation(extent={{-160,-20},{-120,20}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uMaxTowSpeSet[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Maximum cooling tower speed setpoint from each chiller head pressure control loop" + annotation (Placement(transformation(extent={{-160,-60},{-120,-20}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller enabling status: true=ON" + annotation (Placement(transformation(extent={{-160,-100},{-120,-60}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput plrTowMaxSpe( + final min=0, + final max=1, + final unit="1") + "Tower maximum speed that reset based on plant partial load ratio" + annotation (Placement(transformation(extent={{-160,-150},{-120,-110}}), + iconTransformation(extent={{-140,-120},{-100,-80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySpeSet( + final min=0, + final max=1, + final unit="1") "Fan speed setpoint of each cooling tower cell" + annotation (Placement(transformation(extent={{120,-20},{160,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conPID( + final controllerType=controllerType, + final k=k, + final Ti=Ti, + final Td=Td, + final yMax=yMax, + final yMin=yMin, + final reverseActing=false, + final y_reset=yMin) + "Condenser water return temperature controller" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Buildings.Controls.OBC.CDL.Reals.Line CWRTSpd + "Fan speed calculated based on return water temperature control loop" + annotation (Placement(transformation(extent={{80,70},{100,90}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTowSpe( + final k=fanSpeMin) "Minimum tower speed" + annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( + final k=yMin) "Zero constant" + annotation (Placement(transformation(extent={{0,110},{20,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( + final k=yMax) "Constant one" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis proOn[nConWatPum]( + final uLow=fill(pumSpeChe, nConWatPum), + final uHigh=fill(2*pumSpeChe, nConWatPum)) + "Check if the condenser water pump is proven on" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr anyProOn( + final nin=nConWatPum) + "Check if there is any condenser water pump is proven on" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMin fanSpe(final nin=3) + "Cooling tower fan speed" + annotation (Placement(transformation(extent={{20,-90},{40,-70}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMin maxSpe( + final nin=nChi) + "Lowest value of the maximum cooling tower speed from each chiller head pressure control loop" + annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1[nChi] "Logical switch" + annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one1[nChi]( + final k=fill(1, nChi)) "Constant one" + annotation (Placement(transformation(extent={{-100,-120},{-80,-100}}))); + +equation + connect(TConWatRet, conPID.u_m) + annotation (Line(points={{-140,40},{-70,40},{-70,68}}, color={0,0,127})); + connect(TConWatRetSet, conPID.u_s) + annotation (Line(points={{-140,80},{-82,80}}, color={0,0,127})); + connect(conPID.y, CWRTSpd.u) + annotation (Line(points={{-58,80},{78,80}}, color={0,0,127})); + connect(zer.y, CWRTSpd.x1) + annotation (Line(points={{22,120},{60,120},{60,88},{78,88}}, color={0,0,127})); + connect(minTowSpe.y, CWRTSpd.f1) + annotation (Line(points={{-58,120},{-20,120},{-20,84},{78,84}}, color={0,0,127})); + connect(one.y, CWRTSpd.x2) + annotation (Line(points={{22,60},{40,60},{40,76},{78,76}}, color={0,0,127})); + connect(one.y, CWRTSpd.f2) + annotation (Line(points={{22,60},{40,60},{40,72},{78,72}}, color={0,0,127})); + connect(uConWatPumSpe, proOn.u) + annotation (Line(points={{-140,0},{-102,0}}, color={0,0,127})); + connect(proOn.y, anyProOn.u) + annotation (Line(points={{-78,0},{-62,0}}, color={255,0,255})); + connect(anyProOn.y, conPID.trigger) + annotation (Line(points={{-38,0},{0,0},{0,30},{-76,30},{-76,68}}, + color={255,0,255})); + connect(uChi, swi1.u2) + annotation (Line(points={{-140,-80},{-62,-80}}, color={255,0,255})); + connect(one1.y, swi1.u3) + annotation (Line(points={{-78,-110},{-70,-110},{-70,-88},{-62,-88}}, + color={0,0,127})); + connect(uMaxTowSpeSet, swi1.u1) + annotation (Line(points={{-140,-40},{-80,-40},{-80,-72},{-62,-72}}, + color={0,0,127})); + connect(swi1.y, maxSpe.u) + annotation (Line(points={{-38,-80},{-22,-80}}, color={0,0,127})); + connect(CWRTSpd.y, fanSpe.u[1]) + annotation (Line(points={{102,80},{110,80},{110,30},{10,30},{10,-80.6667},{ + 18,-80.6667}}, + color={0,0,127})); + connect(maxSpe.y, fanSpe.u[2]) + annotation (Line(points={{2,-80},{18,-80}}, color={0,0,127})); + connect(plrTowMaxSpe, fanSpe.u[3]) + annotation (Line(points={{-140,-130},{10,-130},{10,-79.3333},{18,-79.3333}}, + color={0,0,127})); + connect(anyProOn.y, swi.u2) + annotation (Line(points={{-38,0},{78,0}}, color={255,0,255})); + connect(zer.y, swi.u3) + annotation (Line(points={{22,120},{60,120},{60,-8},{78,-8}}, + color={0,0,127})); + connect(fanSpe.y, swi.u1) + annotation (Line(points={{42,-80},{50,-80},{50,8},{78,8}}, color={0,0,127})); + connect(swi.y,ySpeSet) + annotation (Line(points={{102,0},{140,0}}, color={0,0,127})); + +annotation ( + defaultComponentName="couTowSpe", + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-120,-140},{120,140}})), + Icon(coordinateSystem(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={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Polygon( + points={{-20,80},{20,80},{0,10},{-20,80}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-40,10},{40,-10}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,-10},{-20,-80},{20,-80},{0,-10}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid)}), +Documentation(info=" +

                      +Block that outputs cooling tower fan speed ySpeSet based on the control +of condenser water return temperature for the plant that is close coupled. +This is implemented according to ASHRAE Guideline36-2021, section 5.20.12.2, item a.6-7. +

                      +
                        +
                      • +When any condenser water pump is proven on (uConWatPumSpe > 0), +condenser water return temperature TConWatRet shall be maintained at +setpoint TConWatRetSet by a direct acting PID loop. The loop output +shall be mapped to the variable tower speed. Map the tower speed from minimum tower +speed fanSpeMin at 0% loop output to 100% speed at 100% loop output. +
                      • +
                      • +The output tower speed ySpeSet shall be the lowest value of tower speed +from loop mapping, maximum cooling tower speed setpoint from each chiller head +pressure control loop uMaxTowSpeSet, and tower maximum speed that reset +based on plant partial load ratio plrTowMaxSpe. All operating fans shall +receive the same speed signal. +
                      • +
                      +", revisions=" +
                        +
                      • +August 9, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Coupled; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Enable.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Enable.mo new file mode 100644 index 00000000000..808841ba48e --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Enable.mo @@ -0,0 +1,421 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences; +block Enable "Sequence for enabling and disabling tower fan" + + parameter Integer nChi=2 "Total number of chillers"; + parameter Integer nTowCel=4 "Total number of cooling tower cells"; + parameter Real fanSpeChe( + final unit="1")= 0.01 + "Lower threshold value to check fan speed"; + parameter Real fanSpeMin( + final unit="1", + final min=0, + final max=1) = 0.1 "Minimum tower fan speed"; + parameter Real cheMinFanSpe( + final quantity="Time", + final unit="s")=300 + "Threshold time for checking duration when tower fan equals to the minimum tower fan speed" + annotation (Dialog(tab="Advanced")); + parameter Real cheMaxTowSpe( + final quantity="Time", + final unit="s")=300 + "Threshold time for checking duration when any enabled chiller maximum cooling speed equals to the minimum tower fan speed" + annotation (Dialog(tab="Advanced")); + parameter Real cheTowOff( + final quantity="Time", + final unit="s")=60 + "Threshold time for checking duration when there is no enabled tower fan" + annotation (Dialog(tab="Advanced")); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uMaxTowSpeSet[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Maximum cooling tower speed setpoint from each chiller head pressure control loop" + annotation (Placement(transformation(extent={{-320,190},{-280,230}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uFanSpe( + final min=0, + final max=1, + final unit="1") "Measured tower fan speed" + annotation (Placement(transformation(extent={{-320,100},{-280,140}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TTowSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Setpoint of tower temperature, could be condenser water return or supply temperature" + annotation (Placement(transformation(extent={{-320,20},{-280,60}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TTow( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Measured tower temperature, could be condenser water return or supply temperature" + annotation (Placement(transformation(extent={{-320,-30},{-280,10}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uTow[nTowCel] + "Cooling tower operating status: true=running tower cell" + annotation (Placement(transformation(extent={{-320,-140},{-280,-100}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uConWatPumNum + "Number of enabled condenser water pumps" + annotation (Placement(transformation(extent={{-320,-180},{-280,-140}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yTow + "Tower fan status: true=enable any number of fans; false=disable all fans" + annotation (Placement(transformation(extent={{280,-230},{320,-190}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Subtract sub0[nChi] + "Difference between enabled chiller head pressure control maximum tower speed and the minimum tower speed" + annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys[nChi]( + final uLow=fill(fanSpeChe, nChi), + final uHigh=fill(2*fanSpeChe, nChi)) + "Check if chiller head pressure control maximum tower speed is greater than the minimum tower speed " + annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr( + final nin=nChi) + "Check if any enabled chiller head pressure control maximum tower speed equals to the minimum tower speed" + annotation (Placement(transformation(extent={{-20,150},{0,170}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1[nChi] "Logical not" + annotation (Placement(transformation(extent={{-60,150},{-40,170}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel2( + final delayTime=cheMaxTowSpe, + final delayOnInit=true) + "Count the time when the chiller head pressure control maximum tower speed equals tower minimum speed" + annotation (Placement(transformation(extent={{20,150},{40,170}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys1[nChi]( + final uLow=fill(fanSpeChe, nChi), + final uHigh=fill(2*fanSpeChe, nChi)) + "Check if chiller has been enabled, an enabled chiller will have the head pressure control maximum cooling tower speed that is greater than zero" + annotation (Placement(transformation(extent={{-240,200},{-220,220}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[nChi] "Logical switch" + annotation (Placement(transformation(extent={{-200,170},{-180,190}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 + "Difference between tower fan speed and the minimum fan speed" + annotation (Placement(transformation(extent={{-160,90},{-140,110}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys2( + final uLow=fanSpeChe, + final uHigh=2*fanSpeChe) + "Check if tower fan speed is greater than minimum speed" + annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 + "Check if tower fan speed equals to the minimum speed" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 + "Difference between the return water temperature and the adjusted setpoint" + annotation (Placement(transformation(extent={{-160,10},{-140,30}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys3( + final uLow=0.1, + final uHigh=0.15) + "Check if tower temperature is a delta below setpoint" + annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 + "Tower fans have been at minimum speed for a threshold time and tower return water temperature drops below a adjusted setpoint" + annotation (Placement(transformation(extent={{20,90},{40,110}}))); + Buildings.Controls.OBC.CDL.Logical.Or disTow + "Check if the tower fans should be disabled" + annotation (Placement(transformation(extent={{60,150},{80,170}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr1( + final nin=nTowCel) + "True when any tower fan is enaled" + annotation (Placement(transformation(extent={{-240,-130},{-220,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Not not3 "No enabled tower fan" + annotation (Placement(transformation(extent={{-160,-130},{-140,-110}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=cheTowOff, + final delayOnInit=true) + "Count the time when all tower cells are off" + annotation (Placement(transformation(extent={{-120,-130},{-100,-110}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 + "Difference between the return water temperature and the adjusted setpoint" + annotation (Placement(transformation(extent={{-160,-50},{-140,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys4( + final uLow=0.1, + final uHigh=0.15) + "Check if tower temperature is above the adjusted setpoint" + annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Logical.MultiAnd mulAnd( + final nin=nChi) + "Check if all enabled chillers head pressure control maximum tower speed are greater than tower minimum speed" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + Buildings.Controls.OBC.CDL.Logical.And enaTow + "Check if tower fans should be enabled" + annotation (Placement(transformation(extent={{60,-20},{80,0}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu + "Check integer number equality" + annotation (Placement(transformation(extent={{-100,-170},{-80,-150}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=0) "Zero constant" + annotation (Placement(transformation(extent={{-160,-210},{-140,-190}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTowSpe[nChi]( + final k=fill(fanSpeMin, nChi)) + "Minimum tower speed" + annotation (Placement(transformation(extent={{-240,70},{-220,90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one[nChi]( + final k=fill(1, nChi)) "Constant one" + annotation (Placement(transformation(extent={{-240,140},{-220,160}}))); + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( + final p=5/9) "Tower temperature setpoint plus 1 degF" + annotation (Placement(transformation(extent={{-240,-80},{-220,-60}}))); + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( + final p=-5/9) + "Temperature of a delta value below the tower temperature setpoint" + annotation (Placement(transformation(extent={{-240,30},{-220,50}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel1( + final delayTime=cheMinFanSpe, + final delayOnInit=true) + "Count the time when the tower fan is at minimum speed" + annotation (Placement(transformation(extent={{-20,90},{0,110}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi2 "Logical switch" + annotation (Placement(transformation(extent={{240,-170},{260,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant disFan1( + final k=false) + "Disable tower fan when no condenser water pump is ON" + annotation (Placement(transformation(extent={{120,-210},{140,-190}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi1 "Logical switch" + annotation (Placement(transformation(extent={{200,-100},{220,-80}}))); + Buildings.Controls.OBC.CDL.Logical.Or chaTow + "Tower fan should be enabled or disabled" + annotation (Placement(transformation(extent={{140,-20},{160,0}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 + "Logical and" + annotation (Placement(transformation(extent={{0,-20},{20,0}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi3 + "Logical switch" + annotation (Placement(transformation(extent={{140,150},{160,170}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=false) + "Constant false" + annotation (Placement(transformation(extent={{80,200},{100,220}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre2 + "Break algebraic loop" + annotation (Placement(transformation(extent={{240,-220},{260,-200}}))); + +equation + connect(sub0.y, hys.u) + annotation (Line(points={{-138,160},{-122,160}}, color={0,0,127})); + connect(hys.y, not1.u) + annotation (Line(points={{-98,160},{-62,160}},color={255,0,255})); + connect(mulOr.y, truDel2.u) + annotation (Line(points={{2,160},{18,160}}, color={255,0,255})); + connect(uMaxTowSpeSet, hys1.u) + annotation (Line(points={{-300,210},{-242,210}}, color={0,0,127})); + connect(hys1.y, swi.u2) + annotation (Line(points={{-218,210},{-210,210},{-210,180},{-202,180}}, + color={255,0,255})); + connect(uMaxTowSpeSet, swi.u1) + annotation (Line(points={{-300,210},{-260,210},{-260,188},{-202,188}}, + color={0,0,127})); + connect(one.y, swi.u3) + annotation (Line(points={{-218,150},{-210,150},{-210,172},{-202,172}}, + color={0,0,127})); + connect(swi.y, sub0.u1) + annotation (Line(points={{-178,180},{-170,180},{-170,166},{-162,166}}, + color={0,0,127})); + connect(uFanSpe, sub1.u1) + annotation (Line(points={{-300,120},{-200,120},{-200,106},{-162,106}}, + color={0,0,127})); + connect(sub1.y, hys2.u) + annotation (Line(points={{-138,100},{-122,100}}, color={0,0,127})); + connect(hys2.y, not2.u) + annotation (Line(points={{-98,100},{-62,100}},color={255,0,255})); + connect(sub2.y, hys3.u) + annotation (Line(points={{-138,20},{-122,20}}, color={0,0,127})); + connect(hys3.y, and2.u2) + annotation (Line(points={{-98,20},{10,20},{10,92},{18,92}}, color={255,0,255})); + connect(and2.y, disTow.u2) + annotation (Line(points={{42,100},{50,100},{50,152},{58,152}}, + color={255,0,255})); + connect(mulOr1.y, not3.u) + annotation (Line(points={{-218,-120},{-162,-120}}, color={255,0,255})); + connect(not3.y, truDel.u) + annotation (Line(points={{-138,-120},{-122,-120}}, color={255,0,255})); + connect(TTow, sub3.u1) + annotation (Line(points={{-300,-10},{-180,-10},{-180,-34},{-162,-34}}, + color={0,0,127})); + connect(sub3.y, hys4.u) + annotation (Line(points={{-138,-40},{-122,-40}}, color={0,0,127})); + connect(not1.y, mulOr.u) + annotation (Line(points={{-38,160},{-22,160}}, color={255,0,255})); + connect(hys.y, mulAnd.u) + annotation (Line(points={{-98,160},{-80,160},{-80,-10},{-62,-10}}, + color={255,0,255})); + connect(uTow, mulOr1.u) + annotation (Line(points={{-300,-120},{-242,-120}}, color={255,0,255})); + connect(uConWatPumNum, intEqu.u1) + annotation (Line(points={{-300,-160},{-102,-160}}, color={255,127,0})); + connect(conInt.y, intEqu.u2) + annotation (Line(points={{-138,-200},{-120,-200},{-120,-168},{-102,-168}}, + color={255,127,0})); + connect(TTowSet, addPar1.u) + annotation (Line(points={{-300,40},{-242,40}}, color={0,0,127})); + connect(addPar1.y, sub2.u1) + annotation (Line(points={{-218,40},{-180,40},{-180,26},{-162,26}},color={0,0,127})); + connect(TTowSet, addPar.u) + annotation (Line(points={{-300,40},{-260,40},{-260,-70},{-242,-70}}, color={0,0,127})); + connect(not2.y, truDel1.u) + annotation (Line(points={{-38,100},{-22,100}}, color={255,0,255})); + connect(disFan1.y, logSwi2.u1) + annotation (Line(points={{142,-200},{160,-200},{160,-152},{238,-152}}, + color={255,0,255})); + connect(intEqu.y, logSwi2.u2) + annotation (Line(points={{-78,-160},{238,-160}}, + color={255,0,255})); + connect(mulOr1.y, logSwi1.u3) + annotation (Line(points={{-218,-120},{-200,-120},{-200,-98},{198,-98}}, + color={255,0,255})); + connect(chaTow.y, logSwi1.u2) + annotation (Line(points={{162,-10},{170,-10},{170,-90},{198,-90}}, + color={255,0,255})); + connect(logSwi1.y, logSwi2.u3) + annotation (Line(points={{222,-90},{230,-90},{230,-168},{238,-168}}, + color={255,0,255})); + connect(addPar.y, sub3.u2) annotation (Line(points={{-218,-70},{-200,-70},{-200, + -46},{-162,-46}},color={0,0,127})); + connect(TTow, sub2.u2) annotation (Line(points={{-300,-10},{-180,-10},{-180,14}, + {-162,14}}, color={0,0,127})); + connect(minTowSpe.y, sub0.u2) annotation (Line(points={{-218,80},{-180,80},{-180, + 154},{-162,154}}, color={0,0,127})); + connect(minTowSpe[1].y, sub1.u2) annotation (Line(points={{-218,80},{-180,80}, + {-180,94},{-162,94}}, color={0,0,127})); + connect(enaTow.u1, and1.y) + annotation (Line(points={{58,-10},{22,-10}}, color={255,0,255})); + connect(disTow.y, logSwi3.u2) + annotation (Line(points={{82,160},{138,160}}, color={255,0,255})); + connect(con.y, logSwi3.u1) annotation (Line(points={{102,210},{120,210},{120,168}, + {138,168}}, color={255,0,255})); + connect(enaTow.y, logSwi3.u3) annotation (Line(points={{82,-10},{120,-10},{120, + 152},{138,152}}, color={255,0,255})); + connect(logSwi3.y, logSwi1.u1) annotation (Line(points={{162,160},{180,160},{180, + -82},{198,-82}}, color={255,0,255})); + connect(enaTow.y, chaTow.u1) + annotation (Line(points={{82,-10},{138,-10}}, color={255,0,255})); + connect(disTow.y, chaTow.u2) annotation (Line(points={{82,160},{100,160},{100, + -18},{138,-18}}, color={255,0,255})); + connect(mulAnd.y, and1.u1) + annotation (Line(points={{-38,-10},{-2,-10}}, color={255,0,255})); + connect(hys4.y, and1.u2) annotation (Line(points={{-98,-40},{-20,-40},{-20,-18}, + {-2,-18}}, color={255,0,255})); + connect(truDel.y, enaTow.u2) annotation (Line(points={{-98,-120},{40,-120},{40, + -18},{58,-18}}, color={255,0,255})); + connect(truDel1.y, and2.u1) + annotation (Line(points={{2,100},{18,100}}, color={255,0,255})); + connect(truDel2.y, disTow.u1) + annotation (Line(points={{42,160},{58,160}}, color={255,0,255})); + connect(logSwi2.y, pre2.u) annotation (Line(points={{262,-160},{270,-160},{270, + -180},{230,-180},{230,-210},{238,-210}}, color={255,0,255})); + connect(pre2.y, yTow) + annotation (Line(points={{262,-210},{300,-210}}, color={255,0,255})); +annotation ( + defaultComponentName="enaTow", + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-280,-240},{280,240}}), graphics={ + Rectangle( + extent={{-278,58},{278,-138}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-278,238},{278,62}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-278,-142},{278,-238}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{146,226},{250,212}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Left, + textString="Disable tower fans"), + Text( + extent={{144,46},{238,30}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Left, + textString="Enable tower fans"), + Text( + extent={{-114,-214},{94,-230}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Left, + textString="Disable tower fans when no running condenser water pump")}), + Icon(coordinateSystem(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={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name")}), +Documentation(info=" +

                      +Block that outputs signal yTowSta for enabling and disabling cooling tower +fan. This is implemented according to ASHRAE Guideline36-2021, +section 5.20.12.2, item a.11-l2. +

                      +
                        +
                      1. +Disable the tower fans if either: +
                          +
                        • +Any enabled chiller’s head pressure control maximum tower fan speed uMaxTowSpeSet +has equaled tower minimum speed fanSpeMin for 5 minutes, or +
                        • +
                        • +Tower fans uFanSpe have been at minimum speed fanSpeMin for +5 minutes and tower temperature TTow drops below setpoint +TTowSet minus 1 °F. +
                        • +
                        +
                      2. +
                      3. +Enable the tower fans if: +
                          +
                        • +They have been off (uTow=false) for at least 1 minute, and +
                        • +
                        • +The tower temperature TTow rises above setpoint TTowSet +by 1 °F, and +
                        • +
                        • +All enabled chillers’ head pressure control maximum tower fan speed uMaxTowSpeSet +are greater than tower minimum speed fanSpeMin. +
                        • +
                        +
                      4. +
                      5. +When all condenser water pumps are commanded OFF, disable the PID loop and +stop all tower fans. +
                      6. +
                      +

                      +Note that the tower temperature TTow could be condenser water return +temperature or condenser water supply temperature, depending on whether the fan +speed control is to maintain return temperature or supply temperature. +

                      +", revisions=" +
                        +
                      • +August 9, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Enable; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/LessCoupled.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/LessCoupled.mo new file mode 100644 index 00000000000..f344fb5fe43 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/LessCoupled.mo @@ -0,0 +1,379 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences; +block LessCoupled + "Sequence of defining cooling tower fan speed when the plant is not close coupled" + + parameter Integer nChi = 2 "Total number of chillers"; + parameter Integer nConWatPum = 2 "Total number of condenser water pumps"; + parameter Real pumSpeChe = 0.01 + "Lower threshold value to check if condenser water pump is proven on"; + parameter Real fanSpeMin( + final unit="1", + final min=0, + final max=1)= 0.1 + "Minimum cooling tower fan speed"; + + parameter Real samplePeriod( + final quantity="Time", + final unit="s", + final max=30) = 30 + "Period of sampling condenser water supply and return temperature difference" + annotation (Dialog(group="Return water temperature controller")); + parameter Real iniPlaTim( + final quantity="Time", + final unit="s") = 300 + "Threshold time to hold the initial temperature difference at the plant initial stage" + annotation (Dialog(group="Return water temperature controller")); + parameter Real TConWatSup_nominal[nChi]( + final unit=fill("K",nChi), + final quantity=fill("ThermodynamicTemperature",nChi), + displayUnit=fill("degC",nChi)) = {293.15, 293.15} + "Design condenser water supply temperature (condenser entering) of each chiller" + annotation (Dialog(group="Return water temperature controller")); + parameter Real TConWatRet_nominal[nChi]( + final unit=fill("K",nChi), + final quantity=fill("ThermodynamicTemperature",nChi), + displayUnit=fill("degC",nChi)) = {303.15, 303.15} + "Design condenser water return temperature (condenser leaving) of each chiller" + annotation (Dialog(group="Return water temperature controller")); + + parameter Buildings.Controls.OBC.CDL.Types.SimpleController supWatCon= + Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Supply water temperature controller" + annotation (Dialog(group="Supply water temperature controller")); + parameter Real kSupCon=1 "Gain of controller" + annotation (Dialog(group="Supply water temperature controller")); + parameter Real TiSupCon( + final quantity="Time", + final unit="s")=0.5 "Time constant of integrator block" + annotation (Dialog(group="Supply water temperature controller")); + parameter Real TdSupCon( + final quantity="Time", + final unit="s")=0.1 "Time constant of derivative block" + annotation (Dialog(group="Supply water temperature controller", enable= + supWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or + supWatCon == Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + parameter Real ySupConMax=1 "Upper limit of output" + annotation (Dialog(group="Supply water temperature controller")); + parameter Real ySupConMin=0 "Lower limit of output" + annotation (Dialog(group="Supply water temperature controller")); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatRetSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Condenser water return temperature setpoint" + annotation (Placement(transformation(extent={{-220,160},{-180,200}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatRet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Condenser water return temperature (condenser leaving)" + annotation (Placement(transformation(extent={{-220,130},{-180,170}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enabling status" + annotation (Placement(transformation(extent={{-220,80},{-180,120}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpe[nConWatPum]( + final min=fill(0, nConWatPum), + final max=fill(1, nConWatPum), + final unit=fill("1", nConWatPum)) "Current condenser water pump speed" + annotation (Placement(transformation(extent={{-220,-40},{-180,0}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatSup( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Condenser water supply temperature (condenser entering)" + annotation (Placement(transformation(extent={{-220,-80},{-180,-40}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uMaxTowSpeSet[nChi]( + final min=fill(0, nChi), + final max=fill(1, nChi), + final unit=fill("1", nChi)) + "Maximum cooling tower speed setpoint from each chiller head pressure control loop" + annotation (Placement(transformation(extent={{-220,-110},{-180,-70}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Chiller enabling status: true=ON" + annotation (Placement(transformation(extent={{-220,-140},{-180,-100}}), + iconTransformation(extent={{-140,-90},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput plrTowMaxSpe( + final min=0, + final max=1, + final unit="1") + "Tower maximum speed that reset based on plant partial load ratio" + annotation (Placement(transformation(extent={{-220,-200},{-180,-160}}), + iconTransformation(extent={{-140,-120},{-100,-80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConWatSupSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Condenser water supply temperature setpoint" + annotation (Placement(transformation(extent={{160,130},{200,170}}), + iconTransformation(extent={{100,60},{140,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySpeSet( + final min=0, + final max=1, + final unit="1") "Fan speed setpoint of each cooling tower cell" + annotation (Placement(transformation(extent={{160,-160},{200,-120}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Reals.PIDWithReset supCon( + final controllerType=supWatCon, + final k=kSupCon, + final Ti=TiSupCon, + final Td=TdSupCon, + final yMax=ySupConMax, + final yMin=ySupConMin, + final reverseActing=false, + final y_reset=ySupConMin) "Condenser water supply temperature controller" + annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Hysteresis proOn[nConWatPum]( + final uLow=fill(pumSpeChe, nConWatPum), + final uHigh=fill(2*pumSpeChe, nConWatPum)) + "Check if the condenser water pump is proven on" + annotation (Placement(transformation(extent={{-140,-30},{-120,-10}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr anyProOn( + final nin=nConWatPum) + "Check if any condenser water pump is proven on" + annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTowSpe( + final k=fanSpeMin) "Minimum tower speed" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1( + final k=ySupConMin) + "Zero constant" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one1( + final k=ySupConMax) "Maximum speed" + annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Line CWSTSpd + "Fan speed calculated based on supply water temperature control" + annotation (Placement(transformation(extent={{100,-40},{120,-20}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMin maxSpe(final nin=nChi) + "Lowest value of the maximum cooling tower speed from each chiller head pressure control loop" + annotation (Placement(transformation(extent={{0,-130},{20,-110}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMin fanSpe(final nin=3) + "Cooling tower fan speed" + annotation (Placement(transformation(extent={{60,-130},{80,-110}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{120,-150},{140,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer2(final k=0) + "Zero constant" + annotation (Placement(transformation(extent={{60,-180},{80,-160}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one2[nChi]( + final k=fill(1,nChi)) "Constant one" + annotation (Placement(transformation(extent={{-160,-160},{-140,-140}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1[nChi] "Logical switch" + annotation (Placement(transformation(extent={{-40,-130},{-20,-110}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChi] + "Convert chiller status to real number, true becomes 1 and false becomes 0" + annotation (Placement(transformation(extent={{-140,40},{-120,60}}))); + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter enaDesConWatRet[nChi]( + final k=TConWatRet_nominal) + "Design condenser water return temperature of the enabled chiller" + annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter enaDesConWatSup[nChi]( + final k=TConWatSup_nominal) + "Design condenser water supply temperature of the enabled chiller" + annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract sub2[nChi] + "Difference of the design supply and return condenser water temperature" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax(nin=nChi) + "Difference of the design supply and return condenser water temperature of the enabled chiller" + annotation (Placement(transformation(extent={{20,40},{40,60}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + final delayTime=iniPlaTim, + final delayOnInit=true) + "Count the time after plant being enabled" + annotation (Placement(transformation(extent={{-140,90},{-120,110}}))); + Buildings.Controls.OBC.CDL.Reals.Switch delTem "Temperature difference value" + annotation (Placement(transformation(extent={{60,90},{80,110}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract meaTemDif + "Difference of the condenser return and supply water temperature" + annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); + Buildings.Controls.OBC.CDL.Reals.MovingAverage movMea( + final delta=300) + "Moving average of the sampled temperature difference" + annotation (Placement(transformation(extent={{-60,130},{-40,150}}))); + Buildings.Controls.OBC.CDL.Discrete.Sampler sam( + final samplePeriod=samplePeriod) + "Sample the temperature difference" + annotation (Placement(transformation(extent={{-100,130},{-80,150}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract conWatSupSet + "Condenser water supply temperature setpoint" + annotation (Placement(transformation(extent={{100,140},{120,160}}))); + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai[nChi]( + final k=fill(0.5, nChi)) + "Gain factor" + annotation (Placement(transformation(extent={{-10,40},{10,60}}))); + +equation + connect(proOn.y,anyProOn. u) + annotation (Line(points={{-118,-20},{-102,-20}}, color={255,0,255})); + connect(uConWatPumSpe, proOn.u) + annotation (Line(points={{-200,-20},{-142,-20}}, color={0,0,127})); + connect(zer1.y, CWSTSpd.x1) + annotation (Line(points={{62,0},{80,0},{80,-22},{98,-22}}, color={0,0,127})); + connect(minTowSpe.y, CWSTSpd.f1) + annotation (Line(points={{2,0},{20,0},{20,-26},{98,-26}}, + color={0,0,127})); + connect(supCon.y, CWSTSpd.u) + annotation (Line(points={{2,-30},{98,-30}}, color={0,0,127})); + connect(TConWatSup, supCon.u_m) + annotation (Line(points={{-200,-60},{-10,-60},{-10,-42}}, color={0,0,127})); + connect(one1.y, CWSTSpd.x2) + annotation (Line(points={{2,-80},{20,-80},{20,-34},{98,-34}}, color={0,0,127})); + connect(one1.y, CWSTSpd.f2) + annotation (Line(points={{2,-80},{20,-80},{20,-38},{98,-38}}, color={0,0,127})); + connect(CWSTSpd.y, fanSpe.u[1]) + annotation (Line(points={{122,-30},{140,-30},{140,-80},{40,-80},{40, + -120.667},{58,-120.667}}, + color={0,0,127})); + connect(maxSpe.y, fanSpe.u[2]) + annotation (Line(points={{22,-120},{58,-120}},color={0,0,127})); + connect(plrTowMaxSpe, fanSpe.u[3]) + annotation (Line(points={{-200,-180},{40,-180},{40,-119.333},{58,-119.333}}, + color={0,0,127})); + connect(anyProOn.y, supCon.trigger) + annotation (Line(points={{-78,-20},{-60,-20},{-60,-50},{-16,-50},{-16,-42}}, + color={255,0,255})); + connect(fanSpe.y, swi.u1) + annotation (Line(points={{82,-120},{100,-120},{100,-132},{118,-132}}, + color={0,0,127})); + connect(anyProOn.y, swi.u2) + annotation (Line(points={{-78,-20},{-60,-20},{-60,-140},{118,-140}}, + color={255,0,255})); + connect(zer2.y, swi.u3) + annotation (Line(points={{82,-170},{100,-170},{100,-148},{118,-148}}, + color={0,0,127})); + connect(swi1.y, maxSpe.u) + annotation (Line(points={{-18,-120},{-2,-120}}, + color={0,0,127})); + connect(uChi, swi1.u2) + annotation (Line(points={{-200,-120},{-42,-120}}, color={255,0,255})); + connect(uMaxTowSpeSet, swi1.u1) + annotation (Line(points={{-200,-90},{-120,-90},{-120,-112},{-42,-112}}, + color={0,0,127})); + connect(one2.y, swi1.u3) + annotation (Line(points={{-138,-150},{-120,-150},{-120,-128},{-42,-128}}, + color={0,0,127})); + connect(swi.y,ySpeSet) + annotation (Line(points={{142,-140},{180,-140}},color={0,0,127})); + connect(uChi, booToRea.u) annotation (Line(points={{-200,-120},{-170,-120},{-170, + 50},{-142,50}}, color={255,0,255})); + connect(booToRea.y, enaDesConWatRet.u) annotation (Line(points={{-118,50},{-100, + 50},{-100,70},{-82,70}}, color={0,0,127})); + connect(booToRea.y, enaDesConWatSup.u) annotation (Line(points={{-118,50},{-100, + 50},{-100,30},{-82,30}}, color={0,0,127})); + connect(enaDesConWatRet.y, sub2.u1) annotation (Line(points={{-58,70},{-50,70}, + {-50,56},{-42,56}}, color={0,0,127})); + connect(enaDesConWatSup.y, sub2.u2) annotation (Line(points={{-58,30},{-50,30}, + {-50,44},{-42,44}}, color={0,0,127})); + connect(uPla, truDel.u) + annotation (Line(points={{-200,100},{-142,100}}, color={255,0,255})); + connect(multiMax.y, delTem.u3) annotation (Line(points={{42,50},{50,50},{50,92}, + {58,92}}, color={0,0,127})); + connect(TConWatSup, meaTemDif.u2) annotation (Line(points={{-200,-60},{-160,-60}, + {-160,134},{-142,134}}, color={0,0,127})); + connect(TConWatRet, meaTemDif.u1) annotation (Line(points={{-200,150},{-160,150}, + {-160,146},{-142,146}}, color={0,0,127})); + connect(meaTemDif.y, sam.u) + annotation (Line(points={{-118,140},{-102,140}}, color={0,0,127})); + connect(sam.y, movMea.u) + annotation (Line(points={{-78,140},{-62,140}}, color={0,0,127})); + connect(movMea.y, delTem.u1) annotation (Line(points={{-38,140},{50,140},{50,108}, + {58,108}}, color={0,0,127})); + connect(conWatSupSet.y, TConWatSupSet) + annotation (Line(points={{122,150},{180,150}}, color={0,0,127})); + connect(TConWatRetSet, conWatSupSet.u1) annotation (Line(points={{-200,180},{80, + 180},{80,156},{98,156}}, color={0,0,127})); + connect(delTem.y, conWatSupSet.u2) annotation (Line(points={{82,100},{90,100}, + {90,144},{98,144}}, color={0,0,127})); + connect(conWatSupSet.y, supCon.u_s) annotation (Line(points={{122,150},{140,150}, + {140,20},{-40,20},{-40,-30},{-22,-30}}, color={0,0,127})); + connect(sub2.y, gai.u) + annotation (Line(points={{-18,50},{-12,50}}, color={0,0,127})); + connect(gai.y, multiMax.u) + annotation (Line(points={{12,50},{18,50}}, color={0,0,127})); + + connect(truDel.y, delTem.u2) + annotation (Line(points={{-118,100},{58,100}}, color={255,0,255})); +annotation ( + defaultComponentName="lesCouTowSpe", + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-180,-200},{160,200}})), + Icon(coordinateSystem(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={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Polygon( + points={{-20,80},{20,80},{0,10},{-20,80}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-40,10},{40,-10}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,-10},{-20,-80},{20,-80},{0,-10}}, + lineColor={28,108,200}, + fillColor={240,240,240}, + fillPattern=FillPattern.Solid)}), +Documentation(info=" +

                      +Block that outputs cooling tower fan speed ySpeSet based on the control +of condenser water return temperature for the plant that is not closed coupled. +This is implemented according to ASHRAE Guideline36-2021, section 5.20.12.2, +item a.8-10. +

                      +
                        +
                      • +When any condenser water pump is proven on (uConWatPumSpe > 0), +condenser water supply temperature setpoint TConWatSupSet shall be +set equal to the condenser water return temperature setpoint TConWatRetSet +minus a temperature difference. The temperature difference is the 5 minute rolling +average of common condenser water return temperature TConWatRet less +condenser water supply temperature TConWatSup, sampled at minimum once +every 30 seconds. When the plant is first enabled, the temperature difference shall +be fixed equal to 50% of the difference between design condenser water supply +(TConWatSup_nominal) and return (TConWatRet_nominal) temperature +of the enabled chiller for 5 minutes (iniPlaTim). +
                      • +
                      • +When any condenser water pump is proven on (uConWatPumSpe > 0), +condenser water supply temperature TConWatSup shall be maintained at +setpoint by a direct acting PID loop. The loop output shall be mapped to the +variable tower speed. Reset the tower speed from minimum tower speed fanSpeMin +at 0% loop output to 100% speed at 100% loop output. +
                      • +
                      • +Tower speed ySpeSet shall be the lowest value of tower speed +from loop mapping, maximum cooling tower speed setpoint from each chiller head +pressure control loop uMaxTowSpeSet, and tower maximum speed that reset +based on plant partial load ratio plrTowMaxSpe. All operating fans shall +receive the same speed signal. +
                      • +
                      +", revisions=" +
                        +
                      • +August 9, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end LessCoupled; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Setpoint.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Setpoint.mo new file mode 100644 index 00000000000..9fcc22cfd4e --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Setpoint.mo @@ -0,0 +1,290 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences; +block Setpoint "Calculate condener return water temperature setpoint" + + parameter Integer nChi = 2 "Total number of chillers"; + parameter Real LIFT_min[nChi]( + final unit=fill("K",nChi), + final quantity=fill("TemperatureDifference",nChi))={12, 12} + "Minimum LIFT of each chiller" + annotation (Evaluate=true); + parameter Real TConWatRet_nominal[nChi]( + final unit=fill("K",nChi), + final quantity=fill("ThermodynamicTemperature",nChi), + displayUnit=fill("degC",nChi))= {303.15, 303.15} + "Design condenser water return temperature (condenser leaving) of each chiller" + annotation (Evaluate=true); + parameter Real TChiWatSupMin[nChi]( + final unit=fill("K",nChi), + final quantity=fill("ThermodynamicTemperature",nChi), + displayUnit=fill("degC",nChi)) = {278.15, 278.15} + "Minimum chilled water supply temperature of each chiller" + annotation (Evaluate=true); + parameter Real iniPlaTim( + final quantity="Time", + final unit="s")= 600 + "Time to hold return temperature to initial setpoint after plant being enabled" + annotation (Dialog(tab="Advanced")); + parameter Real ramTim( + final quantity="Time", + final unit="s") = 600 + "Time to ramp return water temperature setpoint from initial value to calculated one" + annotation (Dialog(tab="Advanced")); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] + "Vector of chillers proven on status: true=ON" + annotation (Placement(transformation(extent={{-340,20},{-300,60}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uOpeParLoaRat( + final unit="1", + final min=0, + final max=1) "Current plant partial load ratio" + annotation (Placement(transformation(extent={{-340,-60},{-300,-20}}), + iconTransformation(extent={{-140,10},{-100,50}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Chilled water supply setpoint temperature" + annotation (Placement(transformation(extent={{-340,-110},{-300,-70}}), + iconTransformation(extent={{-140,-50},{-100,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enabling status" + annotation (Placement(transformation(extent={{-340,-170},{-300,-130}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConWatRetSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Condenser water return temperature setpoint" + annotation (Placement(transformation(extent={{300,-170},{340,-130}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Reals.Add conWatRet + "Condenser water return temperature" + annotation (Placement(transformation(extent={{220,18},{240,38}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.MultiMin lifMax( + final nin=nChi) "Maximum chiller LIFT" + annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiLifMin[nChi]( + final k=LIFT_min) + "Minimum LIFT of chillers" + annotation (Placement(transformation(extent={{-280,60},{-260,80}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zeoCon[nChi]( + final k=fill(0, nChi)) "Zero constant" + annotation (Placement(transformation(extent={{-280,0},{-260,20}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[nChi] "Logical switch" + annotation (Placement(transformation(extent={{-160,30},{-140,50}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMax lifMin( + final nin=nChi) "Minimum enabled chiller LIFT" + annotation (Placement(transformation(extent={{-120,30},{-100,50}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract coeA + "Coefficient A" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract coeB "Coefficient B" + annotation (Placement(transformation(extent={{40,124},{60,144}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Product of inputs" + annotation (Placement(transformation(extent={{40,-44},{60,-24}}))); + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add inputs" + annotation (Placement(transformation(extent={{80,-38},{100,-18}}))); + Buildings.Controls.OBC.CDL.Reals.Min min "Minimum value of two inputs" + annotation (Placement(transformation(extent={{120,-70},{140,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Max tarLif "Target chiller LIFT" + annotation (Placement(transformation(extent={{180,24},{200,44}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zeoTim( + final k=0) "Zero constant" + annotation (Placement(transformation(extent={{-40,-130},{-20,-110}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxRamTim( + final k=ramTim) + "Time to change the return water temperature from initial value to setpoint" + annotation (Placement(transformation(extent={{-100,-190},{-80,-170}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay delPlaEna( + final delayTime=iniPlaTim) + "Delay plant enabling status" + annotation (Placement(transformation(extent={{-220,-160},{-200,-140}}))); + Buildings.Controls.OBC.CDL.Logical.Timer chaTim + "Count the time after starting to ramp condenser water return temperature setpoint" + annotation (Placement(transformation(extent={{-160,-160},{-140,-140}}))); + Buildings.Controls.OBC.CDL.Reals.Line lin + "Condenser water return temperature setpoint" + annotation (Placement(transformation(extent={{260,-160},{280,-140}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desConWatRet[nChi]( + final k=TConWatRet_nominal) + "Design condenser water return (condenser leaving) temperature of each chiller" + annotation (Placement(transformation(extent={{-240,160},{-220,180}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minChiWatSup[nChi]( + final k=TChiWatSupMin) + "Lowest chilled water supply temperature setpoint" + annotation (Placement(transformation(extent={{-240,100},{-220,120}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract maxLif[nChi] + "Maximum LIFT of each chiller" + annotation (Placement(transformation(extent={{-160,130},{-140,150}}))); + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( + final p=-10*5/9) + "Output sum of input and a parameter" + annotation (Placement(transformation(extent={{-100,-130},{-80,-110}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMin lowDesConWatRet( + final nin=nChi) + "Lowest design condenser water return temperature" + annotation (Placement(transformation(extent={{-160,-130},{-140,-110}}))); + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( + final k=1.1) "Gain factor" + annotation (Placement(transformation(extent={{-20,90},{0,110}}))); + +equation + connect(uChi, swi.u2) + annotation (Line(points={{-320,40},{-162,40}}, color={255,0,255})); + connect(zeoCon.y, swi.u3) + annotation (Line(points={{-258,10},{-220,10},{-220,32},{-162,32}}, + color={0,0,127})); + connect(chiLifMin.y, swi.u1) + annotation (Line(points={{-258,70},{-220,70},{-220,48},{-162,48}}, + color={0,0,127})); + connect(lifMax.y, coeA.u1) + annotation (Line(points={{-98,140},{-80,140},{-80,106},{-62,106}}, + color={0,0,127})); + connect(lifMin.y, coeA.u2) + annotation (Line(points={{-98,40},{-70,40},{-70,94},{-62,94}},color={0,0,127})); + connect(lifMax.y, coeB.u1) + annotation (Line(points={{-98,140},{38,140}}, color={0,0,127})); + connect(coeB.y, add2.u1) + annotation (Line(points={{62,134},{70,134},{70,-22},{78,-22}}, color={0,0,127})); + connect(pro.y, add2.u2) + annotation (Line(points={{62,-34},{78,-34}}, color={0,0,127})); + connect(lifMax.y, min.u2) + annotation (Line(points={{-98,140},{-80,140},{-80,-66},{118,-66}}, + color={0,0,127})); + connect(add2.y, min.u1) + annotation (Line(points={{102,-28},{110,-28},{110,-54},{118,-54}}, + color={0,0,127})); + connect(min.y, tarLif.u2) + annotation (Line(points={{142,-60},{160,-60},{160,28},{178,28}}, + color={0,0,127})); + connect(lifMin.y, tarLif.u1) + annotation (Line(points={{-98,40},{178,40}}, color={0,0,127})); + connect(tarLif.y, conWatRet.u1) + annotation (Line(points={{202,34},{218,34}}, + color={0,0,127})); + connect(TChiWatSupSet, conWatRet.u2) + annotation (Line(points={{-320,-90},{210,-90},{210,22},{218,22}}, + color={0,0,127})); + connect(swi.y, lifMin.u) + annotation (Line(points={{-138,40},{-122,40}}, color={0,0,127})); + connect(uPla, delPlaEna.u) + annotation (Line(points={{-320,-150},{-222,-150}}, + color={255,0,255})); + connect(delPlaEna.y, chaTim.u) + annotation (Line(points={{-198,-150},{-162,-150}},color={255,0,255})); + connect(zeoTim.y, lin.x1) + annotation (Line(points={{-18,-120},{0,-120},{0,-142},{258,-142}}, + color={0,0,127})); + connect(chaTim.y, lin.u) + annotation (Line(points={{-138,-150},{258,-150}},color={0,0,127})); + connect(maxRamTim.y, lin.x2) + annotation (Line(points={{-78,-180},{-60,-180},{-60,-154},{258,-154}}, + color={0,0,127})); + connect(conWatRet.y, lin.f2) + annotation (Line(points={{242,28},{250,28},{250,-158},{258,-158}}, + color={0,0,127})); + connect(lin.y, TConWatRetSet) + annotation (Line(points={{282,-150},{320,-150}}, color={0,0,127})); + connect(uOpeParLoaRat, pro.u2) + annotation (Line(points={{-320,-40},{38,-40}}, color={0,0,127})); + connect(desConWatRet.y, maxLif.u1) + annotation (Line(points={{-218,170},{-200,170},{-200,146},{-162,146}}, + color={0,0,127})); + connect(maxLif.y,lifMax.u) + annotation (Line(points={{-138,140},{-122,140}}, color={0,0,127})); + connect(lowDesConWatRet.y, addPar.u) + annotation (Line(points={{-138,-120},{-102,-120}}, color={0,0,127})); + connect(addPar.y, lin.f1) + annotation (Line(points={{-78,-120},{-60,-120},{-60,-146},{258,-146}}, + color={0,0,127})); + connect(desConWatRet.y, lowDesConWatRet.u) + annotation (Line(points={{-218,170},{-200,170},{-200,-120},{-162,-120}}, + color={0,0,127})); + connect(minChiWatSup.y, maxLif.u2) annotation (Line(points={{-218,110},{-180, + 110},{-180,134},{-162,134}}, + color={0,0,127})); + connect(coeA.y, gai.u) + annotation (Line(points={{-38,100},{-22,100}}, color={0,0,127})); + connect(gai.y, coeB.u2) annotation (Line(points={{2,100},{20,100},{20,128},{38, + 128}}, color={0,0,127})); + connect(gai.y, pro.u1) annotation (Line(points={{2,100},{20,100},{20,-28},{38, + -28}},color={0,0,127})); +annotation ( + defaultComponentName="conWatRetSet", + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-300,-200},{300,200}})), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Text( + extent={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,100},{100,-100}}, + textColor={0,0,0}, + textString="S")}), +Documentation(info=" +

                      +Block that ouputs condenser water return temperature setpoint TConWatRetSet +for the tower fan speed control to maintain the return temperature at setpoint. This +implementation is for plants with parallel chiller plants only. It is based on +ASHRAE Guideline36-2021, section 5.20.12.2, item a.5 and a.14. +

                      +

                      +The return water temperature setpoint TConWatRetSet shall be the output +of the following equations. +

                      +
                      +   TConWatRetSet = TChiWatSupSet + LIFT_target
                      +
                      +
                      +   LIFT_target = Max(LIFT_min, Min(LIFT_max, A*plaParLoaRat + B))
                      +
                      +
                      +   LIFT_max = TConWatRet_nominal - TChiWatSupMin
                      +
                      +
                      +   A = 1.1*(LIFT_max - LIFT_min)
                      +
                      +
                      +   B = LIFT_max - A
                      +
                      +
                      +
                        +
                      • +Where chillers have different LIFT_min values, the LIFT_min +in the above equation shall reset dynamically to equal the highest LIFT_min +of enabled chillers. +
                      • +
                      • +For plants with parallel chillers only, where chillers have different design +condenser water return temperatureTConWatRet_nominal and minimum +chilled water supply temperature TChiWatSupMin values, the LIFT_max +shall be calculated for each chiller and the lowest value used in the above logic. +
                      • +
                      +

                      +Upon plant startup (uPla becomes true), hold TConWatRetSet +at 10 °F less than the minimum TConWatRet_nominal for 10 minutes +(iniPlaTim) before ramping the setpoint to the calculated value above +over 10 minutes (ramTim). +

                      + +", revisions=" +
                        +
                      • +August 9, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Setpoint; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Coupled.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Coupled.mo new file mode 100644 index 00000000000..5bd289a3438 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Coupled.mo @@ -0,0 +1,153 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation; +model Coupled + "Validation sequence of controlling tower fan speed based on condenser water return temperature control for close coupled plant" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Coupled + couTowSpe(k=0.1, Ti=5) + "Tower fan speed control based on the condenser water return temperature control for close coupled plants" + annotation (Placement(transformation(extent={{60,80},{80,100}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin conRet( + final amplitude=1, + final freqHz=1/1800, + final offset=273.15 + 32) "Condenser water return temperature" + annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1( + final height=2, + final duration=3600, + final startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add real inputs" + annotation (Placement(transformation(extent={{-20,80},{0,100}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conRetSet( + final k=273.15 + 32) + "Condenser water return temperature setpoint" + annotation (Placement(transformation(extent={{-20,110},{0,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp conWatPumSpe[2]( + final height=fill(0.5, 2), + final duration=fill(3600, 2), + final startTime=fill(300, 2)) "Measured condenser water pump speed" + annotation (Placement(transformation(extent={{-20,40},{0,60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp towMaxSpe( + final height=0.25, + final duration=3600, + final offset=0.5) "Maximum tower speed specified by head pressure control loop" + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp towMaxSpe1( + final height=-0.25, + final duration=3600, + final offset=0.8) "Maximum tower speed specified by head pressure control loop" + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp plrTowMaxSpe( + final height=-0.3, + final duration=3600, + final offset=0.9) "Maximum tower speed reset based on the partial load" + annotation (Placement(transformation(extent={{0,-120},{20,-100}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta1( + final width=0.2, final period=3600) "Chiller one enabling status" + annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1[2] "Logical not" + annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer[2]( + final k=fill(0,2)) "Constant zero" + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[2] "Logical switch" + annotation (Placement(transformation(extent={{0,-20},{20,0}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta2( + final width=0.1, + final period=3600) + "Chiller one enabling status" + annotation (Placement(transformation(extent={{-80,-120},{-60,-100}}))); + +equation + connect(conRetSet.y, couTowSpe.TConWatRetSet) + annotation (Line(points={{2,120},{20,120},{20,100},{58,100}}, color={0,0,127})); + connect(conRet.y, add2.u1) + annotation (Line(points={{-58,120},{-40,120},{-40,96},{-22,96}}, color={0,0,127})); + connect(ram1.y, add2.u2) + annotation (Line(points={{-58,60},{-40,60},{-40,84},{-22,84}}, color={0,0,127})); + connect(add2.y, couTowSpe.TConWatRet) + annotation (Line(points={{2,90},{20,90},{20,96},{58,96}}, color={0,0,127})); + connect(conWatPumSpe.y, couTowSpe.uConWatPumSpe) + annotation (Line(points={{2,50},{26,50},{26,92},{58,92}}, color={0,0,127})); + connect(chiSta1.y, not1[1].u) + annotation (Line(points={{-58,-70},{-50,-70},{-50,-90},{-42,-90}}, + color={255,0,255})); + connect(chiSta2.y, not1[2].u) + annotation (Line(points={{-58,-110},{-50,-110},{-50,-90},{-42,-90}}, + color={255,0,255})); + connect(not1.y, swi.u2) + annotation (Line(points={{-18,-90},{-14,-90},{-14,-10},{-2,-10}}, + color={255,0,255})); + connect(towMaxSpe1.y, swi[2].u1) + annotation (Line(points={{-58,-30},{-20,-30},{-20,-2},{-2,-2}}, + color={0,0,127})); + connect(towMaxSpe.y, swi[1].u1) + annotation (Line(points={{-58,10},{-20,10},{-20,-2},{-2,-2}}, color={0,0,127})); + connect(swi.y, couTowSpe.uMaxTowSpeSet) + annotation (Line(points={{22,-10},{32,-10},{32,88},{58,88}}, color={0,0,127})); + connect(zer.y, swi.u3) + annotation (Line(points={{-18,-50},{-8,-50},{-8,-18},{-2,-18}}, color={0,0,127})); + connect(not1.y, couTowSpe.uChi) + annotation (Line(points={{-18,-90},{38,-90},{38,84},{58,84}}, color={255,0,255})); + connect(plrTowMaxSpe.y, couTowSpe.plrTowMaxSpe) + annotation (Line(points={{22,-110},{44,-110},{44,80},{58,80}}, color={0,0,127})); + +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Coupled.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Coupled. +

                      +

                      +It shows tower fan speed control for a plant with 2 chillers. The chiller 2 becomes proven on +since 360 seconds and the chiller 1 becomes proven on since 720 seconds. It shows following +processes: +

                      +
                        +
                      • +Before 360 seconds, no chiller is proven. Thus the two speed setpoint is 0. +
                      • +
                      • +After 360 seconds, chiller 2 becomes proven on and the condenser water pump speed +becomes greater than 0. When the pump speed becomes greater than the threshold +and shows the pump is proven on at around 444 seconds, the PID controller retriggered +and the output starts from the minimum. +However, before the condenser pump is proven on, the +tow fan speed setpoint is 0. +
                      • +
                      • +From around 444 seconds to 720 seconds, the tow fan speed setpoint is the minimum of +uMaxTowSpeSet[2], plrTowMaxSpe and the tower speed from +the loop mapping. +
                      • +
                      • +After 720 seconds when the chiller 1 also becomes proven on, the tow fan speed +setpoint is the minimum of uMaxTowSpeSet[1], +uMaxTowSpeSet[2], plrTowMaxSpe and the tower speed from +the loop mapping. +
                      • +
                      +", revisions=" +
                        +
                      • +August 12, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-140},{100,140}}))); +end Coupled; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Enable.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Enable.mo new file mode 100644 index 00000000000..9ec1cad5a44 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Enable.mo @@ -0,0 +1,209 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation; +model Enable + "Validation sequence of enabling and disabling tower fans" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Enable + enaTow "Enabling tower fans" + annotation (Placement(transformation(extent={{-140,40},{-120,60}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Enable + disTow "Disable tower fans due to the low head pressure control maximum tower fan speed" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Enable + disTow1 "Disable tower fans due to low fan speed and low tower temperature" + annotation (Placement(transformation(extent={{220,40},{240,60}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conRetSet( + final k=273.15 + 32) "Condenser water return temperature setpoint" + annotation (Placement(transformation(extent={{-220,-10},{-200,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant offTowSta[4]( + final k=fill(false,4)) "Tower is OFF" + annotation (Placement(transformation(extent={{-220,-60},{-200,-40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp conRet1( + final height=2, + final duration=3600, + final offset=273.15 + 32.5) "Condenser return water temperature" + annotation (Placement(transformation(extent={{-260,-40},{-240,-20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe1( + final k=0.2) + "Head pressure control maximum tower speed" + annotation (Placement(transformation(extent={{-220,80},{-200,100}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe2( + final k=0) + "Head pressure control maximum tower speed" + annotation (Placement(transformation(extent={{-260,60},{-240,80}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant towFanSpe( + final k=0) + "Measured tower fan speed" + annotation (Placement(transformation(extent={{-220,30},{-200,50}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant opeConPum( + final k=1) + "Operating condenser water pumps" + annotation (Placement(transformation(extent={{-260,-90},{-240,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe3( + final k=0.1) + "Head pressure control maximum tower speed" + annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe4( + final k=0.2) + "Head pressure control maximum tower speed" + annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant towFanSpe1( + final k=0.2) + "Measured tower fan speed" + annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conRetSet1( + final k=273.15 + 32) + "Condenser water return temperature setpoint" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp conRet2( + final height=2, + final duration=3600, + final offset=273.15 + 32.5) "Condenser return water temperature" + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant onTowSta1[4]( + final k=fill(true,4)) "Tower is ON" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant opeConPum1( + final k=2) "Operating condenser water pumps" + annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe5(final k=0.2) + "Head pressure control maximum tower speed" + annotation (Placement(transformation(extent={{140,80},{160,100}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe6(final k=0.2) + "Head pressure control maximum tower speed" + annotation (Placement(transformation(extent={{100,60},{120,80}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant towFanSpe2(final k=0.1) + "Measured tower fan speed" + annotation (Placement(transformation(extent={{140,30},{160,50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conRetSet2( + final k=273.15 + 32) "Condenser water return temperature setpoint" + annotation (Placement(transformation(extent={{140,-10},{160,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp conRet3( + final height=-2, + final duration=3600, + final offset=273.15 + 32.5) "Condenser return water temperature" + annotation (Placement(transformation(extent={{100,-40},{120,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant onTowSta2[4]( + final k=fill(true,4)) "Tower is ON" + annotation (Placement(transformation(extent={{140,-70},{160,-50}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant opeConPum2( + final k=2) + "Operating condenser water pumps" + annotation (Placement(transformation(extent={{100,-90},{120,-70}}))); + +equation + connect(hpTowSpe1.y, enaTow.uMaxTowSpeSet[1]) + annotation (Line(points={{-198,90},{-180,90},{-180,59},{-142,59}}, + color={0,0,127})); + connect(hpTowSpe2.y, enaTow.uMaxTowSpeSet[2]) + annotation (Line(points={{-238,70},{-180,70},{-180,59},{-142,59}}, + color={0,0,127})); + connect(towFanSpe.y,enaTow.uFanSpe) + annotation (Line(points={{-198,40},{-180,40},{-180,56},{-142,56}}, + color={0,0,127})); + connect(conRetSet.y, enaTow.TTowSet) annotation (Line(points={{-198,0},{ + -174,0},{-174,52},{-142,52}}, color={0,0,127})); + connect(conRet1.y, enaTow.TTow) annotation (Line(points={{-238,-30},{-168, + -30},{-168,48},{-142,48}}, color={0,0,127})); + connect(offTowSta.y, enaTow.uTow) annotation (Line(points={{-198,-50},{-162,-50}, + {-162,44},{-142,44}}, color={255,0,255})); + connect(opeConPum.y, enaTow.uConWatPumNum) + annotation (Line(points={{-238,-80},{-156,-80},{-156,41},{-142,41}}, + color={255,127,0})); + connect(hpTowSpe3.y, disTow.uMaxTowSpeSet[1]) + annotation (Line(points={{-18,90},{0,90},{0,59},{38,59}}, color={0,0,127})); + connect(hpTowSpe4.y, disTow.uMaxTowSpeSet[2]) + annotation (Line(points={{-58,70},{0,70},{0,59},{38,59}}, color={0,0,127})); + connect(towFanSpe1.y,disTow.uFanSpe) + annotation (Line(points={{-18,40},{0,40},{0,56},{38,56}}, color={0,0,127})); + connect(conRetSet1.y, disTow.TTowSet) + annotation (Line(points={{-18,0},{6,0},{6,52},{38,52}}, color={0,0,127})); + connect(conRet2.y, disTow.TTow) annotation (Line(points={{-58,-30},{12,-30}, + {12,48},{38,48}}, color={0,0,127})); + connect(onTowSta1.y, disTow.uTow) annotation (Line(points={{-18,-60},{18,-60}, + {18,44},{38,44}}, color={255,0,255})); + connect(opeConPum1.y, disTow.uConWatPumNum) + annotation (Line(points={{-58,-80},{24,-80},{24,41},{38,41}}, + color={255,127,0})); + connect(hpTowSpe5.y, disTow1.uMaxTowSpeSet[1]) + annotation (Line(points={{162,90},{180,90},{180,59},{218,59}}, + color={0,0,127})); + connect(hpTowSpe6.y, disTow1.uMaxTowSpeSet[2]) + annotation (Line(points={{122,70},{180,70},{180,59},{218,59}}, + color={0,0,127})); + connect(towFanSpe2.y,disTow1.uFanSpe) + annotation (Line(points={{162,40},{180,40},{180,56},{218,56}}, + color={0,0,127})); + connect(conRetSet2.y, disTow1.TTowSet) annotation (Line(points={{162,0}, + {186,0},{186,52},{218,52}}, color={0,0,127})); + connect(conRet3.y, disTow1.TTow) annotation (Line(points={{122,-30},{192, + -30},{192,48},{218,48}}, color={0,0,127})); + connect(onTowSta2.y, disTow1.uTow) annotation (Line(points={{162,-60},{198,-60}, + {198,44},{218,44}}, color={255,0,255})); + connect(opeConPum2.y, disTow1.uConWatPumNum) + annotation (Line(points={{122,-80},{204,-80},{204,41},{218,41}}, + color={255,127,0})); + +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Enable.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Enable. +It shows the sequences for enabling and disabling the tower fans under +different conditions. +

                      +
                        +
                      1. +The instance enaTow shows that the tower fans will be enabled when: +
                          +
                        • +The enabled chiller's head pressure control maximum tower fan speed is greater +than the tower minium speed fanSpeMin, and +
                        • +
                        • +The tower temperature TTow rises above setpoint TTowSet +by 1 °F, and +
                        • +
                        • +The tower fan has been OFF for at least 1 minute. +
                        • +
                        +
                      2. +
                      3. +The instance disTow shows that all the tower fans should be disabled +when the enabled chiller's head pressure control maximum tower fan speed +uMaxTowSpeSet has equaled tower minimum speed fanSpeMin +for 5 minutes. +
                      4. +
                      5. +The instance disTow1 shows that all the tower fans should be disabled +when the tower fans speed uFanSpe have been at minimum speed for +5 minutes and the tower temperature TTow drops below the setpoint +minus 1 °F. +
                      6. +
                      +", revisions=" +
                        +
                      • +August 12, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-280,-120},{280,120}}))); +end Enable; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/LessCoupled.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/LessCoupled.mo new file mode 100644 index 00000000000..5dda04be665 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/LessCoupled.mo @@ -0,0 +1,193 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation; +model LessCoupled + "Validation sequence of controlling tower fan speed based on condenser water return temperature control for less coupled plant" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.LessCoupled + lesCouTowSpe + "Tower fan speed control based on the condenser water return temperature control for close coupled plants" + annotation (Placement(transformation(extent={{60,70},{80,90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin conRet( + amplitude=2, + freqHz=1/1800, + offset=273.15 + 32) "Condenser water return temperature" + annotation (Placement(transformation(extent={{-80,130},{-60,150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1( + height=3, + duration=3600, + startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add real inputs" + annotation (Placement(transformation(extent={{-20,100},{0,120}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conRetSet( + k=273.15 + 32) "Condenser water return temperature setpoint" + annotation (Placement(transformation(extent={{-20,130},{0,150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp conWatPumSpe[2]( + height=fill(0.5, 2), + duration=fill(3600, 2), + startTime=fill(300, 2)) "Measured condenser water pump speed" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp towMaxSpe( + height=0.25, + duration=3600, + offset=0.5) "Maximum tower speed specified by head pressure control loop" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp towMaxSpe1( + height=-0.25, + duration=3600, + offset=0.8) "Maximum tower speed specified by head pressure control loop" + annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp plrTowMaxSpe( + height=-0.3, + duration=3600, + offset=0.9) "Maximum tower speed reset based on the partial load" + annotation (Placement(transformation(extent={{50,-140},{70,-120}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin conSup( + amplitude=2, + freqHz=1/1800, + offset=273.15 + 29) "Condenser water supply temperature" + annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram2( + height=3, + duration=3600, + startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add real inputs" + annotation (Placement(transformation(extent={{-20,20},{0,40}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[2] "Logical switch" + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer[2]( + k=fill(0,2)) "Constant zero" + annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1[2] "Logical not" + annotation (Placement(transformation(extent={{-40,-140},{-20,-120}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta1( + width=0.2, + period=3600) "Chiller one enabling status" + annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta2( + width=0.1, + period=3600) "Chiller one enabling status" + annotation (Placement(transformation(extent={{-80,-150},{-60,-130}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant plaEna( + k=true) "Plant enable status" + annotation (Placement(transformation(extent={{-20,70},{0,90}}))); + +equation + connect(conRetSet.y, lesCouTowSpe.TConWatRetSet) + annotation (Line(points={{2,140},{40,140},{40,90},{58,90}}, color={0,0,127})); + connect(conRet.y, add2.u1) + annotation (Line(points={{-58,140},{-40,140},{-40,116},{-22,116}}, + color={0,0,127})); + connect(ram1.y, add2.u2) + annotation (Line(points={{-58,110},{-40,110},{-40,104},{-22,104}}, + color={0,0,127})); + connect(add2.y, lesCouTowSpe.TConWatRet) + annotation (Line(points={{2,110},{32,110},{32,88},{58,88}}, + color={0,0,127})); + connect(conWatPumSpe.y, lesCouTowSpe.uConWatPumSpe) + annotation (Line(points={{-58,60},{20,60},{20,82},{58,82}}, color={0,0,127})); + connect(conSup.y, add1.u1) + annotation (Line(points={{-58,30},{-40,30},{-40,36},{-22,36}}, + color={0,0,127})); + connect(ram2.y, add1.u2) + annotation (Line(points={{-58,0},{-40,0},{-40,24},{-22,24}}, color={0,0,127})); + connect(add1.y, lesCouTowSpe.TConWatSup) + annotation (Line(points={{2,30},{26,30},{26,78},{58,78}}, + color={0,0,127})); + connect(chiSta1.y, not1[1].u) + annotation (Line(points={{-58,-100},{-50,-100},{-50,-130},{-42,-130}}, + color={255,0,255})); + connect(chiSta2.y, not1[2].u) + annotation (Line(points={{-58,-140},{-50,-140},{-50,-130},{-42,-130}}, + color={255,0,255})); + connect(towMaxSpe.y, swi[1].u1) + annotation (Line(points={{-58,-40},{-40,-40},{-40,-42},{-2,-42}}, + color={0,0,127})); + connect(towMaxSpe1.y, swi[2].u1) + annotation (Line(points={{-58,-70},{-40,-70},{-40,-42},{-2,-42}}, + color={0,0,127})); + connect(zer.y, swi.u3) + annotation (Line(points={{-18,-90},{-6,-90},{-6,-58},{-2,-58}}, color={0,0,127})); + connect(not1.y, swi.u2) + annotation (Line(points={{-18,-130},{-12,-130},{-12,-50},{-2,-50}}, + color={255,0,255})); + connect(swi.y, lesCouTowSpe.uMaxTowSpeSet) + annotation (Line(points={{22,-50},{32,-50},{32,75},{58,75}}, color={0,0,127})); + connect(not1.y, lesCouTowSpe.uChi) + annotation (Line(points={{-18,-130},{38,-130},{38,73},{58,73}}, color={255,0,255})); + connect(plrTowMaxSpe.y, lesCouTowSpe.plrTowMaxSpe) + annotation (Line(points={{72,-130},{80,-130},{80,60},{44,60},{44,70}, + {58,70}}, color={0,0,127})); + connect(plaEna.y, lesCouTowSpe.uPla) annotation (Line(points={{2,80},{14,80},{ + 14,85},{58,85}}, color={255,0,255})); + +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/LessCoupled.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.LessCoupled. +

                      +

                      +It shows the calculation of the condenser water supply temperature setpoint and +the tower fan speed setpoint. +

                      +
                        +
                      • +At the first 5 minutes when the plant just enabled, the condenser water supply +temperature setpoint equals to the condenser water return temperature setpoint +minus 50% of the difference between design condenser water supply +(TConWatSup_nominal) and return (TConWatRet_nominal) +temperature of the enabled chiller. Note that in this period, +the chiller are not enabled so the fan speed setpoint is 0. +
                      • +
                      • +After 5 minutes, the condenser water supply temperature setpoint equals to +condenser water return temperature setpoint TConWatRetSet minus a temperature +difference that equals 5 minute rolling average of common condenser water +return temperature TConWatRet less condenser water supply +temperature TConWatSup, sampled at minimum once every 30 +seconds. +
                      • +
                      • +The fan speed setpoint is the minimum of: +
                          +
                        • +the maximum cooling tower speed setpoint from head pressure control loop +of the enabled chiller, uMaxTowSpeSet, +
                        • +
                        • +the tower maximum speed that reset based on plant partial load ratio, +plrTowMaxSpe, +
                        • +
                        • +and the tower speed from the loop mapping based on the PID control +for maintaining the condenser water supply temperature to be at its +setpoint. +
                        • +
                        +
                      • +
                      +", revisions=" +
                        +
                      • +August 12, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-160},{100,160}}))); +end LessCoupled; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Setpoint.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Setpoint.mo new file mode 100644 index 00000000000..56861348958 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Setpoint.mo @@ -0,0 +1,116 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation; +model Setpoint + "Validation sequence of specifying condener return water temperature setpoint" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Setpoint + conWatRetSet( + nChi=2, + LIFT_min={12,14}, + TConWatRet_nominal={303.15,305.15}) + "Specify condenser water return temperature setpoint" + annotation (Placement(transformation(extent={{60,10},{80,30}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + width=0.15, + period=3600) + "Generate boolean pulse" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + k=false) "Constant false" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp parLoaRat( + height=0.6, + duration=3600) + "Partial load ratio" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( + k=0) "Constant zero" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatSupSet( + k=273.15 + 6.5) + "Chilled water supply setpoint" + annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + +equation + connect(booPul.y, not1.u) + annotation (Line(points={{-58,60},{-42,60}}, color={255,0,255})); + connect(not1.y, conWatRetSet.uChi[1]) + annotation (Line(points={{-18,60},{50,60},{50,27.5},{58,27.5}}, + color={255,0,255})); + connect(con.y, conWatRetSet.uChi[2]) + annotation (Line(points={{-18,30},{40,30},{40,28.5},{58,28.5}}, + color={255,0,255})); + connect(not1.y, swi.u2) + annotation (Line(points={{-18,60},{-10,60},{-10,-20},{-2,-20}}, + color={255,0,255})); + connect(zer.y, swi.u3) + annotation (Line(points={{-58,-40},{-20,-40},{-20,-28},{-2,-28}}, + color={0,0,127})); + connect(parLoaRat.y, swi.u1) + annotation (Line(points={{-58,0},{-20,0},{-20,-12},{-2,-12}}, color={0,0,127})); + connect(swi.y, conWatRetSet.uOpeParLoaRat) + annotation (Line(points={{22,-20},{30,-20},{30,23},{58,23}}, color={0,0,127})); + connect(chiWatSupSet.y, conWatRetSet.TChiWatSupSet) + annotation (Line(points={{22,-60},{40,-60},{40,17},{58,17}}, color={0,0,127})); + connect(not1.y, conWatRetSet.uPla) + annotation (Line(points={{-18,60},{50,60},{50,12},{58,12}}, color={255,0,255})); + +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Setpoint.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Setpoint. +

                      +

                      +It shows the calculation of the condenser water return temperature setpoint for the +case that the plant is enabled at 540 seconds. +

                      +
                        +
                      • +Before 540 seconds, the plant is not enabled so the calculation of the +setpoint is not valid. +
                      • +
                      • +In the period from 540 to 1140 seconds, the setpoint equals to the +minimum nominal condenser water return temperature minus +10 °F. +
                      • +
                      • +In the period from 1140 to 1740 seconds, the setpoint ramps from +value of previous period to the one caluclated by the +equations showing in the validating model. +
                      • +
                      • +After 1740 seconds, the setpoint is calculated by the equations +showing in the validating model. +
                      • +
                      +", revisions=" +
                        +
                      • +August 12, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-80},{100,80}}))); +end Setpoint; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/package.mo new file mode 100644 index 00000000000..dfced9fabbd --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences; +package Validation "Collection of validation models" + +annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})}), +preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +")); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/package.order new file mode 100644 index 00000000000..5efb88623d5 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/package.order @@ -0,0 +1,4 @@ +Coupled +Enable +LessCoupled +Setpoint diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/package.mo new file mode 100644 index 00000000000..477800edf6f --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/package.mo @@ -0,0 +1,46 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature; +package Subsequences "Control subsequences of tower fan for controlling condenser water return temperature" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains subsequences for cooling tower fan speed control, for controlling +condenser water return temperature. +The implementation is based on section 5.20.12.2, item a in ASHRAE Guideline36-2021. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end Subsequences; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/package.order new file mode 100644 index 00000000000..8e76a4ce365 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/package.order @@ -0,0 +1,5 @@ +Coupled +Enable +LessCoupled +Setpoint +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Validation/Controller.mo new file mode 100644 index 00000000000..0b69b71fb50 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Validation/Controller.mo @@ -0,0 +1,318 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Validation; +model Controller + "Validation sequence of controlling tower fan speed based on condenser water return temperature control" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Controller + towFanSpe + "Tow fan speed for close coupled plants that have waterside economizer" + annotation (Placement(transformation(extent={{-120,180},{-80,220}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Controller + towFanSpe1( + closeCoupledPlant=false) + "Tow fan speed for less coupled plants that have waterside economizer" + annotation (Placement(transformation(extent={{100,180},{140,220}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Controller + towFanSpe2( + have_WSE=false) + "Tow fan speed for close coupled plants that have no waterside economizer" + annotation (Placement(transformation(extent={{320,180},{360,220}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp speWSE( + height=0.9, + duration=3600) + "Tower fan speed when waterside economizer is enabled" + annotation (Placement(transformation(extent={{-360,150},{-340,170}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse wseSta( + width=0.2, + period=3600, + shift=-3000) + "Waterside economizer enabling status" + annotation (Placement(transformation(extent={{-360,50},{-340,70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp plaCap( + height=8e5, + duration=3600, + offset=1e5) "Real operating chiller plant capacity" + annotation (Placement(transformation(extent={{-360,20},{-340,40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin conSup( + amplitude=2, + freqHz=1/1800, + offset=273.15 + 29) "Condenser water supply temperature" + annotation (Placement(transformation(extent={{-360,-250},{-340,-230}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram2( + height=3, + duration=3600, + startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-360,-290},{-340,-270}}))); + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add real inputs" + annotation (Placement(transformation(extent={{-300,-270},{-280,-250}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram3( + height=3, + duration=3600, + startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-360,-200},{-340,-180}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin conRet2( + amplitude=2, + freqHz=1/1800, + offset=273.15 + 28) "Condenser water return temperature" + annotation (Placement(transformation(extent={{-360,-170},{-340,-150}}))); + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add real inputs" + annotation (Placement(transformation(extent={{-300,-190},{-280,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp conWatPumSpe1[2]( + height=fill(0.5, 2), + duration=fill(3600, 2), + startTime=fill(300, 2)) "Measured condenser water pump speed" + annotation (Placement(transformation(extent={{-300,-230},{-280,-210}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe1(k=0.5) + "Head pressure control maximum tower speed" + annotation (Placement(transformation(extent={{-320,0},{-300,20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe2(k=0) + "Head pressure control maximum tower speed" + annotation (Placement(transformation(extent={{-360,-40},{-340,-20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant towFanSpe3(k=0.2) + "Measured tower fan speed" + annotation (Placement(transformation(extent={{-320,-60},{-300,-40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatSupSet( + k=273.15 + 6.5) + "Chilled water supply setpoint" + annotation (Placement(transformation(extent={{-360,-120},{-340,-100}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta1( + width=0.2, period=3600) "Chiller one enabling status" + annotation (Placement(transformation(extent={{-360,110},{-340,130}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiSta2(k=false) + "Chiller two enabling status" + annotation (Placement(transformation(extent={{-360,80},{-340,100}}))); + Buildings.Controls.OBC.CDL.Logical.Or or3 "Logical or" + annotation (Placement(transformation(extent={{-260,-150},{-240,-130}}))); + Buildings.Controls.OBC.CDL.Logical.Or or4 "Logical or" + annotation (Placement(transformation(extent={{-260,-90},{-240,-70}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + nout=4) "Replicate boolean input" + annotation (Placement(transformation(extent={{-200,-90},{-180,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-320,110},{-300,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( + k=0) "Constant zero" + annotation (Placement(transformation(extent={{-320,180},{-300,200}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" + annotation (Placement(transformation(extent={{-240,150},{-220,170}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Logical switch" + annotation (Placement(transformation(extent={{-240,-20},{-220,0}}))); + +equation + connect(ram2.y,add1. u2) + annotation (Line(points={{-338,-280},{-320,-280},{-320,-266},{-302,-266}}, + color={0,0,127})); + connect(conSup.y,add1. u1) + annotation (Line(points={{-338,-240},{-320,-240},{-320,-254},{-302,-254}}, + color={0,0,127})); + connect(wseSta.y, towFanSpe.uWse) + annotation (Line(points={{-338,60},{-188,60},{-188,212},{-122,212}}, + color={255,0,255})); + connect(plaCap.y, towFanSpe.reqPlaCap) + annotation (Line(points={{-338,30},{-182,30},{-182,209},{-122,209}}, + color={0,0,127})); + connect(towFanSpe3.y,towFanSpe.uFanSpe) + annotation (Line(points={{-298,-50},{-170,-50},{-170,203},{-122,203}}, + color={0,0,127})); + connect(chiWatSupSet.y, towFanSpe.TChiWatSupSet) + annotation (Line(points={{-338,-110},{-158,-110},{-158,194},{-122,194}}, + color={0,0,127})); + connect(conRet2.y, add3.u1) + annotation (Line(points={{-338,-160},{-320,-160},{-320,-174},{-302,-174}}, + color={0,0,127})); + connect(ram3.y, add3.u2) + annotation (Line(points={{-338,-190},{-320,-190},{-320,-186},{-302,-186}}, + color={0,0,127})); + connect(add3.y, towFanSpe.TConWatRet) + annotation (Line(points={{-278,-180},{-146,-180},{-146,188},{-122,188}}, + color={0,0,127})); + connect(conWatPumSpe1.y, towFanSpe.uConWatPumSpe) + annotation (Line(points={{-278,-220},{-140,-220},{-140,185},{-122,185}}, + color={0,0,127})); + connect(wseSta.y, towFanSpe1.uWse) + annotation (Line(points={{-338,60},{32,60},{32,212},{98,212}}, + color={255,0,255})); + connect(plaCap.y, towFanSpe1.reqPlaCap) + annotation (Line(points={{-338,30},{38,30},{38,209},{98,209}}, + color={0,0,127})); + connect(towFanSpe3.y,towFanSpe1.uFanSpe) + annotation (Line(points={{-298,-50},{50,-50},{50,203},{98,203}}, + color={0,0,127})); + connect(chiWatSupSet.y, towFanSpe1.TChiWatSupSet) + annotation (Line(points={{-338,-110},{62,-110},{62,194},{98,194}}, + color={0,0,127})); + connect(add3.y, towFanSpe1.TConWatRet) + annotation (Line(points={{-278,-180},{74,-180},{74,188},{98,188}}, + color={0,0,127})); + connect(conWatPumSpe1.y, towFanSpe1.uConWatPumSpe) + annotation (Line(points={{-278,-220},{80,-220},{80,185},{98,185}}, + color={0,0,127})); + connect(add1.y, towFanSpe1.TConWatSup) + annotation (Line(points={{-278,-260},{86,-260},{86,182},{98,182}}, + color={0,0,127})); + connect(plaCap.y, towFanSpe2.reqPlaCap) + annotation (Line(points={{-338,30},{246,30},{246,209},{318,209}}, + color={0,0,127})); + connect(towFanSpe3.y,towFanSpe2.uFanSpe) + annotation (Line(points={{-298,-50},{258,-50},{258,203},{318,203}}, + color={0,0,127})); + connect(chiWatSupSet.y, towFanSpe2.TChiWatSupSet) + annotation (Line(points={{-338,-110},{270,-110},{270,194},{318,194}}, + color={0,0,127})); + connect(add3.y, towFanSpe2.TConWatRet) + annotation (Line(points={{-278,-180},{282,-180},{282,188},{318,188}}, + color={0,0,127})); + connect(conWatPumSpe1.y, towFanSpe2.uConWatPumSpe) + annotation (Line(points={{-278,-220},{288,-220},{288,185},{318,185}}, + color={0,0,127})); + connect(chiSta2.y, towFanSpe.uChi[2]) + annotation (Line(points={{-338,90},{-194,90},{-194,215},{-122,215}}, + color={255,0,255})); + connect(chiSta2.y, towFanSpe1.uChi[2]) + annotation (Line(points={{-338,90},{26,90},{26,215},{98,215}}, + color={255,0,255})); + connect(chiSta2.y, towFanSpe2.uChi[2]) + annotation (Line(points={{-338,90},{240,90},{240,215},{318,215}}, + color={255,0,255})); + connect(or3.y, towFanSpe.uPla) + annotation (Line(points={{-238,-140},{-152,-140},{-152,191},{-122,191}}, + color={255,0,255})); + connect(or3.y, towFanSpe1.uPla) + annotation (Line(points={{-238,-140},{68,-140},{68,191},{98,191}}, + color={255,0,255})); + connect(or3.y, towFanSpe2.uPla) + annotation (Line(points={{-238,-140},{276,-140},{276,191},{318,191}}, + color={255,0,255})); + connect(or3.y, booRep.u) + annotation (Line(points={{-238,-140},{-220,-140},{-220,-80},{-202,-80}}, + color={255,0,255})); + connect(booRep.y, towFanSpe.uTow) annotation (Line(points={{-178,-80},{-164,-80}, + {-164,200},{-122,200}}, color={255,0,255})); + connect(booRep.y, towFanSpe1.uTow) annotation (Line(points={{-178,-80},{56,-80}, + {56,200},{98,200}}, color={255,0,255})); + connect(booRep.y, towFanSpe2.uTow) annotation (Line(points={{-178,-80},{264,-80}, + {264,200},{318,200}}, color={255,0,255})); + connect(chiSta1.y, not1.u) + annotation (Line(points={{-338,120},{-322,120}}, color={255,0,255})); + connect(not1.y, towFanSpe.uChi[1]) + annotation (Line(points={{-298,120},{-194,120},{-194,215},{-122,215}}, + color={255,0,255})); + connect(not1.y, towFanSpe1.uChi[1]) + annotation (Line(points={{-298,120},{26,120},{26,215},{98,215}}, + color={255,0,255})); + connect(not1.y, towFanSpe2.uChi[1]) + annotation (Line(points={{-298,120},{240,120},{240,215},{318,215}}, + color={255,0,255})); + connect(wseSta.y, swi.u2) + annotation (Line(points={{-338,60},{-292,60},{-292,160},{-242,160}}, + color={255,0,255})); + connect(speWSE.y, swi.u1) + annotation (Line(points={{-338,160},{-300,160},{-300,168},{-242,168}}, + color={0,0,127})); + connect(zer.y, swi.u3) + annotation (Line(points={{-298,190},{-260,190},{-260,152},{-242,152}}, + color={0,0,127})); + connect(swi.y, towFanSpe.uTowSpeWSE) + annotation (Line(points={{-218,160},{-200,160},{-200,218},{-122,218}}, + color={0,0,127})); + connect(swi.y, towFanSpe1.uTowSpeWSE) + annotation (Line(points={{-218,160},{20,160},{20,218},{98,218}}, color={0,0,127})); + connect(not1.y, swi1.u2) + annotation (Line(points={{-298,120},{-280,120},{-280,-10},{-242,-10}}, + color={255,0,255})); + connect(hpTowSpe1.y, swi1.u1) + annotation (Line(points={{-298,10},{-276,10},{-276,-2},{-242,-2}}, + color={0,0,127})); + connect(zer.y, swi1.u3) + annotation (Line(points={{-298,190},{-260,190},{-260,-18},{-242,-18}}, + color={0,0,127})); + connect(swi1.y, towFanSpe.uMaxTowSpeSet[1]) + annotation (Line(points={{-218,-10},{-176,-10},{-176,206},{-122,206}}, + color={0,0,127})); + connect(hpTowSpe2.y, towFanSpe.uMaxTowSpeSet[2]) + annotation (Line(points={{-338,-30},{-176,-30},{-176,206},{-122,206}}, + color={0,0,127})); + connect(swi1.y, towFanSpe1.uMaxTowSpeSet[1]) + annotation (Line(points={{-218,-10},{44,-10},{44,206},{98,206}}, + color={0,0,127})); + connect(hpTowSpe2.y, towFanSpe1.uMaxTowSpeSet[2]) + annotation (Line(points={{-338,-30},{44,-30},{44,206},{98,206}}, + color={0,0,127})); + connect(swi1.y, towFanSpe2.uMaxTowSpeSet[1]) + annotation (Line(points={{-218,-10},{252,-10},{252,206},{318,206}}, + color={0,0,127})); + connect(hpTowSpe2.y, towFanSpe2.uMaxTowSpeSet[2]) + annotation (Line(points={{-338,-30},{252,-30},{252,206},{318,206}}, + color={0,0,127})); + connect(not1.y, or4.u1) annotation (Line(points={{-298,120},{-280,120},{-280,-80}, + {-262,-80}}, color={255,0,255})); + connect(chiSta2.y, or4.u2) annotation (Line(points={{-338,90},{-286,90},{-286, + -88},{-262,-88}}, color={255,0,255})); + connect(wseSta.y, or3.u2) annotation (Line(points={{-338,60},{-292,60},{-292,-148}, + {-262,-148}}, color={255,0,255})); + connect(or4.y, or3.u1) annotation (Line(points={{-238,-80},{-230,-80},{-230,-100}, + {-270,-100},{-270,-140},{-262,-140}}, color={255,0,255})); +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Validation/Controller.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Controller. +

                      +

                      +It shows the calculations of the fan speed setpoint for the three different plants, +including the close coupled plants that have waterside economizer (towFanSpe), +the less coupled plants that have waterside economizer (towFanSpe1), +and the close coupled plants that have no waterside economizer (towFanSpe2). +

                      +
                        +
                      • +For the close and less coupled plants with waterside economizer, +
                          +
                        • +if the plant is not enabled, the tower fan speed setpoint is 0. +
                        • +
                        • +if the economizer is enabled, the fan speed setpoint equals to the +uTowSpeWSE. +
                        • +
                        • +in the period when the chiller runs only, the speed setpoint +is minium of the plrTowMaxSpeSet, uMaxTowSpeSet +and the mapped setpoint. +
                        • +
                        +
                      • +
                      • +For the close coupled plants without waterside economizer, +the setpoint calculation is same as the one with economizer +except there is no economizer enabled period. So when the chiller +is enabled, the setpoint equals to the +plrTowMaxSpeSet, uMaxTowSpeSet +and the mapped setpoint. +
                      • +
                      +", revisions=" +
                        +
                      • +August 12, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-400,-300},{400,300}}))); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Validation/package.mo new file mode 100644 index 00000000000..e288478dfc3 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature; +package Validation "Collection of validation models" + +annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})}), +preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +")); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Validation/package.order new file mode 100644 index 00000000000..8cba75e31a7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Validation/package.order @@ -0,0 +1 @@ +Controller diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/package.mo new file mode 100644 index 00000000000..8f8f3b5a679 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/package.mo @@ -0,0 +1,46 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed; +package ReturnWaterTemperature "Sequences of control tower fan speed for controlling condenser water return temperature" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains sequences of cooling tower fan speed control, for control condenser +water return temperature. +The implementation is based on section 5.20.12.2, item a in ASHRAE Guideline36-2021. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end ReturnWaterTemperature; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/package.order new file mode 100644 index 00000000000..9ffbffcb990 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/package.order @@ -0,0 +1,3 @@ +Controller +Subsequences +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Validation/Controller.mo new file mode 100644 index 00000000000..bf8a580556e --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Validation/Controller.mo @@ -0,0 +1,353 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.Validation; +model Controller "Validation sequence of controlling tower fan speed" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.Controller + cloCouWitWse + "Tower fan speed controller of plant that is close coupled and has waterside economizer" + annotation (Placement(transformation(extent={{-80,280},{-60,320}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.Controller + lesCouWitWse(final closeCoupledPlant=false) + "Tower fan speed controller of plant that is less coupled and has waterside economizer" + annotation (Placement(transformation(extent={{100,280},{120,320}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.Controller + cloCouNoWse(final have_WSE=false) + "Tower fan speed controller of plant that is close coupled and has no waterside economizer" + annotation (Placement(transformation(extent={{280,280},{300,320}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse wseSta( + final width=0.2, final period=3600, + shift=-3000) + "Waterside economizer enabling status" + annotation (Placement(transformation(extent={{-360,140},{-340,160}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp plaCap( + final height=8e5, + final duration=3600, + final offset=1e5) "Real operating chiller plant capacity" + annotation (Placement(transformation(extent={{-360,10},{-340,30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin conSup( + final amplitude=2, + final freqHz=1/1800, + final offset=273.15 + 29) "Condenser water supply temperature" + annotation (Placement(transformation(extent={{-360,-250},{-340,-230}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram2( + final height=3, + final duration=3600, + final startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-360,-290},{-340,-270}}))); + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add real inputs" + annotation (Placement(transformation(extent={{-300,-270},{-280,-250}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram3( + final height=3, + final duration=3600, + final startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-360,-200},{-340,-180}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin conRet2( + final amplitude=2, + final freqHz=1/1800, + final offset=273.15 + 28) "Condenser water return temperature" + annotation (Placement(transformation(extent={{-360,-170},{-340,-150}}))); + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add real inputs" + annotation (Placement(transformation(extent={{-300,-190},{-280,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp conWatPumSpe1[2]( + final height=fill(0.5, 2), + final duration=fill(3600, 2), + final startTime=fill(300, 2)) "Measured condenser water pump speed" + annotation (Placement(transformation(extent={{-300,-230},{-280,-210}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe1(final k=0.5) + "Head pressure control maximum tower speed" + annotation (Placement(transformation(extent={{-320,-10},{-300,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe2(final k=0) + "Head pressure control maximum tower speed" + annotation (Placement(transformation(extent={{-360,-70},{-340,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant towFanSpe3(final k=0.2) + "Measured tower fan speed" + annotation (Placement(transformation(extent={{-320,110},{-300,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatSupSet( + final k=273.15 + 6.5) + "Chilled water supply setpoint" + annotation (Placement(transformation(extent={{-360,-120},{-340,-100}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta1( + final width=0.2, final period=3600) "Chiller one enabling status" + annotation (Placement(transformation(extent={{-360,200},{-340,220}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiSta2(final k=false) + "Chiller two enabling status" + annotation (Placement(transformation(extent={{-360,170},{-340,190}}))); + Buildings.Controls.OBC.CDL.Logical.Or or3 "Logical or" + annotation (Placement(transformation(extent={{-260,-150},{-240,-130}}))); + Buildings.Controls.OBC.CDL.Logical.Or or4 "Logical or" + annotation (Placement(transformation(extent={{-260,-90},{-240,-70}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=4) "Replicate boolean input" + annotation (Placement(transformation(extent={{-200,-90},{-180,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" + annotation (Placement(transformation(extent={{-320,200},{-300,220}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( + final k=0) "Constant zero" + annotation (Placement(transformation(extent={{-320,-50},{-300,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Logical switch" + annotation (Placement(transformation(extent={{-240,-30},{-220,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Logical switch" + annotation (Placement(transformation(extent={{-260,260},{-240,280}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1(final k=0) + "Zero constant" + annotation (Placement(transformation(extent={{-360,240},{-340,260}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( + final amplitude=0.2*1e4, + final freqHz=1/1200, + final offset=1.1*1e4, + final startTime=180) "Chiller load" + annotation (Placement(transformation(extent={{-360,280},{-340,300}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiSup( + final amplitude=0.5, + final freqHz=1/1800, + final offset=273.15 + 7.1) "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-360,80},{-340,100}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1( + final height=3, + final duration=3600, + final startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-360,40},{-340,60}}))); + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add real inputs" + annotation (Placement(transformation(extent={{-260,60},{-240,80}}))); + +equation + connect(ram2.y,add1. u2) + annotation (Line(points={{-338,-280},{-320,-280},{-320,-266},{-302,-266}}, + color={0,0,127})); + connect(conSup.y,add1. u1) + annotation (Line(points={{-338,-240},{-320,-240},{-320,-254},{-302,-254}}, + color={0,0,127})); + connect(conRet2.y, add3.u1) + annotation (Line(points={{-338,-160},{-320,-160},{-320,-174},{-302,-174}}, + color={0,0,127})); + connect(ram3.y, add3.u2) + annotation (Line(points={{-338,-190},{-320,-190},{-320,-186},{-302,-186}}, + color={0,0,127})); + connect(or3.y, booRep.u) + annotation (Line(points={{-238,-140},{-220,-140},{-220,-80},{-202,-80}}, + color={255,0,255})); + connect(chiSta1.y, not1.u) + annotation (Line(points={{-338,210},{-322,210}}, color={255,0,255})); + connect(not1.y, swi1.u2) + annotation (Line(points={{-298,210},{-280,210},{-280,-20},{-242,-20}}, + color={255,0,255})); + connect(hpTowSpe1.y, swi1.u1) + annotation (Line(points={{-298,0},{-260,0},{-260,-12},{-242,-12}}, + color={0,0,127})); + connect(zer.y, swi1.u3) + annotation (Line(points={{-298,-40},{-260,-40},{-260,-28},{-242,-28}}, + color={0,0,127})); + connect(con1.y,swi2. u3) + annotation (Line(points={{-338,250},{-320,250},{-320,262},{-262,262}}, + color={0,0,127})); + connect(sin.y,swi2. u1) + annotation (Line(points={{-338,290},{-320,290},{-320,278},{-262,278}}, + color={0,0,127})); + connect(not1.y, swi2.u2) + annotation (Line(points={{-298,210},{-280,210},{-280,270},{-262,270}}, + color={255,0,255})); + connect(con1.y, cloCouWitWse.chiLoa[2]) + annotation (Line(points={{-338,250},{-210,250},{-210,319},{-82,319}}, + color={0,0,127})); + connect(not1.y, cloCouWitWse.uChi[1]) + annotation (Line(points={{-298,210},{-200,210},{-200,316},{-82,316}}, + color={255,0,255})); + connect(chiSta2.y, cloCouWitWse.uChi[2]) + annotation (Line(points={{-338,180},{-200,180},{-200,316},{-82,316}}, + color={255,0,255})); + connect(wseSta.y, cloCouWitWse.uWse) + annotation (Line(points={{-338,150},{-190,150},{-190,313},{-82,313}}, + color={255,0,255})); + connect(towFanSpe3.y, cloCouWitWse.uFanSpe) + annotation (Line(points={{-298,120},{-180,120},{-180,310},{-82,310}}, + color={0,0,127})); + connect(chiSup.y,add2. u1) + annotation (Line(points={{-338,90},{-320,90},{-320,76},{-262,76}}, + color={0,0,127})); + connect(ram1.y,add2. u2) + annotation (Line(points={{-338,50},{-320,50},{-320,64},{-262,64}}, + color={0,0,127})); + connect(add2.y, cloCouWitWse.TChiWatSup) + annotation (Line(points={{-238,70},{-170,70},{-170,307},{-82,307}}, + color={0,0,127})); + connect(chiWatSupSet.y, cloCouWitWse.TChiWatSupSet) + annotation (Line(points={{-338,-110},{-160,-110},{-160,304},{-82,304}}, + color={0,0,127})); + connect(plaCap.y, cloCouWitWse.reqPlaCap) + annotation (Line(points={{-338,20},{-150,20},{-150,301},{-82,301}}, + color={0,0,127})); + connect(swi1.y, cloCouWitWse.uMaxTowSpeSet[1]) + annotation (Line(points={{-218,-20},{-140,-20},{-140,298},{-82,298}}, + color={0,0,127})); + connect(hpTowSpe2.y, cloCouWitWse.uMaxTowSpeSet[2]) + annotation (Line(points={{-338,-60},{-140,-60},{-140,298},{-82,298}}, + color={0,0,127})); + connect(booRep.y, cloCouWitWse.uTow) + annotation (Line(points={{-178,-80},{-130,-80},{-130,295},{-82,295}}, + color={255,0,255})); + connect(or3.y, cloCouWitWse.uPla) + annotation (Line(points={{-238,-140},{-120,-140},{-120,289},{-82,289}}, + color={255,0,255})); + connect(add3.y, cloCouWitWse.TConWatRet) + annotation (Line(points={{-278,-180},{-110,-180},{-110,286},{-82,286}}, + color={0,0,127})); + connect(conWatPumSpe1.y, cloCouWitWse.uConWatPumSpe) + annotation (Line(points={{-278,-220},{-100,-220},{-100,283},{-82,283}}, + color={0,0,127})); + connect(swi2.y, cloCouWitWse.chiLoa[1]) + annotation (Line(points={{-238,270},{-210,270},{-210,319},{-82,319}}, + color={0,0,127})); + connect(swi2.y, lesCouWitWse.chiLoa[1]) + annotation (Line(points={{-238,270},{-40,270},{-40,319},{98,319}}, + color={0,0,127})); + connect(con1.y, lesCouWitWse.chiLoa[2]) + annotation (Line(points={{-338,250},{-40,250},{-40,319},{98,319}}, + color={0,0,127})); + connect(not1.y, lesCouWitWse.uChi[1]) + annotation (Line(points={{-298,210},{-30,210},{-30,316},{98,316}}, + color={255,0,255})); + connect(chiSta2.y, lesCouWitWse.uChi[2]) + annotation (Line(points={{-338,180},{-20,180},{-20,316},{98,316}}, + color={255,0,255})); + connect(wseSta.y, lesCouWitWse.uWse) + annotation (Line(points={{-338,150},{-10,150},{-10,313},{98,313}}, + color={255,0,255})); + connect(towFanSpe3.y, lesCouWitWse.uFanSpe) + annotation (Line(points={{-298,120},{0,120},{0,310},{98,310}}, + color={0,0,127})); + connect(add2.y, lesCouWitWse.TChiWatSup) + annotation (Line(points={{-238,70},{10,70},{10,307},{98,307}}, + color={0,0,127})); + connect(chiWatSupSet.y, lesCouWitWse.TChiWatSupSet) + annotation (Line(points={{-338,-110},{20,-110},{20,304},{98,304}}, + color={0,0,127})); + connect(plaCap.y, lesCouWitWse.reqPlaCap) + annotation (Line(points={{-338,20},{30,20},{30,301},{98,301}}, + color={0,0,127})); + connect(swi1.y, lesCouWitWse.uMaxTowSpeSet[1]) + annotation (Line(points={{-218,-20},{40,-20},{40,298},{98,298}}, + color={0,0,127})); + connect(hpTowSpe2.y, lesCouWitWse.uMaxTowSpeSet[2]) + annotation (Line(points={{-338,-60},{40,-60},{40,298},{98,298}}, + color={0,0,127})); + connect(booRep.y, lesCouWitWse.uTow) + annotation (Line(points={{-178,-80},{50,-80},{50,295},{98,295}}, + color={255,0,255})); + connect(or3.y, lesCouWitWse.uPla) + annotation (Line(points={{-238,-140},{60,-140},{60,289},{98,289}}, + color={255,0,255})); + connect(add3.y, lesCouWitWse.TConWatRet) + annotation (Line(points={{-278,-180},{70,-180},{70,286},{98,286}}, + color={0,0,127})); + connect(conWatPumSpe1.y, lesCouWitWse.uConWatPumSpe) + annotation (Line(points={{-278,-220},{80,-220},{80,283},{98,283}}, + color={0,0,127})); + connect(add1.y, lesCouWitWse.TConWatSup) + annotation (Line(points={{-278,-260},{90,-260},{90,281},{98,281}}, + color={0,0,127})); + connect(not1.y, cloCouNoWse.uChi[1]) + annotation (Line(points={{-298,210},{140,210},{140,316},{278,316}}, + color={255,0,255})); + connect(chiSta2.y, cloCouNoWse.uChi[2]) + annotation (Line(points={{-338,180},{140,180},{140,316},{278,316}}, + color={255,0,255})); + connect(towFanSpe3.y, cloCouNoWse.uFanSpe) + annotation (Line(points={{-298,120},{150,120},{150,310},{278,310}}, + color={0,0,127})); + connect(chiWatSupSet.y, cloCouNoWse.TChiWatSupSet) + annotation (Line(points={{-338,-110},{160,-110},{160,304},{278,304}}, + color={0,0,127})); + connect(plaCap.y, cloCouNoWse.reqPlaCap) + annotation (Line(points={{-338,20},{170,20},{170,301},{278,301}}, + color={0,0,127})); + connect(swi1.y, cloCouNoWse.uMaxTowSpeSet[1]) + annotation (Line(points={{-218,-20},{180,-20},{180,298},{278,298}}, + color={0,0,127})); + connect(hpTowSpe2.y, cloCouNoWse.uMaxTowSpeSet[2]) + annotation (Line(points={{-338,-60},{180,-60},{180,298},{278,298}}, + color={0,0,127})); + connect(booRep.y, cloCouNoWse.uTow) + annotation (Line(points={{-178,-80},{190,-80},{190,295},{278,295}}, + color={255,0,255})); + connect(or3.y, cloCouNoWse.uPla) + annotation (Line(points={{-238,-140},{200,-140},{200,289},{278,289}}, + color={255,0,255})); + connect(add3.y, cloCouNoWse.TConWatRet) + annotation (Line(points={{-278,-180},{210,-180},{210,286},{278,286}}, + color={0,0,127})); + connect(conWatPumSpe1.y, cloCouNoWse.uConWatPumSpe) + annotation (Line(points={{-278,-220},{220,-220},{220,283},{278,283}}, + color={0,0,127})); + connect(not1.y, or4.u1) annotation (Line(points={{-298,210},{-280,210},{-280,-80}, + {-262,-80}}, color={255,0,255})); + connect(chiSta2.y, or4.u2) annotation (Line(points={{-338,180},{-286,180},{-286, + -88},{-262,-88}}, color={255,0,255})); + connect(wseSta.y, or3.u2) annotation (Line(points={{-338,150},{-292,150},{-292, + -148},{-262,-148}}, color={255,0,255})); + connect(or4.y, or3.u1) annotation (Line(points={{-238,-80},{-230,-80},{-230,-100}, + {-270,-100},{-270,-140},{-262,-140}}, color={255,0,255})); +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Validation/Controller.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.Controller. +

                      +

                      +It shows the calculations of the fan speed setpoint for the three different plants, +including the close coupled plants that have waterside economizer (cloCouWitWse), +the less coupled plants that have waterside economizer (lesCouWitWse), +and the close coupled plants that have no waterside economizer (cloCouNoWse). +

                      +
                        +
                      • +For the close and less coupled plants with waterside economizer, +
                          +
                        • +if the plant is not enabled (before 600 seconds), the tower fan +speed setpoint is 0. +
                        • +
                        • +if the economizer is enabled (600 seconds to 1320 seconds), the +fan speed setpoint equals to the uTowSpeWSE. +
                        • +
                        • +in the period when the chiller runs only (after 1320 seconds), the +speed setpoint is minium of the plrTowMaxSpeSet, +uMaxTowSpeSet and the mapped setpoint. +
                        • +
                        +
                      • +
                      • +For the close coupled plants without waterside economizer, +the setpoint calculation is same as the one with economizer +except there is no economizer enabled period. So when the chiller +is enabled, the setpoint equals to the +plrTowMaxSpeSet, uMaxTowSpeSet +and the mapped setpoint. +
                      • +
                      +", revisions=" +
                        +
                      • +September 15, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-400,-340},{400,340}}))); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Validation/package.mo new file mode 100644 index 00000000000..4305240aa80 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed; +package Validation "Collection of validation models" + +annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})}), +preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +")); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Validation/package.order new file mode 100644 index 00000000000..8cba75e31a7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Validation/package.order @@ -0,0 +1 @@ +Controller diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/package.mo new file mode 100644 index 00000000000..e441d19f344 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/package.mo @@ -0,0 +1,45 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers; +package FanSpeed "Package of sequences for cooling tower fan speed control" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains sequences for cooling tower fan speed control. +The implementation is based on section 5.20.12.2 in ASHRAE Guideline36-2021. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end FanSpeed; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/package.order new file mode 100644 index 00000000000..62759a805aa --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/package.order @@ -0,0 +1,4 @@ +Controller +EnabledWSE +ReturnWaterTemperature +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Controller.mo new file mode 100644 index 00000000000..8366663f076 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Controller.mo @@ -0,0 +1,243 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging; +block Controller "Sequence of staging cooling tower cells" + + parameter Boolean have_WSE=true + "Flag to indicate if the plant has waterside economizer"; + parameter Integer nTowCel=4 "Total number of cooling tower cells"; + parameter Integer nConWatPum=2 "Total number of condenser water pumps"; + parameter Integer totSta=6 + "Total number of plant stages, including stage zero and the stages with a WSE, if applicable"; + parameter Real staVec[totSta]={0,0.5,1,1.5,2,2.5} + "Plant stage vector with size of total number of stages, element value like x.5 means chiller stage x plus WSE"; + parameter Real towCelOnSet[totSta]={0,2,2,4,4,4} + "Design number of tower fan cells that should be ON, according to current chiller stage and WSE status"; + parameter Real chaTowCelIsoTim=90 + "Nominal time needed for open isolation valve of the tower cells"; + parameter Real speChe=0.01 + "Lower threshold value to check if condenser water pump is proven on" + annotation (Dialog(tab="Advanced")); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiSta + "Current chiller stage" + annotation (Placement(transformation(extent={{-140,110},{-100,150}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiStaSet + "Current chiller stage setpoint" + annotation (Placement(transformation(extent={{-140,80},{-100,120}}), + iconTransformation(extent={{-140,50},{-100,90}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uTowStaCha + "Cooling tower stage change command from plant staging process" + annotation (Placement(transformation(extent={{-140,50},{-100,90}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWse if have_WSE + "Water side economizer status: true = ON, false = OFF" + annotation (Placement(transformation(extent={{-140,20},{-100,60}}), + iconTransformation(extent={{-140,10},{-100,50}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEnaPla + "True: plant is just enabled" + annotation(Placement(transformation(extent={{-140,-10},{-100,30}}), + iconTransformation(extent={{-140,-10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enabling status" + annotation (Placement(transformation(extent={{-140,-40},{-100,0}}), + iconTransformation(extent={{-140,-30},{-100,10}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpe[nConWatPum]( + final unit=fill("1", nConWatPum)) "Current condenser water pump speed" + annotation (Placement(transformation(extent={{-140,-70},{-100,-30}}), + iconTransformation(extent={{-140,-50},{-100,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uIsoVal[nTowCel]( + final max=fill(1, nTowCel)) + "Vector of tower cells isolation valve position" + annotation (Placement(transformation(extent={{-140,-120},{-100,-80}}), + iconTransformation(extent={{-140,-90},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uTowSta[nTowCel] + "Vector of tower cells proven on status: true=proven on" + annotation (Placement(transformation(extent={{-140,-150},{-100,-110}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLeaCel + "Lead tower cell status" + annotation (Placement(transformation(extent={{100,64},{140,104}}), + iconTransformation(extent={{100,20},{140,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yIsoVal[nTowCel]( + final unit=fill("1", nTowCel), + final min=fill(0, nTowCel), + final max=fill(1, nTowCel)) + "Vector of tower cells isolation valve position" + annotation (Placement(transformation(extent={{100,-14},{140,26}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yTowSta[nTowCel] + "Vector of tower cells status setpoint" + annotation (Placement(transformation(extent={{100,-80},{140,-40}}), + iconTransformation(extent={{100,-60},{140,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yEndSta + "Rising edge to indicate the staging process is done" + annotation (Placement(transformation(extent={{100,-120},{140,-80}}), + iconTransformation(extent={{100,-110},{140,-70}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.CellsNumber + enaCel( + final have_WSE=have_WSE, + final nConWatPum=nConWatPum, + final nTowCel=nTowCel, + final totSta=totSta, + final staVec=staVec, + final towCelOnSet=towCelOnSet, + final speChe=speChe) "Total number of enabled cells" + annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.StageProcesses + staPro( + final nTowCel=nTowCel, + final chaTowCelIsoTim=chaTowCelIsoTim) + "Tower staging process" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.ChangeCells ideChaCel( + final nTowCel=nTowCel) + "Identify which cell should change status" + annotation (Placement(transformation(extent={{20,50},{40,70}}))); + +equation + connect(uChiSta, enaCel.uChiSta) annotation (Line(points={{-120,130},{-74,130}, + {-74,99},{-42,99}}, color={255,127,0})); + connect(uChiStaSet, enaCel.uChiStaSet) annotation (Line(points={{-120,100},{-80, + 100},{-80,96},{-42,96}}, color={255,127,0})); + connect(enaCel.uTowStaCha, uTowStaCha) annotation (Line(points={{-42,92},{-80, + 92},{-80,70},{-120,70}}, color={255,0,255})); + connect(uWse, enaCel.uWse) annotation (Line(points={{-120,40},{-74,40},{-74,89}, + {-42,89}}, color={255,0,255})); + connect(enaCel.uConWatPumSpe, uConWatPumSpe) annotation (Line(points={{-42,81}, + {-56,81},{-56,-50},{-120,-50}}, color={0,0,127})); + connect(enaCel.yLeaCel, yLeaCel) annotation (Line(points={{-18,84},{120,84}}, + color={255,0,255})); + connect(staPro.yIsoVal, yIsoVal) + annotation (Line(points={{22,6},{120,6}}, color={0,0,127})); + connect(staPro.yTowSta, yTowSta) annotation (Line(points={{22,0},{60,0},{60,-60}, + {120,-60}}, color={255,0,255})); + connect(uTowSta, staPro.uTowSta) annotation (Line(points={{-120,-130},{-20,-130}, + {-20,-8},{-2,-8}}, color={255,0,255})); + connect(uIsoVal, staPro.uIsoVal) annotation (Line(points={{-120,-100},{-26,-100}, + {-26,0},{-2,0}}, color={0,0,127})); + connect(staPro.yEndSta, yEndSta) annotation (Line(points={{22,-6},{50,-6},{50, + -100},{120,-100}}, color={255,0,255})); + connect(uEnaPla, enaCel.uEnaPla) annotation (Line(points={{-120,10},{-68,10}, + {-68,87},{-42,87}},color={255,0,255})); + connect(enaCel.yNumCel, ideChaCel.uCelNum) annotation (Line(points={{-18,90},{ + 0,90},{0,64},{18,64}}, color={255,127,0})); + connect(uTowSta, ideChaCel.uTowSta) annotation (Line(points={{-120,-130},{-50, + -130},{-50,56},{18,56}}, color={255,0,255})); + connect(ideChaCel.yChaCel, staPro.uChaCel) annotation (Line(points={{42,56},{ + 60,56},{60,20},{-20,20},{-20,8},{-2,8}}, color={255,0,255})); + connect(uPla, enaCel.uPla) annotation (Line(points={{-120,-20},{-62,-20},{-62, + 83},{-42,83}}, color={255,0,255})); +annotation ( + defaultComponentName="towSta", + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-100,-140},{100,140}})), + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,150},{100,110}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-98,-64},{-62,-76}}, + textColor={0,0,127}, + textString="uIsoVal"), + Text( + extent={{-100,76},{-46,64}}, + textColor={255,127,0}, + textString="uChiStaSet"), + Text( + extent={{-98,96},{-60,84}}, + textColor={255,127,0}, + textString="uChiSta"), + Text( + extent={{-100,56},{-40,44}}, + textColor={255,0,255}, + textString="uTowStaCha"), + Text( + extent={{-100,36},{-70,24}}, + textColor={255,0,255}, + textString="uWse", + visible=have_WSE), + Text( + extent={{-100,-24},{-22,-36}}, + textColor={0,0,127}, + textString="uConWatPumSpe"), + Text( + extent={{-98,-82},{-58,-96}}, + textColor={255,0,255}, + textString="uTowSta"), + Text( + extent={{56,-32},{98,-44}}, + textColor={255,0,255}, + textString="yTowSta"), + Text( + extent={{62,6},{100,-6}}, + textColor={0,0,127}, + textString="yIsoVal"), + Text( + extent={{60,48},{98,36}}, + textColor={255,0,255}, + textString="yLeaCel"), + Text( + extent={{58,-82},{100,-94}}, + textColor={255,0,255}, + textString="yEndSta"), + Text( + extent={{-96,16},{-58,2}}, + textColor={255,0,255}, + textString="uEnaPla"), + Text( + extent={{-100,-4},{-70,-16}}, + textColor={255,0,255}, + visible=have_WSE, + textString="uPla")}), +Documentation(info=" +

                      +Block controls cooling tower fan staging. This is implemented accoding to +ASHRAE Guideline36-2021, section 5.20.12.1, +which specifies tower fan staging process. It includes two subsequences: +

                      + +

                      +Note that in this implementation, input uTowStaCha +is from chiller staging process sequence. The input is also used for the +condenser water pump staging. Thus, the tower stage changes are initiated concurrentlyl +with condenser water pump stage. +

                      +

                      +The sequence also assumes the cells are enabled in order as it is labelled, meaning +that it enabled the cells as cell 1, 2, 3, etc. +

                      +", revisions=" +
                        +
                      • +September 14, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/CellsNumber.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/CellsNumber.mo new file mode 100644 index 00000000000..9751ff601b2 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/CellsNumber.mo @@ -0,0 +1,367 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences; +block CellsNumber + "Sequence for identifying total number of enabling cells" + + parameter Boolean have_WSE = true + "Flag to indicate if the plant has waterside economizer"; + parameter Integer nConWatPum = 2 "Total number of condenser water pumps"; + parameter Integer nTowCel = 4 + "Total number of cooling tower cells"; + parameter Integer totSta = 6 + "Total number of plant stages, including stage zero and the stages with a WSE, if applicable"; + parameter Real staVec[totSta]={0,0.5,1,1.5,2,2.5} + "Plant stage vector with size of total number of stages, element value like x.5 means chiller stage x plus WSE"; + parameter Real towCelOnSet[totSta] = {0,2,2,4,4,4} + "Design number of tower fan cells that should be ON, according to current chiller stage and WSE status"; + parameter Real speChe = 0.01 + "Lower threshold value to check if condenser water pump is proven on" + annotation (Dialog(tab="Advanced")); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiSta + "Current chiller stage" + annotation (Placement(transformation(extent={{-300,80},{-260,120}}), + iconTransformation(extent={{-140,70},{-100,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiStaSet + "Current chiller stage setpoint integer" + annotation (Placement(transformation(extent={{-300,40},{-260,80}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uTowStaCha + "Cooling tower stage change command from plant staging process" + annotation (Placement(transformation(extent={{-300,0},{-260,40}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWse if have_WSE + "Water side economizer status: true = ON, false = OFF" + annotation (Placement(transformation(extent={{-300,-60},{-260,-20}}), + iconTransformation(extent={{-140,-30},{-100,10}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEnaPla + "True: plant is just enabled" + annotation(Placement(transformation(extent={{-300,-110},{-260,-70}}), + iconTransformation(extent={{-140,-50},{-100,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla + "Plant enabling status" + annotation (Placement(transformation(extent={{-300,-150},{-260,-110}}), + iconTransformation(extent={{-140,-90},{-100,-50}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uConWatPumSpe[nConWatPum]( + final unit=fill("1", nConWatPum)) "Current condenser water pump speed" + annotation (Placement(transformation(extent={{-300,-180},{-260,-140}}), + iconTransformation(extent={{-140,-110},{-100,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yNumCel + "Total number of enabled cells" + annotation (Placement(transformation(extent={{260,90},{300,130}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLeaCel + "Lead tower cell status" + annotation (Placement(transformation(extent={{260,-110},{300,-70}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + +protected + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real input to integer output" + annotation (Placement(transformation(extent={{220,100},{240,120}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 + "Convert boolean input to real output" + annotation (Placement(transformation(extent={{-160,-50},{-140,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con2( + final k=false) if not have_WSE + "Constant false" + annotation (Placement(transformation(extent={{-220,-80},{-200,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add real inputs" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep( + final nout=totSta) "Replicate real input" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con4[totSta]( + final k=staVec) "Stage indicator array" + annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract sub4[totSta] "Sum of real inputs" + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greEquThr[totSta]( + final t=fill(-0.1,totSta)) "Check stage indicator" + annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[totSta] + "Convert boolean input to integer" + annotation (Placement(transformation(extent={{120,-50},{140,-30}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum mulSumInt( + final nin=totSta) "Sun of input vector " + annotation (Placement(transformation(extent={{160,-50},{180,-30}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor celOnNum( + final nin=totSta) + "Number of cells should be enabled at current plant stage" + annotation (Placement(transformation(extent={{120,140},{140,160}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con5[totSta]( + final k=towCelOnSet) + "Number of enabling cells at each stage" + annotation (Placement(transformation(extent={{80,140},{100,160}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis proOn[nConWatPum]( + final uLow=fill(speChe, nConWatPum), + final uHigh=fill(2*speChe, nConWatPum)) + "Check if the condenser water pump is proven on" + annotation (Placement(transformation(extent={{-220,-170},{-200,-150}}))); + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea1 + "Convert integer input to real" + annotation (Placement(transformation(extent={{-220,130},{-200,150}}))); + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea2 + "Convert integer input to real" + annotation (Placement(transformation(extent={{-220,50},{-200,70}}))); + Buildings.Controls.OBC.CDL.Integers.Equal norOpe + "Normal operation, not in the chiller stage change process" + annotation (Placement(transformation(extent={{-220,90},{-200,110}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1 + "Chiller stage index in the staging process" + annotation (Placement(transformation(extent={{-160,10},{-140,30}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr( + final nin=nConWatPum) + "Check if any condenser water pump is running" + annotation (Placement(transformation(extent={{-140,-170},{-120,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2 "Logical or" + annotation (Placement(transformation(extent={{200,-100},{220,-80}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi + "Chiller stage index to identify total number of enabling cells" + annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre1[totSta] + "Break algebric loop" + annotation (Placement(transformation(extent={{80,-50},{100,-30}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi + "Ensure extraction index is within the range" + annotation (Placement(transformation(extent={{80,20},{100,40}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(final k=1) + "Constant one" + annotation (Placement(transformation(extent={{0,0},{20,20}}))); + Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr + "Check if it is greater than 0" + annotation (Placement(transformation(extent={{200,-50},{220,-30}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea + "Convert boolean to real" + annotation (Placement(transformation(extent={{80,60},{100,80}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Product of the inputs" + annotation (Placement(transformation(extent={{180,100},{200,120}}))); + Buildings.Controls.OBC.CDL.Logical.And anyPumOn + "Check if there is any condenser water pump is proven on" + annotation (Placement(transformation(extent={{-60,-140},{-40,-120}}))); +equation + connect(uWse, booToRea1.u) + annotation (Line(points={{-280,-40},{-162,-40}}, color={255,0,255})); + connect(con2.y, booToRea1.u) + annotation (Line(points={{-198,-70},{-180,-70},{-180,-40},{-162,-40}}, + color={255,0,255})); + connect(booToRea1.y, add3.u2) + annotation (Line(points={{-138,-40},{-120,-40},{-120,-26},{-82,-26}}, + color={0,0,127})); + connect(add3.y, reaRep.u) + annotation (Line(points={{-58,-20},{-42,-20}}, color={0,0,127})); + connect(reaRep.y, sub4.u1) + annotation (Line(points={{-18,-20},{-10,-20},{-10,-34},{-2,-34}}, + color={0,0,127})); + connect(con4.y, sub4.u2) + annotation (Line(points={{-18,-70},{-10,-70},{-10,-46},{-2,-46}}, + color={0,0,127})); + connect(sub4.y, greEquThr.u) + annotation (Line(points={{22,-40},{38,-40}}, color={0,0,127})); + connect(con5.y, celOnNum.u) + annotation (Line(points={{102,150},{118,150}}, color={0,0,127})); + connect(booToInt.y, mulSumInt.u) + annotation (Line(points={{142,-40},{158,-40}}, color={255,127,0})); + connect(uConWatPumSpe, proOn.u) + annotation (Line(points={{-280,-160},{-222,-160}}, color={0,0,127})); + connect(uChiSta, norOpe.u1) + annotation (Line(points={{-280,100},{-222,100}}, color={255,127,0})); + connect(intToRea1.y, swi.u1) + annotation (Line(points={{-198,140},{-170,140},{-170,108},{-122,108}}, + color={0,0,127})); + connect(uTowStaCha, swi1.u2) + annotation (Line(points={{-280,20},{-162,20}}, color={255,0,255})); + connect(uChiSta, intToRea1.u) annotation (Line(points={{-280,100},{-240,100}, + {-240,140},{-222,140}}, color={255,127,0})); + connect(uChiStaSet, norOpe.u2) annotation (Line(points={{-280,60},{-240,60},{ + -240,92},{-222,92}}, color={255,127,0})); + connect(uChiStaSet, intToRea2.u) + annotation (Line(points={{-280,60},{-222,60}}, color={255,127,0})); + connect(intToRea2.y, swi1.u1) annotation (Line(points={{-198,60},{-180,60},{ + -180,28},{-162,28}}, color={0,0,127})); + connect(intToRea1.y, swi1.u3) annotation (Line(points={{-198,140},{-170,140}, + {-170,12},{-162,12}}, color={0,0,127})); + connect(swi1.y, swi.u3) annotation (Line(points={{-138,20},{-130,20},{-130,92}, + {-122,92}}, color={0,0,127})); + connect(swi.y, add3.u1) annotation (Line(points={{-98,100},{-90,100},{-90,-14}, + {-82,-14}}, color={0,0,127})); + connect(reaToInt.y, yNumCel) + annotation (Line(points={{242,110},{280,110}}, color={255,127,0})); + connect(proOn.y, mulOr.u) annotation (Line(points={{-198,-160},{-170,-160},{-170, + -160},{-142,-160}}, color={255,0,255})); + connect(uEnaPla, or2.u1) + annotation (Line(points={{-280,-90},{198,-90}}, color={255,0,255})); + connect(or2.y, yLeaCel) + annotation (Line(points={{222,-90},{280,-90}}, color={255,0,255})); + connect(greEquThr.y, pre1.u) + annotation (Line(points={{62,-40},{78,-40}}, color={255,0,255})); + connect(pre1.y, booToInt.u) + annotation (Line(points={{102,-40},{118,-40}}, color={255,0,255})); + connect(norOpe.y, swi.u2) + annotation (Line(points={{-198,100},{-122,100}}, color={255,0,255})); + connect(mulSumInt.y, intGreThr.u) + annotation (Line(points={{182,-40},{198,-40}}, color={255,127,0})); + connect(intGreThr.y, intSwi.u2) annotation (Line(points={{222,-40},{230,-40}, + {230,-10},{60,-10},{60,30},{78,30}}, color={255,0,255})); + connect(mulSumInt.y, intSwi.u1) annotation (Line(points={{182,-40},{190,-40}, + {190,-20},{50,-20},{50,38},{78,38}}, color={255,127,0})); + connect(conInt.y, intSwi.u3) annotation (Line(points={{22,10},{40,10},{40,22}, + {78,22}}, color={255,127,0})); + connect(intSwi.y, celOnNum.index) + annotation (Line(points={{102,30},{130,30},{130,138}}, color={255,127,0})); + connect(intGreThr.y, booToRea.u) annotation (Line(points={{222,-40},{230,-40}, + {230,-10},{60,-10},{60,70},{78,70}}, color={255,0,255})); + connect(celOnNum.y, mul.u1) annotation (Line(points={{142,150},{160,150},{160, + 116},{178,116}}, color={0,0,127})); + connect(booToRea.y, mul.u2) annotation (Line(points={{102,70},{160,70},{160, + 104},{178,104}}, color={0,0,127})); + connect(mul.y, reaToInt.u) + annotation (Line(points={{202,110},{218,110}}, color={0,0,127})); + connect(mulOr.y, anyPumOn.u2) annotation (Line(points={{-118,-160},{-80,-160}, + {-80,-138},{-62,-138}}, color={255,0,255})); + connect(uPla, anyPumOn.u1) + annotation (Line(points={{-280,-130},{-62,-130}}, color={255,0,255})); + connect(anyPumOn.y, or2.u2) annotation (Line(points={{-38,-130},{180,-130},{ + 180,-98},{198,-98}}, color={255,0,255})); +annotation ( + defaultComponentName="enaCelNum", + Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Text( + extent={{-100,150},{100,110}}, + textColor={0,0,255}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-96,-84},{-18,-96}}, + textColor={0,0,127}, + textString="uConWatPumSpe"), + Text( + extent={{-98,-2},{-72,-16}}, + textColor={255,0,255}, + textString="uWse", + visible=have_WSE), + Text( + extent={{-98,26},{-40,14}}, + textColor={255,0,255}, + textString="uTowStaCha"), + Text( + extent={{-98,66},{-44,54}}, + textColor={255,127,0}, + textString="uChiStaSet"), + Text( + extent={{-100,96},{-56,84}}, + textColor={255,127,0}, + textString="uChiSta"), + Text( + extent={{54,6},{98,-6}}, + textColor={255,127,0}, + textString="yNumCel"), + Text( + extent={{56,-52},{98,-64}}, + textColor={255,0,255}, + textString="yLeaCel"), + Text( + extent={{-98,-22},{-60,-36}}, + textColor={255,0,255}, + textString="uEnaPla"), + Text( + extent={{-98,-62},{-72,-76}}, + textColor={255,0,255}, + visible=have_WSE, + textString="uPla")}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-260,-180},{260,180}}), + graphics={ + Text( + extent={{-228,178},{-106,158}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Identify total number of operation cells")}), + Documentation(info=" +

                      +This block outputs total number of enabling tower cells according to current plant +stage and generates boolean output to enable or disable lead tower cell(s). +It is implemented according to ASHRAE Guideline36-2021, section 5.20.12.1, +

                      +
                        +
                      • item b which specifies number of enabled cooling tower cells according to +plant stage. +
                      • +
                      • item c and d, which specifies when the cooling tower cells should be enabled +and disabled. +
                      • +
                      +

                      +The number of enabled tower cells shall be set by plant stage (chiller and economizer) +per the table below. +Note that the table would need to be edited by the system design team for each plant +based on the condenser water flow per stage, number of towers in the plant, and +tower minimum flow requirements. +

                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      Chiller stage Number of enabled cells
                      00
                      0+WSE2
                      12
                      1+WSE4
                      24
                      2+WSE4
                      +
                      + +

                      +If there is change of plant stage uChiSta or waterside economizer +status uWseSta, the cells should be enabled or disabled as below: +

                      +
                        +
                      • +Lead cell(s) shall be enabled when the lead condenser water pump is enabled. Lead +cell(s) shall be disabled when all condenser water pumps are proven off. +
                      • +
                      • +Tower stage changes shall be initiated concurrently with condenser water pump stage +and/or condenser water pump speed changes. +
                      • +
                      +

                      +The input uTowStaCha is the output from the chiller staging process. +They indicate in the chiller staging process (uChiStauChiStaSet) +when to change the condenser water pump status so also stage the tower cells. +

                      +", revisions=" +
                        +
                      • +September 12, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end CellsNumber; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/ChangeCells.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/ChangeCells.mo new file mode 100644 index 00000000000..27e9e933662 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/ChangeCells.mo @@ -0,0 +1,99 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences; +block ChangeCells "Identify changing cells" + + parameter Integer nTowCel = 4 + "Total number of cooling tower cells"; + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uCelNum + "Total number of cells that should be enabled" + annotation (Placement(transformation(extent={{-180,-40},{-140,0}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uTowSta[nTowCel] + "Vector of tower cells proven on status: true=enabled tower cell" + annotation (Placement(transformation(extent={{-180,-80},{-140,-40}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yTowSta[nTowCel] + "True: tower cell should be enabled" + annotation (Placement(transformation(extent={{120,40},{160,80}}), + iconTransformation(extent={{100,20},{140,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChaCel[nTowCel] + "True: the cell should change status, either become enabled or disabled" + annotation (Placement(transformation(extent={{120,0},{160,40}}), + iconTransformation(extent={{100,-60},{140,-20}}))); + +protected + final parameter Integer celInd[nTowCel]={i for i in 1:nTowCel} + "Tower cell index, {1,2,...,n}"; + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt[nTowCel]( + final k=celInd) + "Tower cell index array" + annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep( + final nout=nTowCel) + "Replicate integer input" + annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Not chaCel[nTowCel] "True: the cell should change the status" + annotation (Placement(transformation(extent={{80,10},{100,30}}))); + Buildings.Controls.OBC.CDL.Integers.LessEqual intLesEqu[nTowCel] + "True: the cell should be enabled" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[nTowCel] + "Convert boolean to equal" + annotation (Placement(transformation(extent={{-20,10},{0,30}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu[nTowCel] + "True: cooling tower cell status is the same as commanded on" + annotation (Placement(transformation(extent={{40,10},{60,30}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1[nTowCel] + "Convert boolean to equal" + annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); + +equation + connect(uCelNum, intRep.u) + annotation (Line(points={{-160,-20},{-122,-20}}, color={255,127,0})); + connect(conInt.y, intLesEqu.u1) + annotation (Line(points={{-98,20},{-62,20}}, color={255,127,0})); + connect(intRep.y, intLesEqu.u2) annotation (Line(points={{-98,-20},{-80,-20},{ + -80,12},{-62,12}}, color={255,127,0})); + connect(uTowSta, booToInt1.u) + annotation (Line(points={{-160,-60},{-22,-60}}, color={255,0,255})); + connect(intLesEqu.y, booToInt.u) + annotation (Line(points={{-38,20},{-22,20}}, color={255,0,255})); + connect(booToInt.y, intEqu.u1) + annotation (Line(points={{2,20},{38,20}}, color={255,127,0})); + connect(booToInt1.y, intEqu.u2) annotation (Line(points={{2,-60},{20,-60},{20, + 12},{38,12}}, color={255,127,0})); + connect(intEqu.y, chaCel.u) + annotation (Line(points={{62,20},{78,20}}, color={255,0,255})); + connect(chaCel.y, yChaCel) + annotation (Line(points={{102,20},{140,20}}, color={255,0,255})); + connect(intLesEqu.y, yTowSta) annotation (Line(points={{-38,20},{-30,20},{-30, + 60},{140,60}}, color={255,0,255})); +annotation (defaultComponentName="ideChaCel", + 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={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name")}), + Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-140,-80},{120,80}})), + Documentation(info=" +

                      +This block identifies the cooling tower cells that should change the enabling +status, either should be enabled or disabled. +

                      +

                      +It assumes that the cells are enabled in order as cell 1, 2, 3, etc. +

                      +", revisions=" +
                        +
                      • +July 26, 2022, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end ChangeCells; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/StageProcesses.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/StageProcesses.mo new file mode 100644 index 00000000000..67742888614 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/StageProcesses.mo @@ -0,0 +1,464 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences; +block StageProcesses "Sequence for process of staging cells" + + parameter Integer nTowCel = 4 + "Total number of cooling tower cells"; + parameter Real chaTowCelIsoTim( + final quantity="Time", + final unit="s") = 90 + "Nominal time needed for open isolation valve"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChaCel[nTowCel] + "Vector of boolean flags to show if a cell should change its status: true = the cell should change status (be enabled or disabled)" + annotation (Placement(transformation(extent={{-240,350},{-200,390}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput uIsoVal[nTowCel]( + final unit=fill("1", nTowCel), + final min=fill(0, nTowCel), + final max=fill(1, nTowCel)) "Cooling tower cells isolation valve position" + annotation (Placement(transformation(extent={{-240,60},{-200,100}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uTowSta[nTowCel] + "Vector of tower cells proven on status: true=enabled tower cell" + annotation (Placement(transformation(extent={{-240,-260},{-200,-220}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yIsoVal[nTowCel]( + final unit=fill("1", nTowCel), + final min=fill(0, nTowCel), + final max=fill(1, nTowCel)) "Cooling tower cells isolation valve setpoint" + annotation (Placement(transformation(extent={{200,80},{240,120}}), + iconTransformation(extent={{100,40},{140,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yTowSta[nTowCel] + "Vector of tower cells status setpoint" + annotation (Placement(transformation(extent={{200,-280},{240,-240}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yEndSta + "Rising edge to indicate the staging process is done" + annotation (Placement(transformation(extent={{200,-380},{240,-340}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Switch swi2[nTowCel] "Logical switch" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim + "Count the time after changing up-stream device status" + annotation (Placement(transformation(extent={{-120,290},{-100,310}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con9(final k=0) + "Constant zero" + annotation (Placement(transformation(extent={{-40,310},{-20,330}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con7( + final k=chaTowCelIsoTim) "Time to change cooling tower isolation valve" + annotation (Placement(transformation(extent={{-120,260},{-100,280}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con8(final k=1) + "Fully open valve" + annotation (Placement(transformation(extent={{-40,260},{-20,280}}))); + Buildings.Controls.OBC.CDL.Reals.Line lin1 + "Chilled water isolation valve setpoint" + annotation (Placement(transformation(extent={{40,290},{60,310}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep( + final nout=nTowCel) + "Replicate real input" + annotation (Placement(transformation(extent={{140,220},{160,240}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[nTowCel] "Logical switch" + annotation (Placement(transformation(extent={{120,-30},{140,-10}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=nTowCel) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-40,-20},{-20,0}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys3[nTowCel]( + final uLow=fill(0.025, nTowCel), + final uHigh=fill(0.05, nTowCel)) "Check if isolation valve is enabled" + annotation (Placement(transformation(extent={{-140,-120},{-120,-100}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys4[nTowCel]( + final uLow=fill(0.925, nTowCel), + final uHigh=fill(0.975, nTowCel)) "Check if isolation valve is open more than 95%" + annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); + Buildings.Controls.OBC.CDL.Logical.MultiAnd fulOpe( + final nin=nTowCel) + "Enabled valves are fully open" + annotation (Placement(transformation(extent={{80,-120},{100,-100}}))); + Buildings.Controls.OBC.CDL.Logical.And and5 + "Check if it has fully open the valve and the opening process time has past the threshold" + annotation (Placement(transformation(extent={{100,-160},{120,-140}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greEquThr( + final t=chaTowCelIsoTim) + "Check if it has past the target time of open isolation valve " + annotation (Placement(transformation(extent={{0,-180},{20,-160}}))); + Buildings.Controls.OBC.CDL.Logical.And and1[nTowCel] + "True: cells should be enabled" + annotation (Placement(transformation(extent={{20,-230},{40,-210}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep1( + final nout=nTowCel) + "Replicate boolean input" + annotation (Placement(transformation(extent={{140,-160},{160,-140}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1[nTowCel]( + final k=fill(true, nTowCel)) "Enable cells" + annotation (Placement(transformation(extent={{-60,-210},{-40,-190}}))); + Buildings.Controls.OBC.CDL.Logical.Switch enaNexCel[nTowCel] + "Enable next cells" + annotation (Placement(transformation(extent={{80,-230},{100,-210}}))); + Buildings.Controls.OBC.CDL.Logical.And and2[nTowCel] "Logical and" + annotation (Placement(transformation(extent={{-120,220},{-100,240}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1[nTowCel] "Logical and" + annotation (Placement(transformation(extent={{-60,220},{-40,240}}))); + Buildings.Controls.OBC.CDL.Logical.MultiAnd enaCel( + final nin=nTowCel) "New cells should be enabled" + annotation (Placement(transformation(extent={{-20,220},{0,240}}))); + Buildings.Controls.OBC.CDL.Reals.Switch celPosSet + "Slowly change the opening setpoint to 1 of the enabling cells isolation valve, or change the setpoint to 0 of the disabling cells" + annotation (Placement(transformation(extent={{100,220},{120,240}}))); + Buildings.Controls.OBC.CDL.Logical.And enaPro "Enabling cells process" + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Not disCel "Disable cell" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); + Buildings.Controls.OBC.CDL.Logical.And disPro "Disabling cells process" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + Buildings.Controls.OBC.CDL.Logical.Switch newTowCell[nTowCel] + "New tower cell status" + annotation (Placement(transformation(extent={{160,-270},{180,-250}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep2( + final nout=nTowCel) "In the enabling process" + annotation (Placement(transformation(extent={{80,-270},{100,-250}}))); + Buildings.Controls.OBC.CDL.Logical.Switch disExiCel[nTowCel] + "Disable existing cells" + annotation (Placement(transformation(extent={{80,-310},{100,-290}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep3( + final nout=nTowCel) "In the disabling process" + annotation (Placement(transformation(extent={{0,-310},{20,-290}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr staPro(nin=nTowCel) + "In tower staging process" + annotation (Placement(transformation(extent={{60,360},{80,380}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr opeVal( + final nin=nTowCel) "Check if there is any opened valve" + annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); + Buildings.Controls.OBC.CDL.Logical.And and3 + "Check if the opened valves are fully open" + annotation (Placement(transformation(extent={{140,-90},{160,-70}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[nTowCel] + "Convert boolean input to integer" + annotation (Placement(transformation(extent={{0,-120},{20,-100}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1[nTowCel] + "Convert boolean input to integer" + annotation (Placement(transformation(extent={{0,-150},{20,-130}}))); + Buildings.Controls.OBC.CDL.Integers.Equal intEqu[nTowCel] + "Check if the opened valves are fully open" + annotation (Placement(transformation(extent={{40,-120},{60,-100}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep4( + final nout=nTowCel) "In the disabling process" + annotation (Placement(transformation(extent={{120,-350},{140,-330}}))); + Buildings.Controls.OBC.CDL.Logical.Or celChaSta[nTowCel] + "True: there are cells changed status" + annotation (Placement(transformation(extent={{-80,-370},{-60,-350}}))); + Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg[nTowCel] + "Check if there is any cell being disabled" + annotation (Placement(transformation(extent={{-140,-350},{-120,-330}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg[nTowCel] + "Check if there is any cell being enabled" + annotation (Placement(transformation(extent={{-140,-390},{-120,-370}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr endStaPro( + final nin=nTowCel) + "Check if there is any cell changed status so it means that the staging process is done" + annotation (Placement(transformation(extent={{40,-370},{60,-350}}))); + Buildings.Controls.OBC.CDL.Logical.Latch lat[nTowCel] "Change cells status" + annotation (Placement(transformation(extent={{-120,360},{-100,380}}))); + Buildings.Controls.OBC.CDL.Logical.Edge havCha[nTowCel] "Edge" + annotation (Placement(transformation(extent={{-180,360},{-160,380}}))); + Buildings.Controls.OBC.CDL.Logical.And and4[nTowCel] + "True: cells should be disabled" + annotation (Placement(transformation(extent={{-140,-270},{-120,-250}}))); + Buildings.Controls.OBC.CDL.Logical.Switch disExiCel1[nTowCel] + "Disable existing cells" + annotation (Placement(transformation(extent={{-60,-290},{-40,-270}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con2[nTowCel]( + final k=fill(false, nTowCel)) + "Disable cells" + annotation (Placement(transformation(extent={{-140,-220},{-120,-200}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep5( + final nout=nTowCel) + "Replicate boolean input" + annotation (Placement(transformation(extent={{-40,140},{-20,160}}))); + Buildings.Controls.OBC.CDL.Logical.And ideDisCel[nTowCel] + "Identifying the cells to be disabled" + annotation (Placement(transformation(extent={{60,140},{80,160}}))); + Buildings.Controls.OBC.CDL.Reals.Switch offVal[nTowCel] + "Shut off valve if it is disabling cell" + annotation (Placement(transformation(extent={{120,140},{140,160}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3[nTowCel]( + final k=fill(0, nTowCel)) + "Constant zero" + annotation (Placement(transformation(extent={{60,180},{80,200}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi3[nTowCel] + "Logical switch" + annotation (Placement(transformation(extent={{160,90},{180,110}}))); + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold holDisPro( + final trueHoldDuration=chaTowCelIsoTim, + final falseHoldDuration=0) + "Holding the disable process" + annotation (Placement(transformation(extent={{-100,140},{-80,160}}))); + Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truHol2[nTowCel]( + final trueHoldDuration=fill(chaTowCelIsoTim, nTowCel), + final falseHoldDuration=fill(0, nTowCel)) + "Holding the cell changing signal" + annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); + +equation + connect(con9.y, lin1.x1) + annotation (Line(points={{-18,320},{30,320},{30,308},{38,308}}, + color={0,0,127})); + connect(con7.y, lin1.x2) + annotation (Line(points={{-98,270},{-60,270},{-60,296},{38,296}}, + color={0,0,127})); + connect(con8.y, lin1.f2) + annotation (Line(points={{-18,270},{0,270},{0,292},{38,292}}, + color={0,0,127})); + connect(tim.y, lin1.u) + annotation (Line(points={{-98,300},{38,300}}, color={0,0,127})); + connect(reaRep.y, swi2.u1) + annotation (Line(points={{162,230},{180,230},{180,210},{30,210},{30,38},{58, + 38}}, color={0,0,127})); + connect(swi2.y, swi.u1) + annotation (Line(points={{82,30},{100,30},{100,-12},{118,-12}}, + color={0,0,127})); + connect(uIsoVal, swi2.u3) + annotation (Line(points={{-220,80},{-160,80},{-160,22},{58,22}}, + color={0,0,127})); + connect(booRep.y, swi.u2) + annotation (Line(points={{-18,-10},{80,-10},{80,-20},{118,-20}}, + color={255,0,255})); + connect(greEquThr.y, and5.u2) + annotation (Line(points={{22,-170},{70,-170},{70,-158},{98,-158}}, + color={255,0,255})); + connect(uIsoVal, hys4.u) + annotation (Line(points={{-220,80},{-160,80},{-160,-140},{-142,-140}}, + color={0,0,127})); + connect(uIsoVal, hys3.u) + annotation (Line(points={{-220,80},{-160,80},{-160,-110},{-142,-110}}, + color={0,0,127})); + connect(tim.y, greEquThr.u) + annotation (Line(points={{-98,300},{-70,300},{-70,-170},{-2,-170}}, + color={0,0,127})); + connect(and5.y, booRep1.u) + annotation (Line(points={{122,-150},{138,-150}}, color={255,0,255})); + connect(booRep1.y, and1.u1) + annotation (Line(points={{162,-150},{180,-150},{180,-192},{0,-192},{0,-220}, + {18,-220}}, color={255,0,255})); + connect(and1.y, enaNexCel.u2) + annotation (Line(points={{42,-220},{78,-220}}, color={255,0,255})); + connect(con1.y, enaNexCel.u1) annotation (Line(points={{-38,-200},{60,-200},{60, + -212},{78,-212}}, color={255,0,255})); + connect(uTowSta, enaNexCel.u3) annotation (Line(points={{-220,-240},{60,-240}, + {60,-228},{78,-228}}, color={255,0,255})); + connect(celPosSet.y, reaRep.u) + annotation (Line(points={{122,230},{138,230}}, color={0,0,127})); + connect(uTowSta, and2.u2) annotation (Line(points={{-220,-240},{-180,-240},{-180, + 222},{-122,222}}, color={255,0,255})); + connect(and2.y, not1.u) + annotation (Line(points={{-98,230},{-62,230}}, color={255,0,255})); + connect(not1.y, enaCel.u) annotation (Line(points={{-38,230},{-22,230}}, + color={255,0,255})); + connect(lin1.y, celPosSet.u1) annotation (Line(points={{62,300},{80,300},{80,238}, + {98,238}}, color={0,0,127})); + connect(enaCel.y, enaPro.u1) annotation (Line(points={{2,230},{20,230},{20,200}, + {-120,200},{-120,-60},{-62,-60}}, color={255,0,255})); + connect(enaCel.y, disCel.u) annotation (Line(points={{2,230},{20,230},{20,200}, + {-120,200},{-120,60},{-102,60}}, color={255,0,255})); + connect(disCel.y, disPro.u1) + annotation (Line(points={{-78,60},{-60,60},{-60,50},{-42,50}}, color={255,0,255})); + connect(booRep2.y, newTowCell.u2) + annotation (Line(points={{102,-260},{158,-260}}, color={255,0,255})); + connect(enaNexCel.y, newTowCell.u1) annotation (Line(points={{102,-220},{120,-220}, + {120,-252},{158,-252}}, color={255,0,255})); + connect(booRep3.y, disExiCel.u2) + annotation (Line(points={{22,-300},{78,-300}}, color={255,0,255})); + connect(uTowSta, disExiCel.u3) annotation (Line(points={{-220,-240},{60,-240}, + {60,-308},{78,-308}}, color={255,0,255})); + connect(disPro.y, booRep3.u) annotation (Line(points={{-18,50},{0,50},{0,12},{ + -110,12},{-110,-300},{-2,-300}}, color={255,0,255})); + connect(enaPro.y, booRep2.u) annotation (Line(points={{-38,-60},{-30,-60},{-30, + -260},{78,-260}}, color={255,0,255})); + connect(disExiCel.y, newTowCell.u3) annotation (Line(points={{102,-300},{140,-300}, + {140,-268},{158,-268}}, color={255,0,255})); + connect(newTowCell.y, yTowSta) + annotation (Line(points={{182,-260},{220,-260}}, color={255,0,255})); + connect(con9.y, lin1.f1) annotation (Line(points={{-18,320},{30,320},{30,304}, + {38,304}}, color={0,0,127})); + connect(staPro.y, tim.u) annotation (Line(points={{82,370},{100,370},{100,340}, + {-140,340},{-140,300},{-122,300}}, color={255,0,255})); + connect(staPro.y, disPro.u2) annotation (Line(points={{82,370},{100,370},{100, + 340},{-140,340},{-140,42},{-42,42}}, color={255,0,255})); + connect(staPro.y, enaPro.u2) annotation (Line(points={{82,370},{100,370},{100, + 340},{-140,340},{-140,-68},{-62,-68}}, color={255,0,255})); + connect(hys3.y, booToInt.u) + annotation (Line(points={{-118,-110},{-2,-110}}, color={255,0,255})); + connect(hys4.y, booToInt1.u) + annotation (Line(points={{-118,-140},{-2,-140}},color={255,0,255})); + connect(booToInt.y, intEqu.u1) + annotation (Line(points={{22,-110},{38,-110}}, color={255,127,0})); + connect(booToInt1.y, intEqu.u2) annotation (Line(points={{22,-140},{30,-140},{ + 30,-118},{38,-118}}, color={255,127,0})); + connect(intEqu.y, fulOpe.u) + annotation (Line(points={{62,-110},{78,-110}}, color={255,0,255})); + connect(hys3.y, opeVal.u) annotation (Line(points={{-118,-110},{-20,-110},{-20, + -80},{-2,-80}}, color={255,0,255})); + connect(opeVal.y, and3.u1) + annotation (Line(points={{22,-80},{138,-80}}, color={255,0,255})); + connect(fulOpe.y, and3.u2) annotation (Line(points={{102,-110},{120,-110},{120, + -88},{138,-88}}, color={255,0,255})); + connect(and3.y, and5.u1) annotation (Line(points={{162,-80},{180,-80},{180,-130}, + {70,-130},{70,-150},{98,-150}},color={255,0,255})); + connect(staPro.y, booRep.u) annotation (Line(points={{82,370},{100,370},{100,340}, + {-140,340},{-140,-10},{-42,-10}}, color={255,0,255})); + connect(uTowSta, falEdg.u) annotation (Line(points={{-220,-240},{-180,-240},{-180, + -340},{-142,-340}}, color={255,0,255})); + connect(uTowSta, edg.u) annotation (Line(points={{-220,-240},{-180,-240},{-180, + -380},{-142,-380}}, color={255,0,255})); + connect(booRep4.y, lat.clr) annotation (Line(points={{142,-340},{180,-340},{180, + -318},{-150,-318},{-150,364},{-122,364}}, color={255,0,255})); + connect(falEdg.y, celChaSta.u1) annotation (Line(points={{-118,-340},{-100,-340}, + {-100,-360},{-82,-360}},color={255,0,255})); + connect(edg.y, celChaSta.u2) annotation (Line(points={{-118,-380},{-100,-380}, + {-100,-368},{-82,-368}}, color={255,0,255})); + connect(celChaSta.y, endStaPro.u) annotation (Line(points={{-58,-360},{38,-360}}, + color={255,0,255})); + connect(uChaCel, havCha.u) annotation (Line(points={{-220,370},{-182,370}}, + color={255,0,255})); + connect(havCha.y, lat.u) annotation (Line(points={{-158,370},{-122,370}}, + color={255,0,255})); + connect(endStaPro.y, yEndSta) + annotation (Line(points={{62,-360},{220,-360}},color={255,0,255})); + connect(endStaPro.y, booRep4.u) annotation (Line(points={{62,-360},{80,-360},{ + 80,-340},{118,-340}}, color={255,0,255})); + connect(uTowSta, and4.u2) annotation (Line(points={{-220,-240},{-180,-240},{-180, + -268},{-142,-268}}, color={255,0,255})); + connect(uChaCel, and4.u1) annotation (Line(points={{-220,370},{-190,370},{-190, + -260},{-142,-260}}, color={255,0,255})); + connect(and4.y, disExiCel1.u2) annotation (Line(points={{-118,-260},{-80,-260}, + {-80,-280},{-62,-280}}, color={255,0,255})); + connect(uTowSta, disExiCel1.u3) annotation (Line(points={{-220,-240},{-180,-240}, + {-180,-288},{-62,-288}}, color={255,0,255})); + connect(con2.y, disExiCel1.u1) annotation (Line(points={{-118,-210},{-70,-210}, + {-70,-272},{-62,-272}}, color={255,0,255})); + connect(disExiCel1.y, disExiCel.u1) annotation (Line(points={{-38,-280},{50,-280}, + {50,-292},{78,-292}}, color={255,0,255})); + connect(con9.y, celPosSet.u3) annotation (Line(points={{-18,320},{30,320},{30, + 222},{98,222}}, color={0,0,127})); + connect(enaCel.y, celPosSet.u2) + annotation (Line(points={{2,230},{98,230}}, color={255,0,255})); + connect(uIsoVal, swi.u3) annotation (Line(points={{-220,80},{-160,80},{-160,-28}, + {118,-28}}, color={0,0,127})); + connect(lat.y, staPro.u) + annotation (Line(points={{-98,370},{58,370}}, color={255,0,255})); + connect(lat.y, and1.u2) annotation (Line(points={{-98,370},{-80,370},{-80,350}, + {-170,350},{-170,-228},{18,-228}}, color={255,0,255})); + connect(lat.y, swi2.u2) annotation (Line(points={{-98,370},{-80,370},{-80,350}, + {-170,350},{-170,30},{58,30}}, color={255,0,255})); + connect(lat.y, and2.u1) annotation (Line(points={{-98,370},{-80,370},{-80,350}, + {-170,350},{-170,230},{-122,230}}, color={255,0,255})); + connect(disPro.y, holDisPro.u) annotation (Line(points={{-18,50},{0,50},{0,130}, + {-110,130},{-110,150},{-102,150}}, color={255,0,255})); + connect(havCha.y, truHol2.u) annotation (Line(points={{-158,370},{-130,370},{-130, + 100},{-102,100}}, color={255,0,255})); + connect(holDisPro.y, booRep5.u) + annotation (Line(points={{-78,150},{-42,150}}, color={255,0,255})); + connect(booRep5.y, ideDisCel.u1) + annotation (Line(points={{-18,150},{58,150}}, color={255,0,255})); + connect(truHol2.y, ideDisCel.u2) annotation (Line(points={{-78,100},{20,100},{ + 20,142},{58,142}}, color={255,0,255})); + connect(ideDisCel.y, offVal.u2) + annotation (Line(points={{82,150},{118,150}}, color={255,0,255})); + connect(con3.y, offVal.u1) annotation (Line(points={{82,190},{100,190},{100,158}, + {118,158}}, color={0,0,127})); + connect(uIsoVal, offVal.u3) annotation (Line(points={{-220,80},{100,80},{100,142}, + {118,142}}, color={0,0,127})); + connect(booRep5.y, swi3.u2) annotation (Line(points={{-18,150},{40,150},{40,100}, + {158,100}}, color={255,0,255})); + connect(offVal.y, swi3.u1) annotation (Line(points={{142,150},{150,150},{150,108}, + {158,108}}, color={0,0,127})); + connect(swi.y, swi3.u3) annotation (Line(points={{142,-20},{150,-20},{150,92}, + {158,92}}, color={0,0,127})); + connect(swi3.y, yIsoVal) + annotation (Line(points={{182,100},{220,100}}, color={0,0,127})); +annotation ( + defaultComponentName="towCelStaPro", + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-200,-400},{200,400}}), graphics={ + Rectangle( + extent={{-138,-62},{178,-198}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{12,-180},{144,-204}}, + pattern=LinePattern.None, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textColor={0,0,127}, + horizontalAlignment=TextAlignment.Right, + textString="Check if all enabled isolation valves + have been fully open")}), + Icon(coordinateSystem(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={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-98,88},{-54,76}}, + textColor={255,0,255}, + textString="uChaCel"), + Text( + extent={{-100,6},{-62,-6}}, + textColor={0,0,127}, + textString="uIsoVal"), + Text( + extent={{-100,-74},{-56,-86}}, + textColor={255,0,255}, + textString="uTowSta"), + Text( + extent={{62,66},{100,54}}, + textColor={0,0,127}, + textString="yIsoVal"), + Text( + extent={{56,8},{100,-4}}, + textColor={255,0,255}, + textString="yTowSta"), + Text( + extent={{56,-52},{100,-64}}, + textColor={255,0,255}, + textString="yEndSta")}), +Documentation(info=" +

                      +This block outputs new status vector of cells. When staging up cells, the cells +should be enabled only when their supply isolation valves have been proven fully +open. It is implemented according to ASHRAE Guideline36-2021, +section 5.20.12.1, item e and f which specifies the process of enabling and disabling +tower fan cells. +

                      +
                        +
                      • +When tower fan cells need to be enabled, which means that it is in the staging process +(not all uChaCel are false) and the cells that should change status (uChaCel=true) +are not enabled (uTowSta=true), the supply isolation valves position +(uIsoVal) of the enabling cells should change to +fully open with moving time (nominal valve timing) chaTowCelIsoTim. +Once the enabling supply isolation valves have been fully open, then enable +the additional fans. +
                      • +
                      • +When disabling tower cells, command the fan off and shut its supply isolation +valve, and outlet isolation valves if provided. +
                      • +
                      +", revisions=" +
                        +
                      • +September 12, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end StageProcesses; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/CellsNumber.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/CellsNumber.mo new file mode 100644 index 00000000000..5015d9d7bd6 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/CellsNumber.mo @@ -0,0 +1,193 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation; +model CellsNumber + "Validation sequence of identifying total number of enabling cells" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.CellsNumber + enaTowCel( + nConWatPum=2, + nTowCel=4) "Find number of enabling cells" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse wseSta( + width=0.15, + period=3600, + shift=300) "Water side economizer status" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp chiStaGen( + height=1.2, + duration=3600, + offset=1) "Generate chiller stage" + annotation (Placement(transformation(extent={{-100,40},{-80,60}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger chiStaSet "Chiller stage setpoint" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant curChiSta( + k=1) "Current chiller stage" + annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + width=0.75, + period=3600) "Boolean pulse" + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); + Buildings.Controls.OBC.CDL.Logical.Not StaTow "Stage tower cells" + annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conWatPumSpe[2]( + k=fill(0.5, 2)) "Condenser water pump speed" + annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( + k=false) + "Constant false" + annotation (Placement(transformation(extent={{20,-110},{40,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1(k=true) + "Constant false" + annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); +equation + connect(chiStaGen.y, chiStaSet.u) + annotation (Line(points={{-78,50},{-62,50}}, color={0,0,127})); + connect(curChiSta.y, enaTowCel.uChiSta) + annotation (Line(points={{-38,90},{40,90},{40,9},{58,9}}, color={255,127,0})); + connect(chiStaSet.y, enaTowCel.uChiStaSet) + annotation (Line(points={{-38,50},{34,50},{34,6},{58,6}}, color={255,127,0})); + connect(booPul2.y, StaTow.u) + annotation (Line(points={{-78,10},{-62,10}}, color={255,0,255})); + connect(StaTow.y, enaTowCel.uTowStaCha) + annotation (Line(points={{-38,10},{28,10},{28,2},{58,2}}, color={255,0,255})); + connect(wseSta.y, enaTowCel.uWse) + annotation (Line(points={{-38,-30},{-8,-30},{-8,-1},{58,-1}}, color={255,0,255})); + connect(conWatPumSpe.y, enaTowCel.uConWatPumSpe) + annotation (Line(points={{-38,-100},{8,-100},{8,-9},{58,-9}}, color={0,0,127})); + connect(con.y, enaTowCel.uEnaPla) annotation (Line(points={{42,-100},{50,-100}, + {50,-3},{58,-3}}, color={255,0,255})); + connect(con1.y, enaTowCel.uPla) annotation (Line(points={{-58,-70},{40,-70},{40, + -7},{58,-7}}, color={255,0,255})); +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/CellsNumber.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.CellsNumber. +

                      +

                      +It shows the calculation of total number of tower cells when the plant is +operating in scenarios including: +

                      +
                        +
                      • +1 chiller only, +
                      • +
                      • +1 chiller and waterside economizer together, +
                      • +
                      • +in the chiller staging process but before staging up the tower cells, +
                      • +
                      • +in the chiller staging process after staging up the tower cell. +
                      • +
                      +

                      +Note in this example, the total number of tower cells is specified +according to following table. It is defined by the +parameter towCelOnSet[totSta]. +

                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      Plant stage IndexNumber of enabled cells
                      010
                      WSE22
                      1 chiller32
                      1 chiller + WSE44
                      2 chillers54
                      2 chillers + WSE64
                      +
                      +

                      +The example shows following process: +

                      +
                        +
                      • +Before 300 seconds, the chiller stage equals to its setpoint (1) +and the economizer is not enabled. Thus the plant stage index is 3. +The total number of tower cells should be towCelOnSet[3], +which is 2. +
                      • +
                      • +Between 300 seconds and 840 seconds, the chiller stage still equals +to its setpoint (1), but the ecnomizer is enabled. Thus the plant +stage index is 4. The total number of tower cells should be +towCelOnSet[4], which is 4. +
                      • +
                      • +Between 840 seconds and 1500 seconds, the economizer is disabled and +the chiller stage keeps equal to its setpoint at 1. Thus the plant +stage index is 3 and the total number of tower cells should be +towCelOnSet[3], which is 2. +
                      • +
                      • +Between 1500 seconds and 2700 seconds, the economizer keeps +disabled. However, the chiller stage setpoint changes to be +different from its current stage index. This means the plant +is in the chiller staging process. Since the input +uTowStaCha is false, it means the staging process +has not yet into the subprocess to staging up tower cells. +Thus the plant stage is still 3 and the total number of tower cells +should be towCelOnSet[3], which is 2. +
                      • +
                      • +After 2700 seconds, the economizer keeps disabled and it is still +in the chiller staging process. However, the input +uTowStaCha becomes true, it means the staging process +requires staging up tower cells. The plant stage becomes 5. +The total number of tower cells should be towCelOnSet[5], +which is 4. +
                      • +
                      + +", revisions=" +
                        +
                      • +September 12, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-120,-120},{120,120}}))); +end CellsNumber; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/ChangeCells.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/ChangeCells.mo new file mode 100644 index 00000000000..6f9d2e98ba5 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/ChangeCells.mo @@ -0,0 +1,90 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation; +model ChangeCells + "Validation sequence of identifying cells that should change status" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.ChangeCells + enaTowCel( + nTowCel=4) "Find enabling cells" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.TimeTable celNum( + table=[0, 2; + 1200,2; + 2000,3; + 2800,2; + 3200,1], + period=3600) "Number of cell that should be enabled" + annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre[4] "Current tower cell status" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + +equation + connect(celNum.y[1], enaTowCel.uCelNum) annotation (Line(points={{-38,40},{0,40}, + {0,4},{18,4}}, color={255,127,0})); + connect(pre.y, enaTowCel.uTowSta) annotation (Line(points={{-38,-40},{0,-40},{ + 0,-4},{18,-4}}, color={255,0,255})); + connect(enaTowCel.yTowSta, pre.u) annotation (Line(points={{42,4},{60,4},{60,-60}, + {-70,-60},{-70,-40},{-62,-40}}, color={255,0,255})); +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/ChangeCells.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.ChangeCells. +It shows the process of enabling and disabling tower cells +according to the input uCelNum that specifies +total number of cells that should be enabled. +

                      +

                      +Note that this sequence assumes that the cells are enabled +sequentially as 1, 2, 3, etc. Thus, for example if it +requires two enabled cells, cell 1 and 2 will be enabled. +While if it requires three enabled cell, cell 1, 2 and 3 will +be enabled. +

                      +
                        +
                      • +Before 2000 seconds, the input uCelNum equals 2. +Thus the first two cells are enabled, uTowSta[1]=true +and uTowSta[2]=true. +
                      • +
                      • +From 2000 seconds to 2800 seconds, the input uCelNum +equals 3. +Thus the first three cells are enabled, uTowSta[1]=true, +uTowSta[2]=true, and uTowSta[3]=true +
                      • +
                      • +From 2800 seconds to 3200 seconds, the input uCelNum +becomes 2 again. +Thus the first two cells are enabled, uTowSta[1]=true, +and uTowSta[2]=true. The third cell becomes disabled, +uTowSta[3]=false. +
                      • +
                      • +After 3200 seconds, the input uCelNum equals 1. +Thus only one cell should be enabled, uTowSta[1]=true. +
                      • +
                      +", revisions=" +
                        +
                      • +July 26, 2022, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-120,-120},{120,120}}))); +end ChangeCells; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/StageProcesses.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/StageProcesses.mo new file mode 100644 index 00000000000..528b7d84f6b --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/StageProcesses.mo @@ -0,0 +1,137 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation; +model StageProcesses + "Validation sequence of tower cells staging process" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.StageProcesses + enaPro(nTowCel=4) "Enable tower cells process" + annotation (Placement(transformation(extent={{60,30},{80,50}}))); + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.StageProcesses + disPro(nTowCel=4) "Disable tower cells process" + annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con[4]( + final k=fill(false,4)) "Constant zero" + annotation (Placement(transformation(extent={{-100,10},{-80,30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con2[4]( + final k={false,true,true,false}) + "Enabling cells index" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + Buildings.Controls.OBC.CDL.Logical.Not staUp1 "Chiller stage up status" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + final width=0.1, + final period=3800) "Boolean pulse" + annotation (Placement(transformation(extent={{-140,50},{-120,70}}))); + Buildings.Controls.OBC.CDL.Logical.Switch logSwi[4] "Logical switch" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + final nout=4) "Replicate boolean input" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol[4]( + final samplePeriod=fill(10, 4)) "Isolation valve actual position" + annotation (Placement(transformation(extent={{100,30},{120,50}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre[4] "Tower cell actual status" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol1[4](final + samplePeriod=fill(10, 4)) "Isolation valve actual position" + annotation (Placement(transformation(extent={{100,-50},{120,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre1[4]( + pre_u_start={false,true,true,false}) "Tower cell actual status" + annotation (Placement(transformation(extent={{100,-90},{120,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi[4] "Logical switch" + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1[4]( + final k={0,1,1,0}) + "Initial isolation valve positions" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); + +equation + connect(booPul2.y, staUp1.u) + annotation (Line(points={{-118,60},{-102,60}}, color={255,0,255})); + connect(enaPro.yIsoVal, zerOrdHol.u) annotation (Line(points={{82,46},{92,46}, + {92,40},{98,40}}, color={0,0,127})); + connect(zerOrdHol.y, enaPro.uIsoVal) annotation (Line(points={{122,40},{140,40}, + {140,20},{50,20},{50,40},{58,40}}, color={0,0,127})); + connect(con2.y, logSwi.u1) + annotation (Line(points={{-38,100},{-20,100},{-20,68},{-2,68}}, color={255,0,255})); + connect(con.y, logSwi.u3) + annotation (Line(points={{-78,20},{-20,20},{-20,52},{-2,52}}, color={255,0,255})); + connect(logSwi.y, enaPro.uChaCel) annotation (Line(points={{22,60},{30,60},{30, + 48},{58,48}}, color={255,0,255})); + connect(booRep.y, logSwi.u2) + annotation (Line(points={{-38,60},{-2,60}},color={255,0,255})); + connect(staUp1.y, booRep.u) + annotation (Line(points={{-78,60},{-62,60}}, color={255,0,255})); + connect(enaPro.yTowSta, pre.u) annotation (Line(points={{82,40},{88,40},{88,0}, + {98,0}}, color={255,0,255})); + connect(pre.y, enaPro.uTowSta) annotation (Line(points={{122,0},{140,0},{140,-20}, + {40,-20},{40,32},{58,32}}, color={255,0,255})); + connect(disPro.yIsoVal, zerOrdHol1.u) annotation (Line(points={{82,-34},{92,-34}, + {92,-40},{98,-40}}, color={0,0,127})); + connect(disPro.yTowSta, pre1.u) annotation (Line(points={{82,-40},{88,-40},{88, + -80},{98,-80}}, color={255,0,255})); + connect(pre1.y, disPro.uTowSta) annotation (Line(points={{122,-80},{140,-80},{ + 140,-100},{40,-100},{40,-48},{58,-48}}, color={255,0,255})); + connect(logSwi.y, disPro.uChaCel) annotation (Line(points={{22,60},{30,60},{30, + -32},{58,-32}}, color={255,0,255})); + connect(swi.y, disPro.uIsoVal) + annotation (Line(points={{22,-40},{58,-40}}, color={0,0,127})); + connect(booRep.y, swi.u2) annotation (Line(points={{-38,60},{-30,60},{-30,-40}, + {-2,-40}}, color={255,0,255})); + connect(con1.y, swi.u3) annotation (Line(points={{-78,-70},{-40,-70},{-40,-48}, + {-2,-48}}, color={0,0,127})); + connect(zerOrdHol1.y, swi.u1) annotation (Line(points={{122,-40},{140,-40},{140, + -60},{-20,-60},{-20,-32},{-2,-32}}, color={0,0,127})); + +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/StageProcesses.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.StageProcesses. +It demonstrates the process of enabling (enaPro) and +disabling (disPro) tower cells. +

                      +
                        +
                      • +For enabling process in instance enaPro, at 380 seconds, +the input uChaCel[2] and uChaCel[3] are +true, indicating that the status of cell 2 and 3 should be changed. +As the cell 2 and 3 are initially disabled, thus the cell 2 and 3 +are being enabled. After the isolation valve of cell 2 and 3 being +slowly open from 380 seconds to fully open at 470 seconds, the two +cells are enabled. +
                      • +
                      • +For disabling process in instance disPro, at 380 seconds, +the input uChaCel[2] and uChaCel[3] are +true, indicating that the status of cell 2 and 3 should be changed. +As the cell 2 and 3 are initially enabled, thus the cell 2 and 3 +are being disabled. Different from the enabling process, in the +disabling process, it shuts the isolation valve with no delay. +At the meantime, the two cells are disabled. +
                      • +
                      +", revisions=" +
                        +
                      • +September 12, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-160,-120},{160,120}}))); +end StageProcesses; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/package.mo new file mode 100644 index 00000000000..2d2ed7afcdd --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences; +package Validation "Collection of validation models" + +annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})}), +preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +")); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/package.order new file mode 100644 index 00000000000..94c95466a73 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/package.order @@ -0,0 +1,3 @@ +CellsNumber +ChangeCells +StageProcesses diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/package.mo new file mode 100644 index 00000000000..64e7c0be431 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/package.mo @@ -0,0 +1,45 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging; +package Subsequences "Control subsequences of cooling tower staging" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains subsequences for cooling tower staging. +The implementation is based on section 5.20.12.1 in ASHRAE Guideline36-2021. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end Subsequences; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/package.order new file mode 100644 index 00000000000..94d113f9fd8 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/package.order @@ -0,0 +1,4 @@ +CellsNumber +ChangeCells +StageProcesses +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Validation/Controller.mo new file mode 100644 index 00000000000..f8280bfb124 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Validation/Controller.mo @@ -0,0 +1,154 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Validation; +model Controller "Validation sequence of tower cell controller" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Controller + towSta( + final nTowCel=2, + final nConWatPum=2, + final totSta=5, + final staVec={0,0.5,1,1.5,2}, + final towCelOnSet={0,1,1,2,2}) + "Cooling tower staging control, specifies total number of cells and the staging process" + annotation (Placement(transformation(extent={{40,-20},{60,0}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre1[2] "Actual cells status" + annotation (Placement(transformation(extent={{80,-24},{100,-4}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol[2]( + final samplePeriod=fill(2, 2)) "Actual isolation valve positions" + annotation (Placement(transformation(extent={{80,-80},{100,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse wseSta( + final width=0.15, + final period=3600, + final shift=300) "Water side economizer status" + annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp chiStaGen( + final height=1.2, + final duration=3600, + final offset=1) "Generate chiller stage" + annotation (Placement(transformation(extent={{-120,30},{-100,50}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger chiStaSet + "Chiller stage setpoint" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + final width=0.75, + final period=3600) "Boolean pulse" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); + Buildings.Controls.OBC.CDL.Logical.Not StaTow "Stage tower cells" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conWatPumSpe[2]( + final k=fill(0.5, 2)) "Condenser water pump speed" + annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1( + final k=false) + "Constant false" + annotation (Placement(transformation(extent={{-120,110},{-100,130}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant chiStaSet2( + final k=1) + "Chiller stage setpoint" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con2(k=true) + "Constant false" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); +equation + connect(pre1.y, towSta.uTowSta) + annotation (Line(points={{102,-14},{120,-14},{120,10},{-14,10},{-14,-19},{38, + -19}}, color={255,0,255})); + connect(towSta.yIsoVal, zerOrdHol.u) + annotation (Line(points={{62,-10},{70,-10},{70,-70},{78,-70}}, color={0,0,127})); + connect(zerOrdHol.y, towSta.uIsoVal) + annotation (Line(points={{102,-70},{120,-70},{120,-90},{-20,-90},{-20,-17},{ + 38,-17}}, color={0,0,127})); + connect(chiStaGen.y,chiStaSet. u) + annotation (Line(points={{-98,40},{-82,40}}, color={0,0,127})); + connect(booPul2.y,StaTow. u) + annotation (Line(points={{-98,0},{-82,0}}, color={255,0,255})); + connect(chiStaSet.y, towSta.uChiStaSet) annotation (Line(points={{-58,40},{20, + 40},{20,-3},{38,-3}}, color={255,127,0})); + connect(StaTow.y, towSta.uTowStaCha) annotation (Line(points={{-58,0},{-40,0}, + {-40,-5},{38,-5}}, color={255,0,255})); + connect(wseSta.y, towSta.uWse) annotation (Line(points={{-98,-40},{-34,-40},{-34, + -7},{38,-7}}, color={255,0,255})); + connect(conWatPumSpe.y, towSta.uConWatPumSpe) annotation (Line(points={{-58,-100}, + {-26,-100},{-26,-13},{38,-13}}, color={0,0,127})); + connect(towSta.yTowSta, pre1.u) annotation (Line(points={{62,-14},{78,-14}}, + color={255,0,255})); + connect(con1.y, towSta.uEnaPla) annotation (Line(points={{-98,120},{0,120},{0, + -9},{38,-9}}, color={255,0,255})); + connect(chiStaSet2.y, towSta.uChiSta) annotation (Line(points={{-58,80},{30,80}, + {30,-1},{38,-1}}, color={255,127,0})); + connect(con2.y, towSta.uPla) annotation (Line(points={{-58,-60},{-30,-60},{-30, + -11},{38,-11}}, color={255,0,255})); +annotation (experiment( + StopTime=3600, + Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Validation/Controller.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Controller. +It shows the process of staging tower cells when there is chiller stage +setpoint change and the enabling-disabling waterside economizer. +

                      +
                        +
                      • +At begining, the current chiller stage is 1 and it starts to staging up tower cell 1. +During the begining stage, according to the vector staVec current plant +stage is 1 (the 3rd element of vector staVec). Thus according to the +vector towCelOnSet, +the total number of cell is 1. It takes 90 seconds to fully open the isolation +valve 1 (yIsoVal[1]=1) and then the cell 1 becomes enabled +(uTowSta[1]=true) at 90 seconds. +
                      • +
                      • +At 300 seconds, the waterside economizer is enabled. Thus the current plant stage +is 1.5 (the 4th element of vector staVec). Thus according to the +vector towCelOnSet, the total number of cell is 2. It takes 90 +seconds to fully open the isolation valve 2 (yIsoVal[2]=1) and +then the cell 2 becomes enabled (uTowSta[2]=true) at 390 seconds. +
                      • +
                      • +At 840 seconds, the waterside economizer becomes disabled. Thus the current +plant stage changes to 1 (the 3rd element of vector staVec). +Thus according to the vector towCelOnSet, the total number of +cell is 1. The isolation valve 2 becomes closed (yIsoVal[2]=0) +and the cell 2 becomes disabled (uTowSta[2]=false) at 840 +seconds. +
                      • +
                      • +At 1500 seconds, the chiller stage setpoint changes to 2 and the current stage +is still 1. Therefore the chiller plant begins staging up. However, the plant +staging up process has not yet been into the step of staging up the tower +(uTowStaCha=false). Thus there is no change to the tower cells +and their valves. +
                      • +
                      • +At 2700 seconds, it is still in the plant staging up process and it now requires +staging up tower cells. The plant stage is 2 (the 5th element of vector +staVec). Thus according to the vector towCelOnSet, +the total number of cell is 2. It takes 90 seconds to fully open the isolation +valve 2 (yIsoVal[2]=1) and then the cell 2 becomes enabled +(uTowSta[2]=true) at 2790 seconds. +
                      • +
                      +", revisions=" +
                        +
                      • +September 12, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-140,-160},{140,160}}))); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Validation/package.mo new file mode 100644 index 00000000000..bf670594143 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging; +package Validation "Collection of validation models" + +annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})}), +preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +")); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Validation/package.order new file mode 100644 index 00000000000..8cba75e31a7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Validation/package.order @@ -0,0 +1 @@ +Controller diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/package.mo new file mode 100644 index 00000000000..9f3e5043bc0 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/package.mo @@ -0,0 +1,45 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers; +package Staging "Package of sequences for cooling tower staging" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains sequences for cooling tower staging. +The implementation is based on section 5.20.12.1 in ASHRAE Guideline36-2021. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end Staging; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/package.order new file mode 100644 index 00000000000..9ffbffcb990 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/package.order @@ -0,0 +1,3 @@ +Controller +Subsequences +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WaterLevel.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WaterLevel.mo new file mode 100644 index 00000000000..7a8a72cc5e3 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WaterLevel.mo @@ -0,0 +1,51 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation; +model WaterLevel + "Validation sequence of cooling tower make-up water control" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.WaterLevel + makUpWat( + final watLevMin=0.7, + final watLevMax=1.2) "Makeup water level control" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Sin watLev( + final amplitude=1, + final freqHz=1/7200, + final offset=0.3) "Measured water level" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + +equation + connect(watLev.y, makUpWat.watLev) + annotation (Line(points={{-18,0},{18,0}}, color={0,0,127})); + +annotation (experiment(StopTime=3600.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WaterLevel.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.WaterLevel. +

                      +", revisions=" +
                        +
                      • +September 16, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}))); +end WaterLevel; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithWSE.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithWSE.mo new file mode 100644 index 00000000000..d18b795868e --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithWSE.mo @@ -0,0 +1,291 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation; +model WithWSE + "Validation sequence of controlling tower of a plant with waterside economizer" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Controller + towCon( + nChi=2, + nTowCel=2, + nConWatPum=2, + have_WSE=true, + kWSE=0.5, + TiWSE=10) + "Cooling tower controller" + annotation (Placement(transformation(extent={{200,340},{220,380}}))); + +protected + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse wseSta( + final width=0.15, + final period=3600) + "Waterside economizer enabling status" + annotation (Placement(transformation(extent={{-360,200},{-340,220}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp plaCap( + final height=8e5, + final duration=3600, + final offset=1e5) "Real operating chiller plant capacity" + annotation (Placement(transformation(extent={{-360,70},{-340,90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin conSup( + final amplitude=2, + final freqHz=1/1800, + final offset=273.15 + 29) "Condenser water supply temperature" + annotation (Placement(transformation(extent={{-360,-190},{-340,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram2( + final height=3, + final duration=3600, + final startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-360,-230},{-340,-210}}))); + Buildings.Controls.OBC.CDL.Reals.Add conWatSupTem + "Condenser water supply temperature" + annotation (Placement(transformation(extent={{-300,-210},{-280,-190}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram3( + final height=3, + final duration=3600, + final startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-360,-150},{-340,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin conRet2( + final amplitude=2, + final freqHz=1/1800, + final offset=273.15 + 28) "Condenser water return temperature" + annotation (Placement(transformation(extent={{-360,-110},{-340,-90}}))); + Buildings.Controls.OBC.CDL.Reals.Add conWatRetTem + "Condenser water return temperature" + annotation (Placement(transformation(extent={{-300,-130},{-280,-110}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp conWatPumSpe1[2]( + final height=fill(0.5, 2), + final duration=fill(3600, 2), + final startTime=fill(300, 2)) "Measured condenser water pump speed" + annotation (Placement(transformation(extent={{-300,-170},{-280,-150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe1(final k=0.5) + "Head pressure control maximum tower speed" + annotation (Placement(transformation(extent={{-320,50},{-300,70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe2(final k=0) + "Head pressure control maximum tower speed" + annotation (Placement(transformation(extent={{-360,-10},{-340,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant towFanSpe3(final k=0.2) + "Measured tower fan speed" + annotation (Placement(transformation(extent={{-320,170},{-300,190}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatSupSet( + final k=273.15 + 6.5) + "Chilled water supply setpoint" + annotation (Placement(transformation(extent={{-360,-50},{-340,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta1( + final width=0.4, + final period=3600) "Chiller one enabling status" + annotation (Placement(transformation(extent={{-360,260},{-340,280}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiTwoSta(final k=false) + "Chiller two enabling status" + annotation (Placement(transformation(extent={{-360,230},{-340,250}}))); + Buildings.Controls.OBC.CDL.Logical.Or or3 "Logical or" + annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Or or4 "Logical or" + annotation (Placement(transformation(extent={{-160,-30},{-140,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Not chiOneSta "Chiller one status" + annotation (Placement(transformation(extent={{-320,260},{-300,280}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( + final k=0) "Constant zero" + annotation (Placement(transformation(extent={{-320,10},{-300,30}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Logical switch" + annotation (Placement(transformation(extent={{-240,30},{-220,50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch chiOneLoa "Chiller one load" + annotation (Placement(transformation(extent={{-260,320},{-240,340}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiTwoLoa(final k=0) + "Chiller two load" + annotation (Placement(transformation(extent={{-360,300},{-340,320}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( + final amplitude=0.2*1e4, + final freqHz=1/1200, + final offset=1.1*1e4, + final startTime=180) "Chiller load" + annotation (Placement(transformation(extent={{-360,340},{-340,360}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiSup( + final amplitude=0.5, + final freqHz=1/1800, + final offset=273.15 + 6.7) "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-360,140},{-340,160}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1( + final height=0, + final duration=3600, + final startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-360,100},{-340,120}}))); + Buildings.Controls.OBC.CDL.Reals.Add chiWatSupTem + "Chilled water supply temperature" + annotation (Placement(transformation(extent={{-260,120},{-240,140}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger chiSta "Chiller stage " + annotation (Placement(transformation(extent={{-140,-240},{-120,-220}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay towStaUp( + final delayTime=30) "Cooling tower stage up" + annotation (Placement(transformation(extent={{-140,-330},{-120,-310}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol[2](final + samplePeriod=fill(5, 2)) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{280,320},{300,340}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre1[2] "Break algebraic" + annotation (Placement(transformation(extent={{280,370},{300,390}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp watLev( + final height=1.2, + final duration=3600, + final offset=0.5) "Water level in cooling tower" + annotation (Placement(transformation(extent={{140,50},{160,70}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant chiStaSet( + final k=1) "Chiller stage setpoint" + annotation (Placement(transformation(extent={{-140,-270},{-120,-250}}))); + Buildings.Controls.OBC.CDL.Logical.Not wseSta1 "Water side economizer status" + annotation (Placement(transformation(extent={{-320,200},{-300,220}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con3(final k=false) + "Constant false" + annotation (Placement(transformation(extent={{-80,-150},{-60,-130}}))); +equation + connect(ram2.y, conWatSupTem.u2) annotation (Line(points={{-338,-220},{-320,-220}, + {-320,-206},{-302,-206}}, color={0,0,127})); + connect(conSup.y, conWatSupTem.u1) annotation (Line(points={{-338,-180},{-320, + -180},{-320,-194},{-302,-194}}, color={0,0,127})); + connect(conRet2.y, conWatRetTem.u1) annotation (Line(points={{-338,-100},{-320, + -100},{-320,-114},{-302,-114}}, color={0,0,127})); + connect(ram3.y, conWatRetTem.u2) annotation (Line(points={{-338,-140},{-320,-140}, + {-320,-126},{-302,-126}}, color={0,0,127})); + connect(chiSta1.y, chiOneSta.u) + annotation (Line(points={{-338,270},{-322,270}}, color={255,0,255})); + connect(chiOneSta.y, swi1.u2) annotation (Line(points={{-298,270},{-280,270},{ + -280,40},{-242,40}}, color={255,0,255})); + connect(hpTowSpe1.y, swi1.u1) + annotation (Line(points={{-298,60},{-260,60},{-260,48},{-242,48}}, + color={0,0,127})); + connect(zer.y, swi1.u3) + annotation (Line(points={{-298,20},{-260,20},{-260,32},{-242,32}}, + color={0,0,127})); + connect(chiTwoLoa.y, chiOneLoa.u3) annotation (Line(points={{-338,310},{-320,310}, + {-320,322},{-262,322}}, color={0,0,127})); + connect(sin.y, chiOneLoa.u1) annotation (Line(points={{-338,350},{-320,350},{-320, + 338},{-262,338}}, color={0,0,127})); + connect(chiOneSta.y, chiOneLoa.u2) annotation (Line(points={{-298,270},{-280,270}, + {-280,330},{-262,330}}, color={255,0,255})); + connect(chiSup.y, chiWatSupTem.u1) annotation (Line(points={{-338,150},{-320,150}, + {-320,136},{-262,136}}, color={0,0,127})); + connect(ram1.y, chiWatSupTem.u2) annotation (Line(points={{-338,110},{-320,110}, + {-320,124},{-262,124}}, color={0,0,127})); + connect(chiOneLoa.y, towCon.chiLoa[1]) annotation (Line(points={{-238,330},{ + -40,330},{-40,378.5},{198,378.5}}, color={0,0,127})); + connect(chiTwoLoa.y, towCon.chiLoa[2]) annotation (Line(points={{-338,310},{ + -40,310},{-40,379.5},{198,379.5}}, color={0,0,127})); + connect(chiOneSta.y, towCon.uChi[1]) annotation (Line(points={{-298,270},{-30, + 270},{-30,376.5},{198,376.5}}, color={255,0,255})); + connect(chiTwoSta.y, towCon.uChi[2]) annotation (Line(points={{-338,240},{-30, + 240},{-30,377.5},{198,377.5}}, color={255,0,255})); + connect(towFanSpe3.y,towCon.uFanSpe) annotation (Line(points={{-298,180},{ + -10,180},{-10,373},{198,373}}, color={0,0,127})); + connect(chiWatSupTem.y, towCon.TChiWatSup) annotation (Line(points={{-238,130}, + {0,130},{0,371},{198,371}}, color={0,0,127})); + connect(chiWatSupSet.y, towCon.TChiWatSupSet) annotation (Line(points={{-338, + -40},{10,-40},{10,369},{198,369}}, color={0,0,127})); + connect(plaCap.y, towCon.reqPlaCap) annotation (Line(points={{-338,80},{20,80}, + {20,367},{198,367}}, color={0,0,127})); + connect(swi1.y, towCon.uMaxTowSpeSet[1]) annotation (Line(points={{-218,40},{ + 30,40},{30,364.5},{198,364.5}}, color={0,0,127})); + connect(hpTowSpe2.y, towCon.uMaxTowSpeSet[2]) annotation (Line(points={{-338,0}, + {40,0},{40,365.5},{198,365.5}}, color={0,0,127})); + connect(or3.y, towCon.uPla) annotation (Line(points={{-58,-70},{60,-70},{60,361}, + {198,361}}, color={255,0,255})); + connect(conWatRetTem.y, towCon.TConWatRet) annotation (Line(points={{-278, + -120},{70,-120},{70,359},{198,359}}, color={0,0,127})); + connect(conWatPumSpe1.y, towCon.uConWatPumSpe) annotation (Line(points={{-278, + -160},{80,-160},{80,357},{198,357}}, color={0,0,127})); + connect(conWatSupTem.y, towCon.TConWatSup) annotation (Line(points={{-278, + -200},{90,-200},{90,355},{198,355}}, color={0,0,127})); + connect(chiOneSta.y, chiSta.u) annotation (Line(points={{-298,270},{-188,270}, + {-188,-230},{-142,-230}}, color={255,0,255})); + connect(chiSta.y, towCon.uChiSta) annotation (Line(points={{-118,-230},{100, + -230},{100,351},{198,351}}, color={255,127,0})); + connect(chiOneSta.y, towStaUp.u) annotation (Line(points={{-298,270},{-188,270}, + {-188,-320},{-142,-320}}, color={255,0,255})); + connect(towCon.yIsoVal, zerOrdHol.u) annotation (Line(points={{222,365},{260,365}, + {260,330},{278,330}}, color={0,0,127})); + connect(zerOrdHol.y, towCon.uIsoVal) annotation (Line(points={{302,330},{320, + 330},{320,300},{150,300},{150,343},{198,343}}, color={0,0,127})); + connect(watLev.y, towCon.watLev) annotation (Line(points={{162,60},{170,60},{ + 170,341},{198,341}}, color={0,0,127})); + connect(towCon.yTowSta, pre1.u) annotation (Line(points={{222,355},{250,355},{ + 250,380},{278,380}}, color={255,0,255})); + connect(pre1.y, towCon.uTowSta) annotation (Line(points={{302,380},{340,380}, + {340,280},{50,280},{50,363},{198,363}},color={255,0,255})); + connect(towStaUp.y, towCon.uTowStaCha) annotation (Line(points={{-118,-320},{ + 120,-320},{120,347},{198,347}}, color={255,0,255})); + connect(chiStaSet.y, towCon.uChiStaSet) annotation (Line(points={{-118,-260}, + {108,-260},{108,349},{198,349}},color={255,127,0})); + connect(wseSta.y, wseSta1.u) + annotation (Line(points={{-338,210},{-322,210}}, color={255,0,255})); + connect(wseSta1.y, towCon.uWse) annotation (Line(points={{-298,210},{-200,210}, + {-200,375},{198,375}}, color={255,0,255})); + connect(con3.y, towCon.uEnaPla) annotation (Line(points={{-58,-140},{94,-140}, + {94,353},{198,353}}, color={255,0,255})); + connect(chiOneSta.y, or4.u1) annotation (Line(points={{-298,270},{-188,270},{-188, + -20},{-162,-20}}, color={255,0,255})); + connect(chiTwoSta.y, or4.u2) annotation (Line(points={{-338,240},{-194,240},{-194, + -28},{-162,-28}}, color={255,0,255})); + connect(wseSta1.y, or3.u2) annotation (Line(points={{-298,210},{-200,210},{-200, + -78},{-82,-78}}, color={255,0,255})); + connect(or4.y, or3.u1) annotation (Line(points={{-138,-20},{-120,-20},{-120,-70}, + {-82,-70}}, color={255,0,255})); +annotation (experiment(StopTime=3500.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithWSE.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Controller. +It demonstates the cooling tower control of a less coupled chiller plant that has +two chillers with waterside economizer. +

                      +
                        +
                      • +At begining, the water level is lower than the minimum thus the tower starts to +adding water (yMakUp). When the water level becomes greater than the +maximum, it stops adding water at 1500 seconds. +
                      • +
                      • +The plant is enabled to waterside economizer mode at 540 seconds. The lead tower +cell becomes enabled when there is any condenser water pump enabled. +
                      • +
                      • +After 300 seconds (chaTowCelIsoTim) at 840 seconds, it turns on the +leading cell. +
                      • +
                      • +The tower fan speed is controlled under the waterside economizer only mode. The +direct-acting PID controls the chilled water supply temperature at setpoint. +
                      • +
                      • +At 1440 seconds, the chiller 1 becomes enabled. Thus, the tower fan speed is then +controlled under the integrated operation mode. However, before switching to the +integrated operation mode, the fan hold its speed at the maximum. According to +the vector towCelOnSet, which specifies number of cells at each plant +stage (staVec), two tower cell should be enabled. Thus, after chiller +1 being enabled at 1440 seconds, when the 300 seconds is passed +(chaTowCelIsoTim), the cell 2 become enabled at 1740 seconds. +
                      • +
                      • +Both cells run at the maximum speed till 2040 seconds, the fan speed is then +controlled under integrated mode. +
                      • +
                      +", revisions=" +
                        +
                      • +September 16, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-400,-420},{400,420}}))); +end WithWSE; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithoutWSE.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithoutWSE.mo new file mode 100644 index 00000000000..e3d406e851a --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithoutWSE.mo @@ -0,0 +1,268 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation; +model WithoutWSE + "Validation sequence of controlling tower of a plant without waterside economizer" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Controller + towCon( + nChi=2, + totSta=3, + nTowCel=2, + nConWatPum=2, + have_WSE=false, + kWSE=0.5, + TiWSE=10, + staVec={0,1,2}, + towCelOnSet={0,1,2}) + "Cooling tower controller" + annotation (Placement(transformation(extent={{200,340},{220,380}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp plaCap( + final height=8e5, + final duration=3600, + final offset=1e5) "Real operating chiller plant capacity" + annotation (Placement(transformation(extent={{-360,130},{-340,150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin conSup( + final amplitude=2, + final freqHz=1/1800, + final offset=273.15 + 29) "Condenser water supply temperature" + annotation (Placement(transformation(extent={{-360,-190},{-340,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram2( + final height=3, + final duration=3600, + final startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-360,-230},{-340,-210}}))); + Buildings.Controls.OBC.CDL.Reals.Add conWatSupTem + "Condenser water supply temperature" + annotation (Placement(transformation(extent={{-300,-210},{-280,-190}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram3( + final height=3, + final duration=3600, + final startTime=1500) "Ramp" + annotation (Placement(transformation(extent={{-360,-130},{-340,-110}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Sin conRet2( + final amplitude=2, + final freqHz=1/1800, + final offset=273.15 + 28) "Condenser water return temperature" + annotation (Placement(transformation(extent={{-360,-90},{-340,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Add conWatRetTem + "Condenser water return temperature" + annotation (Placement(transformation(extent={{-300,-110},{-280,-90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp conWatPumSpe1( + final height=0.5, + final duration=3600, + final startTime=300) "Measured condenser water pump speed" + annotation (Placement(transformation(extent={{-240,-140},{-220,-120}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe1(final k=0.5) + "Head pressure control maximum tower speed" + annotation (Placement(transformation(extent={{-320,110},{-300,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant towFanSpe3(final k=0.2) + "Measured tower fan speed" + annotation (Placement(transformation(extent={{-320,150},{-300,170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatSupSet( + final k=273.15 + 6.5) + "Chilled water supply setpoint" + annotation (Placement(transformation(extent={{-360,-50},{-340,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta1(final width=0.1, + final period=3600) "Chiller one enabling status" + annotation (Placement(transformation(extent={{-360,260},{-340,280}}))); + Buildings.Controls.OBC.CDL.Logical.Or or3 "Logical or" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Not chiOneSta "Chiller one status" + annotation (Placement(transformation(extent={{-320,260},{-300,280}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( + final k=0) "Constant zero" + annotation (Placement(transformation(extent={{-320,70},{-300,90}}))); + Buildings.Controls.OBC.CDL.Reals.Switch maxTowSpe1 + "Max tower speed from chiller 1 head pressure control" + annotation (Placement(transformation(extent={{-160,90},{-140,110}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger chiSta "Chiller stage " + annotation (Placement(transformation(extent={{-140,-230},{-120,-210}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay towStaUp( + final delayTime=30) "Cooling tower stage up" + annotation (Placement(transformation(extent={{-140,-330},{-120,-310}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol[2](final + samplePeriod=fill(5, 2)) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{280,320},{300,340}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre1[2] "Break algebraic" + annotation (Placement(transformation(extent={{280,370},{300,390}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp watLev( + final height=1.2, + final duration=3600, + final offset=0.5) "Water level in cooling tower" + annotation (Placement(transformation(extent={{140,50},{160,70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant con3(final k=false) + "Constant false" + annotation (Placement(transformation(extent={{-80,-190},{-60,-170}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator conWatPumSpe( + final nout=2) + "Condenser water pump speed" + annotation (Placement(transformation(extent={{20,-160},{40,-140}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Logical switch" + annotation (Placement(transformation(extent={{-20,-160},{0,-140}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta2( + final width=0.7, + final period=3600) + "Chiller one enabling status" + annotation (Placement(transformation(extent={{-360,198},{-340,218}}))); + Buildings.Controls.OBC.CDL.Logical.Not chiTwoSta1 + "Chiller two status" + annotation (Placement(transformation(extent={{-320,198},{-300,218}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger chiSta3 + "Chiller stage " + annotation (Placement(transformation(extent={{-100,-260},{-80,-240}}))); + Buildings.Controls.OBC.CDL.Reals.Switch maxTowSpe2 + "Max tower speed from chiller 2 head pressure control" + annotation (Placement(transformation(extent={{-160,30},{-140,50}}))); + Buildings.Controls.OBC.CDL.Integers.Add addInt "Chiller stage" + annotation (Placement(transformation(extent={{-40,-250},{-20,-230}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.TimeTable intTimTab( + table=[0,0; 360,1; 1560,2; 3600,2], + period=3600) "Chiller stage setpoint" + annotation (Placement(transformation(extent={{-40,-290},{-20,-270}}))); +equation + connect(ram2.y, conWatSupTem.u2) annotation (Line(points={{-338,-220},{-320,-220}, + {-320,-206},{-302,-206}}, color={0,0,127})); + connect(conSup.y, conWatSupTem.u1) annotation (Line(points={{-338,-180},{-320, + -180},{-320,-194},{-302,-194}}, color={0,0,127})); + connect(conRet2.y, conWatRetTem.u1) annotation (Line(points={{-338,-80},{-320, + -80},{-320,-94},{-302,-94}}, color={0,0,127})); + connect(ram3.y, conWatRetTem.u2) annotation (Line(points={{-338,-120},{-320, + -120},{-320,-106},{-302,-106}}, color={0,0,127})); + connect(chiSta1.y, chiOneSta.u) + annotation (Line(points={{-338,270},{-322,270}}, color={255,0,255})); + connect(chiOneSta.y, maxTowSpe1.u2) annotation (Line(points={{-298,270},{-280, + 270},{-280,100},{-162,100}}, color={255,0,255})); + connect(hpTowSpe1.y, maxTowSpe1.u1) annotation (Line(points={{-298,120},{-240, + 120},{-240,108},{-162,108}}, color={0,0,127})); + connect(zer.y, maxTowSpe1.u3) annotation (Line(points={{-298,80},{-260,80},{-260, + 92},{-162,92}}, color={0,0,127})); + connect(chiOneSta.y, towCon.uChi[1]) annotation (Line(points={{-298,270},{-30, + 270},{-30,376.5},{198,376.5}}, color={255,0,255})); + connect(towFanSpe3.y,towCon.uFanSpe) annotation (Line(points={{-298,160},{-10, + 160},{-10,373},{198,373}}, color={0,0,127})); + connect(chiWatSupSet.y, towCon.TChiWatSupSet) annotation (Line(points={{-338, + -40},{10,-40},{10,369},{198,369}}, color={0,0,127})); + connect(plaCap.y, towCon.reqPlaCap) annotation (Line(points={{-338,140},{20,140}, + {20,367},{198,367}}, color={0,0,127})); + connect(maxTowSpe1.y, towCon.uMaxTowSpeSet[1]) annotation (Line(points={{-138, + 100},{30,100},{30,364.5},{198,364.5}}, color={0,0,127})); + connect(or3.y, towCon.uPla) annotation (Line(points={{-78,-70},{60,-70},{60, + 361},{198,361}}, color={255,0,255})); + connect(conWatRetTem.y, towCon.TConWatRet) annotation (Line(points={{-278, + -100},{70,-100},{70,359},{198,359}}, color={0,0,127})); + connect(conWatSupTem.y, towCon.TConWatSup) annotation (Line(points={{-278, + -200},{90,-200},{90,355},{198,355}}, color={0,0,127})); + connect(chiOneSta.y, chiSta.u) annotation (Line(points={{-298,270},{-188,270}, + {-188,-220},{-142,-220}}, color={255,0,255})); + connect(chiOneSta.y, towStaUp.u) annotation (Line(points={{-298,270},{-188,270}, + {-188,-320},{-142,-320}}, color={255,0,255})); + connect(towCon.yIsoVal, zerOrdHol.u) annotation (Line(points={{222,365},{260,365}, + {260,330},{278,330}}, color={0,0,127})); + connect(zerOrdHol.y, towCon.uIsoVal) annotation (Line(points={{302,330},{320, + 330},{320,300},{150,300},{150,343},{198,343}}, color={0,0,127})); + connect(watLev.y, towCon.watLev) annotation (Line(points={{162,60},{170,60},{ + 170,341},{198,341}}, color={0,0,127})); + connect(towCon.yTowSta, pre1.u) annotation (Line(points={{222,355},{250,355},{ + 250,380},{278,380}}, color={255,0,255})); + connect(pre1.y, towCon.uTowSta) annotation (Line(points={{302,380},{340,380}, + {340,280},{50,280},{50,363},{198,363}},color={255,0,255})); + connect(towStaUp.y, towCon.uTowStaCha) annotation (Line(points={{-118,-320},{ + 120,-320},{120,347},{198,347}}, color={255,0,255})); + connect(con3.y, towCon.uEnaPla) annotation (Line(points={{-58,-180},{94,-180}, + {94,353},{198,353}}, color={255,0,255})); + connect(or3.y, swi2.u2) annotation (Line(points={{-78,-70},{-40,-70},{-40, + -150},{-22,-150}}, color={255,0,255})); + connect(zer.y, swi2.u3) annotation (Line(points={{-298,80},{-260,80},{-260,-158}, + {-22,-158}}, color={0,0,127})); + connect(conWatPumSpe1.y, swi2.u1) annotation (Line(points={{-218,-130},{-60, + -130},{-60,-142},{-22,-142}}, color={0,0,127})); + connect(swi2.y, conWatPumSpe.u) + annotation (Line(points={{2,-150},{18,-150}}, color={0,0,127})); + connect(conWatPumSpe.y, towCon.uConWatPumSpe) annotation (Line(points={{42,-150}, + {80,-150},{80,357},{198,357}}, color={0,0,127})); + connect(chiOneSta.y, or3.u1) annotation (Line(points={{-298,270},{-188,270},{-188, + -70},{-102,-70}}, color={255,0,255})); + connect(chiSta2.y, chiTwoSta1.u) + annotation (Line(points={{-338,208},{-322,208}}, color={255,0,255})); + connect(chiTwoSta1.y, towCon.uChi[2]) annotation (Line(points={{-298,208},{-30, + 208},{-30,377.5},{198,377.5}}, color={255,0,255})); + connect(chiTwoSta1.y, or3.u2) annotation (Line(points={{-298,208},{-200,208},{ + -200,-78},{-102,-78}}, color={255,0,255})); + connect(chiTwoSta1.y, chiSta3.u) annotation (Line(points={{-298,208},{-200,208}, + {-200,-250},{-102,-250}}, color={255,0,255})); + connect(chiSta.y, addInt.u1) annotation (Line(points={{-118,-220},{-60,-220},{ + -60,-234},{-42,-234}}, color={255,127,0})); + connect(chiSta3.y, addInt.u2) annotation (Line(points={{-78,-250},{-62,-250},{ + -62,-246},{-42,-246}}, color={255,127,0})); + connect(addInt.y, towCon.uChiSta) annotation (Line(points={{-18,-240},{100,-240}, + {100,351},{198,351}}, color={255,127,0})); + connect(intTimTab.y[1], towCon.uChiStaSet) annotation (Line(points={{-18,-280}, + {108,-280},{108,349},{198,349}}, color={255,127,0})); + connect(chiTwoSta1.y, maxTowSpe2.u2) annotation (Line(points={{-298,208},{-270, + 208},{-270,40},{-162,40}}, color={255,0,255})); + connect(hpTowSpe1.y, maxTowSpe2.u1) annotation (Line(points={{-298,120},{-240, + 120},{-240,48},{-162,48},{-162,48}}, color={0,0,127})); + connect(zer.y, maxTowSpe2.u3) annotation (Line(points={{-298,80},{-260,80},{-260, + 32},{-162,32}}, color={0,0,127})); + connect(maxTowSpe2.y, towCon.uMaxTowSpeSet[2]) annotation (Line(points={{-138, + 40},{40,40},{40,365.5},{198,365.5}}, color={0,0,127})); +annotation (experiment(StopTime=3500.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithoutWSE.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Controller. +It demonstates the cooling tower control of a less coupled chiller plant that has +two chillers without waterside economizer. +

                      +
                        +
                      • +At begining, the water level is lower than the minimum thus the tower starts +adding water (yMakUp). When the water level becomes greater than the +maximum, it stops adding water at 1500 seconds. +
                      • +
                      • +The plant is enabled in chiller mode at 360 seconds. The chiller 1 becomes enabled +and the lead cooling tower cell becomes enabled at 372 seconds. +
                      • +
                      • +After 300 seconds (chaTowCelIsoTim) at 660 seconds, it turns on the +leading cell. +
                      • +
                      • +The tower fan speed is controlled based on the control of condenser water return +temperature +( +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Controller). +
                      • +
                      • +At 1560 seconds, the plant state setpoint changes from 1 to 2. According to +the vector towCelOnSet, which specifies number of cells at each plant +stage (staVec), two tower cell should be enabled. After 300 seconds +(chaTowCelIsoTim) at 1860 seconds, it turns on the cell two. +
                      +", revisions=" +
                        +
                      • +September 16, 2019, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-400,-420},{400,420}}))); +end WithoutWSE; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/package.mo new file mode 100644 index 00000000000..79f10a8d6e2 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers; +package Validation "Collection of validation models" + +annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})}), +preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +")); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/package.order new file mode 100644 index 00000000000..6aa0be3aa90 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/package.order @@ -0,0 +1,3 @@ +WaterLevel +WithWSE +WithoutWSE diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/WaterLevel.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/WaterLevel.mo new file mode 100644 index 00000000000..41f00727292 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/WaterLevel.mo @@ -0,0 +1,102 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers; +block WaterLevel + "Sequences to control water level in cooling tower" + + parameter Real watLevMin( + final min=0) + "Minimum cooling tower water level recommended by manufacturer"; + parameter Real watLevMax( + final min=0) + "Maximum cooling tower water level recommended by manufacturer"; + + Buildings.Controls.OBC.CDL.Interfaces.RealInput watLev + "Measured water level" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yMakUp + "Makeup water valve On-Off status" + annotation (Placement(transformation(extent={{100,-20},{140,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( + final uLow=watLevMin, + final uHigh=watLevMax) + "Check if water level is lower than minimum level" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 + "Check if it should add water" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minWatLev( + final k=watLevMin) "Minimum water level" + annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxWatLev( + final k=watLevMax) "Maximum water level" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + Buildings.Controls.OBC.CDL.Utilities.Assert assMes( + final message="The maximum level has to be greater than the minimum level.") + "Print warning when the maximum level is not set to be greater than the minimum level" + annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Greater greEqu + "Check if maximum level is set to be greater than minimum level" + annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); + +equation + connect(watLev, hys.u) + annotation (Line(points={{-120,0},{-12,0}}, color={0,0,127})); + connect(hys.y, not1.u) + annotation (Line(points={{12,0},{38,0}}, color={255,0,255})); + connect(not1.y, yMakUp) + annotation (Line(points={{62,0},{120,0}}, color={255,0,255})); + connect(maxWatLev.y, greEqu.u1) + annotation (Line(points={{-18,-40},{18,-40}}, color={0,0,127})); + connect(minWatLev.y, greEqu.u2) + annotation (Line(points={{-18,-80},{0,-80},{0,-48},{18,-48}}, color={0,0,127})); + connect(greEqu.y, assMes.u) + annotation (Line(points={{42,-40},{58,-40}}, color={255,0,255})); + +annotation ( + defaultComponentName = "makUpWat", + Diagram( + coordinateSystem(preserveAspectRatio=false)), Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-96,6},{-56,-6}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="watLev"), + Text( + extent={{58,8},{98,-4}}, + textColor={0,0,127}, + pattern=LinePattern.Dash, + textString="yMakUp"), + Text( + extent={{-120,146},{100,108}}, + textColor={0,0,255}, + textString="%name")}), +Documentation(info=" +

                      +Block that outputs yMakUp to control cooling tower make-up water +valve. It is implemented according to ASHRAE Guideline36-2021, +section 5.20.13, tower make-up water. +

                      +

                      +Make-up water valve shall cycle based on tower water fill level sensor. The +valve shall open when water level watLev falls below the minimum +fill level watLevMin recommended by the tower manufacturer. It +shall close when the water level goes above the maximum level watLevMax. +

                      +", +revisions=" +
                        +
                      • +March 07, 2018, by Jianjun Hu:
                        +First implementation. +
                      • +
                      +")); +end WaterLevel; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/package.mo new file mode 100644 index 00000000000..8b47a36e0c5 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/package.mo @@ -0,0 +1,45 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant; +package Towers "Package of sequences for cooling tower control" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains sequences for cooling tower control. +The implementation is based on section 5.20.12 in ASHRAE Guideline36-2021. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end Towers; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/package.order new file mode 100644 index 00000000000..94909647c67 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/package.order @@ -0,0 +1,5 @@ +Controller +WaterLevel +FanSpeed +Staging +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Types/ChillersAndStages.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Types/ChillersAndStages.mo new file mode 100644 index 00000000000..29e5ca4c028 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Types/ChillersAndStages.mo @@ -0,0 +1,34 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types; +package ChillersAndStages "Chiller and stage type enumeration" + + constant Integer positiveDisplacement = 1 "Positive displacement chiller or a stage with all positive displacement chillers"; + constant Integer variableSpeedCentrifugal = 2 "Variable speed centrifugal chiller or a stage with any variable speed and no constant speed centrifugal chillers"; + constant Integer constantSpeedCentrifugal = 3 "Constant speed centrifugal chiller or a stage with any constant speed centrifugal chiller"; + +annotation ( +Documentation(info=" +

                      +This package provides constants that indicate the chiller type based on the compressor type +and a chiller stage type based on the type of chillers being staged. +The chiller types are enumerated in the order of the recommended staging hierarchy, per +ASHRAE Guideline 36-2021, section 5.20.4.14. +

                      +", revisions=" +
                        +
                      • +June 7, 2019, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end ChillersAndStages; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Types/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Types/package.mo new file mode 100644 index 00000000000..54b507a7455 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Types/package.mo @@ -0,0 +1,43 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant; +package Types "Package with type definitions for control sequences" + + annotation (Documentation(info=" +

                      +This package provides type definitions used in chiller plant control sequences. +

                      +", revisions=" +
                        +
                      • +June 10, 2019, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), Polygon( + origin={-12.167,-23}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{12.167,65},{14.167,93},{36.167,89},{24.167,20},{4.167,-30}, + {14.167,-30},{24.167,-30},{24.167,-40},{-5.833,-50},{-15.833, + -30},{4.167,20},{12.167,65}}, + smooth=Smooth.Bezier, + lineColor={0,0,0}), Polygon( + origin={2.7403,1.6673}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{49.2597,22.3327},{31.2597,24.3327},{7.2597,18.3327},{-26.7403, + 10.3327},{-46.7403,14.3327},{-48.7403,6.3327},{-32.7403,0.3327},{-6.7403, + 4.3327},{33.2597,14.3327},{49.2597,14.3327},{49.2597,22.3327}}, + smooth=Smooth.Bezier)})); +end Types; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Types/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Types/package.order new file mode 100644 index 00000000000..2a367c7331a --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Types/package.order @@ -0,0 +1 @@ +ChillersAndStages diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Validation/Controller.mo new file mode 100644 index 00000000000..29d69082fc7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Validation/Controller.mo @@ -0,0 +1,356 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Validation; +model Controller "Validation head pressure controller" + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Controller chiPlaCon( + final closeCoupledPlant=false, + final nChi=2, + final have_parChi=true, + final have_ponyChiller=false, + final desCap=400, + final TChiWatSupMin={278.15,278.15}, + final minChiLif=10, + final have_heaPreConSig=false, + final anyVsdCen=false, + final heaExcAppDes=2, + final nChiWatPum=2, + final have_heaChiWatPum=true, + final have_locSenChiWatPum=false, + final nSenChiWatPum=1, + final nConWatPum=2, + final have_heaConWatPum=true, + final nSta=2, + final totSta=6, + final staMat=[1,0; 1,1], + final staVec={0,0.5,1,1.5,2,2.5}, + final desConWatPumSpe={0,0.5,0.75,0.6,0.75,0.9}, + final desConWatPumNum={0,1,1,2,2,2}, + final towCelOnSet={0,1,1,2,2,2}, + final nTowCel=2, + final cooTowAppDes=2, + final dpChiWatPumMax={10*6894.76}, + final TChiWatSupMax=291.15, + final have_WSE=true, + final chiDesCap={200,200}, + final chiMinCap={20,20}, + final chiTyp={Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement, + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.positiveDisplacement}) + "Chiller plant controller" + annotation (Placement(transformation(extent={{-20,-180},{80,220}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant uChiWatPum[2]( + final k={true,false}) "Chilled water pump status" + annotation (Placement(transformation(extent={{-260,122},{-240,142}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin1( + final smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + final table=[0,2; 600,4; 1200,6; 1800,6; 2400,8; 3000,8; 3600,8; 4200,6; 4800,6; + 5400,6; 6000,7; 6600,7; 7200,7]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-320,-80},{-300,-60}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{-280,-80},{-260,-60}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant uChiAva[2]( + final k={true,true}) + "Chilled availability" + annotation (Placement(transformation(extent={{-240,-60},{-220,-40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TChiWatSup( + final height=4, + final duration=7200, + final offset=273.15 + 7) "Chilled water supply" + annotation (Placement(transformation(extent={{-300,0},{-280,20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutWet( + final k=283.15) + "Outdoor wet bulb temperatur" + annotation (Placement(transformation(extent={{-300,50},{-280,70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOut1( + final k=313.15) "Outdoor dry bulb temperature" + annotation (Placement(transformation(extent={{-260,-190},{-240,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TChiWatRet( + final height=5, + final duration=3600, + final offset=273.15 + 15) "Chilled water return temperature" + annotation (Placement(transformation(extent={{-240,20},{-220,40}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TChiWatRetDow( + final height=3, + final duration=3600, + final offset=273.15 + 10) "Chilled water return downstream of WSE" + annotation (Placement(transformation(extent={{-300,-170},{-280,-150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TConWatRet( + final k=307.15) + "Condenser water return temperature" + annotation (Placement(transformation(extent={{-220,-250},{-200,-230}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TConWatSup( + final k=305.15) + "Condenser water supply temperature" + annotation (Placement(transformation(extent={{-260,-230},{-240,-210}}))); + Buildings.Controls.OBC.CDL.Reals.Max max1 "Current fan speed" + annotation (Placement(transformation(extent={{120,-150},{140,-130}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[2] + "Condenser water pump status" + annotation (Placement(transformation(extent={{220,-50},{240,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply pro[2] "Condenser water pump speed" + annotation (Placement(transformation(extent={{260,-10},{280,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpChiWat( + final height=2*6895, + final duration=3600, + final offset=3*6895, + final startTime=0) "Chilled water differential pressure" + annotation (Placement(transformation(extent={{-260,80},{-240,100}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1[2] + "Boolean to real" + annotation (Placement(transformation(extent={{-240,160},{-220,180}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply pro1[2] "Chiller cooling load" + annotation (Placement(transformation(extent={{-200,-138},{-180,-118}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiOneSta + "Chiller one status" + annotation (Placement(transformation(extent={{140,130},{160,150}}))); + Buildings.Controls.OBC.CDL.Logical.Pre chiTwoSta + "Chiller two status" + annotation (Placement(transformation(extent={{140,80},{160,100}}))); + Buildings.Controls.OBC.CDL.Logical.Pre towSta1[2]( + final pre_u_start=fill(false, 2)) + "Tower cell status" + annotation (Placement(transformation(extent={{120,-180},{140,-160}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp watLev( + final height=1.2, + final duration=3600, + final offset=0.5) "Water level in cooling tower" + annotation (Placement(transformation(extent={{-260,-270},{-240,-250}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol[2]( + final samplePeriod=fill(5, 2)) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{120,-100},{140,-80}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol1[2]( + final samplePeriod=fill(5, 2)) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{200,40},{220,60}}))); + Buildings.Controls.OBC.CDL.Logical.Pre conWatPum[2]( + final pre_u_start=fill(false, 2)) + "Condenser water pump status setpoint" + annotation (Placement(transformation(extent={{160,-50},{180,-30}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol2[2]( + final samplePeriod=fill(5, 2)) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{120,-70},{140,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp chiCooLoa[2]( + final height={80,70}, + final duration=fill(3600, 2), + final offset={20,25}) + "Current chiller cooling load" + annotation (Placement(transformation(extent={{-300,-130},{-280,-110}}))); + Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr + "Check if the WSE pump should be enabled" + annotation (Placement(transformation(extent={{-200,-100},{-180,-80}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TEntHex( + final height=3, + final duration=3600, + final offset=273.15 + 14) + "Chilled water temperature entering heat exchanger" + annotation (Placement(transformation(extent={{-280,-40},{-260,-20}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol3( + final samplePeriod=5) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{148,-150},{168,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable chiWatFlo( + final smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments, + final table=[0,0; 6500,0; 7000,0.005; 7500,0.008; 9200,0.02; 10000,0.020; + 10800,0.024], + extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.HoldLastPoint) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-300,-210},{-280,-190}}))); +equation + connect(chiPlaCon.uChiWatPum, uChiWatPum.y) annotation (Line(points={{-30,180}, + {-190,180},{-190,132},{-238,132}}, color={255,0,255})); + connect(timTabLin1.y[1], reaToInt1.u) + annotation (Line(points={{-298,-70},{-282,-70}}, color={0,0,127})); + connect(reaToInt1.y, chiPlaCon.TChiWatSupResReq) annotation (Line(points={{-258, + -70},{-100,-70},{-100,-50},{-30,-50}}, color={255,127,0})); + connect(chiPlaCon.yChi[1], chiOneSta.u) annotation (Line(points={{90,97.5},{120, + 97.5},{120,140},{138,140}}, color={255,0,255})); + connect(chiPlaCon.yChi[2], chiTwoSta.u) annotation (Line(points={{90,102.5},{114, + 102.5},{114,90},{138,90}}, color={255,0,255})); + connect(uChiAva.y, chiPlaCon.uChiAva) annotation (Line(points={{-218,-50},{-124, + -50},{-124,5},{-30,5}}, color={255,0,255})); + connect(TOutWet.y, chiPlaCon.TOutWet) + annotation (Line(points={{-278,60},{-150,60},{-150,100},{-30,100}}, color={0,0,127})); + connect(TOut1.y, chiPlaCon.TOut) annotation (Line(points={{-238,-180},{-150,-180}, + {-150,-100},{-30,-100}}, color={0,0,127})); + connect(TChiWatRet.y, chiPlaCon.TChiWatRet) + annotation (Line(points={{-218,30},{-128,30},{-128,80},{-30,80}}, color={0,0,127})); + connect(TChiWatSup.y, chiPlaCon.TChiWatSup) + annotation (Line(points={{-278,10},{-144,10},{-144,60},{-30,60}}, color={0,0,127})); + connect(TChiWatRetDow.y, chiPlaCon.TChiWatRetDow) annotation (Line(points={{-278, + -160},{-170,-160},{-170,90},{-30,90}}, color={0,0,127})); + connect(TConWatRet.y, chiPlaCon.TConWatRet) annotation (Line(points={{-198,-240}, + {-134,-240},{-134,70},{-30,70}}, color={0,0,127})); + connect(TConWatSup.y, chiPlaCon.TConWatSup) annotation (Line(points={{-238,-220}, + {-120,-220},{-120,-140},{-30,-140}}, color={0,0,127})); + connect(watLev.y, chiPlaCon.watLev) annotation (Line(points={{-238,-260},{-90, + -260},{-90,-160},{-30,-160}}, color={0,0,127})); + connect(chiPlaCon.yTowFanSpe[2], max1.u2) annotation (Line(points={{90,-97.5}, + {106,-97.5},{106,-146},{118,-146}},color={0,0,127})); + connect(chiPlaCon.yTowFanSpe[1], max1.u1) annotation (Line(points={{90,-102.5}, + {112,-102.5},{112,-134},{118,-134}}, color={0,0,127})); + connect(chiPlaCon.yTowCel, towSta1.u) annotation (Line(points={{90,-85},{96,-85}, + {96,-170},{118,-170}}, color={255,0,255})); + connect(towSta1.y, chiPlaCon.uTowSta) annotation (Line(points={{142,-170},{160, + -170},{160,-190},{-40,-190},{-40,-170},{-30,-170}}, color={255,0,255})); + connect(chiPlaCon.yTowCelIsoVal, zerOrdHol.u) annotation (Line(points={{90,-70}, + {100,-70},{100,-90},{118,-90}}, color={0,0,127})); + connect(zerOrdHol.y, chiPlaCon.uIsoVal) annotation (Line(points={{142,-90},{ + 190,-90},{190,-210},{-70,-210},{-70,-150},{-30,-150}}, color={0,0,127})); + connect(chiPlaCon.yConWatPum, conWatPum.u) annotation (Line(points={{90,20},{ + 108,20},{108,-40},{158,-40}}, color={255,0,255})); + connect(conWatPum.y, chiPlaCon.uConWatPum) annotation (Line(points={{182,-40}, + {210,-40},{210,-230},{-100,-230},{-100,-90},{-30,-90}}, color={255,0,255})); + connect(conWatPum.y, booToRea.u) + annotation (Line(points={{182,-40},{218,-40}}, color={255,0,255})); + connect(booToRea.y, pro.u2) annotation (Line(points={{242,-40},{250,-40},{250, + -6},{258,-6}}, color={0,0,127})); + connect(pro.y, chiPlaCon.uConWatPumSpe) annotation (Line(points={{282,0},{300, + 0},{300,-250},{-110,-250},{-110,-80},{-30,-80}}, color={0,0,127})); + connect(chiPlaCon.yChiWatIsoVal, zerOrdHol2.u) annotation (Line(points={{90,-15}, + {100,-15},{100,-60},{118,-60}}, color={0,0,127})); + connect(zerOrdHol2.y, chiPlaCon.uChiWatIsoVal) annotation (Line(points={{142,-60}, + {200,-60},{200,-220},{-80,-220},{-80,-40},{-30,-40}}, color={0,0,127})); + connect(dpChiWat.y, chiPlaCon.dpChiWat_remote[1]) annotation (Line(points={{-238,90}, + {-180,90},{-180,140},{-30,140}}, color={0,0,127})); + connect(booToRea1.y, pro1.u1) annotation (Line(points={{-218,170},{-210,170}, + {-210,-122},{-202,-122}}, color={0,0,127})); + connect(chiCooLoa.y, pro1.u2) annotation (Line(points={{-278,-120},{-220,-120}, + {-220,-134},{-202,-134}}, color={0,0,127})); + connect(pro1.y, chiPlaCon.uChiCooLoa) annotation (Line(points={{-178,-128},{-70, + -128},{-70,-110},{-30,-110}}, color={0,0,127})); + connect(chiPlaCon.yConWatPumSpe, zerOrdHol1.u) annotation (Line(points={{90,50}, + {198,50}}, color={0,0,127})); + connect(reaToInt1.y, chiPlaCon.chiPlaReq) annotation (Line(points={{-258,-70}, + {-100,-70},{-100,-60},{-30,-60}}, color={255,127,0})); + connect(reaToInt1.y, intGreThr.u) annotation (Line(points={{-258,-70},{-220,-70}, + {-220,-90},{-202,-90}}, color={255,127,0})); + connect(intGreThr.y, chiPlaCon.uEcoPum) annotation (Line(points={{-178,-90},{-140, + -90},{-140,-5},{-30,-5}}, color={255,0,255})); + connect(TEntHex.y, chiPlaCon.TEntHex) annotation (Line(points={{-258,-30},{-148, + -30},{-148,-15},{-30,-15}}, color={0,0,127})); + connect(max1.y, zerOrdHol3.u) + annotation (Line(points={{142,-140},{146,-140}}, color={0,0,127})); + connect(zerOrdHol3.y, chiPlaCon.uFanSpe) annotation (Line(points={{170,-140}, + {180,-140},{180,-200},{-60,-200},{-60,-130},{-30,-130}}, color={0,0, + 127})); + connect(chiOneSta.y, booToRea1[1].u) annotation (Line(points={{162,140},{200,140}, + {200,260},{-250,260},{-250,170},{-242,170}}, color={255,0,255})); + connect(chiOneSta.y, chiPlaCon.uConWatReq[1]) annotation (Line(points={{162,140}, + {200,140},{200,260},{-90,260},{-90,187.5},{-30,187.5}}, color={255, + 0,255})); + connect(chiOneSta.y, chiPlaCon.uChi[1]) annotation (Line(points={{162,140},{200, + 140},{200,260},{-90,260},{-90,117.5},{-30,117.5}}, color={255,0, + 255})); + connect(chiOneSta.y, chiPlaCon.uChiHeaCon[1]) annotation (Line(points={{162,140}, + {200,140},{200,260},{-90,260},{-90,-32.5},{-30,-32.5}}, color={255, + 0,255})); + connect(chiTwoSta.y, booToRea1[2].u) annotation (Line(points={{162,90},{210,90}, + {210,270},{-260,270},{-260,170},{-242,170}}, color={255,0,255})); + connect(chiTwoSta.y, chiPlaCon.uConWatReq[2]) annotation (Line(points={{162,90}, + {210,90},{210,270},{-100,270},{-100,192.5},{-30,192.5}}, color={ + 255,0,255})); + connect(chiTwoSta.y, chiPlaCon.uChi[2]) annotation (Line(points={{162,90},{210, + 90},{210,270},{-100,270},{-100,122.5},{-30,122.5}}, color={255,0, + 255})); + connect(chiTwoSta.y, chiPlaCon.uChiHeaCon[2]) annotation (Line(points={{162,90}, + {210,90},{210,270},{-100,270},{-100,-27.5},{-30,-27.5}}, color={ + 255,0,255})); + connect(chiOneSta.y, chiPlaCon.uChiWatReq[1]) annotation (Line(points={{162, + 140},{200,140},{200,260},{-90,260},{-90,197.5},{-30,197.5}}, color={ + 255,0,255})); + connect(chiTwoSta.y, chiPlaCon.uChiWatReq[2]) annotation (Line(points={{162, + 90},{210,90},{210,270},{-100,270},{-100,202.5},{-30,202.5}}, color={ + 255,0,255})); + connect(zerOrdHol1.y, pro.u1) annotation (Line(points={{222,50},{252,50},{252, + 6},{258,6}}, color={0,0,127})); + connect(chiWatFlo.y[1], chiPlaCon.VChiWat_flow) annotation (Line(points={{ + -278,-200},{-160,-200},{-160,130},{-30,130}}, color={0,0,127})); +annotation ( + experiment(StopTime=10800.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Validation/Controller.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This example validates composed chiller plant controller + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Controller. It shows the +process of enabling plant, enabling waterside economizer and staging up one chiller. The plant: +

                      +
                        +
                      • +is less coupled; +
                      • +
                      • +has waterside economizer and the chilled water flow through the economizer is +controlled using heat exchanger pump; +
                      • +
                      • +has 2 parallel identical chillers and do not have head pressure control signal; +
                      • +
                      • +has 2 headed chilled water pumps, 1 remote differential pressure sensor and do +not have local differential pressure sensor hardwired to the plant controller; +
                      • +
                      • +has 2 headed variable speed condenser water pumps; +
                      • +
                      • +has cooling tower with 2 cells. +
                      • +
                      + +

                      +The example shows following process: +

                      +
                        +
                      • +At 15 minutes, the plant becomes enabled in waterside economizer mode. The +economizer is enabled and the heat exchanger pump starts operating +(wseSta.yPumSpe is greater than 0). The condenser water pump becomes +enabled and the number (1) of enabling pumps is specified by the parameter +desConWatPumNum and it starts operating at speed (0.5) specified by +(desConWatPumSpe). The cooling tower cell 1 becomes enabled and its +isolation valve starts open. After 5 minutes (chaTowCelIsoTim) at 20 +minutes when the isolation valve is fully open, it turns on the cell 1. +
                      • +
                      • +At 115 minutes, the plant starts staging up (staSetCon.yUp=true, +upProCon.yStaPro=true) and it stages up chiller 1. +
                      • +
                      • +In the staging up process, at 127.07 minutes, it increases the condenser water +pump speed (0.6) and increases number (2) of the pump. Also, it starts staging up +cooling tower (upProCon.yTowStaUp=true) at the same moment. At 127.241 +minutes, it enables the chiller 1 head pressure control. When the chilled water +isolation valve is fully open at 132.741 minutes, it then turns on chiller 1. The +staging up process is done (upProCon.yStaPro=false). +
                      • +
                      +", revisions=" +
                        +
                      • +September, 2021, by Jianjun Hu:
                        +Refactored the implementations. +
                      • +
                      • +August 30, 2020, by Milica Grahovac:
                        +First implementation. +
                      • +
                      +"), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse(lineColor = {75,138,73}, + fillColor={255,255,255}, + fillPattern = FillPattern.Solid, + extent = {{-100,-100},{100,100}}), + Polygon(lineColor = {0,0,255}, + fillColor = {75,138,73}, + pattern = LinePattern.None, + fillPattern = FillPattern.Solid, + points = {{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-340,-300},{340, + 300}}))); +end Controller; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Validation/package.mo new file mode 100644 index 00000000000..537c92018e6 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Validation/package.mo @@ -0,0 +1,37 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant; +package Validation "Collection of validation models" + +annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})}), +preferredView="info", Documentation(info=" +

                      +This package contains validation models for the classes in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure. +

                      +

                      +Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +

                      +")); +end Validation; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Validation/package.order new file mode 100644 index 00000000000..8cba75e31a7 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Validation/package.order @@ -0,0 +1 @@ +Controller diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/package.mo new file mode 100644 index 00000000000..71402bd6b90 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/package.mo @@ -0,0 +1,25 @@ +within Buildings.Controls.OBC.ASHRAE.PrimarySystem; +package ChillerPlant "Chiller plant control sequences" + +annotation (preferredView="info", Documentation(info=" +

                      +This package contains control sequences for a chiller plant comprising a single +chiller or multiple chillers, chilled and condenser water pumps, cooling towers +and an optional water side economizer. +

                      +

                      +The control sequences are implemented based on ASHRAE Guideline36-2021. +

                      +"), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end ChillerPlant; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/package.order new file mode 100644 index 00000000000..849ffc10154 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/package.order @@ -0,0 +1,11 @@ +Controller +Economizers +Generic +HeadPressure +MinimumFlowBypass +Pumps +SetPoints +Staging +Towers +Types +Validation diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/package.mo new file mode 100644 index 00000000000..3174c2e5132 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/package.mo @@ -0,0 +1,47 @@ +within Buildings.Controls.OBC.ASHRAE; +package PrimarySystem "Package with primary system control sequences" + +annotation ( +preferredView="info", Documentation(info=" +

                      +This package contains control sequences for primary HVAC systems. +

                      +

                      +The sequences are developed according to ASHRAE Guideline36-2021. +

                      +"), +Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end PrimarySystem; diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/package.order new file mode 100644 index 00000000000..14d2951a766 --- /dev/null +++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/package.order @@ -0,0 +1 @@ +ChillerPlant diff --git a/Buildings/Controls/OBC/ASHRAE/package.order b/Buildings/Controls/OBC/ASHRAE/package.order index f718b0a1739..4d8c195216a 100644 --- a/Buildings/Controls/OBC/ASHRAE/package.order +++ b/Buildings/Controls/OBC/ASHRAE/package.order @@ -1 +1,2 @@ G36 +PrimarySystem diff --git a/Buildings/Examples/ChillerPlant/package.order b/Buildings/Examples/ChillerPlant/package.order deleted file mode 100644 index 8b8f6051ce5..00000000000 --- a/Buildings/Examples/ChillerPlant/package.order +++ /dev/null @@ -1,4 +0,0 @@ -DataCenterContinuousTimeControl -DataCenterDiscreteTimeControl -DataCenterRenewables -BaseClasses diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/BatteryControl.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/BatteryControl.mo similarity index 95% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/BatteryControl.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/BatteryControl.mo index 6a575fbd540..6f417e5090e 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/BatteryControl.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/BatteryControl.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls; model BatteryControl "Controller for battery" Modelica.Blocks.Interfaces.RealInput SOC "State of charge" annotation ( @@ -121,23 +121,23 @@ equation annotation (Line(points={{-99,-120},{80,-120},{80,48}}, color={255,0,255})); connect(t1.inPort, alternative.split[1]) - annotation (Line(points={{16,120},{8,120},{8,115},{-0.56,115}}, + annotation (Line(points={{16,120},{8,120},{8,77.5},{-0.56,77.5}}, color={0,0,0})); connect(t2.inPort, alternative.split[2]) - annotation (Line(points={{16,60},{8,60},{8,65},{-0.56,65}}, + annotation (Line(points={{16,60},{8,60},{8,102.5},{-0.56,102.5}}, color={0,0,0})); connect(t3.outPort, alternative.join[1]) - annotation (Line(points={{81.5,120},{92,120},{92,115},{100.56,115}}, + annotation (Line(points={{81.5,120},{92,120},{92,77.5},{100.56,77.5}}, color={0,0,0})); connect(t4.outPort, alternative.join[2]) - annotation (Line(points={{81.5,60},{92,60},{92,65},{100.56,65}}, + annotation (Line(points={{81.5,60},{92,60},{92,102.5},{100.56,102.5}}, color={0,0,0})); connect(charge.active, multiSwitch1.u[1]) annotation (Line( - points={{50,109},{50,92},{64,92},{64,1.5},{104,1.5}}, + points={{50,109},{50,92},{64,92},{64,-0.75},{104,-0.75}}, color={255,0,255}, pattern=LinePattern.Dash)); connect(discharge.active, multiSwitch1.u[2]) annotation (Line( - points={{50,49},{50,49},{50,-4},{104,-4},{104,-1.5}}, + points={{50,49},{50,49},{50,-4},{104,-4},{104,0.75}}, color={255,0,255}, pattern=LinePattern.Dash)); annotation ( Documentation(info=" diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/ChillerSwitch.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/ChillerSwitch.mo similarity index 98% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/ChillerSwitch.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/ChillerSwitch.mo index a96c0141dbe..8947bc19f1c 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/ChillerSwitch.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/ChillerSwitch.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls; block ChillerSwitch "Control unit for enabling/disabling chiller" extends Modelica.Blocks.Icons.Block; Modelica.Blocks.Interfaces.RealInput chiCHWST( diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/BatteryControl.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/BatteryControl.mo similarity index 79% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/BatteryControl.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/BatteryControl.mo index 359be944fc2..b24b35d5957 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/BatteryControl.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/BatteryControl.mo @@ -1,7 +1,7 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples; model BatteryControl "Test model for battery control" extends Modelica.Icons.Example; - Buildings.Examples.ChillerPlant.BaseClasses.Controls.BatteryControl + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.BatteryControl con "Battery control" annotation (Placement(transformation(extent={{0,0},{20,20}}))); Modelica.Blocks.Sources.Sine SOC( @@ -19,7 +19,7 @@ equation StopTime=604800, Tolerance=1e-6), __Dymola_Commands(file= - "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/BatteryControl.mos" + "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/BatteryControl.mos" "Simulate and plot"), Documentation(revisions="
                        diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSetPointControl.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSetPointControl.mo similarity index 95% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSetPointControl.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSetPointControl.mo index 4ff034b38d7..6ba94ede0ff 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSetPointControl.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSetPointControl.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples; model ChillerSetPointControl "Test model for chiller setpoint control using TrimAndResponse and LinearPieceWiseTwo" extends Modelica.Icons.Example; @@ -14,14 +14,15 @@ model ChillerSetPointControl COPc_nominal*(COPc_nominal + 1) "Nominal mass flow rate at condenser water"; parameter Real QRoo=100; - Buildings.Examples.ChillerPlant.BaseClasses.Controls.TrimAndRespond triAndRes( + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.TrimAndRespond + triAndRes( yEqu0=0.1, uTri=0.8, yDec=-0.03, yInc=0.03, samplePeriod=120) annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); - Buildings.Examples.ChillerPlant.BaseClasses.Controls.LinearPiecewiseTwo + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.LinearPiecewiseTwo linPieTwo( x0=0, x2=1, @@ -176,7 +177,7 @@ equation color={0,127,255}, smooth=Smooth.None)); connect(linPieTwo.y[2], firstOrder1.u) annotation (Line( - points={{-39,30.3},{-20,30},{-2,30}}, + points={{-39,30.05},{-20,30},{-2,30}}, color={0,0,127}, smooth=Smooth.None)); connect(firstOrder1.y, chi.TSet) annotation (Line( @@ -200,14 +201,14 @@ equation color={0,0,127}, smooth=Smooth.None)); connect(gain.u, linPieTwo.y[1]) annotation (Line( - points={{84,-8},{-20,-8},{-20,29.3},{-39,29.3}}, + points={{84,-8},{-20,-8},{-20,29.55},{-39,29.55}}, color={0,0,127}, smooth=Smooth.None)); annotation ( Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-200,-200},{200, 200}}), graphics), __Dymola_Commands(file= - "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSetPointControl.mos" + "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSetPointControl.mos" "Simulate and plot"), experiment( StopTime=86400, diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSwitch.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSwitch.mo similarity index 81% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSwitch.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSwitch.mo index d8999164ef7..c6464aed5ac 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSwitch.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSwitch.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples; model ChillerSwitch "Test model for ChillerSwitch" extends Modelica.Icons.Example; Modelica.Blocks.Sources.Sine TSet( @@ -11,8 +11,8 @@ model ChillerSwitch "Test model for ChillerSwitch" amplitude=5, offset=15) annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Examples.ChillerPlant.BaseClasses.Controls.ChillerSwitch chiSwi( - deaBan(displayUnit="K") = 3) + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.ChillerSwitch + chiSwi(deaBan(displayUnit="K") = 3) annotation (Placement(transformation(extent={{0,0},{20,20}}))); equation connect(TSet.y, chiSwi.TSet) annotation (Line( @@ -25,7 +25,7 @@ equation smooth=Smooth.None)); annotation ( __Dymola_Commands(file= - "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSwitch.mos" + "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSwitch.mos" "Simulate and plot"), experiment( StopTime=86400, diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/KMinusU.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/KMinusU.mo similarity index 79% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/KMinusU.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/KMinusU.mo index f99f411709b..386c3eb629d 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/KMinusU.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/KMinusU.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples; model KMinusU "Test model for KMinusU" extends Modelica.Icons.Example; Modelica.Blocks.Sources.Sine pulse( @@ -7,7 +7,7 @@ model KMinusU "Test model for KMinusU" offset=0.5, phase=-1.5707963267949) annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); - Buildings.Examples.ChillerPlant.BaseClasses.Controls.KMinusU kMinU(k=1) + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.KMinusU kMinU(k=1) annotation (Placement(transformation(extent={{-20,0},{0,20}}))); equation connect(pulse.y, kMinU.u) annotation (Line( @@ -16,7 +16,7 @@ equation smooth=Smooth.None)); annotation ( __Dymola_Commands(file= - "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/KMinusU.mos" + "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/KMinusU.mos" "Simulate and plot"), experiment( StopTime=3600, diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mo similarity index 80% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mo index 936dca29321..0a2508e56e6 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples; model LinearPiecewiseTwo "Test model for LinearPiecewiseTwo" extends Modelica.Icons.Example; Modelica.Blocks.Sources.Sine pulse( @@ -7,7 +7,7 @@ model LinearPiecewiseTwo "Test model for LinearPiecewiseTwo" offset=0.5, phase=-1.5707963267949) annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); - Buildings.Examples.ChillerPlant.BaseClasses.Controls.LinearPiecewiseTwo + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.LinearPiecewiseTwo linPieTwo( x0=0, x1=0.5, @@ -23,7 +23,7 @@ equation smooth=Smooth.None)); annotation ( __Dymola_Commands(file= - "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mos" + "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mos" "Simulate and plot"), experiment( StopTime=86400, diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/RequestCounter.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/RequestCounter.mo similarity index 76% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/RequestCounter.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/RequestCounter.mo index e6d6ab52eb1..42ee298ed0f 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/RequestCounter.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/RequestCounter.mo @@ -1,8 +1,8 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples; model RequestCounter "Test model for RequestCounter" extends Modelica.Icons.Example; - Buildings.Examples.ChillerPlant.BaseClasses.Controls.RequestCounter reqCou( - nAct=3, uTri=0.8) + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.RequestCounter + reqCou(nAct=3, uTri=0.8) annotation (Placement(transformation(extent={{-20,0},{0,20}}))); Modelica.Blocks.Sources.Constant act3(k=0.95) annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); @@ -12,7 +12,7 @@ model RequestCounter "Test model for RequestCounter" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); equation connect(act1.y, reqCou.uAct[1]) annotation (Line( - points={{-59,50},{-40,50},{-40,8.66667},{-22,8.66667}}, + points={{-59,50},{-40,50},{-40,9.33333},{-22,9.33333}}, color={0,0,127}, smooth=Smooth.None)); connect(act2.y, reqCou.uAct[2]) annotation (Line( @@ -20,12 +20,12 @@ equation color={0,0,127}, smooth=Smooth.None)); connect(act3.y, reqCou.uAct[3]) annotation (Line( - points={{-59,-30},{-40,-30},{-40,11.3333},{-22,11.3333}}, + points={{-59,-30},{-40,-30},{-40,10.6667},{-22,10.6667}}, color={0,0,127}, smooth=Smooth.None)); annotation ( __Dymola_Commands(file= - "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/RequestCounter.mos" + "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/RequestCounter.mos" "Simulate and plot"), experiment( StopTime=600, diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/TrimAndRespond.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/TrimAndRespond.mo similarity index 81% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/TrimAndRespond.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/TrimAndRespond.mo index 1f87f29a054..171786150b7 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/TrimAndRespond.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/TrimAndRespond.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples; model TrimAndRespond "Test model for TrimAndRespond" extends Modelica.Icons.Example; @@ -8,12 +8,14 @@ model TrimAndRespond "Test model for TrimAndRespond" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); Modelica.Blocks.Sources.Sine act2(f=0.001, offset=0.3) annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Buildings.Examples.ChillerPlant.BaseClasses.Controls.TrimAndRespond triAndRes[3]( + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.TrimAndRespond + triAndRes[3]( each uTri=0.9, each yEqu0=0.1, each yDec=-0.01, each yInc=0.02, - each samplePeriod=20) annotation (Placement(transformation(extent={{0,20},{20,40}}))); + each samplePeriod=20) + annotation (Placement(transformation(extent={{0,20},{20,40}}))); equation connect(act1.y, triAndRes[1].u) annotation (Line( points={{-59,70},{-30,70},{-30,30},{-2,30}}, @@ -29,7 +31,7 @@ equation smooth=Smooth.None)); annotation ( __Dymola_Commands(file= - "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/TrimAndRespond.mos" + "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/TrimAndRespond.mos" "Simulate and plot"), experiment( StopTime=3600, diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/WSEControl.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/WSEControl.mo similarity index 77% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/WSEControl.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/WSEControl.mo index edb1179be0f..754b63743f5 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/WSEControl.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/WSEControl.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples; model WSEControl "Test model for WSEControl" extends Modelica.Icons.Example; Modelica.Blocks.Sources.Pulse wseCHWST( @@ -9,7 +9,7 @@ model WSEControl "Test model for WSEControl" Modelica.Blocks.Sources.Constant wseCWST(k=273.15 + 10) "WSE condenser water supply temperature" annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); - Buildings.Examples.ChillerPlant.BaseClasses.Controls.WSEControl wseCon + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.WSEControl wseCon "Controller for the water-side economizer" annotation (Placement(transformation(extent={{0,0},{20,20}}))); Modelica.Blocks.Sources.Constant TWetBub(k=273.15 + 5) "Wet bulb temperature" @@ -18,24 +18,24 @@ model WSEControl "Test model for WSEControl" annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); equation connect(TWetBub.y, wseCon.TWetBul) annotation (Line( - points={{-39,20},{-16,20},{-16,10},{-2,10}}, + points={{-39,20},{-16,20},{-16,10.5882},{-2,10.5882}}, color={0,0,127}, smooth=Smooth.None)); connect(TTowApp.y, wseCon.towTApp) annotation (Line( - points={{-39,-20},{-16,-20},{-16,6.25},{-2,6.25}}, + points={{-39,-20},{-16,-20},{-16,7.05882},{-2,7.05882}}, color={0,0,127}, smooth=Smooth.None)); connect(wseCHWST.y, wseCon.wseCHWST) annotation (Line( - points={{-39,60},{-10,60},{-10,16.25},{-2,16.25}}, + points={{-39,60},{-10,60},{-10,16.4706},{-2,16.4706}}, color={0,0,127}, smooth=Smooth.None)); connect(wseCWST.y, wseCon.wseCWST) annotation (Line( - points={{-39,-50},{-8,-50},{-8,1.375},{-2,1.375}}, + points={{-39,-50},{-8,-50},{-8,2.47059},{-2,2.47059}}, color={0,0,127}, smooth=Smooth.None)); annotation ( __Dymola_Commands(file= - "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/WSEControl.mos" + "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/WSEControl.mos" "Simulate and plot"), experiment( StopTime=3600, diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/package.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/package.mo similarity index 51% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/package.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/package.mo index df949c9a6fb..c97c7f1de0a 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/package.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/package.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls; package Examples "Test of components" extends Modelica.Icons.ExamplesPackage; @@ -6,8 +6,8 @@ extends Modelica.Icons.ExamplesPackage; annotation (preferredView="info", Documentation(info="

                        This package contains examples for the use of models that can be found in - -Buildings.Examples.ChillerPlant.BaseClasses.Controls. + +Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.

                        ")); end Examples; diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/package.order b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/package.order similarity index 100% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/Examples/package.order rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/package.order diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/KMinusU.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/KMinusU.mo similarity index 94% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/KMinusU.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/KMinusU.mo index f70eda0c7a9..3fb04e70039 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/KMinusU.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/KMinusU.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls; block KMinusU "Output y=k-u" extends Modelica.Blocks.Icons.Block; public diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/LinearPiecewiseTwo.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/LinearPiecewiseTwo.mo similarity index 96% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/LinearPiecewiseTwo.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/LinearPiecewiseTwo.mo index 5c9996ccb9c..4b220848b08 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/LinearPiecewiseTwo.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/LinearPiecewiseTwo.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls; block LinearPiecewiseTwo "A two-pieces linear piecewise function" extends Modelica.Blocks.Icons.Block; parameter Real x0 "First interval [x0, x1]"; @@ -29,11 +29,11 @@ equation color={0,0,127}, smooth=Smooth.None)); connect(y1Tab.y, y[1]) annotation (Line( - points={{-19,30},{26,30},{26,-7},{110,-7}}, + points={{-19,30},{26,30},{26,-4.5},{110,-4.5}}, color={0,0,127}, smooth=Smooth.None)); connect(y2Tab.y, y[2]) annotation (Line( - points={{-19,-30},{42,-30},{42,3},{110,3}}, + points={{-19,-30},{42,-30},{42,0.5},{110,0.5}}, color={0,0,127}, smooth=Smooth.None)); annotation ( diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/RequestCounter.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/RequestCounter.mo similarity index 97% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/RequestCounter.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/RequestCounter.mo index 198cb247c84..809cb8a3669 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/RequestCounter.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/RequestCounter.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls; block RequestCounter "Count the number of actuators that have request" extends Modelica.Blocks.Icons.Block annotation (Icon(Text( extent={{-48,48},{54,-32}}, diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/TrimAndRespond.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/TrimAndRespond.mo similarity index 98% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/TrimAndRespond.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/TrimAndRespond.mo index 0c91558f11f..e4de5b0073b 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/TrimAndRespond.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/TrimAndRespond.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls; block TrimAndRespond "Trim and respond logic" extends Modelica.Blocks.Interfaces.DiscreteSISO(firstTrigger(start=false, fixed=true)); parameter Real uTri "Value to triggering the request for actuator"; diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/TrimAndRespondContinuousTimeApproximation.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/TrimAndRespondContinuousTimeApproximation.mo similarity index 94% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/TrimAndRespondContinuousTimeApproximation.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/TrimAndRespondContinuousTimeApproximation.mo index ddc900145f4..548338d0bd3 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/TrimAndRespondContinuousTimeApproximation.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/TrimAndRespondContinuousTimeApproximation.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls; block TrimAndRespondContinuousTimeApproximation "Trim and respond logic" extends Modelica.Blocks.Interfaces.SISO; diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/WSEControl.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/WSEControl.mo similarity index 98% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/WSEControl.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/WSEControl.mo index 8f214d9864d..24f0ddf496e 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/WSEControl.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/WSEControl.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses.Controls; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls; model WSEControl "Control unit for WSE" parameter Modelica.Units.SI.TemperatureDifference dTOff=1 "Temperature difference to switch WSE off"; diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/package.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/package.mo similarity index 63% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/package.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/package.mo index 09532c3583f..0b495af74eb 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/package.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/package.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses; package Controls "Package with control components for Buildings.Examples.ChillerPlant" extends Modelica.Icons.VariantsPackage; @@ -6,7 +6,8 @@ extends Modelica.Icons.VariantsPackage; annotation (preferredView="info", Documentation(info="

                        This package contains component models that are used to construct the control system in -Buildings.Examples.ChillerPlant. + +Buildings.Examples.ChillerPlants.DataCenter.

                        ")); end Controls; diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/Controls/package.order b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/package.order similarity index 100% rename from Buildings/Examples/ChillerPlant/BaseClasses/Controls/package.order rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/package.order diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/DataCenter.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/DataCenter.mo similarity index 97% rename from Buildings/Examples/ChillerPlant/BaseClasses/DataCenter.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/DataCenter.mo index 836c3f938d9..2b91ef4c1ad 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/DataCenter.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/DataCenter.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses; partial model DataCenter "Primary only chiller plant system with water-side economizer" replaceable package MediumA = Buildings.Media.Air "Medium model"; @@ -130,10 +130,9 @@ partial model DataCenter Buildings.Fluid.Storage.ExpansionVessel expVesChi(redeclare package Medium = MediumW, V_start=1) annotation (Placement(transformation(extent={{236,143},{256,163}}))); - Buildings.Examples.ChillerPlant.BaseClasses.Controls.WSEControl wseCon - annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - origin={-150,-29}))); + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.WSEControl wseCon + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, origin={-150, + -29}))); Modelica.Blocks.Sources.RealExpression expTowTApp(y=cooTow.TApp_nominal) "Cooling tower approach" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, @@ -161,11 +160,11 @@ partial model DataCenter extent={{-10,10},{10,-10}}, rotation=270, origin={358,40}))); - Buildings.Examples.ChillerPlant.BaseClasses.Controls.ChillerSwitch chiSwi( - deaBan(displayUnit="K") = 2.2) + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.ChillerSwitch + chiSwi(deaBan(displayUnit="K") = 2.2) "Control unit switching chiller on or off " annotation (Placement(transformation(extent={{-226,83},{-206,103}}))); - Buildings.Examples.ChillerPlant.BaseClasses.Controls.LinearPiecewiseTwo + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.LinearPiecewiseTwo linPieTwo( x0=0, x2=1, @@ -193,8 +192,8 @@ partial model DataCenter extent={{-10,-10},{10,10}}, rotation=90, origin={98,180}))); - Buildings.Fluid.Sensors.TemperatureTwoPort TAirSup(redeclare package Medium = - MediumA, m_flow_nominal=mAir_flow_nominal) + Buildings.Fluid.Sensors.TemperatureTwoPort TAirSup(redeclare package Medium + = MediumA, m_flow_nominal=mAir_flow_nominal) "Supply air temperature to data center" annotation (Placement( transformation( extent={{10,-10},{-10,10}}, @@ -206,8 +205,8 @@ partial model DataCenter extent={{10,10},{-10,-10}}, rotation=270, origin={218,0}))); - Buildings.Fluid.Sensors.TemperatureTwoPort TCWLeaTow(redeclare package Medium = - MediumW, m_flow_nominal=mCW_flow_nominal) + Buildings.Fluid.Sensors.TemperatureTwoPort TCWLeaTow(redeclare package Medium + = MediumW, m_flow_nominal=mCW_flow_nominal) "Temperature of condenser water leaving the cooling tower" annotation ( Placement(transformation( extent={{10,-10},{-10,10}}, @@ -225,7 +224,7 @@ partial model DataCenter use_strokeTime=false, from_dp=true) "Bypass valve for chiller." annotation (Placement( transformation(extent={{-10,-10},{10,10}}, origin={288,20}))); - Buildings.Examples.ChillerPlant.BaseClasses.Controls.KMinusU KMinusU(k=1) + Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.KMinusU KMinusU(k=1) annotation (Placement(transformation(extent={{-60,28},{-40,48}}))); Buildings.Fluid.Actuators.Valves.TwoWayLinear val3( redeclare package Medium = MediumW, @@ -596,8 +595,8 @@ Documentation(info="

                        This model is the chilled water plant with discrete time control and trim and respond logic for a data center. The model is described at - -Buildings.Examples.ChillerPlant. + +Buildings.Examples.ChillerPlants.DataCenter.

                        ", revisions="
                          diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/DataCenterContinuousTimeControl.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/DataCenterContinuousTimeControl.mo similarity index 84% rename from Buildings/Examples/ChillerPlant/BaseClasses/DataCenterContinuousTimeControl.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/DataCenterContinuousTimeControl.mo index c3bd50221fe..260c8000f6e 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/DataCenterContinuousTimeControl.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/DataCenterContinuousTimeControl.mo @@ -1,6 +1,6 @@ -within Buildings.Examples.ChillerPlant.BaseClasses; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses; model DataCenterContinuousTimeControl - extends Buildings.Examples.ChillerPlant.DataCenterContinuousTimeControl; + extends Buildings.Examples.ChillerPlants.DataCenter.ContinuousTimeControl; Modelica.Blocks.Interfaces.RealOutput PAC "Alternate current power required for IT" annotation (Placement( transformation(extent={{-140,-230},{-120,-210}}), @@ -26,9 +26,9 @@ equation extent={{-100,100},{100,-100}}, lineColor={0,0,0}, fillColor={255,255,255}, - fillPattern=FillPattern.Solid), Bitmap(extent={{-88,88},{96,-78}}, + fillPattern=FillPattern.Solid), Bitmap(extent={{-88,-78},{96,88}}, fileName= - "modelica://Buildings/Resources/Images/Examples/ChillerPlant/DataCenter.png")}), + "modelica://Buildings/Resources/Images/Examples/ChillerPlant/DataCenter/DataCenter.png")}), Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-400,-300},{400, 300}}), graphics)); end DataCenterContinuousTimeControl; diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/SimplifiedRoom.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/SimplifiedRoom.mo similarity index 96% rename from Buildings/Examples/ChillerPlant/BaseClasses/SimplifiedRoom.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/SimplifiedRoom.mo index 8c2d2c63d69..5ca835a71da 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/SimplifiedRoom.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/SimplifiedRoom.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant.BaseClasses; +within Buildings.Examples.ChillerPlants.DataCenter.BaseClasses; model SimplifiedRoom "Simplified data center room" extends Buildings.BaseClasses.BaseIcon; replaceable package Medium = Modelica.Media.Interfaces.PartialMedium @@ -64,7 +64,7 @@ equation smooth=Smooth.None)); connect(TAir.port, rooVol.heatPort) annotation (Line(points={{40,0},{30,0},{ 30,-30},{41,-30}}, color={191,0,0})); - connect(TAir.T, TRooAir) annotation (Line(points={{60,0},{76,0},{110,0}}, + connect(TAir.T, TRooAir) annotation (Line(points={{61,0},{61,0},{110,0}}, color={0,0,127})); annotation ( Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/package.mo b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/package.mo similarity index 63% rename from Buildings/Examples/ChillerPlant/BaseClasses/package.mo rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/package.mo index 93e94e1b160..00288121692 100644 --- a/Buildings/Examples/ChillerPlant/BaseClasses/package.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/package.mo @@ -1,4 +1,4 @@ -within Buildings.Examples.ChillerPlant; +within Buildings.Examples.ChillerPlants.DataCenter; package BaseClasses "Package with base classes for Buildings.Examples.ChillerPlant" extends Modelica.Icons.BasesPackage; @@ -6,7 +6,8 @@ extends Modelica.Icons.BasesPackage; annotation (preferredView="info", Documentation(info="

                          This package contains base classes that are used to construct the models in -Buildings.Examples.ChillerPlant. + +Buildings.Examples.ChillerPlants.DataCenter.

                          ")); end BaseClasses; diff --git a/Buildings/Examples/ChillerPlant/BaseClasses/package.order b/Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/package.order similarity index 100% rename from Buildings/Examples/ChillerPlant/BaseClasses/package.order rename to Buildings/Examples/ChillerPlants/DataCenter/BaseClasses/package.order diff --git a/Buildings/Examples/ChillerPlant/DataCenterContinuousTimeControl.mo b/Buildings/Examples/ChillerPlants/DataCenter/ContinuousTimeControl.mo similarity index 76% rename from Buildings/Examples/ChillerPlant/DataCenterContinuousTimeControl.mo rename to Buildings/Examples/ChillerPlants/DataCenter/ContinuousTimeControl.mo index 6a8d6677c11..322cb721d83 100644 --- a/Buildings/Examples/ChillerPlant/DataCenterContinuousTimeControl.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/ContinuousTimeControl.mo @@ -1,7 +1,7 @@ -within Buildings.Examples.ChillerPlant; -model DataCenterContinuousTimeControl +within Buildings.Examples.ChillerPlants.DataCenter; +model ContinuousTimeControl "Model of data center that approximates the trim and respond logic" - extends Buildings.Examples.ChillerPlant.BaseClasses.DataCenter; + extends Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.DataCenter; extends Modelica.Icons.Example; BaseClasses.Controls.TrimAndRespondContinuousTimeApproximation triAndRes @@ -21,19 +21,19 @@ equation annotation ( __Dymola_Commands(file= - "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/DataCenterContinuousTimeControl.mos" + "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/ContinuousTimeControl.mos" "Simulate and plot"), Documentation(info="

                          This model is the chilled water plant with continuous time control. The trim and respond logic is approximated by a PI controller which significantly reduces computing time. The model is described at - -Buildings.Examples.ChillerPlant. + +Buildings.Examples.ChillerPlants.DataCenter.

                          See - -Buildings.Examples.ChillerPlant.DataCenterContinuousTimeControl + +Buildings.Examples.ChillerPlants.DataCenter.ContinuousTimeControl for an implementation with the discrete time trim and respond logic.

                          ", revisions=" @@ -53,4 +53,4 @@ First implementation. Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-400,-300},{400, 300}}), graphics), experiment(StartTime=13046400, Tolerance=1e-6, StopTime=13651200)); -end DataCenterContinuousTimeControl; +end ContinuousTimeControl; diff --git a/Buildings/Examples/ChillerPlant/DataCenterDiscreteTimeControl.mo b/Buildings/Examples/ChillerPlants/DataCenter/DiscreteTimeControl.mo similarity index 74% rename from Buildings/Examples/ChillerPlant/DataCenterDiscreteTimeControl.mo rename to Buildings/Examples/ChillerPlants/DataCenter/DiscreteTimeControl.mo index fd3cf4f8559..3bead68ed5e 100644 --- a/Buildings/Examples/ChillerPlant/DataCenterDiscreteTimeControl.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/DiscreteTimeControl.mo @@ -1,7 +1,7 @@ -within Buildings.Examples.ChillerPlant; -model DataCenterDiscreteTimeControl +within Buildings.Examples.ChillerPlants.DataCenter; +model DiscreteTimeControl "Model of data center with trim and respond control" - extends Buildings.Examples.ChillerPlant.BaseClasses.DataCenter; + extends Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.DataCenter; extends Modelica.Icons.Example; BaseClasses.Controls.TrimAndRespond triAndRes( @@ -24,8 +24,8 @@ equation pattern=LinePattern.Dash)); annotation ( __Dymola_Commands(file= - "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/DataCenterDiscreteTimeControl.mos" - "Simulate and plot"), Documentation(info=" + "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/DiscreteTimeControl.mos" + "Simulate and plot"), Documentation(info="

                          This model is the chilled water plant with trim and respond control, which is a discrete time control logic. @@ -33,13 +33,13 @@ which is a discrete time control logic.

                          The trim and respond logic is approximated by a PI controller which significantly reduces computing time. The model is described at - -Buildings.Examples.ChillerPlant. + +Buildings.Examples.ChillerPlants.DataCenter.

                          See - -Buildings.Examples.ChillerPlant.DataCenterContinuousTimeControl + +Buildings.Examples.ChillerPlants.DataCenter.ContinuousTimeControl for an implementation that approximates the trim and respond logic by a continuous time controller.

                          @@ -61,4 +61,4 @@ First implementation. 400,300}}), graphics), experiment(StartTime=13046400, Tolerance=1e-6, StopTime=13651200)); -end DataCenterDiscreteTimeControl; +end DiscreteTimeControl; diff --git a/Buildings/Examples/ChillerPlant/DataCenterRenewables.mo b/Buildings/Examples/ChillerPlants/DataCenter/Renewables.mo similarity index 96% rename from Buildings/Examples/ChillerPlant/DataCenterRenewables.mo rename to Buildings/Examples/ChillerPlants/DataCenter/Renewables.mo index 67a59300afc..a2365ecd8a8 100644 --- a/Buildings/Examples/ChillerPlant/DataCenterRenewables.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/Renewables.mo @@ -1,5 +1,5 @@ -within Buildings.Examples.ChillerPlant; -model DataCenterRenewables +within Buildings.Examples.ChillerPlants.DataCenter; +model Renewables "Model of a data center connected to renewable energy generation" extends Modelica.Icons.Example; BaseClasses.DataCenterContinuousTimeControl dataCenterContinuousTimeControl @@ -50,7 +50,7 @@ equation index=1, extent={{6,3},{6,3}})); connect(weaBus.winSpe, winTur.vWin) annotation (Line( - points={{-60,40},{-30,40},{-30,32}}, + points={{-59.95,40.05},{-30,40.05},{-30,32}}, color={255,204,51}, thickness=0.5, smooth=Smooth.None), Text( @@ -107,7 +107,7 @@ equation StopTime=604800, Tolerance=1e-6), __Dymola_Commands(file= - "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/DataCenterRenewables.mos" + "modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/Renewables.mos" "Simulate and plot"), Documentation(revisions="
                            @@ -136,4 +136,4 @@ This control logic is implemented using a finite state machine inside the model con.

                            ")); -end DataCenterRenewables; +end Renewables; diff --git a/Buildings/Examples/ChillerPlant/package.mo b/Buildings/Examples/ChillerPlants/DataCenter/package.mo similarity index 61% rename from Buildings/Examples/ChillerPlant/package.mo rename to Buildings/Examples/ChillerPlants/DataCenter/package.mo index 0d234d26457..b19359da8a7 100644 --- a/Buildings/Examples/ChillerPlant/package.mo +++ b/Buildings/Examples/ChillerPlants/DataCenter/package.mo @@ -1,5 +1,5 @@ -within Buildings.Examples; -package ChillerPlant "Chiller plant with water side economizer for data center" +within Buildings.Examples.ChillerPlants; +package DataCenter "Chiller plant with water side economizer for data center" extends Modelica.Icons.ExamplesPackage; @@ -7,22 +7,29 @@ extends Modelica.Icons.ExamplesPackage; annotation (Documentation(info="

                            System Configuration

                            -

                            This example demonstrates the implementation of a chiller plant with water-side economizer (WSE) to cool a data center. +

                            This example demonstrates the implementation of a chiller plant with water-side +economizer (WSE) to cool a data center. The system schematics is as shown below.

                            -\"image\" +\"image\"

                            The system is a primary-only chiller plant with integrated WSE. -The objective was to improve the energy efficiency of the chilled water plant by optimizing the control setpoints. +The objective was to improve the energy efficiency of the chilled water plant by +optimizing the control setpoints. The room of the data center was modeled using a mixed air volume with a heat source. -Heat conduction and air infiltration through the building envelope were neglected since the heat exchange between the room and the ambient environment was small compared to the heat released by the computers. +Heat conduction and air infiltration through the building envelope were neglected since +the heat exchange between the room and the ambient environment was small compared to +the heat released by the computers.

                            -The control objective was to maintain the temperature of the supply air to the room, while reducing energy consumption of the chilled water plant. +The control objective was to maintain the temperature of the supply air to the room, +while reducing energy consumption of the chilled water plant. The control was based on the control sequence proposed by Stein (2009). -To simplify the implementation, we only applied the controls for the differential pressure of the chilled water loop, the setpoint temperature of the chilled water leaving the chiller, and the chiller and WSE on/off control. +To simplify the implementation, we only applied the controls for the differential +pressure of the chilled water loop, the setpoint temperature of the chilled water +leaving the chiller, and the chiller and WSE on/off control.

                            Enabling/Disabling the WSE

                            @@ -39,8 +46,10 @@ The WSE is enabled when

                            where Tws is the temperature of chilled water leaving the cooling coil, Twet is the wet bulb temperature, -ΔTt is the temperature difference between the water leaving the cooling tower and the air entering the cooling tower, -ΔTw is the temperature difference between the chilled water leaving the WSE and the condenser water entering the WSE. +ΔTt is the temperature difference between the water leaving +the cooling tower and the air entering the cooling tower, +ΔTw is the temperature difference between the chilled water +leaving the WSE and the condenser water entering the WSE.

                            The WSE is disabled when @@ -53,7 +62,8 @@ The WSE is disabled when

                    -where Twc is the temperature of condenser water leaving the cooling tower, ΔTwse,off = 0.6 K is the offset temperature. +where Twc is the temperature of condenser water leaving the cooling +tower, ΔTwse,off = 0.6 K is the offset temperature.

                    Enabling/Disabling the Chiller

                    @@ -70,37 +80,46 @@ The control strategy is as follows:

                    -where Tchw,ent is the tempearture of chilled water entering the chiller, Tchi,set is the setpoint temperature of the chilled water leaving the chiller, and ΔTchi,ban is the dead-band to prevent short cycling. +where Tchw,ent is the tempearture of chilled water entering the +chiller, Tchi,set is the setpoint temperature of the chilled water +leaving the chiller, and ΔTchi,ban is the dead-band to prevent +short cycling.

                    Setpoint Reset

                    -The setpoint reset strategy is to first increase the different pressure, Δp, of the chilled water loop to increase the mass flow rate. -If Δp reaches the maximum value and further cooling is still needed, the chiller temperature setpoint, Tchi,set, is reduced. -If there is too much cooling, the Tchi,set and Δp will be changed in the reverse direction. +The setpoint reset strategy is to first increase the different pressure, Δp, +of the chilled water loop to increase the mass flow rate. +If Δp reaches the maximum value and further cooling is still needed, +the chiller temperature setpoint, Tchi,set, is reduced. +If there is too much cooling, the Tchi,set and Δp +will be changed in the reverse direction.

                    There are two implementations for the setpoint reset.

                    The model - -Buildings.Examples.ChillerPlant.DataCenterDiscreteTimeControl + +Buildings.Examples.ChillerPlants.DataCenter.DiscreteTimeControl implements a discrete time trim and respond logic as follows:

                    • A cooling request is triggered if the input signal, y, is larger than 0. -y is the difference between the actual and set temperature of the suppuly air to the data center room.
                    • -
                    • The request is sampled every 2 minutes. If there is a cooling request, the control signal u is increased by 0.03, where 0 ≤ u ≤ 1. +y is the difference between the actual and set temperature of the suppuly air +to the data center room.
                    • +
                    • The request is sampled every 2 minutes. If there is a cooling request, the control +signal u is increased by 0.03, where 0 ≤ u ≤ 1. If there is no cooling request, u is decreased by 0.03.

                    The model - -Buildings.Examples.ChillerPlant.DataCenterContinuousTimeControl uses a PI-controller to + +Buildings.Examples.ChillerPlants.DataCenter.ContinuousTimeControl uses a PI-controller to approximate the above trim and respond logic. This significantly reduces computing time.

                    -For both models, the control signal u is converted to setpoints for Δp and Tchi,set as follows: +For both models, the control signal u is converted to setpoints for Δp +and Tchi,set as follows:

                    • @@ -113,13 +132,17 @@ and

                    -where Δpmin and Δpmax are minimum and maximum values for Δp, -and Tmin and Tmax are the minimum and maximum values for Tchi,set. +where Δpmin and Δpmax are minimum and +maximum values for Δp, +and Tmin and Tmax are the minimum and maximum +values for Tchi,set.

                    Reference

                    -Stein, J. (2009). Waterside Economizing in Data Centers: Design and Control Considerations. ASHRAE Transactions, 115(2), 192-200.
                    -Taylor, S.T. (2007). Increasing Efficiency with VAV System Static Pressure Setpoint Reset. ASHRAE Journal, June, 24-32. +Stein, J. (2009). Waterside Economizing in Data Centers: Design and Control +Considerations. ASHRAE Transactions, 115(2), 192-200.
                    +Taylor, S.T. (2007). Increasing Efficiency with VAV System Static Pressure Setpoint +Reset. ASHRAE Journal, June, 24-32.

                    ")); -end ChillerPlant; +end DataCenter; diff --git a/Buildings/Examples/ChillerPlants/DataCenter/package.order b/Buildings/Examples/ChillerPlants/DataCenter/package.order new file mode 100644 index 00000000000..80a9b527379 --- /dev/null +++ b/Buildings/Examples/ChillerPlants/DataCenter/package.order @@ -0,0 +1,4 @@ +ContinuousTimeControl +DiscreteTimeControl +Renewables +BaseClasses diff --git a/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/Guideline36.mo b/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/Guideline36.mo new file mode 100644 index 00000000000..ea70cef7e04 --- /dev/null +++ b/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/Guideline36.mo @@ -0,0 +1,658 @@ +within Buildings.Examples.ChillerPlants.Guideline36.BaseClasses; +model Guideline36 "Chiller plant model with Guideline36 controller" + + extends + Buildings.Examples.ChillerPlants.Guideline36.BaseClasses.PartialChillerPlant + ( + senVolFlo(tau=10), + chi1(energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial), + chi2(energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)); +// parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal = 10 +// "Nominal mass flow rate in chilled water loop"; +// parameter Modelica.Units.SI.MassFlowRate mCon_flow_nominal = 10 +// "Nominal mass flow rate in condenser water loop"; + parameter Modelica.Units.SI.TemperatureDifference dTChi = 7 + "Nominal chilled water supply and return temperature difference"; + parameter Real speChe=0.005 + "Lower threshold value to check fan or pump speed"; + parameter Real loaChe=0.1 + "Load threshold value to check if chiller or cooling tower is running"; + parameter Real posChe=0.001 + "Position threshold value to check if the valve is open"; + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput chiPlaReq + "Number of chiller plant cooling requests" + annotation (Placement(transformation(extent={{-600,-210},{-560,-170}}), + iconTransformation(extent={{-200,-190},{-160,-150}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput TChiWatSupResReq + "Chilled water supply temperature setpoint reset request" + annotation (Placement(transformation(extent={{-600,-180},{-560,-140}}), + iconTransformation(extent={{-200,-150},{-160,-110}}))); + + Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Controller chiPlaCon( + final desCap=2*chiDesCap, + final chiDesCap={chiDesCap,chiDesCap}, + final chiMinCap={chiDesCap*0.1,chiDesCap*0.1}, + final have_WSE=false, + final nSenChiWatPum=1, + final have_fixSpeConWatPum=true, + final totSta=3, + final staVec={0,1,2}, + final desConWatPumSpe={0,0.5,0.75}, + final desConWatPumNum={0,2,2}, + final towCelOnSet={0,2,2}, + final nTowCel=2, + final TiHeaPreCon=100, + final minFloSet={0.1*mChi_flow_nominal/1000,0.1*mChi_flow_nominal/1000}, + final maxFloSet={0.75*mChi_flow_nominal/1000,0.75*mChi_flow_nominal/1000}, + final TiMinFloBypCon=100, + final VChiWat_flow_nominal=mChi_flow_nominal/1000, + final TiChiWatPum=100, + final dpChiWatPumMax={160000}, + final TiSupCon=100, + final speChe=speChe) + "Chiller plant controller" + annotation (Placement(transformation(extent={{-260,0},{-220,160}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold chiWatIso[2]( + final t=fill(posChe, 2), + final h=fill(0.5*posChe, 2)) + "Chilled water isolation valve status" + annotation (Placement(transformation(extent={{-400,320},{-380,340}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold conWatIso[2]( + final t=fill(posChe, 2), + final h=fill(0.5*posChe, 2)) + "Condenser water isolation valve status" + annotation (Placement(transformation(extent={{-400,280},{-380,300}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold chiSta[2]( + final t=fill(loaChe, 2), + final h=fill(0.5*loaChe, 2)) + "Chiller status, check if the chiller load is greater than zero " + annotation (Placement(transformation(extent={{-400,230},{-380,250}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiAva[2]( + final k=fill(true, 2)) + "Chiller availability" + annotation (Placement(transformation(extent={{-400,40},{-380,60}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold conWatPumSta[2]( + final t=fill(speChe, 2), + final h=fill(0.5*speChe, 2)) + "Condenser water pump status" + annotation (Placement(transformation(extent={{-400,150},{-380,170}}))); + Buildings.BoundaryConditions.WeatherData.Bus weaBus + "Weather data bus" + annotation (Placement(transformation(extent={{-570,30},{-550,50}}), + iconTransformation(extent={{-120,160},{-100,180}}))); + Modelica.Blocks.Routing.RealPassThrough TOut(y( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC", + min=0)) + annotation (Placement(transformation(extent={{-520,30},{-500,50}}))); + Modelica.Blocks.Routing.RealPassThrough TWetBul(y( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC", + min=0)) "Outdoor wet bulb temperature" + annotation (Placement(transformation(extent={{-520,70},{-500,90}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold chiWatPumSta[2]( + final t=fill(speChe, 2), + final h=fill(0.5*speChe, 2)) + "Chilled water pump status" + annotation (Placement(transformation(extent={{-400,-110},{-380,-90}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold towSta[2]( + final t=fill(loaChe, 2), + final h=fill(0.5*loaChe, 2)) + "Cooling tower status" + annotation (Placement(transformation(extent={{-400,-30},{-380,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conWatLev( + final k=0.9) "Constant cooling tower water level" + annotation (Placement(transformation(extent={{-520,-10},{-500,10}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMax cooTowFan( + final nin=2) + "Cooling tower fan speed" + annotation (Placement(transformation(extent={{-400,200},{-380,220}}))); + Modelica.Fluid.Interfaces.FluidPort_b portCooCoiSup( + redeclare package Medium =MediumW) + "Cooling coil loop supply" + annotation (Placement(transformation(extent={{190,-370},{210,-350}}), + iconTransformation(extent={{-130,-210},{-110,-190}}))); + Modelica.Fluid.Interfaces.FluidPort_a portCooCoiRet( + redeclare package Medium =MediumW) + "Cooling coil loop return" + annotation (Placement(transformation(extent={{430,-370},{450,-350}}), + iconTransformation(extent={{110,-210},{130,-190}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre2[2] "Break algebraic loop" + annotation (Placement(transformation(extent={{-340,320},{-320,340}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre3[2] "Break algebraic loop" + annotation (Placement(transformation(extent={{-340,280},{-320,300}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre4[2] "Break algebraic loop" + annotation (Placement(transformation(extent={{-354,230},{-334,250}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre5[2] "Break algebraic loop" + annotation (Placement(transformation(extent={{-360,-30},{-340,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre6[2] "Break algebraic loop" + annotation (Placement(transformation(extent={{-360,-110},{-340,-90}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol( + final samplePeriod=120) + "Sample value and break algebric loop" + annotation (Placement(transformation(extent={{360,-360},{380,-340}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol1[2]( + final samplePeriod=fill(120, 2)) + "Sample value and break algebric loop" + annotation (Placement(transformation(extent={{-460,300},{-440,320}}))); + Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol2( + final samplePeriod=120) + "Sample value and break algebric loop" + annotation (Placement(transformation(extent={{340,-110},{360,-90}}))); + + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold cheChiIsoVal[2]( + t=fill(0.95,2), + h=fill(0.025, 2)) + "Check if the chilled water isolation valve is open" + annotation (Placement(transformation(extent={{-100,56},{-80,76}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[2] + "Convert boolean input to real output" + annotation (Placement(transformation(extent={{-8,56},{12,76}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr anyChiIsoVal( + nin=2) + "Check if there is any open chilled water isolation valve" + annotation (Placement(transformation(extent={{-70,56},{-50,76}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booScaRep( + nout=2) "Duplicate boolean input" + annotation (Placement(transformation(extent={{-40,56},{-20,76}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply mul[2] + "Ensure chilled water pump operates only when there is open isolation valve" + annotation (Placement(transformation(extent={{30,30},{50,50}}))); + +protected + final parameter Modelica.Units.SI.SpecificHeatCapacity Cp = 4198 + "Water specific heat capacity"; + final parameter Modelica.Units.SI.HeatFlowRate chiDesCap = mChi_flow_nominal*dTChi*Cp + "Chiller design capacity"; + +equation + connect(chwIsoVal1.y_actual, chiWatIso[1].u) annotation (Line(points={{235,77}, + {100,77},{100,360},{-480,360},{-480,330},{-402,330}}, color={0,0,127})); + connect(chwIsoVal2.y_actual, chiWatIso[2].u) annotation (Line(points={{235,-13}, + {220,-13},{220,-4},{100,-4},{100,360},{-480,360},{-480,330},{-402,330}}, + color={0,0,127})); + connect(cwIsoVal1.y_actual, conWatIso[1].u) annotation (Line(points={{385,107}, + {400,107},{400,120},{110,120},{110,370},{-500,370},{-500,290},{-402, + 290}}, color={0,0,127})); + connect(cwIsoVal2.y_actual, conWatIso[2].u) annotation (Line(points={{385,17}, + {400,17},{400,40},{110,40},{110,370},{-500,370},{-500,290},{-402,290}}, + color={0,0,127})); + connect(chi2.P, chiSta[2].u) annotation (Line(points={{341,13},{352,13},{352,30}, + {90,30},{90,268},{-480,268},{-480,240},{-402,240}}, color={0,0,127})); + connect(chiWatSupTem.T, chiPlaCon.TChiWatSup) annotation (Line(points={{211, + -180},{300,-180},{300,-44},{-450,-44},{-450,96},{-264,96}}, color={0,0,127})); + connect(chiAva.y, chiPlaCon.uChiAva) annotation (Line(points={{-378,50},{-320, + 50},{-320,74},{-264,74}}, color={255,0,255})); + connect(conWatPum1.y_actual, conWatPumSta[1].u) annotation (Line(points={{207,199}, + {207,192},{-410,192},{-410,160},{-402,160}}, color={0,0,127})); + connect(conWatPum2.y_actual, conWatPumSta[2].u) annotation (Line(points={{267,199}, + {267,192},{-410,192},{-410,160},{-402,160}}, color={0,0,127})); + connect(weaBus.TDryBul, TOut.u) + annotation (Line(points={{-559.95,40.05},{-540,40.05},{-540,40},{-522, + 40}}, color={255,204,51}, thickness=0.5)); + connect(TOut.y, chiPlaCon.TOut) annotation (Line(points={{-499,40},{-440,40}, + {-440,32},{-264,32}}, color={0,0,127})); + connect(weaBus.TWetBul, TWetBul.u) annotation (Line(points={{-559.95,40.05},{ + -540,40.05},{-540,80},{-522,80}}, color={255,204,51},thickness=0.5)); + connect(TWetBul.y, cooTow2.TAir) annotation (Line(points={{-499,80},{-490,80}, + {-490,350},{360,350},{360,314},{342,314}}, color={0,0,127})); + connect(chiWatPum1.y_actual, chiWatPumSta[1].u) annotation (Line(points={{207, + -107},{207,-164},{-410,-164},{-410,-100},{-402,-100}}, color={0,0,127})); + connect(chiWatPum2.y_actual, chiWatPumSta[2].u) annotation (Line(points={{267, + -107},{267,-164},{-410,-164},{-410,-100},{-402,-100}}, color={0,0,127})); + connect(cooTow1.PFan, towSta[1].u) annotation (Line(points={{319,388},{-430,388}, + {-430,-20},{-402,-20}}, color={0,0,127})); + connect(cooTow2.PFan, towSta[2].u) annotation (Line(points={{319,318},{300,318}, + {300,388},{-430,388},{-430,-20},{-402,-20}}, color={0,0,127})); + connect(conWatLev.y, chiPlaCon.watLev) annotation (Line(points={{-498,0},{ + -380,0},{-380,8},{-264,8}}, color={0,0,127})); + connect(chiPlaCon.yConWatPumSpe[1], conWatPum1.y) annotation (Line(points={{-216,92}, + {120,92},{120,224},{220,224},{220,210},{212,210}}, color={0,0,127})); + connect(chiPlaCon.yConWatPumSpe[2], conWatPum2.y) annotation (Line(points={{-216,92}, + {120,92},{120,224},{280,224},{280,210},{272,210}}, color={0,0,127})); + connect(chiPlaCon.yConWatIsoVal[1], cwIsoVal1.y) annotation (Line(points={{-216, + 98},{70,98},{70,118},{380,118},{380,112}}, color={0,0,127})); + connect(chiPlaCon.yConWatIsoVal[2], cwIsoVal2.y) annotation (Line(points={{-216, + 98},{70,98},{70,50},{380,50},{380,22}}, color={0,0,127})); + connect(chi1.P, chiSta[1].u) annotation (Line(points={{341,103},{350,103},{ + 350,116},{90,116},{90,268},{-480,268},{-480,240},{-402,240}}, color={ + 0,0,127})); + connect(cooTow1.yFanSpe, cooTowFan.u[1]) annotation (Line(points={{318,384},{ + -420,384},{-420,209.5},{-402,209.5}}, color={0,0,127})); + connect(conWatSupTem.T, chiPlaCon.TConWatSup) annotation (Line(points={{271,280}, + {280,280},{280,260},{-330,260},{-330,16},{-264,16}}, color={0,0,127})); + connect(TWetBul.y, cooTow1.TAir) annotation (Line(points={{-499,80},{-490,80}, + {-490,350},{360,350},{360,384},{342,384}}, color={0,0,127})); + connect(cooTow2.yFanSpe, cooTowFan.u[2]) annotation (Line(points={{318,314},{ + 290,314},{290,384},{-420,384},{-420,210.5},{-402,210.5}}, color={0,0, + 127})); + connect(chiPlaCon.TChiWatSupSet, chi2.TSet) annotation (Line(points={{-216, + 136},{60,136},{60,1},{318,1}}, color={0,0,127})); + connect(chiPlaCon.TChiWatSupSet, chi1.TSet) annotation (Line(points={{-216, + 136},{140,136},{140,91},{318,91}}, color={0,0,127})); + connect(chiPlaCon.yMinValPosSet, valByp.y) annotation (Line(points={{-216,60}, + {-140,60},{-140,-200},{330,-200},{330,-208}}, color={0,0,127})); + connect(jun10.port_2, portCooCoiSup) annotation (Line( + points={{200,-230},{200,-360}}, + color={0,127,255}, + thickness=1)); + connect(res.port_a, portCooCoiRet) annotation (Line( + points={{440,-310},{440,-360}}, + color={0,127,255}, + thickness=1)); + connect(jun10.port_2, senRelPre.port_a) annotation (Line( + points={{200,-230},{200,-320},{320,-320}}, + color={0,127,255}, + thickness=1)); + connect(senRelPre.port_b, res.port_a) annotation (Line( + points={{340,-320},{440,-320},{440,-310}}, + color={0,127,255}, + thickness=1)); + connect(TChiWatSupResReq, chiPlaCon.TChiWatSupResReq) annotation (Line(points={{-580, + -160},{-320,-160},{-320,52},{-264,52}}, color={255,127,0})); + connect(chiPlaReq, chiPlaCon.chiPlaReq) annotation (Line(points={{-580,-190}, + {-300,-190},{-300,48},{-264,48}},color={255,127,0})); + connect(chiWatIso.y, pre2.u) + annotation (Line(points={{-378,330},{-342,330}}, color={255,0,255})); + connect(conWatIso.y, pre3.u) + annotation (Line(points={{-378,290},{-342,290}}, color={255,0,255})); + connect(chiSta.y, pre4.u) + annotation (Line(points={{-378,240},{-356,240}}, color={255,0,255})); + connect(towSta.y, pre5.u) + annotation (Line(points={{-378,-20},{-362,-20}}, color={255,0,255})); + connect(chiWatRet.T, chiPlaCon.TChiWatRet) annotation (Line(points={{429,-180}, + {400,-180},{400,-50},{-470,-50},{-470,104},{-264,104}}, color={0,0,127})); + connect(conWatRetTem.T, chiPlaCon.TConWatRet) annotation (Line(points={{409,280}, + {400,280},{400,254},{-320,254},{-320,100},{-264,100}}, color={0,0,127})); + connect(towIsoVal1.y_actual, chiPlaCon.uIsoVal[1]) annotation (Line(points={{375,387}, + {366,387},{366,420},{-310,420},{-310,11},{-264,11}}, color={0,0,127})); + connect(towIsoVal2.y_actual, chiPlaCon.uIsoVal[2]) annotation (Line(points={{375,317}, + {366,317},{366,420},{-310,420},{-310,13},{-264,13}}, color={0,0,127})); + connect(cooTowFan.y, chiPlaCon.uFanSpe) annotation (Line(points={{-378,210},{ + -270,210},{-270,20},{-264,20}}, color={0,0,127})); + connect(conWatPum1.y_actual, chiPlaCon.uConWatPumSpe[1]) annotation (Line( + points={{207,199},{207,192},{-350,192},{-350,40},{-264,40}}, color={0,0, + 127})); + connect(conWatPum2.y_actual, chiPlaCon.uConWatPumSpe[2]) annotation (Line( + points={{267,199},{267,192},{-350,192},{-350,40},{-264,40}}, color={0,0, + 127})); + connect(pre5.y, chiPlaCon.uTowSta) annotation (Line(points={{-338,-20},{-330, + -20},{-330,4},{-264,4}}, color={255,0,255})); + connect(conWatPumSta.y, chiPlaCon.uConWatPum) annotation (Line(points={{-378, + 160},{-340,160},{-340,36},{-264,36}}, color={255,0,255})); + connect(pre3.y, chiPlaCon.uChiHeaCon) annotation (Line(points={{-318,290},{ + -292,290},{-292,60},{-264,60}}, color={255,0,255})); + connect(pre2.y, chiPlaCon.uChiWatReq) annotation (Line(points={{-318,330},{ + -280,330},{-280,152},{-264,152}}, color={255,0,255})); + connect(pre2.y, chiPlaCon.uConWatReq) annotation (Line(points={{-318,330},{ + -280,330},{-280,148},{-264,148}}, color={255,0,255})); + connect(pre4.y, chiPlaCon.uChi) annotation (Line(points={{-332,240},{-300,240}, + {-300,120},{-264,120}}, color={255,0,255})); + connect(chiWatPumSta.y, pre6.u) + annotation (Line(points={{-378,-100},{-362,-100}}, color={255,0,255})); + connect(pre6.y, chiPlaCon.uChiWatPum) annotation (Line(points={{-338,-100},{ + -286,-100},{-286,144},{-264,144}}, color={255,0,255})); + connect(chiPlaCon.yChi[1], chi1.on) annotation (Line(points={{-216,112},{-130, + 112},{-130,20},{280,20},{280,97},{318,97}}, color={255,0,255})); + connect(chiPlaCon.yChi[2], chi2.on) annotation (Line(points={{-216,112},{-130, + 112},{-130,20},{280,20},{280,7},{318,7}}, color={255,0,255})); + connect(senRelPre.p_rel, zerOrdHol.u) annotation (Line(points={{330,-329},{330, + -350},{358,-350}}, color={0,0,127})); + connect(zerOrdHol.y, chiPlaCon.dpChiWat_remote[1]) annotation (Line(points={{382, + -350},{400,-350},{400,-380},{-480,-380},{-480,128},{-264,128}}, color={0, + 0,127})); + connect(chwIsoVal1.y_actual, zerOrdHol1[1].u) annotation (Line(points={{235,77}, + {100,77},{100,360},{-480,360},{-480,310},{-462,310}}, color={0,0,127})); + connect(chwIsoVal2.y_actual, zerOrdHol1[2].u) annotation (Line(points={{235,-13}, + {220,-13},{220,-4},{100,-4},{100,360},{-480,360},{-480,310},{-462,310}}, + color={0,0,127})); + connect(zerOrdHol1.y, chiPlaCon.uChiWatIsoVal) annotation (Line(points={{-438, + 310},{-360,310},{-360,56},{-264,56}}, color={0,0,127})); + connect(senVolFlo.V_flow, zerOrdHol2.u) annotation (Line(points={{429,-60},{320, + -60},{320,-100},{338,-100}}, color={0,0,127})); + connect(zerOrdHol2.y, chiPlaCon.VChiWat_flow) annotation (Line(points={{362, + -100},{380,-100},{380,-260},{-460,-260},{-460,124},{-264,124}}, color={0,0,127})); + connect(chiPlaCon.yTowCelIsoVal[1], towIsoVal1.y) annotation (Line(points={{-216, + 43},{-160,43},{-160,400},{380,400},{380,392},{380,392}}, color={0,0,127})); + connect(chiPlaCon.yTowCelIsoVal[2], towIsoVal2.y) annotation (Line(points={{-216, + 45},{-160,45},{-160,332},{380,332},{380,322}}, color={0,0,127})); + connect(chiPlaCon.yTowFanSpe[1], cooTow1.y) annotation (Line(points={{-216,31}, + {-170,31},{-170,410},{350,410},{350,388},{342,388}}, color={0,0,127})); + connect(chiPlaCon.yTowFanSpe[2], cooTow2.y) annotation (Line(points={{-216,33}, + {-170,33},{-170,340},{350,340},{350,318},{342,318}}, color={0,0,127})); + connect(chiPlaCon.yChiWatIsoVal[1], chwIsoVal1.y) annotation (Line(points={{ + -216,66},{-120,66},{-120,106},{240,106},{240,82}}, color={0,0,127})); + connect(chiPlaCon.yChiWatIsoVal[2], chwIsoVal2.y) annotation (Line(points={{ + -216,66},{-120,66},{-120,12},{240,12},{240,-8}}, color={0,0,127})); + connect(chiPlaCon.yChiWatIsoVal, cheChiIsoVal.u) + annotation (Line(points={{-216,66},{-102,66}}, color={0,0,127})); + connect(cheChiIsoVal.y, anyChiIsoVal.u) + annotation (Line(points={{-78,66},{-72,66}}, color={255,0,255})); + connect(anyChiIsoVal.y, booScaRep.u) + annotation (Line(points={{-48,66},{-42,66}}, color={255,0,255})); + connect(booScaRep.y, booToRea.u) + annotation (Line(points={{-18,66},{-10,66}}, color={255,0,255})); + connect(booToRea.y, mul.u1) annotation (Line(points={{14,66},{20,66},{20,46}, + {28,46}}, color={0,0,127})); + connect(chiPlaCon.yChiPumSpe, mul.u2) annotation (Line(points={{-216,124},{ + -180,124},{-180,34},{28,34}}, color={0,0,127})); + connect(mul[2].y, chiWatPum2.y) annotation (Line(points={{52,40},{80,40},{80, + -56},{280,-56},{280,-96},{272,-96}}, color={0,0,127})); + connect(mul[1].y, chiWatPum1.y) annotation (Line(points={{52,40},{80,40},{80, + -56},{220,-56},{220,-96},{212,-96}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-160,200}, + {160,-200}}), graphics={ + Rectangle( + extent={{-160,200},{160,-200}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-110,52},{-110,64},{-110,86},{-90,86},{-90,76}}, + color={238,46,47}, + thickness=0.5), + Rectangle(extent={{-60,40},{60,0}}, lineColor={28,108,200}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Line(points={{100,34},{60,34}}, color={238,46,47}, + thickness=0.5), + Polygon( + points={{-4,7},{-4,1},{4,4},{-4,7}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={75,30}), + Polygon( + points={{4,7},{4,1},{-4,4},{4,7}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={83,30}), + Line(points={{-60,6},{-120,6}}, color={28,108,200}, + thickness=0.5), + Polygon( + points={{-4,7},{-4,1},{4,4},{-4,7}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-83,2}), + Polygon( + points={{4,7},{4,1},{-4,4},{4,7}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-75,2}), + Rectangle(extent={{-60,-20},{60,-60}}, lineColor={28,108,200}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Line(points={{100,-26},{60,-26}},color={238,46,47}, + thickness=0.5), + Polygon( + points={{-4,7},{-4,1},{4,4},{-4,7}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={75,-30}), + Polygon( + points={{4,7},{4,1},{-4,4},{4,7}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={83,-30}), + Line(points={{-60,-54},{-120,-54}}, color={28,108,200}, + thickness=0.5), + Polygon( + points={{-4,7},{-4,1},{4,4},{-4,7}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-83,-58}), + Polygon( + points={{4,7},{4,1},{-4,4},{4,7}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-75,-58}), + Rectangle( + extent={{-48,178},{-16,120}}, + lineColor={0,0,0}, + lineThickness=0.5, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-35,178},{-30,171}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-32,172},{-48,168}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-16,172},{-32,168}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Line( + points={{-48,130},{-16,130}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.DashDot), + Rectangle( + extent={{16,178},{48,120}}, + lineColor={0,0,0}, + lineThickness=0.5, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{29,178},{34,171}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{32,172},{16,168}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{48,172},{32,168}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Line( + points={{16,130},{48,130}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.DashDot), + Line( + points={{-48,164},{-58,164}}, + color={238,46,47}, + thickness=0.5), + Line( + points={{-58,164},{-58,112}}, + color={238,46,47}, + thickness=0.5), + Line( + points={{-60,34},{-100,34}}, + color={238,46,47}, + thickness=0.5), + Ellipse( + extent={{-116,76},{-104,64}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-60,-28},{-100,-28}}, + color={238,46,47}, + thickness=0.5), + Polygon( + points={{-116,70},{-104,70},{-110,64},{-116,70}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-96,76},{-84,64}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-96,70},{-84,70},{-90,64},{-96,70}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-100,102},{32,102}}, + color={238,46,47}, + thickness=0.5), + Line(points={{32,120},{32,102}}, color={238,46,47}, + thickness=0.5), + Line( + points={{-32,120},{-32,102}}, + color={238,46,47}, + thickness=0.5), + Line( + points={{-90,64},{-90,52},{-110,52}}, + color={238,46,47}, + thickness=0.5), + Line( + points={{-100,86},{-100,102}}, + color={238,46,47}, + thickness=0.5), + Line( + points={{-100,52},{-100,10}}, + color={238,46,47}, + thickness=0.5), + Line(points={{-58,130}}, color={0,0,0}), + Line( + points={{100,-26},{100,2}}, + color={238,46,47}, + thickness=0.5), + Line( + points={{120,6},{60,6}}, + color={28,108,200}, + thickness=0.5), + Line( + points={{120,-54},{60,-54}}, + color={28,108,200}, + thickness=0.5), + Line( + points={{-130,-104},{-130,-92},{-130,-70},{-110,-70},{-110,-80}}, + color={28,108,200}, + thickness=0.5), + Ellipse( + extent={{-136,-80},{-124,-92}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-136,-86},{-124,-86},{-130,-92},{-136,-86}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-116,-80},{-104,-92}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-116,-86},{-104,-86},{-110,-92},{-116,-86}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-110,-92},{-110,-104},{-130,-104}}, + color={28,108,200}, + thickness=0.5), + Line( + points={{-120,-70},{-120,-54}}, + color={28,108,200}, + thickness=0.5), + Line( + points={{-120,-104},{-120,-200}}, + color={28,108,200}, + thickness=0.5), + Line( + points={{-120,6},{-120,-54}}, + color={28,108,200}, + thickness=0.5), + Line( + points={{120,6},{120,-200}}, + color={28,108,200}, + thickness=0.5), + Line(points={{120,-120},{-120,-120}}, color={28,108,200}, + thickness=0.5), + Polygon( + points={{-4,7},{-4,1},{4,4},{-4,7}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-3,-124}), + Polygon( + points={{4,7},{4,1},{-4,4},{4,7}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={5,-124}), + Text( + extent={{-22,30},{24,12}}, + textColor={0,0,0}, + textString="CH1"), + Text( + extent={{-22,-28},{24,-46}}, + textColor={0,0,0}, + textString="CH2"), + Line( + points={{-100,-28},{-100,2}}, + color={238,46,47}, + thickness=0.5), + Line( + points={{100,34},{100,10}}, + color={238,46,47}, + thickness=0.5), + Text( + extent={{-60,200},{52,264}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-58,112},{-34,112}}, + color={238,46,47}, + thickness=0.5), + Line( + points={{6,112},{-30,112}}, + color={238,46,47}, + thickness=0.5), + Line( + points={{6,112},{6,164},{16,164}}, + color={238,46,47}, + thickness=0.5), + Line( + points={{6,112},{28,112}}, + color={238,46,47}, + thickness=0.5), + Line( + points={{100,34},{100,112},{34,112}}, + color={238,46,47}, + thickness=0.5)}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-560,-440},{560,440}})), +Documentation(info=" +

                    +This model instantiates the chiller plant sequence + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Controller +and connects it with the chiller plant system model + +Buildings.Examples.ChillerPlants.Guideline36.BaseClasses.PartialChillerPlant. +

                    +", revisions=" +
                      +
                    • +March 12, 2024, by Jianjun Hu:
                      +First implementation. +
                    • +
                    +")); +end Guideline36; diff --git a/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/PartialChillerPlant.mo b/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/PartialChillerPlant.mo new file mode 100644 index 00000000000..c6fe17a3b73 --- /dev/null +++ b/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/PartialChillerPlant.mo @@ -0,0 +1,474 @@ +within Buildings.Examples.ChillerPlants.Guideline36.BaseClasses; +partial model PartialChillerPlant "Partial model of the chiller plant for the closed-loop test" + + package MediumW = Buildings.Media.Water; + parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal + "Nominal mass flow rate in chilled water loop"; + final parameter Modelica.Units.SI.PressureDifference dpChi_nominal=80000+80000 + "Nominal pressure difference in chilled water loop"; + parameter Modelica.Units.SI.MassFlowRate mCon_flow_nominal + "Nominal mass flow rate in condenser water loop"; + final parameter Modelica.Units.SI.PressureDifference dpCon_nominal=50000+15000+75000 + "Nominal pressure difference in condenser water loop"; + + Buildings.Examples.ChillerPlants.Guideline36.BaseClasses.YorkCalc cooTow1( + redeclare package Medium = MediumW, + final m_flow_nominal=mCon_flow_nominal, + final show_T=true, + final dp_nominal=15000 + 75000, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Cooling tower" + annotation (Placement(transformation(extent={{340,370},{320,390}}))); + Buildings.Examples.ChillerPlants.Guideline36.BaseClasses.YorkCalc cooTow2( + redeclare package Medium = MediumW, + final m_flow_nominal=mCon_flow_nominal, + final show_T=true, + final dp_nominal=15000 + 75000, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Cooling tower" + annotation (Placement(transformation(extent={{340,300},{320,320}}))); + Buildings.Fluid.Movers.SpeedControlled_y conWatPum1( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + per(pressure(V_flow={0,mCon_flow_nominal,2*mCon_flow_nominal}/1.2, + dp={2*dpCon_nominal,dpCon_nominal,0}))) + "Condenser water pump" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90,origin={200,210}))); + Buildings.Fluid.Movers.SpeedControlled_y conWatPum2( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + per(pressure(V_flow={0,mCon_flow_nominal,2*mCon_flow_nominal}/1.2, + dp={2*dpCon_nominal,dpCon_nominal,0}))) + "Condenser water pump" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90,origin={260,210}))); + Buildings.Fluid.Actuators.Valves.TwoWayLinear cwIsoVal1( + redeclare package Medium = MediumW, + final m_flow_nominal=mCon_flow_nominal, + final show_T=true, + final dpValve_nominal=15000, + final dpFixed_nominal=0) + "Condenser water isolation valve" + annotation (Placement(transformation(extent={{370,90},{390,110}}))); + Buildings.Fluid.Actuators.Valves.TwoWayLinear cwIsoVal2( + redeclare package Medium = MediumW, + final m_flow_nominal=mCon_flow_nominal, + final show_T=true, + final dpValve_nominal=15000, + final dpFixed_nominal=0) + "Condenser water isolation valve" + annotation (Placement(transformation(extent={{370,0},{390,20}}))); + Buildings.Fluid.Actuators.Valves.TwoWayLinear chwIsoVal1( + redeclare package Medium = MediumW, + final m_flow_nominal=mChi_flow_nominal, + final show_T=true, + final dpValve_nominal=15000, + final dpFixed_nominal=80000) + "Chilled water isolation valve" + annotation (Placement(transformation(extent={{250,60},{230,80}}))); + Buildings.Fluid.Actuators.Valves.TwoWayLinear chwIsoVal2( + redeclare package Medium = MediumW, + final m_flow_nominal=mChi_flow_nominal, + final show_T=true, + final dpValve_nominal=15000, + final dpFixed_nominal=80000) + "Chilled water isolation valve" + annotation (Placement(transformation(extent={{250,-30},{230,-10}}))); + Buildings.Fluid.FixedResistances.Junction jun( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final m_flow_nominal={mCon_flow_nominal,mCon_flow_nominal,mCon_flow_nominal}, + final dp_nominal={0,0,0}) "Flow junction" + annotation (Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=-90,origin={260,100}))); + Buildings.Fluid.FixedResistances.Junction jun1( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final m_flow_nominal={mCon_flow_nominal,mCon_flow_nominal,mCon_flow_nominal}, + final dp_nominal={0,0,0}) "Flow junction" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90,origin={260,240}))); + Buildings.Fluid.FixedResistances.Junction jun2( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final m_flow_nominal={mCon_flow_nominal,mCon_flow_nominal,mCon_flow_nominal}, + final dp_nominal={0,0,0}) "Flow junction" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90,origin={260,140}))); + Buildings.Fluid.FixedResistances.Junction jun3( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final m_flow_nominal={mCon_flow_nominal,mCon_flow_nominal,mCon_flow_nominal}, + final dp_nominal={0,0,0}) "Flow junction" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=90,origin={260,310}))); + Buildings.Fluid.FixedResistances.Junction jun4( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final m_flow_nominal={mCon_flow_nominal,mCon_flow_nominal,mCon_flow_nominal}, + final dp_nominal={0,0,0}) "Flow junction" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=-90,origin={420,100}))); + Buildings.Fluid.Actuators.Valves.TwoWayLinear towIsoVal2( + redeclare package Medium = MediumW, + final m_flow_nominal=mCon_flow_nominal, + final show_T=true, + final dpValve_nominal=15000, + final dpFixed_nominal=50000) + "Cooling tower isolation valve" + annotation (Placement(transformation(extent={{390,300},{370,320}}))); + Buildings.Fluid.Actuators.Valves.TwoWayLinear towIsoVal1( + redeclare package Medium = MediumW, + final m_flow_nominal=mCon_flow_nominal, + final show_T=true, + final dpValve_nominal=15000, + final dpFixed_nominal=50000) + "Cooling tower isolation valve" + annotation (Placement(transformation(extent={{390,370},{370,390}}))); + Buildings.Fluid.FixedResistances.Junction jun5( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final m_flow_nominal={mCon_flow_nominal,mCon_flow_nominal,mCon_flow_nominal}, + final dp_nominal={0,0,0}) "Flow junction" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=-90,origin={420,310}))); + Buildings.Fluid.FixedResistances.Junction jun6( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final m_flow_nominal={mChi_flow_nominal,mChi_flow_nominal,mChi_flow_nominal}, + final dp_nominal={0,0,0}) "Flow junction" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=-90,origin={440,-20}))); + Buildings.Fluid.FixedResistances.Junction jun7( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final m_flow_nominal={mChi_flow_nominal,mChi_flow_nominal,mChi_flow_nominal}, + final dp_nominal={0,0,0}) "Flow junction" + annotation (Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=-90,origin={200,-20}))); + Buildings.Fluid.Movers.SpeedControlled_y chiWatPum1( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + per(pressure(V_flow={0,mChi_flow_nominal,2*mChi_flow_nominal}/1.2, + dp={2*dpChi_nominal,dpChi_nominal,0}))) + "Chilled water pump" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90,origin={200,-96}))); + Buildings.Fluid.Movers.SpeedControlled_y chiWatPum2( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + per(pressure(V_flow={0,mChi_flow_nominal,2*mChi_flow_nominal}/1.2, + dp={2*dpChi_nominal,dpChi_nominal,0}))) + "Chilled water pump" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90,origin={260,-96}))); + Buildings.Fluid.FixedResistances.Junction jun8( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final m_flow_nominal={mChi_flow_nominal,mChi_flow_nominal,mChi_flow_nominal}, + final dp_nominal={0,0,0}) "Flow junction" + annotation (Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=-90,origin={200,-70}))); + Buildings.Fluid.FixedResistances.Junction jun9( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final m_flow_nominal={mChi_flow_nominal,mChi_flow_nominal,mChi_flow_nominal}, + final dp_nominal={0,0,0}) "Flow junction" + annotation (Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=-90,origin={200,-150}))); + Buildings.Fluid.FixedResistances.Junction jun10( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final m_flow_nominal={mChi_flow_nominal,mChi_flow_nominal,mChi_flow_nominal}, + final dp_nominal={0,0,0}) "Flow junction" + annotation (Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=-90,origin={200,-220}))); + Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage valByp( + redeclare package Medium = MediumW, + final m_flow_nominal=mChi_flow_nominal, + final show_T=true, + final dpValve_nominal=15000, + final dpFixed_nominal=8000) + "Bypass valve for chiller" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, origin={330,-220}))); + Buildings.Fluid.FixedResistances.Junction jun11( + redeclare package Medium = MediumW, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final m_flow_nominal={mChi_flow_nominal,mChi_flow_nominal,mChi_flow_nominal}, + final dp_nominal={0,0,0}) "Flow junction" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=-90, origin={440,-220}))); + Buildings.Fluid.Sensors.TemperatureTwoPort chiWatSupTem(redeclare package + Medium = MediumW, final m_flow_nominal=mChi_flow_nominal) + "Chilled water supply temperature" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={200,-180}))); + Buildings.Fluid.Sensors.TemperatureTwoPort chiWatRet( + redeclare package Medium = MediumW, + final m_flow_nominal=mChi_flow_nominal) + "Chilled water return temperature, after bypass" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=90,origin={440,-180}))); + Buildings.Fluid.Sensors.TemperatureTwoPort chiWatRet1( + redeclare package Medium = MediumW, + final m_flow_nominal=mChi_flow_nominal) + "Chilled water return temperature, before bypass" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=90,origin={440,-260}))); + Buildings.Fluid.Sensors.VolumeFlowRate senVolFlo( + redeclare package Medium = MediumW, + final m_flow_nominal=mChi_flow_nominal) "Chilled water mass flow sensor" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=90,origin={440,-60}))); + Buildings.Fluid.Sensors.TemperatureTwoPort conWatSupTem( + redeclare package Medium = MediumW, + final m_flow_nominal=mCon_flow_nominal) + "Condenser water supply temperature, to the chiller condenser" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90,origin={260,280}))); + Buildings.Fluid.Sensors.TemperatureTwoPort conWatRetTem( + redeclare package Medium = MediumW, + final m_flow_nominal=mCon_flow_nominal) + "Condenser water supply temperature, from the chiller condenser" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=90,origin={420,280}))); + Buildings.Fluid.Sensors.RelativePressure senRelPre( + redeclare package Medium = MediumW) + annotation (Placement(transformation(extent={{320,-330},{340,-310}}))); + Buildings.Fluid.FixedResistances.PressureDrop res( + redeclare package Medium = MediumW, + final m_flow_nominal=mChi_flow_nominal, + final dp_nominal=80000) + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=90, origin={440,-300}))); + Buildings.Fluid.Chillers.ElectricEIR chi1( + redeclare package Medium1 = MediumW, + redeclare package Medium2 = MediumW, + final m1_flow_nominal=mCon_flow_nominal, + final m2_flow_nominal=mChi_flow_nominal, + final dp1_nominal=0, + final dp2_nominal=0, + per=Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Carrier_19XR_742kW_5_42COP_VSD()) + "Chiller one" + annotation (Placement(transformation(extent={{320,84},{340,104}}))); + Buildings.Fluid.Chillers.ElectricEIR chi2( + redeclare package Medium1 = MediumW, + redeclare package Medium2 = MediumW, + final m1_flow_nominal=mCon_flow_nominal, + final m2_flow_nominal=mChi_flow_nominal, + final dp1_nominal=0, + final dp2_nominal=0, + per=Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Carrier_19XR_742kW_5_42COP_VSD()) + "Chiller two" + annotation (Placement(transformation(extent={{320,-6},{340,14}}))); + Buildings.Fluid.Sources.Boundary_pT bou( + redeclare package Medium = MediumW, + nPorts=1) + "Reference pressure" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=180,origin={470,110}))); + Buildings.Fluid.FixedResistances.CheckValve cheVal( + redeclare package Medium = MediumW, + m_flow_nominal=mCon_flow_nominal, + dpValve_nominal=3400, + l=1e-4) + "Check valve to avoid reverse flow" + annotation (Placement(transformation(extent={{-10,-11},{10,11}}, + rotation=-90, origin={200,169}))); + Buildings.Fluid.FixedResistances.CheckValve cheVal1( + redeclare package Medium = MediumW, + m_flow_nominal=mCon_flow_nominal, + dpValve_nominal=3400, + l=1e-4) + "Check valve to avoid reverse flow" + annotation (Placement(transformation(extent={{-10,-11},{10,11}}, + rotation=-90, origin={260,169}))); + Buildings.Fluid.FixedResistances.CheckValve cheVal2( + redeclare package Medium = MediumW, + m_flow_nominal=mChi_flow_nominal, + dpValve_nominal=3400, + l=1e-4) + "Check valve to avoid reverse flow" + annotation (Placement(transformation(extent={{-10,-11},{10,11}}, + rotation=-90, origin={200,-123}))); + Buildings.Fluid.FixedResistances.CheckValve cheVal3( + redeclare package Medium = MediumW, + m_flow_nominal=mChi_flow_nominal, + dpValve_nominal=3400, + l=1e-4) + "Check valve to avoid reverse flow" + annotation (Placement(transformation(extent={{-10,-11},{10,11}}, + rotation=-90, origin={260,-125}))); +equation + connect(jun3.port_1, cooTow1.port_b) + annotation (Line(points={{260,320},{260,380},{320,380}}, color={238,46,47}, + thickness=1)); + connect(jun3.port_3, cooTow2.port_b) + annotation (Line(points={{270,310},{320,310}}, color={238,46,47}, + thickness=1)); + connect(cooTow1.port_a, towIsoVal1.port_b) + annotation (Line(points={{340,380},{370,380}}, color={238,46,47}, + thickness=1)); + connect(cooTow2.port_a, towIsoVal2.port_b) + annotation (Line(points={{340,310},{370,310}}, color={238,46,47}, + thickness=1)); + connect(cwIsoVal2.port_b, jun4.port_1) + annotation (Line(points={{390,10},{420,10},{420,90}}, color={238,46,47}, + thickness=1)); + connect(cwIsoVal1.port_b, jun4.port_3) + annotation (Line(points={{390,100},{410,100}}, color={238,46,47}, + thickness=1)); + connect(jun5.port_2, towIsoVal1.port_a) + annotation (Line(points={{420,320},{420,380},{390,380}}, color={238,46,47}, + thickness=1)); + connect(jun5.port_3, towIsoVal2.port_a) + annotation (Line(points={{410,310},{390,310}}, color={238,46,47}, + thickness=1)); + connect(chwIsoVal1.port_b, jun7.port_1) + annotation (Line(points={{230,70},{200,70},{200,-10}}, color={0,127,255}, + thickness=1)); + connect(jun7.port_3, chwIsoVal2.port_b) + annotation (Line(points={{210,-20},{230,-20}}, color={0,127,255}, + thickness=1)); + connect(jun7.port_2, jun8.port_1) + annotation (Line(points={{200,-30},{200,-60}}, color={0,127,255}, + thickness=1)); + connect(jun8.port_3,chiWatPum2. port_a) + annotation (Line(points={{210,-70},{260,-70},{260,-86}}, color={0,127,255}, + thickness=1)); + connect(jun8.port_2,chiWatPum1. port_a) + annotation (Line(points={{200,-80},{200,-86}}, color={0,127,255}, + thickness=1)); + connect(jun10.port_3, valByp.port_a) + annotation (Line(points={{210,-220},{320,-220}}, color={0,127,255}, + thickness=1)); + connect(valByp.port_b, jun11.port_3) + annotation (Line(points={{340,-220},{430,-220}}, color={0,127,255}, + thickness=1)); + connect(jun.port_1, jun2.port_2) + annotation (Line(points={{260,110},{260,130}}, color={238,46,47}, + thickness=1)); + connect(conWatPum2.port_a, jun1.port_2) + annotation (Line(points={{260,220},{260,230}}, color={238,46,47}, + thickness=1)); + connect(conWatPum1.port_a, jun1.port_3) + annotation (Line(points={{200,220},{200,240},{250,240}}, color={238,46,47}, + thickness=1)); + connect(jun9.port_2, chiWatSupTem.port_a) annotation (Line( + points={{200,-160},{200,-170}}, + color={0,127,255}, + thickness=1)); + connect(chiWatSupTem.port_b, jun10.port_1) annotation (Line( + points={{200,-190},{200,-210}}, + color={0,127,255}, + thickness=1)); + connect(jun11.port_2, chiWatRet.port_a) + annotation (Line(points={{440,-210},{440,-190}}, color={0,127,255}, + thickness=1)); + connect(chiWatRet1.port_b, jun11.port_1) + annotation (Line(points={{440,-250},{440,-230}}, color={0,127,255}, + thickness=1)); + connect(senVolFlo.port_b, jun6.port_1) + annotation (Line(points={{440,-50},{440,-30}}, color={0,127,255}, + thickness=1)); + connect(jun1.port_1, conWatSupTem.port_b) + annotation (Line(points={{260,250},{260,270}}, color={238,46,47}, + thickness=1)); + connect(conWatSupTem.port_a, jun3.port_2) + annotation (Line(points={{260,290},{260,300}}, color={238,46,47}, + thickness=1)); + connect(jun4.port_2, conWatRetTem.port_a) + annotation (Line(points={{420,110},{420,270}}, color={238,46,47}, + thickness=1)); + connect(conWatRetTem.port_b, jun5.port_1) + annotation (Line(points={{420,290},{420,300}}, color={238,46,47}, + thickness=1)); + connect(chiWatRet1.port_a, res.port_b) + annotation (Line(points={{440,-270},{440,-290}}, color={0,127,255}, + thickness=1)); + connect(jun.port_3, chi1.port_a1) + annotation (Line(points={{270,100},{320,100}}, color={238,46,47}, + thickness=1)); + connect(chi1.port_b1, cwIsoVal1.port_a) + annotation (Line(points={{340,100},{370,100}}, color={238,46,47}, + thickness=1)); + connect(jun.port_2, chi2.port_a1) + annotation (Line(points={{260,90},{260,10},{320,10}}, color={238,46,47}, + thickness=1)); + connect(chi2.port_b1, cwIsoVal2.port_a) + annotation (Line(points={{340,10},{370,10}}, color={238,46,47}, + thickness=1)); + connect(chwIsoVal1.port_a, chi1.port_b2) + annotation (Line(points={{250,70},{300,70},{300,88},{320,88}}, color={0,127,255}, + thickness=1)); + connect(chi1.port_a2, jun6.port_2) + annotation (Line(points={{340,88},{360,88},{360,70},{440,70},{440,-10}}, color={0,127,255}, + thickness=1)); + connect(chwIsoVal2.port_a, chi2.port_b2) + annotation (Line(points={{250,-20},{300,-20},{300,-2},{320,-2}}, color={0,127,255}, + thickness=1)); + connect(chi2.port_a2, jun6.port_3) + annotation (Line(points={{340,-2},{360,-2},{360,-20},{430,-20}}, color={0,127,255}, + thickness=1)); + connect(chiWatRet.port_b, senVolFlo.port_a) + annotation (Line(points={{440,-170},{440,-70}},color={0,127,255}, + thickness=1)); + connect(jun4.port_2, bou.ports[1]) + annotation (Line(points={{420,110},{460,110}}, color={238,46,47}, + thickness=1)); + connect(conWatPum1.port_b, cheVal.port_a) annotation (Line( + points={{200,200},{200,179}}, + color={238,46,47}, + thickness=1)); + connect(cheVal.port_b, jun2.port_3) annotation (Line( + points={{200,159},{200,140},{250,140}}, + color={238,46,47}, + thickness=1)); + connect(jun2.port_1, cheVal1.port_b) annotation (Line( + points={{260,150},{260,159}}, + color={238,46,47}, + thickness=1)); + connect(cheVal1.port_a, conWatPum2.port_b) annotation (Line( + points={{260,179},{260,200}}, + color={238,46,47}, + thickness=1)); + connect(chiWatPum1.port_b, cheVal2.port_a) annotation (Line( + points={{200,-106},{200,-113}}, + color={0,127,255}, + thickness=1)); + connect(cheVal2.port_b, jun9.port_1) annotation (Line( + points={{200,-133},{200,-140}}, + color={0,127,255}, + thickness=1)); + connect(chiWatPum2.port_b, cheVal3.port_a) annotation (Line( + points={{260,-106},{260,-115}}, + color={0,127,255}, + thickness=1)); + connect(cheVal3.port_b, jun9.port_3) annotation (Line( + points={{260,-135},{260,-150},{210,-150}}, + color={0,127,255}, + thickness=1)); + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-580,-440},{580,440}})), + Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-580,-440},{580,440}}), + graphics={Line(points={{290,46}},color={28,108,200})}), +Documentation(info=" +

                    +This is a partial model for a primary-only chiller plant with two parallel chillers. +It has two headed variable speed chilled water pumps, two headed constant speed +condenser water pumps, and two cooling tower units. +Detailed description can be found in + +Buildings.Examples.ChillerPlants.RP1711. +

                    +", revisions=" +
                      +
                    • +March 12, 2024, by Jianjun Hu:
                      +First implementation. +
                    • +
                    +")); +end PartialChillerPlant; diff --git a/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/YorkCalc.mo b/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/YorkCalc.mo new file mode 100644 index 00000000000..6f76d53d4ea --- /dev/null +++ b/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/YorkCalc.mo @@ -0,0 +1,43 @@ +within Buildings.Examples.ChillerPlants.Guideline36.BaseClasses; +model YorkCalc + "Cooling tower with variable speed using the York calculation for the approach temperature and output the actual fan speed" + extends Buildings.Fluid.HeatExchangers.CoolingTowers.YorkCalc; + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yFanSpe + annotation (Placement(transformation(extent={{100,30},{120,50}}), + iconTransformation(extent={{100,20},{140,60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFanSpe( + final k=yMin) + "Minimum tower fan speed" + annotation (Placement(transformation(extent={{-60,24},{-40,44}}))); + Buildings.Controls.OBC.CDL.Reals.Max actSpe + "Actual fan speed" + annotation (Placement(transformation(extent={{60,30},{80,50}}))); + +equation + connect(actSpe.y, yFanSpe) + annotation (Line(points={{82,40},{110,40}}, color={0,0,127})); + connect(y, actSpe.u1) annotation (Line(points={{-120,80},{40,80},{40,46},{58,46}}, + color={0,0,127})); + connect(minFanSpe.y, actSpe.u2) + annotation (Line(points={{-38,34},{58,34}}, color={0,0,127})); + +annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Text(extent={{72,34},{106,16}}, textColor={0,0,127}, textString="yFanSpe")}), + Diagram(coordinateSystem(preserveAspectRatio=false)), +Documentation(info=" +

                    +This model extends +Buildings.Fluid.HeatExchangers.CoolingTowers.YorkCalc, with the output of the +actual fan speed, which is the lower value between y and the tower +minimum speed yMin. +

                    +", revisions=" +
                      +
                    • +March 12, 2024, by Jianjun Hu:
                      +First implementation. +
                    • +
                    +")); +end YorkCalc; diff --git a/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/package.mo b/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/package.mo new file mode 100644 index 00000000000..97b4048b104 --- /dev/null +++ b/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/package.mo @@ -0,0 +1,12 @@ +within Buildings.Examples.ChillerPlants.Guideline36; +package BaseClasses "Package with base classes for chilled plant closed loop test model" + extends Modelica.Icons.BasesPackage; + +annotation (preferredView="info", Documentation(info=" +

                    +This package contains base classes that are used to construct the example model in + +Buildings.Examples.ChillerPlants.Guideline36.ClosedLoop. +

                    +")); +end BaseClasses; diff --git a/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/package.order b/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/package.order new file mode 100644 index 00000000000..5d8ea49428a --- /dev/null +++ b/Buildings/Examples/ChillerPlants/Guideline36/BaseClasses/package.order @@ -0,0 +1,3 @@ +Guideline36 +PartialChillerPlant +YorkCalc diff --git a/Buildings/Examples/ChillerPlants/Guideline36/ClosedLoop.mo b/Buildings/Examples/ChillerPlants/Guideline36/ClosedLoop.mo new file mode 100644 index 00000000000..65fddbcdc5a --- /dev/null +++ b/Buildings/Examples/ChillerPlants/Guideline36/ClosedLoop.mo @@ -0,0 +1,326 @@ +within Buildings.Examples.ChillerPlants.Guideline36; +model ClosedLoop + extends Modelica.Icons.Example; + + package MediumW = Buildings.Media.Water; + package MediumA = Buildings.Media.Air; + + parameter Modelica.Media.Interfaces.Types.Temperature TRet=301.15 + "Room return air temperature"; + parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal=10 + "Nominal mass flow rate of air"; + parameter Modelica.Units.SI.MassFlowRate mWater_flow_nominal=6 + "Nominal mass flow rate of water"; + + parameter Modelica.Units.SI.ThermalConductance UA_nominal=4748 + "Total thermal conductance at nominal flow, from textbook"; + + Buildings.Examples.ChillerPlants.Guideline36.BaseClasses.Guideline36 chiPla( + final mChi_flow_nominal=mWater_flow_nominal, + final mCon_flow_nominal=mWater_flow_nominal, + final dTChi=7) "Chiller plant with controller" + annotation (Placement(transformation(extent={{104,40},{136,80}}))); + Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU cooCoi( + redeclare package Medium1 = MediumW, + redeclare package Medium2 = MediumA, + final m1_flow_nominal=mWater_flow_nominal, + final m2_flow_nominal=mAir_flow_nominal, + final show_T=true, + final dp1_nominal=3000, + final dp2_nominal=600, + final UA_nominal=UA_nominal) "Air handler unit cooling coil" + annotation (Placement(transformation(extent={{110,-20},{130,0}}))); + Buildings.Fluid.Sources.Boundary_pT sinAir( + redeclare package Medium = MediumA, + nPorts=1) "Air sink" + annotation (Placement(transformation(extent={{0,-130},{20,-110}}))); + + Buildings.BoundaryConditions.WeatherData.ReaderTMY3 weaDat( + filNam=Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos"), + computeWetBulbTemperature=true) + "Weather data reader" + annotation (Placement(transformation(extent={{40,60},{60,80}}))); + Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" + annotation (Placement(transformation(extent={{70,80},{90,100}}), + iconTransformation(extent={{-70,30},{-50,50}}))); + Buildings.Fluid.Actuators.Valves.TwoWayLinear cooCoiVal( + redeclare package Medium = MediumW, + final m_flow_nominal=mWater_flow_nominal, + final show_T=true, + final dpValve_nominal=20000, + final dpFixed_nominal=60000) "Cooling coil valve" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}},rotation=90,origin={80,20}))); + Buildings.Fluid.FixedResistances.Junction mixAir( + redeclare package Medium = MediumA, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + final m_flow_nominal={0.7*mAir_flow_nominal,mAir_flow_nominal,0.3*mAir_flow_nominal}, + final dp_nominal=fill(0, 3)) + "Mix return air and outdoor air" + annotation (Placement(transformation(extent={{10,10},{-10,-10}}, + rotation=-90,origin={160,-80}))); + Buildings.Fluid.Sources.MassFlowSource_T outAir( + redeclare package Medium = MediumA, + final m_flow=0.3*mAir_flow_nominal, + final use_T_in=true, + nPorts=1) "Outdoor air" + annotation (Placement(transformation(extent={{240,-90},{220,-70}}))); + Buildings.Fluid.Sources.MassFlowSource_T retAir( + redeclare package Medium = MediumA, + final m_flow=0.7*mAir_flow_nominal, + final T=TRet, + nPorts=1) "Return air" + annotation (Placement(transformation(extent={{240,-130},{220,-110}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort supAirTem( + redeclare package Medium = MediumA, + final m_flow_nominal=mAir_flow_nominal) + "Supply air temperature" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=90,origin={80,-100}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant airSupTemSet( + final k=273.15 + 18) + "Supply air temperature setpoint" + annotation (Placement(transformation(extent={{-240,-50},{-220,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract temDif + "Difference between supply air temperature and its setpoint" + annotation (Placement(transformation(extent={{-220,110},{-200,130}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( + uLow=2.9, + uHigh=3.1) + "Higher than setpoint by 3 degC" + annotation (Placement(transformation(extent={{-180,110},{-160,130}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys1( + uLow=1.9, + uHigh=2.1) + "Higher than setpoint by 2 degC" + annotation (Placement(transformation(extent={{-180,40},{-160,60}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( + delayTime=120) + "Check if the temperature has been higher than setpoint by sufficient time" + annotation (Placement(transformation(extent={{-140,110},{-120,130}}))); + Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel1( + delayTime=120) + "Check if the temperature has been higher than setpoint by sufficient time" + annotation (Placement(transformation(extent={{-140,40},{-120,60}}))); + Buildings.Controls.OBC.CDL.Integers.Switch chiWatResReq + "Chilled water reset request" + annotation (Placement(transformation(extent={{-20,110},{0,130}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=3) "Constant three" + annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi1 + "Chilled water reset request" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1( + final k=2) "Constant two" + annotation (Placement(transformation(extent={{-140,70},{-120,90}}))); + Buildings.Controls.OBC.CDL.Reals.PID conPID( + final reverseActing=false) + "Chilled water valve control" + annotation (Placement(transformation(extent={{-200,-50},{-180,-30}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( + t=0.95, + h=0.1) + "Send one request when the input is greater than threshold and it is less than threshold minus hysteresis" + annotation (Placement(transformation(extent={{-140,-50},{-120,-30}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt2( + final k=1) "Constant one" + annotation (Placement(transformation(extent={{-140,-10},{-120,10}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt3( + final k=0) "Constant zero" + annotation (Placement(transformation(extent={{-140,-90},{-120,-70}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi2 + "Chilled water reset request" + annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); + Buildings.Fluid.Sources.Boundary_pT bou( + redeclare package Medium = MediumW, nPorts=1) + "Reference pressure" + annotation (Placement(transformation(extent={{200,-14},{180,6}}))); + Buildings.Controls.OBC.CDL.Integers.Switch chiPlaReq + "Chiller plant request" + annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( + t=0.95, + h=0.85) + "Send one request when the input is greater than threshold and it is less than threshold minus hysteresis" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); +equation + connect(weaDat.weaBus, weaBus) annotation (Line( + points={{60,70},{80,70},{80,90}}, + color={255,204,51}, + thickness=0.5), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(chiPla.portCooCoiSup, cooCoiVal.port_a) annotation (Line( + points={{108,40},{108,34},{80,34},{80,30}}, + color={0,127,255}, + thickness=0.5)); + connect(cooCoiVal.port_b, cooCoi.port_a1) annotation (Line( + points={{80,10},{80,-4},{110,-4}}, + color={0,127,255}, + thickness=0.5)); + connect(chiPla.portCooCoiRet, cooCoi.port_b1) annotation (Line( + points={{132,40},{132,-4},{130,-4}}, + color={0,127,255}, + thickness=0.5)); + connect(retAir.ports[1], mixAir.port_1) annotation (Line(points={{220,-120},{160, + -120},{160,-90}}, color={0,127,255}, + thickness=0.5)); + connect(outAir.ports[1], mixAir.port_3) + annotation (Line(points={{220,-80},{170,-80}}, color={0,127,255}, + thickness=0.5)); + connect(mixAir.port_2, cooCoi.port_a2) annotation (Line( + points={{160,-70},{160,-16},{130,-16}}, + color={0,127,255}, + thickness=0.5)); + connect(weaBus.TDryBul, outAir.T_in) annotation (Line( + points={{80.05,90.05},{250,90.05},{250,-76},{242,-76}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(cooCoi.port_b2, supAirTem.port_a) annotation (Line( + points={{110,-16},{80,-16},{80,-90}}, + color={0,127,255}, + thickness=0.5)); + connect(supAirTem.port_b, sinAir.ports[1]) annotation (Line(points={{80,-110}, + {80,-120},{20,-120}}, color={0,127,255}, + thickness=0.5)); + connect(conInt.y, chiWatResReq.u1) annotation (Line(points={{-118,160},{-30,160}, + {-30,128},{-22,128}}, color={255,127,0})); + connect(truDel.y, chiWatResReq.u2) + annotation (Line(points={{-118,120},{-22,120}}, color={255,0,255})); + connect(temDif.y, hys.u) + annotation (Line(points={{-198,120},{-182,120}}, color={0,0,127})); + connect(temDif.y, hys1.u) annotation (Line(points={{-198,120},{-190,120},{-190, + 50},{-182,50}}, color={0,0,127})); + connect(hys1.y, truDel1.u) + annotation (Line(points={{-158,50},{-142,50}}, color={255,0,255})); + connect(hys.y, truDel.u) + annotation (Line(points={{-158,120},{-142,120}}, color={255,0,255})); + connect(conInt1.y, intSwi1.u1) annotation (Line(points={{-118,80},{-70,80},{ + -70,58},{-62,58}}, color={255,127,0})); + connect(truDel1.y, intSwi1.u2) annotation (Line(points={{-118,50},{-62,50}}, + color={255,0,255})); + connect(intSwi1.y, chiWatResReq.u3) annotation (Line(points={{-38,50},{-30,50}, + {-30,112},{-22,112}}, color={255,127,0})); + connect(airSupTemSet.y, conPID.u_s) + annotation (Line(points={{-218,-40},{-202,-40}}, color={0,0,127})); + connect(conPID.y, greThr.u) + annotation (Line(points={{-178,-40},{-142,-40}}, color={0,0,127})); + connect(greThr.y, intSwi2.u2) + annotation (Line(points={{-118,-40},{-102,-40}}, color={255,0,255})); + connect(conInt2.y, intSwi2.u1) annotation (Line(points={{-118,0},{-110,0},{-110, + -32},{-102,-32}}, color={255,127,0})); + connect(conInt3.y, intSwi2.u3) annotation (Line(points={{-118,-80},{-110,-80}, + {-110,-48},{-102,-48}}, color={255,127,0})); + connect(intSwi2.y, intSwi1.u3) annotation (Line(points={{-78,-40},{-70,-40},{ + -70,42},{-62,42}}, color={255,127,0})); + connect(weaDat.weaBus, chiPla.weaBus) annotation (Line( + points={{60,70},{80,70},{80,77},{109,77}}, color={255,204,51}, thickness=0.5)); + connect(cooCoi.port_b1, bou.ports[1]) + annotation (Line(points={{130,-4},{180,-4}}, color={0,127,255}, + thickness=0.5)); + connect(airSupTemSet.y, temDif.u2) annotation (Line(points={{-218,-40},{-210, + -40},{-210,40},{-240,40},{-240,114},{-222,114}}, color={0,0,127})); + connect(supAirTem.T, conPID.u_m) annotation (Line(points={{69,-100},{-190, + -100},{-190,-52}}, color={0,0,127})); + connect(supAirTem.T, temDif.u1) annotation (Line(points={{69,-100},{-250,-100}, + {-250,126},{-222,126}}, color={0,0,127})); + connect(conPID.y, cooCoiVal.y) annotation (Line(points={{-178,-40},{-160,-40}, + {-160,20},{68,20}}, color={0,0,127})); + connect(conPID.y, greThr1.u) annotation (Line(points={{-178,-40},{-160,-40},{ + -160,-20},{-62,-20}}, color={0,0,127})); + connect(greThr1.y, chiPlaReq.u2) + annotation (Line(points={{-38,-20},{-22,-20}}, color={255,0,255})); + connect(conInt2.y, chiPlaReq.u1) annotation (Line(points={{-118,0},{-30,0},{ + -30,-12},{-22,-12}}, color={255,127,0})); + connect(conInt3.y, chiPlaReq.u3) annotation (Line(points={{-118,-80},{-30,-80}, + {-30,-28},{-22,-28}}, color={255,127,0})); + connect(chiWatResReq.y, chiPla.TChiWatSupResReq) annotation (Line(points={{2, + 120},{20,120},{20,47},{102,47}}, color={255,127,0})); + connect(chiPlaReq.y, chiPla.chiPlaReq) annotation (Line(points={{2,-20},{20, + -20},{20,43},{102,43}}, color={255,127,0})); +annotation (experiment( + StartTime=15638400, + StopTime=15897600, + Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/Guideline36/ClosedLoop.mos" + "Simulate and plot"), + Diagram(coordinateSystem(extent={{-280,-220},{280,220}})), Icon( + coordinateSystem(extent={{-100,-100},{100,100}})), +Documentation(info=" +

                    System Configuration

                    +

                    This example demonstrates the implementation of a primary-only chiller plant +with two identical chillers, two headed variable speed chilled water pumps, +and two headed constant speed condenser water pumps. +The system schematics is as shown below. +

                    +

                    +\"image\" +

                    +

                    +The model makes following assumptions: +

                    +
                      +
                    • +The room supply air flow rate equals the nominal air flow rate +mAir_flow_nominal. +
                    • +
                    • +The air flow returns to the cooling coil includes 70% of the return room air and +30% of the outdoor air. +
                    • +
                    • +The room air supply temperature setpoint is 18 °C. +
                    • +
                    • +The return room air temperature is 28 °C. +
                    • +
                    • +The room air supply temperature is controlled by a direct acting PID controller. It +modulates the valve that controlles the chilled water flow into the cooling coil. +
                    • +
                    • +The chilled water reset request is generated as below: +
                        +
                      1. +If the air supply temperature is 3 °C higher than its setpoint by more than 2 minutes, +it generates 3 requests. +
                      2. +
                      3. +If the air supply temperature is 2 °C higher than its setpoint by more than 2 minutes, +it generates 2 requests. +
                      4. +
                      5. +If the output of the PID controller that controls the supply air temperature is greater +than 0.95, it generates 1 request. When it becomes less than 0.85, it generates 0 +request. +
                      6. +
                      +
                    • +
                    • +For the chiller plant request, if the output of the PID controller that controls the +supply air temperature is greater than 0.95, it generates 1 request. When it becomes +less than 0.1, it generates 0 request. +
                    • +
                    +

                    +The chiller plant is controlled based on the ASHRAE Guideline 36, and implemented +using the sequence + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Controller. +

                    +", revisions=" +
                      +
                    • +March 12, 2024, by Jianjun Hu:
                      +First implementation. +
                    • +
                    +")); +end ClosedLoop; diff --git a/Buildings/Examples/ChillerPlants/Guideline36/package.mo b/Buildings/Examples/ChillerPlants/Guideline36/package.mo new file mode 100644 index 00000000000..a7d01da9a7e --- /dev/null +++ b/Buildings/Examples/ChillerPlants/Guideline36/package.mo @@ -0,0 +1,11 @@ +within Buildings.Examples.ChillerPlants; +package Guideline36 + "Closed loop test of chiller plant sequences from ASHRAE Guideline36" + extends Modelica.Icons.ExamplesPackage; + +annotation (Documentation(info=" +

                    +This package includes chiller plant that uses ASHRAE Guideline 36 sequences. +

                    +")); +end Guideline36; diff --git a/Buildings/Examples/ChillerPlants/Guideline36/package.order b/Buildings/Examples/ChillerPlants/Guideline36/package.order new file mode 100644 index 00000000000..d3bce28311c --- /dev/null +++ b/Buildings/Examples/ChillerPlants/Guideline36/package.order @@ -0,0 +1,2 @@ +ClosedLoop +BaseClasses diff --git a/Buildings/Examples/ChillerPlants/package.mo b/Buildings/Examples/ChillerPlants/package.mo new file mode 100644 index 00000000000..96083e9e8f9 --- /dev/null +++ b/Buildings/Examples/ChillerPlants/package.mo @@ -0,0 +1,11 @@ +within Buildings.Examples; +package ChillerPlants + + extends Modelica.Icons.ExamplesPackage; + +annotation (Documentation(info=" +

                    +This package includes chiller plant examples. +

                    +")); +end ChillerPlants; diff --git a/Buildings/Examples/ChillerPlants/package.order b/Buildings/Examples/ChillerPlants/package.order new file mode 100644 index 00000000000..39823e26e02 --- /dev/null +++ b/Buildings/Examples/ChillerPlants/package.order @@ -0,0 +1,2 @@ +DataCenter +Guideline36 diff --git a/Buildings/Examples/VAVReheat/BaseClasses/Guideline36.mo b/Buildings/Examples/VAVReheat/BaseClasses/Guideline36.mo index 86f55d3cf31..b6c2b9f8531 100644 --- a/Buildings/Examples/VAVReheat/BaseClasses/Guideline36.mo +++ b/Buildings/Examples/VAVReheat/BaseClasses/Guideline36.mo @@ -70,7 +70,6 @@ model Guideline36 final eneStd=Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1, final venStd=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1, - final ashCliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_5A, final freSta=Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat, @@ -429,7 +428,7 @@ The control is based on ASHRAE Guideline 36, and implemented using the sequences from the library Buildings.Controls.OBC.ASHRAE.G36 for -multi-zone VAV systems with economizer. +multi-zone VAV systems with economizer. The figures below shows the schematic diagram and controls of an HVAC system that supplies 5 zones:

                    diff --git a/Buildings/Examples/package.order b/Buildings/Examples/package.order index 0868ef46ece..da1a97405f9 100644 --- a/Buildings/Examples/package.order +++ b/Buildings/Examples/package.order @@ -1,6 +1,6 @@ Tutorial SimpleHouse -ChillerPlant +ChillerPlants DualFanDualDuct HydronicHeating ScalableBenchmarks diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizer/WaterSideEconomizerEnableDisableStateGraph.png b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizer/WaterSideEconomizerEnableDisableStateGraph.png new file mode 100644 index 00000000000..52dcff72dd0 Binary files /dev/null and b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizer/WaterSideEconomizerEnableDisableStateGraph.png differ diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizer/WaterSideEconomizerEnableDisableStateGraph.svg b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizer/WaterSideEconomizerEnableDisableStateGraph.svg new file mode 100644 index 00000000000..e67f501c807 --- /dev/null +++ b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizer/WaterSideEconomizerEnableDisableStateGraph.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + Enable WSEhold for holdPeriod + + Disable WSEhold for holdPeriod + TChiWatRet (upstream WSE) > wseTOut.y + TOffsetEna + TChiWatRetDow (downstream WSE) > TChiWatRet (upstream WSE) - TOffsetDisfor delDis period of time + + diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnableStateGraph.png b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnableStateGraph.png new file mode 100644 index 00000000000..ccff3ee7b95 Binary files /dev/null and b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnableStateGraph.png differ diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnableStateGraph.svg b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnableStateGraph.svg new file mode 100644 index 00000000000..6434f98eace --- /dev/null +++ b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnableStateGraph.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + Enable plantplaThrTim state hold + chiWatSupResReq > ignReqANDTOut > TChiLocOutANDschTab is active + + Disable plantplaThrTim state hold + chiWatSupResReq ≤ ignReqfor at least reqThrTimORTOut ≤ TChiLocOut - locDtORschTab is inactive + + + + diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlCWP_WSE.png b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlCWP_WSE.png new file mode 100644 index 00000000000..10bfe4df68d Binary files /dev/null and b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlCWP_WSE.png differ diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlCWP_WSE.svg b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlCWP_WSE.svg new file mode 100644 index 00000000000..f50e129fabf --- /dev/null +++ b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlCWP_WSE.svg @@ -0,0 +1,317 @@ + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + Head pressure control loop, uHeaPreCon + + + 50% + 100% + 0% + minTowSpe + minConWatPumSpe + 100% + desConWatPumSpe + TowerMaxSpeed + Condenser water pump speed setpoint + yMaxTowSpeSet + yConWatPumSpeSet + + diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlValve_WSE.png b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlValve_WSE.png new file mode 100644 index 00000000000..0975a9fee64 Binary files /dev/null and b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlValve_WSE.png differ diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlValve_WSE.svg b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlValve_WSE.svg new file mode 100644 index 00000000000..0f1745393f9 --- /dev/null +++ b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlValve_WSE.svg @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + Head pressure control loop, uHeaPreCon + + 100% + 0% + minHeaPreValPos + 100% + Headpressurecontrolvalve + yHeaPreConVal + + + + diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlValve_noWSE.png b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlValve_noWSE.png new file mode 100644 index 00000000000..1b138e556d1 Binary files /dev/null and b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlValve_noWSE.png differ diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlValve_noWSE.svg b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlValve_noWSE.svg new file mode 100644 index 00000000000..41f9c58d3ad --- /dev/null +++ b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/HeadControlValve_noWSE.svg @@ -0,0 +1,369 @@ + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + Head pressure control loop, uHeaPreCon + + + 50% + 100% + 0% + minTowSpe + minHeaPreValPos + 100% + 100% open + TowerMaxSpeed + Head ressure controlvalve position + yMaxTowSpeSet + yHeaPreConVal + (yConWatPumSpeSet) + (desConWatPumSpe) + (Condenser water pump speed setpoint) + (minConWatPumSpe) + + diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/ChiWatSupSet_VSChiller.png b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/ChiWatSupSet_VSChiller.png new file mode 100644 index 00000000000..b1141bf7318 Binary files /dev/null and b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/ChiWatSupSet_VSChiller.png differ diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/ChiWatSupSet_VSChiller.svg b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/ChiWatSupSet_VSChiller.svg new file mode 100644 index 00000000000..1212106ae47 --- /dev/null +++ b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/ChiWatSupSet_VSChiller.svg @@ -0,0 +1,280 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + dpChiWatPumSet + TChiWatSupSet + 50% + uChiWatPlaRes + + dpChiWatPumMin(5 psi) + dpChiWatPumMax + TChiWatSupMax(60 F) + TChiWatSupMin + CHW setpoint + DP setpoint + 100% + 0% + (dpChiWatPumSet) + (TChiWatSupSet) + + diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/InitialStageSelectionStateGraph.png b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/InitialStageSelectionStateGraph.png new file mode 100644 index 00000000000..bb0afb2c0fe Binary files /dev/null and b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/InitialStageSelectionStateGraph.png differ diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/InitialStageSelectionStateGraph.svg b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/InitialStageSelectionStateGraph.svg new file mode 100644 index 00000000000..2163442ba39 --- /dev/null +++ b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/InitialStageSelectionStateGraph.svg @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Initialize plant in WSE-only mode + + TChiWatSupSet - wseTOut(PLRHeaExc = 1).y >=wseDt + Initialize plant in chiller-only mode + TChiWatSupSet < wseTOut(PLRHeaExc = 1).y + diff --git a/Buildings/Resources/Images/Examples/ChillerPlant/DataCenter.png b/Buildings/Resources/Images/Examples/ChillerPlants/DataCenter/DataCenter.png similarity index 100% rename from Buildings/Resources/Images/Examples/ChillerPlant/DataCenter.png rename to Buildings/Resources/Images/Examples/ChillerPlants/DataCenter/DataCenter.png diff --git a/Buildings/Resources/Images/Examples/ChillerPlant/chillerSchematics.png b/Buildings/Resources/Images/Examples/ChillerPlants/DataCenter/chillerSchematics.png similarity index 100% rename from Buildings/Resources/Images/Examples/ChillerPlant/chillerSchematics.png rename to Buildings/Resources/Images/Examples/ChillerPlants/DataCenter/chillerSchematics.png diff --git a/Buildings/Resources/Images/Examples/ChillerPlants/Guideline36/chillerSchematics.png b/Buildings/Resources/Images/Examples/ChillerPlants/Guideline36/chillerSchematics.png new file mode 100644 index 00000000000..e8c46cdb4ef Binary files /dev/null and b/Buildings/Resources/Images/Examples/ChillerPlants/Guideline36/chillerSchematics.png differ diff --git a/Buildings/Resources/Images/Examples/ChillerPlants/Guideline36/chillerSchematics.svg b/Buildings/Resources/Images/Examples/ChillerPlants/Guideline36/chillerSchematics.svg new file mode 100644 index 00000000000..fda1cf243a8 --- /dev/null +++ b/Buildings/Resources/Images/Examples/ChillerPlants/Guideline36/chillerSchematics.svg @@ -0,0 +1,1300 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cooling Tower + Chiller 1 + CHW +isolation valve + CW +isolation valve + Chiller 2 + Condenser +water pump + Chilled +water pump + Bypass +valve + CHWST + T_airSup + 70% + 30% + 30% + CHWRT + CWRT + CWST + Cooling +coil + Ideal +room + Ambient + + + + P + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_G36_AHUs_SingleZone_VAV_SetPoints_Validation_ModeAndSetPoints.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_G36_AHUs_SingleZone_VAV_SetPoints_Validation_ModeAndSetPoints.txt index 9c6cf92078e..82e9a91aa71 100644 --- a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_G36_AHUs_SingleZone_VAV_SetPoints_Validation_ModeAndSetPoints.txt +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_G36_AHUs_SingleZone_VAV_SetPoints_Validation_ModeAndSetPoints.txt @@ -1,4 +1,4 @@ -last-generated=2022-12-19 +last-generated=2024-12-19 statistics-simulation= { "linear": " ", diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_G36_AHUs_SingleZone_VAV_Validation_Controller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_G36_AHUs_SingleZone_VAV_Validation_Controller.txt index e0c2dd89505..bbeb43ebc39 100644 --- a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_G36_AHUs_SingleZone_VAV_Validation_Controller.txt +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_G36_AHUs_SingleZone_VAV_Validation_Controller.txt @@ -1,4 +1,4 @@ -last-generated=2022-12-19 +last-generated=2024-12-19 statistics-simulation= { "linear": " ", @@ -14,21 +14,21 @@ conVAV.u1OccSen=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, conVAV.u1Win=[1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8e-01, 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, 2.000000000000121e-01, 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, 8e-01, 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, 2e-01, 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] conVAV.u1SofSwiRes=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] conVAV.tNexOcc=[1.44e+04, 1.3536e+04, 1.2672e+04, 1.1808e+04, 1.0944e+04, 1.008e+04, 9.216e+03, 8.352e+03, 7.488e+03, 6.624e+03, 5.76e+03, 4.896e+03, 4.032e+03, 3.168e+03, 2.303999999999998e+03, 1.44e+03, 5.76e+02, 8.265600000000052e+04, 8.5248e+04, 8.4384e+04, 8.352e+04, 8.2656e+04, 8.1792e+04, 8.0928e+04, 8.0064e+04, 7.92e+04, 7.8336e+04, 7.7472e+04, 7.6608e+04, 7.5744e+04, 7.488e+04, 7.4016e+04, 7.3152e+04, 7.2288e+04, 7.1424e+04, 7.056e+04, 6.9696e+04, 6.8832e+04, 6.7968e+04, 6.7104e+04, 6.624e+04, 6.5376e+04, 6.4512e+04, 6.3648e+04, 6.2784e+04, 6.192e+04, 6.1056e+04, 6.0192e+04, 5.9328e+04, 5.8464e+04, 5.76e+04, 5.6736e+04, 5.5872e+04, 5.5008e+04, 5.4144e+04, 5.327999999999999e+04, 5.241599999999999e+04, 5.155200000000001e+04, 5.0688e+04, 4.9824e+04, 4.896e+04, 4.8096e+04, 4.7232e+04, 4.6368e+04, 4.5504e+04, 4.464e+04, 4.3776e+04, 4.2912e+04, 4.204799999999999e+04, 4.118400000000001e+04, 4.032000000000001e+04, 3.9456e+04, 3.8592e+04, 3.7728e+04, 3.6864e+04, 3.6e+04, 3.5136e+04, 3.4272e+04, 3.3408e+04, 3.2544e+04, 3.168e+04, 3.0816e+04, 2.9952e+04, 2.9088e+04, 2.8224e+04, 2.736e+04, 2.6496e+04, 2.5632e+04, 2.4768e+04, 2.3904e+04, 2.304e+04, 2.2176e+04, 2.1312e+04, 2.0448e+04, 1.9584e+04, 1.872e+04, 1.7856e+04, 1.6992e+04, 1.6128e+04, 1.5264e+04, 1.44e+04] -conVAV.TZon=[2.891499938964844e+02, 2.892099963378906e+02, 2.892699987792969e+02, 2.893300012207031e+02, 2.893900036621094e+02, 2.894500061035156e+02, 2.895100085449219e+02, 2.895700109863281e+02, 2.896300134277344e+02, 2.896900134277344e+02, 2.897500122070313e+02, 2.898100109863281e+02, 2.89870009765625e+02, 2.899300085449219e+02, 2.899900073242188e+02, 2.900500061035156e+02, 2.901100048828125e+02, 2.901700036621094e+02, 2.902300024414063e+02, 2.902900012207031e+02, 2.9035e+02, 2.904099914550781e+02, 2.904699975585938e+02, 2.905299963378906e+02, 2.905899951171875e+02, 2.906499938964844e+02, 2.907099963378906e+02, 2.907699987792969e+02, 2.908300012207031e+02, 2.908900036621094e+02, 2.909500061035156e+02, 2.910100085449219e+02, 2.910700012207031e+02, 2.911300109863281e+02, 2.911900134277344e+02, 2.912500122070313e+02, 2.913100109863281e+02, 2.91370009765625e+02, 2.914300085449219e+02, 2.914900073242188e+02, 2.915500061035156e+02, 2.916100048828125e+02, 2.916700036621094e+02, 2.917300024414063e+02, 2.917900012207031e+02, 2.9185e+02, 2.919099987792969e+02, 2.919699975585938e+02, 2.920299963378906e+02, 2.920899951171875e+02, 2.921499938964844e+02, 2.922099963378906e+02, 2.922699987792969e+02, 2.923300012207031e+02, 2.923900036621094e+02, 2.924500061035156e+02, 2.925100085449219e+02, 2.925700109863281e+02, 2.926300134277344e+02, 2.926900134277344e+02, 2.927500122070313e+02, 2.928100109863281e+02, 2.92870009765625e+02, 2.929300085449219e+02, 2.929900073242188e+02, 2.930499877929688e+02, 2.931099975585938e+02, 2.931700036621094e+02, 2.932300024414063e+02, 2.932900012207031e+02, 2.9335e+02, 2.934099987792969e+02, 2.934699975585938e+02, 2.935299963378906e+02, 2.935899951171875e+02, 2.936499938964844e+02, 2.937099963378906e+02, 2.937699987792969e+02, 2.938300012207031e+02, 2.938900036621094e+02, 2.939500061035156e+02, 2.940100085449219e+02, 2.940700109863281e+02, 2.941300134277344e+02, 2.941900134277344e+02, 2.942500122070313e+02, 2.943100109863281e+02, 2.94370009765625e+02, 2.944300085449219e+02, 2.944900073242188e+02, 2.945500061035156e+02, 2.946100048828125e+02, 2.946700036621094e+02, 2.947300024414063e+02, 2.947900012207031e+02, 2.948500061035156e+02, 2.949099987792969e+02, 2.949699975585938e+02, 2.950299963378906e+02, 2.950899951171875e+02, 2.951499938964844e+02] -conVAV.cooSetAdj=[0e+00, 0e+00, 3.679848778247833e-01, 5.355649566650391e-01, 6.841815066337585e-01, 8.085998296737671e-01, 9.044346475601196e-01, 9.683033227920532e-01, 9.979445838928223e-01, 9.919580101966858e-01, 1.931851625442506e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -4.255992209911347e-01, -5.874849557876587e-01, -7.286290901047843e-01, -8.439096808433533e-01, -9.294116497039795e-01, -9.820644068717956e-01, -1e+00, -9.820644068717956e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.571515798568687e-01, 4.815323829650879e-01, 6.37088680267334e-01, 7.701057577133179e-01, 8.758965468406678e-01, 9.507292509078979e-01, 9.919580101966858e-01, 9.979445838928223e-01, 9.683033227920532e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -3.679848778247833e-01, -5.355649566650391e-01, -6.841815066337585e-01, -8.08599829673768e-01, -9.044346475601203e-01, -9.683033227920529e-01, -9.979445838928223e-01, -9.919580101966858e-01, -1.931851625442506e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.255992209911332e-01, 5.874849557876574e-01, 7.285786318778992e-01, 8.439096808433533e-01, 9.294116497039795e-01, 9.820644068717956e-01, 1e+00, 9.820644068717956e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -2.571515798568725e-01, -4.815323829650879e-01, -6.37088680267334e-01, -7.701057577133179e-01, -8.758965468406678e-01, -9.507292509078979e-01, -9.919580101966858e-01, -9.979445838928223e-01, -9.683033227920532e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] -conVAV.heaSetAdj=[0e+00, 0e+00, 1.839924389123917e-01, 2.677824783325196e-01, 3.420907533168793e-01, 4.042999148368835e-01, 4.522173237800598e-01, 4.841516613960266e-01, 4.989722919464111e-01, 4.959790050983429e-01, 9.659258127212528e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -2.127996104955673e-01, -2.937424778938293e-01, -3.643145450523921e-01, -4.219548404216766e-01, -4.647058248519897e-01, -4.910322034358978e-01, -5e-01, -4.910322034358978e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.285757899284343e-01, 2.407661914825439e-01, 3.18544340133667e-01, 3.85052878856659e-01, 4.379482734203339e-01, 4.75364625453949e-01, 4.959790050983429e-01, 4.989722919464111e-01, 4.841516613960266e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -1.839924389123917e-01, -2.677824783325196e-01, -3.420907533168793e-01, -4.04299914836884e-01, -4.522173237800601e-01, -4.841516613960264e-01, -4.989722919464111e-01, -4.959790050983429e-01, -9.659258127212528e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.127996104955666e-01, 2.937424778938287e-01, 3.642893159389496e-01, 4.219548404216766e-01, 4.647058248519897e-01, 4.910322034358978e-01, 5e-01, 4.910322034358978e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -1.285757899284363e-01, -2.407661914825439e-01, -3.18544340133667e-01, -3.85052878856659e-01, -4.379482734203339e-01, -4.75364625453949e-01, -4.959790050983429e-01, -4.989722919464111e-01, -4.841516613960266e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +conVAV.TZon=[2.891499938964844e+02, 2.892099963378906e+02, 2.892699987792969e+02, 2.893300012207031e+02, 2.893900036621094e+02, 2.894500061035156e+02, 2.895100085449219e+02, 2.895700109863281e+02, 2.896300134277344e+02, 2.896900134277344e+02, 2.897500122070313e+02, 2.898100109863281e+02, 2.89870009765625e+02, 2.899300085449219e+02, 2.899900073242188e+02, 2.900500061035156e+02, 2.901100048828125e+02, 2.901700036621094e+02, 2.902300024414063e+02, 2.902900012207031e+02, 2.9035e+02, 2.904099987792969e+02, 2.904699975585938e+02, 2.905299963378906e+02, 2.905899951171875e+02, 2.906499938964844e+02, 2.907099963378906e+02, 2.907699987792969e+02, 2.908300012207031e+02, 2.908900036621094e+02, 2.909500061035156e+02, 2.910100085449219e+02, 2.910700012207031e+02, 2.911300134277344e+02, 2.911900134277344e+02, 2.912500122070313e+02, 2.913100109863281e+02, 2.91370009765625e+02, 2.914300085449219e+02, 2.914900073242188e+02, 2.915500061035156e+02, 2.916100048828125e+02, 2.916700036621094e+02, 2.917300024414063e+02, 2.917900012207031e+02, 2.9185e+02, 2.919099987792969e+02, 2.919699975585938e+02, 2.920299963378906e+02, 2.920899951171875e+02, 2.921499938964844e+02, 2.922099963378906e+02, 2.922699987792969e+02, 2.923300012207031e+02, 2.923900036621094e+02, 2.924500061035156e+02, 2.925100085449219e+02, 2.925700109863281e+02, 2.926300134277344e+02, 2.926900134277344e+02, 2.927500122070313e+02, 2.928100109863281e+02, 2.92870009765625e+02, 2.929300085449219e+02, 2.929900073242188e+02, 2.930499877929688e+02, 2.931100048828125e+02, 2.931700036621094e+02, 2.932300024414063e+02, 2.932900012207031e+02, 2.9335e+02, 2.934099987792969e+02, 2.934699975585938e+02, 2.935299963378906e+02, 2.935899951171875e+02, 2.936499938964844e+02, 2.937099963378906e+02, 2.937699987792969e+02, 2.938300012207031e+02, 2.938900036621094e+02, 2.939500061035156e+02, 2.940100085449219e+02, 2.940700109863281e+02, 2.941300134277344e+02, 2.941900134277344e+02, 2.942500122070313e+02, 2.943100109863281e+02, 2.94370009765625e+02, 2.944300085449219e+02, 2.944900073242188e+02, 2.945500061035156e+02, 2.946100048828125e+02, 2.946700036621094e+02, 2.947300024414063e+02, 2.947900012207031e+02, 2.948500061035156e+02, 2.949099987792969e+02, 2.949699975585938e+02, 2.950299963378906e+02, 2.950899951171875e+02, 2.951499938964844e+02] +conVAV.cooSetAdj=[0e+00, 0e+00, 3.679848778247833e-01, 5.355649566650391e-01, 6.841815066337585e-01, 8.085998296737671e-01, 9.044346475601196e-01, 9.683033227920532e-01, 9.979445838928223e-01, 9.919580101966858e-01, 1.931851625442506e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -4.255992209911347e-01, -5.874849557876587e-01, -7.285786318778992e-01, -8.439096808433533e-01, -9.294116497039795e-01, -9.820644068717956e-01, -1e+00, -9.820644068717956e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.571515798568687e-01, 4.815323829650879e-01, 6.37088680267334e-01, 7.701057577133179e-01, 8.758965468406678e-01, 9.507292509078979e-01, 9.919580101966858e-01, 9.979445838928223e-01, 9.683033227920532e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -3.679848778247833e-01, -5.355649566650391e-01, -6.841815066337585e-01, -8.08599829673768e-01, -9.044346475601203e-01, -9.683033227920529e-01, -9.979445838928223e-01, -9.919580101966858e-01, -1.931851625442506e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.255992209911332e-01, 5.874849557876574e-01, 7.285786318778992e-01, 8.439096808433533e-01, 9.294116497039795e-01, 9.820644068717956e-01, 1e+00, 9.820644068717956e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -2.571515798568725e-01, -4.815323829650879e-01, -6.37088680267334e-01, -7.701057577133179e-01, -8.758965468406678e-01, -9.507292509078979e-01, -9.919580101966858e-01, -9.979445838928223e-01, -9.683033227920532e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +conVAV.heaSetAdj=[0e+00, 0e+00, 1.839924389123917e-01, 2.677824783325196e-01, 3.420907533168793e-01, 4.042999148368835e-01, 4.522173237800598e-01, 4.841516613960266e-01, 4.989722919464111e-01, 4.959790050983429e-01, 9.659258127212528e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -2.127996104955673e-01, -2.937424778938293e-01, -3.642893159389496e-01, -4.219548404216766e-01, -4.647058248519897e-01, -4.910322034358978e-01, -5e-01, -4.910322034358978e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.285757899284343e-01, 2.407661914825439e-01, 3.18544340133667e-01, 3.85052878856659e-01, 4.379482734203339e-01, 4.75364625453949e-01, 4.959790050983429e-01, 4.989722919464111e-01, 4.841516613960266e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -1.839924389123917e-01, -2.677824783325196e-01, -3.420907533168793e-01, -4.04299914836884e-01, -4.522173237800601e-01, -4.841516613960264e-01, -4.989722919464111e-01, -4.959790050983429e-01, -9.659258127212528e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.127996104955666e-01, 2.937424778938287e-01, 3.642893159389496e-01, 4.219548404216766e-01, 4.647058248519897e-01, 4.910322034358978e-01, 5e-01, 4.910322034358978e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -1.285757899284363e-01, -2.407661914825439e-01, -3.18544340133667e-01, -3.85052878856659e-01, -4.379482734203339e-01, -4.75364625453949e-01, -4.959790050983429e-01, -4.989722919464111e-01, -4.841516613960266e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] conVAV.yCooCoi=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] conVAV.yHeaCoi=[0e+00, 0e+00, 0e+00, 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, 4.399999999999999e-01, 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, 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] -conVAV.TAirSup=[2.956499938964844e+02, 2.956700024414063e+02, 2.956900109863281e+02, 2.9571e+02, 2.957299975585938e+02, 2.957500061035156e+02, 2.957700061035156e+02, 2.957899926757813e+02, 2.958100012207031e+02, 2.95830009765625e+02, 2.958499938964844e+02, 2.958699963378906e+02, 2.958900048828125e+02, 2.9591e+02, 2.959299914550782e+02, 2.9595e+02, 2.959700061035156e+02, 2.959899877929687e+02, 2.9601e+02, 2.960300036621094e+02, 2.960499938964844e+02, 2.960700081961496e+02, 2.960899987792969e+02, 2.9611e+02, 2.961300122070313e+02, 2.961499938964844e+02, 2.961700024414063e+02, 2.961900109863281e+02, 2.9621e+02, 2.962299975585938e+02, 2.962500061035156e+02, 2.962700061035156e+02, 2.962900024414063e+02, 2.963099975585938e+02, 2.96330009765625e+02, 2.963499938964844e+02, 2.963699963378906e+02, 2.963900048828125e+02, 2.9641e+02, 2.964299914550782e+02, 2.9645e+02, 2.964700061035156e+02, 2.964899877929687e+02, 2.9651e+02, 2.965300036621094e+02, 2.965499938964844e+02, 2.965700061035157e+02, 2.965899987792969e+02, 2.9661e+02, 2.966300122070313e+02, 2.966499938964844e+02, 2.966700024414063e+02, 2.966900109863281e+02, 2.9671e+02, 2.967299975585938e+02, 2.967500061035156e+02, 2.967700061035156e+02, 2.967899926757813e+02, 2.968100012207031e+02, 2.96830009765625e+02, 2.968499938964844e+02, 2.968699963378906e+02, 2.968900048828125e+02, 2.9691e+02, 2.969299914550782e+02, 2.969500122070312e+02, 2.969700012207031e+02, 2.969899877929687e+02, 2.9701e+02, 2.970300036621094e+02, 2.970499938964844e+02, 2.970700061035157e+02, 2.970899987792969e+02, 2.9711e+02, 2.971300122070313e+02, 2.971499938964844e+02, 2.971700024414063e+02, 2.971900109863281e+02, 2.9721e+02, 2.972299975585938e+02, 2.972500061035156e+02, 2.972700061035156e+02, 2.972899926757813e+02, 2.973100012207031e+02, 2.97330009765625e+02, 2.973499938964844e+02, 2.973699963378906e+02, 2.973900048828125e+02, 2.9741e+02, 2.974299914550782e+02, 2.9745e+02, 2.974700061035156e+02, 2.974899877929687e+02, 2.9751e+02, 2.975300036621094e+02, 2.975499877929688e+02, 2.975700061035157e+02, 2.975899987792969e+02, 2.9761e+02, 2.976300122070313e+02, 2.976499938964844e+02] +conVAV.TAirSup=[2.956499938964844e+02, 2.956700024414063e+02, 2.956900109863281e+02, 2.9571e+02, 2.957299975585938e+02, 2.957500061035156e+02, 2.957700061035156e+02, 2.957899926757813e+02, 2.958100012207031e+02, 2.95830009765625e+02, 2.958499938964844e+02, 2.958699963378906e+02, 2.958900048828125e+02, 2.9591e+02, 2.959299914550782e+02, 2.9595e+02, 2.959700061035156e+02, 2.959899877929687e+02, 2.9601e+02, 2.960300036621094e+02, 2.960499938964844e+02, 2.960700061035157e+02, 2.960899987792969e+02, 2.9611e+02, 2.961300122070313e+02, 2.961499938964844e+02, 2.961700024414063e+02, 2.961900109863281e+02, 2.9621e+02, 2.962299975585938e+02, 2.962500061035156e+02, 2.962700061035156e+02, 2.962900024414063e+02, 2.963100012207031e+02, 2.96330009765625e+02, 2.963499938964844e+02, 2.963699963378906e+02, 2.963900048828125e+02, 2.9641e+02, 2.964299914550782e+02, 2.9645e+02, 2.964700061035156e+02, 2.964899877929687e+02, 2.9651e+02, 2.965300036621094e+02, 2.965499938964844e+02, 2.965700061035157e+02, 2.965899987792969e+02, 2.9661e+02, 2.966300122070313e+02, 2.966499938964844e+02, 2.966700024414063e+02, 2.966900109863281e+02, 2.9671e+02, 2.967299975585938e+02, 2.967500061035156e+02, 2.967700061035156e+02, 2.967899926757813e+02, 2.968100012207031e+02, 2.96830009765625e+02, 2.968499938964844e+02, 2.968699963378906e+02, 2.968900048828125e+02, 2.9691e+02, 2.969299914550782e+02, 2.969500122070312e+02, 2.969700061035156e+02, 2.969899877929687e+02, 2.9701e+02, 2.970300036621094e+02, 2.970499938964844e+02, 2.970700061035157e+02, 2.970899987792969e+02, 2.9711e+02, 2.971300122070313e+02, 2.971499938964844e+02, 2.971700024414063e+02, 2.971900109863281e+02, 2.9721e+02, 2.972299975585938e+02, 2.972500061035156e+02, 2.972700061035156e+02, 2.972899926757813e+02, 2.973100012207031e+02, 2.97330009765625e+02, 2.973499938964844e+02, 2.973699963378906e+02, 2.973900048828125e+02, 2.9741e+02, 2.974299914550782e+02, 2.9745e+02, 2.974700061035156e+02, 2.974899877929687e+02, 2.9751e+02, 2.975300036621094e+02, 2.975499877929688e+02, 2.975700061035157e+02, 2.975899987792969e+02, 2.9761e+02, 2.976300122070313e+02, 2.976499938964844e+02] conVAV.conEco.ecoHigLim.TCut=[2.911499938964844e+02, 2.911499938964844e+02] conVAV.TOut=[2.901499938964844e+02, 2.901499938964844e+02] -conVAV.uOutDam=[2.000000029802322e-01, 2.059999972581864e-01, 2.120000028610229e-01, 2.180000007152557e-01, 2.239999949932098e-01, 2.300000041723251e-01, 2.359999984502792e-01, 2.419999951124191e-01, 2.480000019073486e-01, 2.539999961853027e-01, 2.599999904632568e-01, 2.660000050067902e-01, 2.720000088214874e-01, 2.780000030994415e-01, 2.839999973773956e-01, 2.899999916553497e-01, 2.959999883174896e-01, 3.020000100135803e-01, 3.080000042915344e-01, 3.139999985694885e-01, 3.199999928474426e-01, 3.259999922343663e-01, 3.320000112056732e-01, 3.380000054836273e-01, 3.439999997615814e-01, 3.499999940395355e-01, 3.559999883174896e-01, 3.620000123977661e-01, 3.680000066757202e-01, 3.740000009536743e-01, 3.799999952316284e-01, 3.859999895095825e-01, 3.92000013589859e-01, 3.980000078678131e-01, 4.040000021457673e-01, 4.099999964237213e-01, 4.159999907016754e-01, 4.2200000166893e-01, 4.28000009059906e-01, 4.340000033378601e-01, 4.399999976158142e-01, 4.459999918937683e-01, 4.519999861717224e-01, 4.580000102519989e-01, 4.64000004529953e-01, 4.699999988079071e-01, 4.759999930858612e-01, 4.819999873638153e-01, 4.880000114440918e-01, 4.940000057220459e-01, 5e-01, 5.060000205039978e-01, 5.119999957084655e-01, 5.180000019073486e-01, 5.239999914169311e-01, 5.299999833106995e-01, 5.360000038146974e-01, 5.420000147819518e-01, 5.47999985218048e-01, 5.540000057220459e-01, 5.599999785423279e-01, 5.66000006198883e-01, 5.720000076293945e-01, 5.780000019073487e-01, 5.839999890327454e-01, 5.899999737739563e-01, 5.960000157356262e-01, 6.019999933242798e-01, 6.080000114440919e-01, 6.139999890327453e-01, 6.199999928474426e-01, 6.260000133514404e-01, 6.320000123977662e-01, 6.379999947547913e-01, 6.440000081062317e-01, 6.499999761581421e-01, 6.559999966621399e-01, 6.620000171661377e-01, 6.679999995231628e-01, 6.739999985694886e-01, 6.799999952316285e-01, 6.859999799728393e-01, 6.920000004768372e-01, 6.980000185966492e-01, 7.039999866485596e-01, 7.100000023841858e-01, 7.159999823570251e-01, 7.220000100135803e-01, 7.280000042915344e-01, 7.340000057220459e-01, 7.399999856948852e-01, 7.460000014305115e-01, 7.520000267028809e-01, 7.57999997138977e-01, 7.640000081062317e-01, 7.699999809265137e-01, 7.759999895095825e-01, 7.820000100135803e-01, 7.880000162124634e-01, 7.939999914169311e-01, 8.00000011920929e-01] -conVAV.uCooCoi_actual=[9.599999785423279e-01, 9.599999785423279e-01, 9.574722194671631e-01, 9.544722056388855e-01, 9.514722204208375e-01, 9.484722375869751e-01, 9.454722237586975e-01, 9.424722099304199e-01, 9.394721961021424e-01, 9.364722418785095e-01, 9.334722280502319e-01, 9.304722142219544e-01, 9.274722266197205e-01, 9.244722199440002e-01, 9.214722323417663e-01, 9.184722185134888e-01, 9.154722046852112e-01, 9.124722504615783e-01, 9.094722366333008e-01, 9.064722228050232e-01, 9.034722089767456e-01, 9.004722220557076e-01, 8.974722409248352e-01, 8.944722270965576e-01, 8.914722132682801e-01, 8.884721994400024e-01, 8.854722452163696e-01, 8.824722313880921e-01, 8.794722175598144e-01, 8.764722037315369e-01, 8.734722256660461e-01, 8.704722356796265e-01, 8.67472231388092e-01, 8.644722104072571e-01, 8.614721989631653e-01, 8.58472239971161e-01, 8.554722261428833e-01, 8.524722123146057e-01, 8.494722318649292e-01, 8.464722251892089e-01, 8.434722304344178e-01, 8.404722166061401e-01, 8.374722051620483e-01, 8.344722485542297e-01, 8.314722347259521e-01, 8.284722208976746e-01, 8.254722070693969e-01, 8.22472231388092e-01, 8.194722390174866e-01, 8.16472225189209e-01, 8.134722113609314e-01, 8.104722046852112e-01, 8.07472243309021e-01, 8.044722294807434e-01, 8.014722156524658e-01, 7.984722018241882e-01, 7.954722309112549e-01, 7.924722337722778e-01, 7.894722199440003e-01, 7.864722108840942e-01, 7.83472204208374e-01, 7.804722380638123e-01, 7.774722242355346e-01, 7.744722104072571e-01, 7.714722371101379e-01, 7.684721946716309e-01, 7.654722332954407e-01, 7.624722146987915e-01, 7.594722104072571e-01, 7.564722466468812e-01, 7.534722328186035e-01, 7.504722189903259e-01, 7.474722051620484e-01, 7.444722366333008e-01, 7.41472237110138e-01, 7.384722232818604e-01, 7.354722094535827e-01, 7.324722099304199e-01, 7.294722414016723e-01, 7.264722275733948e-01, 7.234722137451172e-01, 7.204721999168396e-01, 7.174722361564636e-01, 7.144722318649293e-01, 7.114722180366516e-01, 7.08472216129303e-01, 7.054722094535828e-01, 7.024722361564636e-01, 6.994722223281861e-01, 6.964722084999084e-01, 6.934722423553467e-01, 6.904722356796265e-01, 6.874722266197204e-01, 6.844722127914429e-01, 6.814722156524659e-01, 6.784722208976746e-01, 6.754722309112549e-01, 6.724722170829773e-01, 6.694722032546997e-01, 6.664722418785095e-01, 6.634722352027893e-01] +conVAV.uOutDam=[2.000000029802322e-01, 2.059999972581864e-01, 2.120000028610229e-01, 2.180000007152557e-01, 2.239999949932098e-01, 2.300000041723251e-01, 2.359999984502792e-01, 2.419999951124191e-01, 2.480000019073486e-01, 2.539999961853027e-01, 2.599999904632568e-01, 2.660000050067902e-01, 2.720000088214874e-01, 2.780000030994415e-01, 2.839999973773956e-01, 2.899999916553497e-01, 2.959999883174896e-01, 3.020000100135803e-01, 3.080000042915344e-01, 3.139999985694885e-01, 3.199999928474426e-01, 3.259999871253967e-01, 3.320000112056732e-01, 3.380000054836273e-01, 3.439999997615814e-01, 3.499999940395355e-01, 3.559999883174896e-01, 3.620000123977661e-01, 3.680000066757202e-01, 3.740000009536743e-01, 3.799999952316284e-01, 3.859999895095825e-01, 3.92000013589859e-01, 3.980000078678131e-01, 4.040000021457673e-01, 4.099999964237213e-01, 4.159999907016754e-01, 4.2200000166893e-01, 4.28000009059906e-01, 4.340000033378601e-01, 4.399999976158142e-01, 4.459999918937683e-01, 4.519999861717224e-01, 4.580000102519989e-01, 4.64000004529953e-01, 4.699999988079071e-01, 4.759999930858612e-01, 4.819999873638153e-01, 4.880000114440918e-01, 4.940000057220459e-01, 5e-01, 5.060000205039978e-01, 5.119999957084655e-01, 5.180000019073486e-01, 5.239999914169311e-01, 5.299999833106995e-01, 5.360000038146974e-01, 5.420000147819518e-01, 5.47999985218048e-01, 5.540000057220459e-01, 5.599999785423279e-01, 5.66000006198883e-01, 5.720000076293945e-01, 5.780000019073487e-01, 5.839999890327454e-01, 5.899999737739563e-01, 5.960000252723694e-01, 6.019999933242798e-01, 6.080000114440919e-01, 6.139999890327453e-01, 6.199999928474426e-01, 6.260000133514404e-01, 6.320000123977662e-01, 6.379999947547913e-01, 6.440000081062317e-01, 6.499999761581421e-01, 6.559999966621399e-01, 6.620000171661377e-01, 6.679999995231628e-01, 6.739999985694886e-01, 6.799999952316285e-01, 6.859999799728393e-01, 6.920000004768372e-01, 6.980000185966492e-01, 7.039999866485596e-01, 7.100000023841858e-01, 7.159999823570251e-01, 7.220000100135803e-01, 7.280000042915344e-01, 7.340000057220459e-01, 7.399999856948852e-01, 7.460000014305115e-01, 7.520000267028809e-01, 7.57999997138977e-01, 7.640000081062317e-01, 7.699999809265137e-01, 7.759999895095825e-01, 7.820000100135803e-01, 7.880000162124634e-01, 7.939999914169311e-01, 8.00000011920929e-01] +conVAV.uCooCoi_actual=[9.599999785423279e-01, 9.599999785423279e-01, 9.574722194671631e-01, 9.544722056388855e-01, 9.514722204208375e-01, 9.484722375869751e-01, 9.454722237586975e-01, 9.424722099304199e-01, 9.394721961021424e-01, 9.364722418785095e-01, 9.334722280502319e-01, 9.304722142219544e-01, 9.274722266197205e-01, 9.244722199440002e-01, 9.214722323417663e-01, 9.184722185134888e-01, 9.154722046852112e-01, 9.124722504615783e-01, 9.094722366333008e-01, 9.064722228050232e-01, 9.034722089767456e-01, 9.004722261428832e-01, 8.974722409248352e-01, 8.944722270965576e-01, 8.914722132682801e-01, 8.884721994400024e-01, 8.854722452163696e-01, 8.824722313880921e-01, 8.794722175598144e-01, 8.764722037315369e-01, 8.734722256660461e-01, 8.704722356796265e-01, 8.67472231388092e-01, 8.644722080230713e-01, 8.614721989631653e-01, 8.58472239971161e-01, 8.554722261428833e-01, 8.524722123146057e-01, 8.494722318649292e-01, 8.464722251892089e-01, 8.434722304344178e-01, 8.404722166061401e-01, 8.374722051620483e-01, 8.344722485542297e-01, 8.314722347259521e-01, 8.284722208976746e-01, 8.254722070693969e-01, 8.22472231388092e-01, 8.194722390174866e-01, 8.16472225189209e-01, 8.134722113609314e-01, 8.104722046852112e-01, 8.07472243309021e-01, 8.044722294807434e-01, 8.014722156524658e-01, 7.984722018241882e-01, 7.954722309112549e-01, 7.924722337722778e-01, 7.894722199440003e-01, 7.864722108840942e-01, 7.83472204208374e-01, 7.804722380638123e-01, 7.774722242355346e-01, 7.744722104072571e-01, 7.714722371101379e-01, 7.684721946716309e-01, 7.654722285270691e-01, 7.624722146987915e-01, 7.594722104072571e-01, 7.564722466468812e-01, 7.534722328186035e-01, 7.504722189903259e-01, 7.474722051620484e-01, 7.444722366333008e-01, 7.41472237110138e-01, 7.384722232818604e-01, 7.354722094535827e-01, 7.324722099304199e-01, 7.294722414016723e-01, 7.264722275733948e-01, 7.234722137451172e-01, 7.204721999168396e-01, 7.174722361564636e-01, 7.144722318649293e-01, 7.114722180366516e-01, 7.08472216129303e-01, 7.054722094535828e-01, 7.024722361564636e-01, 6.994722223281861e-01, 6.964722084999084e-01, 6.934722423553467e-01, 6.904722356796265e-01, 6.874722266197204e-01, 6.844722127914429e-01, 6.814722156524659e-01, 6.784722208976746e-01, 6.754722309112549e-01, 6.724722170829773e-01, 6.694722032546997e-01, 6.664722418785095e-01, 6.634722352027893e-01] conVAV.uHeaCoi_actual=[0e+00, 0e+00] -conVAV.TSupHeaEcoSet=[2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971050866699219e+02, 2.964264538574218e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.968499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.961382141113281e+02, 2.966281091308594e+02, 2.962602453613281e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02] -conVAV.TSupCooSet=[2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971050866699219e+02, 2.964264538574218e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.968499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.961382141113281e+02, 2.966281091308594e+02, 2.962602453613281e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02] +conVAV.TSupHeaEcoSet=[2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971050451660156e+02, 2.964263928222656e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.968499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.961373327636718e+02, 2.966281091308594e+02, 2.962602453613281e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02] +conVAV.TSupCooSet=[2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971050451660156e+02, 2.964263928222656e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.968499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.961373327636718e+02, 2.966281091308594e+02, 2.962602453613281e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.956499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.951499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02] conVAV.TZonHeaSet=[2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.926499938964844e+02, 2.931499938964844e+02, 2.915499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+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.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.927499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.926499938964844e+02, 2.931299938964844e+02, 2.931499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02] conVAV.TZonCooSet=[3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.976499938964844e+02, 2.971499938964844e+02, 2.995499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 2.977499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.976499938964844e+02, 2.971699938964844e+02, 2.971499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 3.001499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02] conVAV.yRetDam=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] -conVAV.yOutDam=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.555245876312279e-01, 3.7033811211586e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.7033811211586e-01, 3.7033811211586e-01, 3.7033811211586e-01, 3.7033811211586e-01, 3.7033811211586e-01, 0e+00, 0e+00, 3.7033811211586e-01, 7.406762242317649e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.703618633747101e-01, 3.7033811211586e-01, 3.703381276130676e-01, 3.7033811211586e-01, 3.7033811211586e-01, 3.7033811211586e-01, 3.7033811211586e-01, 3.7033811211586e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.369190216064453e-01, 3.797319233417511e-01, 3.703376388549804e-01, 3.703381156921386e-01, 3.703381323814392e-01, 3.7033811211586e-01, 0e+00, 4.275245761871338e-01, 4.45338100194931e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.45338100194931e-01, 4.45338100194931e-01, 4.45338100194931e-01, 4.45338100194931e-01, 4.45338100194931e-01, 4.45338100194931e-01, 4.45338100194931e-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] -conVAV.ySupFan=[0e+00, 0e+00, 9.983440697193145e-02, 9.999999970197677e-02, 1.000000095367432e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 6.198650479316712e-01, 6.999999833106995e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 4.054856657981917e-01, 1.275389325618744e-01, 9.999913066625594e-02, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 6.998099946975708e-01, 6.99999988079071e-01, 6.999998927116394e-01, 7.000000262260437e-01, 6.999999737739563e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 1.245116236805916e-01, 1.000005438923836e-01, 1.000000575184822e-01, 9.999999701976776e-02, 1.000000005960465e-01, 9.999998897314072e-02, 1.000000014901161e-01, 1.000000014901161e-01, 2.548118308186531e-01, 6.248495173454285e-01, 7.000037145614624e-01, 6.999999332427979e-01, 6.999998259544372e-01, 7.000000476837158e-01, 1.01366063952446e-01, 1.000000044703484e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +conVAV.yOutDam=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.555245876312279e-01, 3.7033811211586e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.7033811211586e-01, 3.7033811211586e-01, 3.7033811211586e-01, 3.7033811211586e-01, 3.7033811211586e-01, 0e+00, 0e+00, 3.7033811211586e-01, 7.406762242317649e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.703622174263e-01, 3.703381478786468e-01, 3.703381562232971e-01, 3.7033811211586e-01, 3.7033811211586e-01, 3.7033811211586e-01, 3.7033811211586e-01, 3.7033811211586e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.369185924530029e-01, 3.797318935394287e-01, 3.703384804725647e-01, 3.703382313251495e-01, 3.703381216526032e-01, 3.7033811211586e-01, 0e+00, 4.275245761871338e-01, 4.45338100194931e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.45338100194931e-01, 4.45338100194931e-01, 4.45338100194931e-01, 4.45338100194931e-01, 4.45338100194931e-01, 4.45338100194931e-01, 4.45338100194931e-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] +conVAV.ySupFan=[0e+00, 0e+00, 9.983440697193145e-02, 9.999999970197677e-02, 1.000000095367432e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 6.198650479316712e-01, 6.999999833106995e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 4.054681658744856e-01, 1.27518247961998e-01, 1.000003135204315e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 6.998072648048401e-01, 6.999997496604919e-01, 6.999996685981751e-01, 7.000000262260437e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 1.245121625065804e-01, 1.000028470158577e-01, 9.999985963106156e-02, 9.999999552965164e-02, 9.999999314546586e-02, 9.999992966651916e-02, 9.999996602535248e-02, 9.999999582767487e-02, 2.548150971531868e-01, 6.248497152328492e-01, 6.999970817565918e-01, 6.999991536140442e-01, 7.000000309944153e-01, 6.999999284744263e-01, 1.016871181130409e-01, 1.000000044703484e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_G36_ThermalZones_Validation_Setpoints.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_G36_ThermalZones_Validation_Setpoints.txt index 98ceb462189..b88757466fb 100644 --- a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_G36_ThermalZones_Validation_Setpoints.txt +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_G36_ThermalZones_Validation_Setpoints.txt @@ -1,4 +1,4 @@ -last-generated=2022-12-19 +last-generated=2024-12-19 statistics-simulation= { "linear": " ", diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Subsequences_Validation_BypassValve.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Subsequences_Validation_BypassValve.txt new file mode 100644 index 00000000000..9fb52502830 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Subsequences_Validation_BypassValve.txt @@ -0,0 +1,15 @@ +last-generated=2022-10-05 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "1", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +wseVal.uWSE=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +wseVal.uPla=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +wseVal.dpChiWat=[7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 7.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03, 4.5e+03] +wseVal.dpDes=[6e+03, 6e+03] +wseVal.yRetVal=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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.824999928474426e-01, 7.924999594688416e-01, 7.024999856948853e-01, 6.125000119209284e-01, 5.224999785423273e-01, 4.324999749660486e-01, 3.424999713897705e-01, 2.524999976158142e-01, 1.624999791383743e-01, 7.249998301267624e-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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +wseVal.yConWatIsoVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Subsequences_Validation_HeatExchangerPump.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Subsequences_Validation_HeatExchangerPump.txt new file mode 100644 index 00000000000..4f23256edda --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Subsequences_Validation_HeatExchangerPump.txt @@ -0,0 +1,17 @@ +last-generated=2024-12-12 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +wsePum.uWSE=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +wsePum.uPum=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +wsePum.yPumOn=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +wsePum.uPla=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +wsePum.TEntWSE=[2.851499938964844e+02, 2.852099914550781e+02, 2.852699890136719e+02, 2.853299865722656e+02, 2.853900146484375e+02, 2.854500122070312e+02, 2.85510009765625e+02, 2.855700073242188e+02, 2.856300048828125e+02, 2.856900024414062e+02, 2.8575e+02, 2.858099975585938e+02, 2.858699951171875e+02, 2.859299926757812e+02, 2.85989990234375e+02, 2.860499877929688e+02, 2.861099853515625e+02, 2.861700134277344e+02, 2.862300109863281e+02, 2.862900085449219e+02, 2.863500061035156e+02, 2.864100036621094e+02, 2.864700012207031e+02, 2.865299987792969e+02, 2.865899963378906e+02, 2.866499938964844e+02, 2.867099914550781e+02, 2.867699890136719e+02, 2.868299865722656e+02, 2.868900146484375e+02, 2.869500122070312e+02, 2.87010009765625e+02, 2.870700073242188e+02, 2.871300048828125e+02, 2.871900024414062e+02, 2.8725e+02, 2.873099975585938e+02, 2.873699951171875e+02, 2.874299926757812e+02, 2.87489990234375e+02, 2.875499877929688e+02, 2.876099853515625e+02, 2.876700134277344e+02, 2.877300109863281e+02, 2.877900085449219e+02, 2.878500061035156e+02, 2.879100036621094e+02, 2.879700012207031e+02, 2.880299987792969e+02, 2.880899963378906e+02, 2.881499938964844e+02, 2.882099914550781e+02, 2.882699890136719e+02, 2.883299865722656e+02, 2.883900146484375e+02, 2.884500122070312e+02, 2.88510009765625e+02, 2.885700073242188e+02, 2.886300048828125e+02, 2.886900024414062e+02, 2.8875e+02, 2.888099975585938e+02, 2.888699951171875e+02, 2.889299926757812e+02, 2.88989990234375e+02, 2.890499877929688e+02, 2.891099853515625e+02, 2.891700134277344e+02, 2.892300109863281e+02, 2.892900085449219e+02, 2.893500061035156e+02, 2.894100036621094e+02, 2.894700012207031e+02, 2.895299987792969e+02, 2.895899963378906e+02, 2.896499938964844e+02, 2.897099914550781e+02, 2.897699890136719e+02, 2.898299865722656e+02, 2.898900146484375e+02, 2.899500122070312e+02, 2.90010009765625e+02, 2.900700073242188e+02, 2.901300048828125e+02, 2.901900024414062e+02, 2.9025e+02, 2.903099975585938e+02, 2.903699951171875e+02, 2.904299926757812e+02, 2.90489990234375e+02, 2.905499877929688e+02, 2.906099853515625e+02, 2.906700134277344e+02, 2.907300109863281e+02, 2.907900085449219e+02, 2.908500061035156e+02, 2.909100036621094e+02, 2.909700012207031e+02, 2.910299987792969e+02, 2.910899963378906e+02, 2.911499938964844e+02] +wsePum.TEntHex=[2.831499938964844e+02, 2.832300109863281e+02, 2.833099975585938e+02, 2.833900146484375e+02, 2.834700012207031e+02, 2.835499877929688e+02, 2.836300048828125e+02, 2.837099914550781e+02, 2.837900085449219e+02, 2.838699951171875e+02, 2.839500122070312e+02, 2.840299987792969e+02, 2.841099853515625e+02, 2.841900024414062e+02, 2.842699890136719e+02, 2.843500061035156e+02, 2.844299926757812e+02, 2.84510009765625e+02, 2.845899963378906e+02, 2.846700134277344e+02, 2.8475e+02, 2.848299865722656e+02, 2.849100036621094e+02, 2.84989990234375e+02, 2.850700073242188e+02, 2.851499938964844e+02, 2.852300109863281e+02, 2.853099975585938e+02, 2.853900146484375e+02, 2.854700012207031e+02, 2.855499877929688e+02, 2.856300048828125e+02, 2.857099914550781e+02, 2.857900085449219e+02, 2.858699951171875e+02, 2.859500122070312e+02, 2.860299987792969e+02, 2.861099853515625e+02, 2.861900024414062e+02, 2.862699890136719e+02, 2.863500061035156e+02, 2.864299926757812e+02, 2.86510009765625e+02, 2.865899963378906e+02, 2.866700134277344e+02, 2.8675e+02, 2.868299865722656e+02, 2.869100036621094e+02, 2.86989990234375e+02, 2.870700073242188e+02, 2.871499938964844e+02, 2.872300109863281e+02, 2.873099975585938e+02, 2.873900146484375e+02, 2.874700012207031e+02, 2.875499877929688e+02, 2.876300048828125e+02, 2.877099914550781e+02, 2.877900085449219e+02, 2.878699951171875e+02, 2.879500122070312e+02, 2.880299987792969e+02, 2.881099853515625e+02, 2.881900024414062e+02, 2.882699890136719e+02, 2.883500061035156e+02, 2.884299926757812e+02, 2.88510009765625e+02, 2.885899963378906e+02, 2.886700134277344e+02, 2.8875e+02, 2.888299865722656e+02, 2.889100036621094e+02, 2.88989990234375e+02, 2.890700073242188e+02, 2.891499938964844e+02, 2.892300109863281e+02, 2.893099975585938e+02, 2.893900146484375e+02, 2.894700012207031e+02, 2.895499877929688e+02, 2.896300048828125e+02, 2.897099914550781e+02, 2.897900085449219e+02, 2.898699951171875e+02, 2.899500122070312e+02, 2.900299987792969e+02, 2.901099853515625e+02, 2.901900024414062e+02, 2.902699890136719e+02, 2.903500061035156e+02, 2.904299926757812e+02, 2.90510009765625e+02, 2.905899963378906e+02, 2.906700134277344e+02, 2.9075e+02, 2.908299865722656e+02, 2.909100036621094e+02, 2.90989990234375e+02, 2.910700073242188e+02, 2.911499938964844e+02] +wsePum.yConWatIsoVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +wsePum.yPumSpe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.600000143051147e-01, 8.600000143051147e-01, 8.600000143051147e-01, 8.600000143051147e-01, 8.600000143051147e-01, 8.199999928474426e-01, 8.199999928474426e-01, 8.199999928474426e-01, 7.799999713897705e-01, 7.799999713897705e-01, 7.799999713897705e-01, 7.799999713897705e-01, 7.400000095367432e-01, 7.400000095367432e-01, 7.400000095367432e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.600000262260437e-01, 6.600000262260437e-01, 6.600000262260437e-01, 6.600000262260437e-01, 6.200000047683716e-01, 6.200000047683716e-01, 6.200000047683716e-01, 5.799999833106995e-01, 5.799999833106995e-01, 5.799999833106995e-01, 5.400000214576721e-01, 5.400000214576721e-01, 5.400000214576721e-01, 5.400000214576721e-01, 5e-01, 5e-01, 5e-01, 4.600000083446503e-01, 4.600000083446503e-01, 4.600000083446503e-01, 4.49999988079071e-01, 4.49999988079071e-01, 4.49999988079071e-01, 4.49999988079071e-01, 4.399999976158142e-01, 4.399999976158142e-01, 4.399999976158142e-01, 4.300000071525574e-01, 4.300000071525574e-01, 4.300000071525574e-01, 4.199999868869781e-01, 4.199999868869781e-01, 4.199999868869781e-01, 4.199999868869781e-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] +wsePum.resSpeReq.y=[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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Subsequences_Validation_PredictedOutletTemperature.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Subsequences_Validation_PredictedOutletTemperature.txt new file mode 100644 index 00000000000..c90361db503 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Subsequences_Validation_PredictedOutletTemperature.txt @@ -0,0 +1,13 @@ +last-generated=2021-08-31 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 2.1e+03] +wseTOut.uTunPar=[-2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -1.800000071525574e-01, -1.800000071525574e-01, -1.800000071525574e-01, -1.599999964237213e-01, -1.599999964237213e-01, -1.599999964237213e-01, -1.400000005960464e-01, -1.400000005960464e-01, -1.400000005960464e-01, -1.19999997317791e-01, -1.19999997317791e-01, -1.19999997317791e-01, -1.000000014901161e-01, -1.000000014901161e-01, -1.000000014901161e-01, -7.999999821186066e-02, -7.999999821186066e-02, -7.999999821186066e-02, -5.999999865889549e-02, -5.999999865889549e-02, -3.999999910593033e-02, -3.999999910593033e-02, -3.999999910593033e-02, -1.999999955296516e-02, -1.999999955296516e-02, -1.999999955296516e-02, -2.775557561562891e-17, -2.775557561562891e-17, -2.775557561562891e-17, 1.999999955296516e-02, 1.999999955296516e-02, 1.999999955296516e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 5.999999865889549e-02, 5.999999865889549e-02, 5.999999865889549e-02, 7.999999821186066e-02, 7.999999821186066e-02, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.199999988079071e-01, 2.199999988079071e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.599999904632568e-01, 2.599999904632568e-01, 2.599999904632568e-01, 2.800000011920929e-01, 2.800000011920929e-01, 2.800000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.600000143051147e-01, 3.600000143051147e-01, 3.799999952316284e-01, 3.799999952316284e-01, 3.799999952316284e-01, 4.000000059604645e-01, 4.000000059604645e-01, 4.000000059604645e-01, 4.199999868869781e-01, 4.199999868869781e-01, 4.199999868869781e-01, 4.399999976158142e-01, 4.399999976158142e-01, 4.399999976158142e-01, 4.600000083446503e-01, 4.600000083446503e-01, 4.600000083446503e-01, 4.799999892711639e-01, 4.799999892711639e-01, 4.799999892711639e-01] +wseTOut.VChiWat_flow=[9.999999776482582e-03, 1.043628621846437e-02, 1.085155829787254e-02, 1.122581399977207e-02, 1.15410266444087e-02, 1.178201287984848e-02, 1.193716656416655e-02, 1.199901290237904e-02, 1.19645744562149e-02, 1.183550897985697e-02, 1.161803398281336e-02, 1.132262405008078e-02, 1.096350699663162e-02, 1.055798213928938e-02, 1.012558117508888e-02, 9.687131270766258e-03, 9.263751097023487e-03, 8.87583289295435e-03, 8.54206271469593e-03, 8.278516121208668e-03, 8.09788703918457e-03, 8.008875884115696e-03, 8.015770465135574e-03, 8.118238300085068e-03, 8.311344310641289e-03, 8.585786446928978e-03, 8.928346447646618e-03, 9.322524070739746e-03, 9.749333374202251e-03, 1.018821634352207e-02, 1.061803381890059e-02, 1.101808249950409e-02, 1.136909425258636e-02, 1.165416091680527e-02, 1.185955293476582e-02, 1.197537686675787e-02, 1.199605315923691e-02, 1.192058715969324e-02, 1.175261382013559e-02, 1.15002216771245e-02, 1.117557007819414e-02, 1.079429592937231e-02, 1.037476304918528e-02, 9.93717834353447e-03, 9.502620436251163e-03, 9.092018939554691e-03, 8.725152350962162e-03, 8.41968972235918e-03, 8.190345950424671e-03, 8.048166520893574e-03, 8.00000037997961e-03, 8.048166520893574e-03, 8.190345950424671e-03, 8.41968972235918e-03, 8.725152350962162e-03, 9.092018939554691e-03, 9.502620436251163e-03, 9.93717834353447e-03, 1.037476304918528e-02, 1.079429592937231e-02, 1.117557007819414e-02, 1.15002216771245e-02, 1.175261382013559e-02, 1.192058715969324e-02, 1.199605315923691e-02, 1.197537686675787e-02, 1.185955293476582e-02, 1.165416091680527e-02, 1.136909425258636e-02, 1.101808249950409e-02, 1.061803381890059e-02, 1.018821634352207e-02, 9.749333374202251e-03, 9.322524070739746e-03, 8.928346447646618e-03, 8.585786446928978e-03, 8.311344310641289e-03, 8.118238300085068e-03, 8.015770465135574e-03, 8.008875884115696e-03, 8.09788703918457e-03, 8.278516121208668e-03, 8.54206271469593e-03, 8.87583289295435e-03, 9.263751097023487e-03, 9.687131270766258e-03, 1.012558117508888e-02, 1.055798213928938e-02, 1.096350699663162e-02, 1.132262405008078e-02, 1.161803398281336e-02, 1.183550897985697e-02, 1.19645744562149e-02, 1.199901290237904e-02, 1.193716656416655e-02, 1.178201287984848e-02, 1.15410266444087e-02, 1.122581399977207e-02, 1.085155829787254e-02, 1.043628621846437e-02, 9.999999776482582e-03] +wseTOut.TOutWet=[2.881499938964844e+02, 2.885862731933594e+02, 2.890015563964844e+02, 2.893758239746094e+02, 2.896910400390625e+02, 2.899320068359375e+02, 2.90087158203125e+02, 2.901490173339844e+02, 2.901145629882812e+02, 2.899855041503906e+02, 2.897680358886719e+02, 2.894726257324219e+02, 2.891134948730469e+02, 2.887079772949219e+02, 2.882755737304688e+02, 2.878371276855469e+02, 2.874137573242188e+02, 2.870258483886719e+02, 2.866920776367188e+02, 2.864285278320312e+02, 2.862478942871094e+02, 2.861588745117188e+02, 2.86165771484375e+02, 2.862682495117188e+02, 2.864613342285156e+02, 2.867357788085938e+02, 2.870783386230469e+02, 2.874725341796875e+02, 2.878993225097656e+02, 2.883382263183594e+02, 2.887680358886719e+02, 2.891680908203125e+02, 2.895191040039062e+02, 2.898041687011719e+02, 2.900095520019531e+02, 2.901253662109375e+02, 2.901460571289062e+02, 2.900705871582031e+02, 2.899026184082031e+02, 2.896502075195312e+02, 2.893255615234375e+02, 2.889443054199219e+02, 2.885247497558594e+02, 2.880871887207031e+02, 2.876526184082031e+02, 2.872420043945312e+02, 2.868751525878906e+02, 2.865697021484375e+02, 2.8634033203125e+02, 2.861981811523438e+02, 2.861499938964844e+02, 2.861981811523438e+02, 2.8634033203125e+02, 2.865697021484375e+02, 2.868751525878906e+02, 2.872420043945312e+02, 2.876526184082031e+02, 2.880871887207031e+02, 2.885247497558594e+02, 2.889443054199219e+02, 2.893255615234375e+02, 2.896502075195312e+02, 2.899026184082031e+02, 2.900705871582031e+02, 2.901460571289062e+02, 2.901253662109375e+02, 2.900095520019531e+02, 2.898041687011719e+02, 2.895191040039062e+02, 2.891680908203125e+02, 2.887680358886719e+02, 2.883382263183594e+02, 2.878993225097656e+02, 2.874725341796875e+02, 2.870783386230469e+02, 2.867357788085938e+02, 2.864613342285156e+02, 2.862682495117188e+02, 2.86165771484375e+02, 2.861588745117188e+02, 2.862478942871094e+02, 2.864285278320312e+02, 2.866920776367188e+02, 2.870258483886719e+02, 2.874137573242188e+02, 2.878371276855469e+02, 2.882755737304688e+02, 2.887079772949219e+02, 2.891134948730469e+02, 2.894726257324219e+02, 2.897680358886719e+02, 2.899855041503906e+02, 2.901145629882812e+02, 2.901490173339844e+02, 2.90087158203125e+02, 2.899320068359375e+02, 2.896910400390625e+02, 2.893758239746094e+02, 2.890015563964844e+02, 2.885862731933594e+02, 2.881499938964844e+02] +wseTOut.y=[2.921499938964844e+02, 2.926735534667969e+02, 2.93171875e+02, 2.935964660644531e+02, 2.939684143066406e+02, 2.942527770996094e+02, 2.943971252441406e+02, 2.944688415527344e+02, 2.944288940429688e+02, 2.942424926757812e+02, 2.939945678710938e+02, 2.936577758789062e+02, 2.932291259765625e+02, 2.927749328613281e+02, 2.922906494140625e+02, 2.917432556152344e+02, 2.9119287109375e+02, 2.906885681152344e+02, 2.902838439941406e+02, 2.899465026855469e+02, 2.897153015136719e+02, 2.896411743164062e+02, 2.896498718261719e+02, 2.898166198730469e+02, 2.900560607910156e+02, 2.903963623046875e+02, 2.908425903320312e+02, 2.91323486328125e+02, 2.918441772460938e+02, 2.923382263183594e+02, 2.927680358886719e+02, 2.931680908203125e+02, 2.9349169921875e+02, 2.937710876464844e+02, 2.939723510742188e+02, 2.940463562011719e+02, 2.940662231445312e+02, 2.939937744140625e+02, 2.937974548339844e+02, 2.935602111816406e+02, 2.932550354003906e+02, 2.928807373046875e+02, 2.924947814941406e+02, 2.920809020996094e+02, 2.916028747558594e+02, 2.911512145996094e+02, 2.907731628417969e+02, 2.904432678222656e+02, 2.901955871582031e+02, 2.900810546875e+02, 2.900299987792969e+02, 2.900810546875e+02, 2.902679748535156e+02, 2.905064697265625e+02, 2.908241577148438e+02, 2.912238464355469e+02, 2.916426696777344e+02, 2.920859069824219e+02, 2.924497985839844e+02, 2.927854309082031e+02, 2.930904541015625e+02, 2.933201599121094e+02, 2.935170288085938e+02, 2.936096496582031e+02, 2.936669921875e+02, 2.936512756347656e+02, 2.935260620117188e+02, 2.933740844726562e+02, 2.931631164550781e+02, 2.928830261230469e+02, 2.92594970703125e+02, 2.922855224609375e+02, 2.919244079589844e+02, 2.91540283203125e+02, 2.911855163574219e+02, 2.909054870605469e+02, 2.906639709472656e+02, 2.904940490722656e+02, 2.904435729980469e+02, 2.904376220703125e+02, 2.905141906738281e+02, 2.907039489746094e+02, 2.909253234863281e+02, 2.912281799316406e+02, 2.915462646484375e+02, 2.918934326171875e+02, 2.92225341796875e+02, 2.924848022460938e+02, 2.927281188964844e+02, 2.929171142578125e+02, 2.930884704589844e+02, 2.93214599609375e+02, 2.932501525878906e+02, 2.932694396972656e+02, 2.932348022460938e+02, 2.931122741699219e+02, 2.929821472167969e+02, 2.928119506835938e+02, 2.925928039550781e+02, 2.923768615722656e+02, 2.921499938964844e+02] +wseTOut.TOutWetDes=[2.881499938964844e+02, 2.881499938964844e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Subsequences_Validation_Tuning_uEcoSta_uTowFanSpeMax.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Subsequences_Validation_Tuning_uEcoSta_uTowFanSpeMax.txt new file mode 100644 index 00000000000..2eca6a14b13 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Subsequences_Validation_Tuning_uEcoSta_uTowFanSpeMax.txt @@ -0,0 +1,24 @@ +last-generated=2024-03-12 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "5", + "numerical Jacobians": "0" +} +time=[0e+00, 1.5e+05] +wseTun.uTowFanSpeMax=[1e+00, 1e+00] +wseTun1.uTowFanSpeMax=[1e+00, 9.152240753173828e-01, 1e+00, 1e+00, 8.999999761581421e-01, 1e+00, 1e+00, 9.152240753173827e-01, 1e+00, 1e+00, 9.585786461830139e-01, 1e+00, 1e+00, 1e+00, 9.585786461830147e-01, 1e+00, 1e+00, 9.152240753173834e-01, 1e+00, 1e+00, 8.999999761581421e-01, 1e+00, 1e+00, 9.152240753173828e-01, 1e+00, 1e+00, 9.585786461830139e-01, 1e+00, 1e+00, 1e+00, 9.585786461830139e-01, 1e+00, 1e+00, 9.152240753173828e-01, 1e+00, 1e+00, 8.999999761581421e-01, 1e+00, 1e+00, 9.152240753173828e-01, 1e+00, 1e+00, 9.585786461830139e-01, 1e+00, 1e+00, 1e+00, 9.585786461830139e-01, 1e+00, 1e+00, 9.152240753173828e-01, 1e+00, 1e+00, 8.999999761581421e-01, 1e+00, 1e+00, 9.152240753173828e-01, 1e+00, 1e+00, 9.585786461830139e-01, 1e+00, 1e+00, 1e+00, 9.585786461830139e-01, 1e+00, 1e+00, 9.152240753173828e-01, 1e+00, 1e+00, 8.999999761581429e-01, 1e+00, 1e+00, 9.152240753173828e-01, 1e+00, 1e+00, 9.585786461830139e-01, 1e+00, 1e+00, 1e+00, 9.585786461830139e-01, 1e+00, 1e+00, 9.152240753173849e-01, 1e+00, 1e+00, 8.999999761581421e-01, 1e+00, 1e+00, 9.152240753173828e-01, 1e+00, 1e+00, 9.585786461830139e-01, 1e+00, 1e+00, 1e+00, 9.585786461830139e-01, 1e+00, 1e+00, 9.152240753173828e-01, 1e+00, 1e+00, 8.999999761581421e-01] +wseTun2.uTowFanSpeMax=[1e+00, 1e+00] +wseTun3.uTowFanSpeMax=[1e+00, 1e+00] +wseTun4.uTowFanSpeMax=[1e+00, 1e+00] +wseTun.uWseSta=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00] +wseTun1.uWseSta=[1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 9.999999999998788e-01, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 2.425837308805967e-13, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 9.999999999998788e-01, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00] +wseTun2.uWseSta=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00] +wseTun3.uWseSta=[1e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 9.999999999999697e-01, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 4.850638409455618e-14, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 9.999999999999515e-01, 9.999999999999516e-01, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00] +wseTun4.uWseSta=[1e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 9.999999999999697e-01, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00] +wseTun.y=[0e+00, 0e+00, 0e+00, 1.999999955296516e-02, 1.999999955296516e-02, 1.999999955296516e-02, 1.999999955296516e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 5.999999865889549e-02, 5.999999865889549e-02, 5.999999865889549e-02, 5.999999865889549e-02, 7.999999821186066e-02, 7.999999821186066e-02, 7.999999821186066e-02, 7.999999821186066e-02, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.199999988079071e-01, 2.199999988079071e-01, 2.199999988079071e-01, 2.199999988079071e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.599999904632568e-01, 2.599999904632568e-01, 2.599999904632568e-01, 2.599999904632568e-01, 2.800000011920929e-01, 2.800000011920929e-01, 2.800000011920929e-01, 2.800000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.600000143051147e-01, 3.600000143051147e-01, 3.600000143051147e-01, 3.600000143051147e-01, 3.799999952316284e-01, 3.799999952316284e-01, 3.799999952316284e-01, 3.799999952316284e-01, 4.000000059604645e-01, 4.000000059604645e-01, 4.000000059604645e-01, 4.000000059604645e-01, 4.000000059604645e-01, 4.199999868869781e-01, 4.199999868869781e-01, 4.199999868869781e-01, 4.199999868869781e-01, 4.399999976158142e-01, 4.399999976158142e-01, 4.399999976158142e-01, 4.399999976158142e-01, 4.399999976158142e-01, 4.600000083446503e-01] +wseTun1.y=[0e+00, 0e+00, 0e+00, 0e+00, 1.999999955296516e-02, 1.999999955296516e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 5.999999865889549e-02, 5.999999865889549e-02, 5.999999865889549e-02, 7.999999821186066e-02, 7.999999821186066e-02, 7.999999821186066e-02, 7.999999821186066e-02, 1.000000014901161e-01, 1.000000014901161e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.199999988079071e-01, 2.199999988079071e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.599999904632568e-01, 2.599999904632568e-01, 2.599999904632568e-01, 2.800000011920929e-01, 2.800000011920929e-01, 2.800000011920929e-01, 2.800000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.600000143051099e-01, 3.600000143051147e-01, 3.600000143051147e-01, 3.600000143051147e-01, 3.799999952316284e-01, 3.799999952316284e-01, 3.799999952316284e-01, 4.000000059604645e-01, 4.000000059604645e-01, 4.000000059604645e-01, 4.000000059604645e-01, 4.199999868869781e-01, 4.199999868869781e-01, 4.399999976158142e-01, 4.399999976158142e-01, 4.399999976158142e-01, 4.399999976158142e-01, 4.600000083446503e-01, 4.600000083446503e-01, 4.600000083446503e-01, 4.799999892711639e-01, 4.799999892711639e-01, 4.799999892711639e-01, 4.799999892711639e-01, 5e-01, 5e-01, 4.999489486217499e-01, 4.999489486217499e-01, 4.999489486217499e-01, 4.999489486217499e-01, 4.999796748161316e-01, 4.999796748161316e-01, 4.999915659427643e-01, 4.99986469745636e-01, 4.99986469745636e-01, 4.99986469745636e-01, 4.999926388263702e-01, 4.999926388263702e-01, 4.999926388263702e-01, 4.999893307685852e-01, 4.999893307685852e-01, 4.999893307685852e-01, 4.999893307685852e-01, 4.999995529651642e-01] +wseTun2.y=[0e+00, 0e+00, 0e+00, 1.999999955296516e-02, 1.999999955296516e-02, 1.999999955296516e-02, 1.999999955296516e-02, 1.999999955296516e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 5.999999865889549e-02, 5.999999865889549e-02, 5.999999865889549e-02, 5.999999865889549e-02, 5.999999865889549e-02, 7.999999821186066e-02, 7.999999821186066e-02, 7.999999821186066e-02, 7.999999821186066e-02, 7.999999821186066e-02, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.199999988079071e-01, 2.199999988079071e-01, 2.199999988079071e-01, 2.199999988079071e-01, 2.199999988079071e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.599999904632568e-01, 2.599999904632568e-01, 2.599999904632568e-01, 2.599999904632568e-01, 2.599999904632568e-01, 2.800000011920929e-01, 2.800000011920929e-01, 2.800000011920929e-01, 2.800000011920929e-01, 2.800000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.600000143051147e-01, 3.600000143051147e-01, 3.600000143051147e-01, 3.600000143051147e-01, 3.600000143051147e-01, 3.799999952316284e-01, 3.799999952316284e-01, 3.799999952316284e-01, 3.799999952316284e-01] +wseTun3.y=[0e+00, 1.999999955296516e-02, 1.999999955296516e-02, 3.999999910593033e-02, 3.999999910593033e-02, 5.999999865889549e-02, 7.999999821186066e-02, 7.999999821186066e-02, 1.000000014901161e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.599999964237213e-01, 1.800000071525574e-01, 1.800000071525574e-01, 2.000000029802322e-01, 2.199999988079071e-01, 2.199999988079071e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.599999904632568e-01, 2.800000011920929e-01, 2.800000011920929e-01, 3.00000011920929e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.400000035762787e-01, 3.400000035762793e-01, 3.600000143051147e-01, 3.799999952316284e-01, 3.799999952316284e-01, 4.000000059604645e-01, 4.199999868869781e-01, 4.199999868869781e-01, 4.399999976158142e-01, 4.399999976158142e-01, 4.600000083446503e-01, 4.799999892711639e-01, 4.799999892711639e-01, 5e-01, 4.999949038028717e-01, 4.999949038028717e-01, 4.999920129776001e-01, 4.999920129776001e-01, 4.999842941761017e-01, 4.99969482421875e-01, 4.99969482421875e-01, 4.999889731407166e-01, 4.999995529651642e-01, 4.999995529651642e-01, 4.999924898147583e-01, 4.999924898147583e-01, 4.999575912952423e-01, 4.999257326126099e-01, 4.999257326126099e-01, 4.999893605709076e-01, 4.999624788761139e-01, 4.999624788761139e-01, 4.999565482139587e-01, 4.999565482139587e-01, 4.999984204769135e-01, 4.999903738498688e-01, 4.999905526638031e-01, 4.999504387378693e-01, 4.99985933303833e-01, 4.99985933303833e-01, 4.999945759773254e-01, 4.999945759773254e-01, 4.999187290668488e-01, 4.999721050262451e-01, 4.999721050262451e-01, 4.999953806400299e-01, 4.9990114569664e-01, 4.9990114569664e-01, 4.999662041664124e-01, 4.999662041664124e-01, 4.999635219573975e-01, 4.999760985374451e-01, 4.999760985374451e-01, 4.999888241291046e-01, 4.999886453151703e-01, 4.999886453151703e-01, 4.999884366989136e-01, 4.999884366989136e-01, 4.999882578849792e-01, 4.999880790710449e-01, 4.999880790710449e-01, 4.999769032001495e-01, 4.999954700469971e-01, 4.999954700469971e-01, 4.999974966049194e-01, 4.999974966049194e-01, 4.999953210353851e-01, 4.999822378158569e-01, 4.999822378158569e-01, 4.999360144138336e-01, 4.999366998672485e-01, 4.999366998672485e-01, 4.999300837516785e-01, 4.999300837516785e-01] +wseTun4.y=[0e+00, 1.999999955296516e-02, 1.999999955296516e-02, 3.999999910593033e-02, 3.999999910593033e-02, 5.999999865889549e-02, 7.999999821186066e-02, 7.999999821186066e-02, 1.000000014901161e-01, 1.19999997317791e-01, 1.19999997317791e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.599999964237213e-01, 1.800000071525574e-01, 1.800000071525574e-01, 2.000000029802322e-01, 2.199999988079071e-01, 2.199999988079071e-01, 2.39999994635582e-01, 2.39999994635582e-01, 2.599999904632568e-01, 2.800000011920929e-01, 2.800000011920929e-01, 3.00000011920929e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.400000035762787e-01, 3.400000035762793e-01, 3.600000143051147e-01, 3.799999952316284e-01, 3.799999952316284e-01, 4.000000059604645e-01, 4.199999868869781e-01, 4.199999868869781e-01, 4.399999976158142e-01, 4.399999976158142e-01, 4.600000083446503e-01, 4.799999892711639e-01, 4.799999892711639e-01, 5e-01, 4.999949038028717e-01, 4.999949038028717e-01, 4.999920129776001e-01, 4.999920129776001e-01, 4.999842941761017e-01, 4.99969482421875e-01, 4.999889731407166e-01, 4.999889731407166e-01, 4.999889731407166e-01, 4.999995529651642e-01, 4.999995529651642e-01, 4.999995529651642e-01, 4.999995529651642e-01, 4.999995529651642e-01, 4.999927282333374e-01, 4.999927282333374e-01, 4.999927282333374e-01, 4.999927282333374e-01, 4.999927282333374e-01, 4.999576210975647e-01, 4.999576210975647e-01, 4.999576210975647e-01, 4.999576210975647e-01, 4.999576210975647e-01, 4.999576210975647e-01, 4.999256432056427e-01, 4.999256432056427e-01, 4.999256432056427e-01, 4.999256432056427e-01, 4.999256432056427e-01, 4.999926090240479e-01, 4.999926090240479e-01, 4.999926090240479e-01, 4.999926090240479e-01, 4.999926090240479e-01, 4.999745488166809e-01, 4.999745488166809e-01, 4.999745488166809e-01, 4.999745488166809e-01, 4.999745488166809e-01, 4.999576807022095e-01, 4.999576807022095e-01, 4.999576807022095e-01, 4.999576807022095e-01, 4.999576807022095e-01, 4.999972879886627e-01, 4.999972879886627e-01, 4.999972879886627e-01, 4.999972879886627e-01, 4.999972879886627e-01, 4.999972879886627e-01, 4.999767243862152e-01, 4.999767243862152e-01, 4.999767243862152e-01, 4.999767243862152e-01, 4.999767243862152e-01, 4.999454915523529e-01, 4.999454915523529e-01, 4.999454915523529e-01, 4.999454915523529e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Validation_Controller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Validation_Controller.txt new file mode 100644 index 00000000000..dc749ad80ef --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Economizers_Validation_Controller.txt @@ -0,0 +1,45 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "7", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +wseSta.TOutWet=[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.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+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.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02] +wseSta.TChiWatRet=[2.931499938964844e+02, 2.931499938964844e+02] +wseSta.TChiWatRetDow=[2.901499938964844e+02, 2.901499938964844e+02] +wseSta.VChiWat_flow=[9.999999776482582e-03, 9.999999776482582e-03] +wseSta.uTowFanSpeMax=[1e+00, 1e+00] +wseSta.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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +wseSta.enaTWet.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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +wseSta.enaTChiWatRet.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +wseSta.yConWatIsoVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +wseSta.yRetVal=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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.88143265247345e-01, 8.194440603256226e-01, 4.460585415363312e-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] +wseSta1.TOutWet=[2.831499938964844e+02, 2.831499938964844e+02] +wseSta1.TChiWatRet=[2.931499938964844e+02, 2.931499938964844e+02] +wseSta1.TChiWatRetDow=[2.901499938964844e+02, 2.906513366699219e+02, 2.911447448730469e+02, 2.916224975585938e+02, 2.920770263671875e+02, 2.925011291503906e+02, 2.9288818359375e+02, 2.932320556640625e+02, 2.935273132324219e+02, 2.937693176269531e+02, 2.939542236328125e+02, 2.940791625976562e+02, 2.941421203613281e+02, 2.941421203613281e+02, 2.940791625976562e+02, 2.939542236328125e+02, 2.937693176269531e+02, 2.935273132324219e+02, 2.932320556640625e+02, 2.9288818359375e+02, 2.925011291503906e+02, 2.920770263671875e+02, 2.916224975585938e+02, 2.911447448730469e+02, 2.906513366699219e+02, 2.901499938964844e+02, 2.89648681640625e+02, 2.891552429199219e+02, 2.88677490234375e+02, 2.882229919433594e+02, 2.877988586425781e+02, 2.874118041992188e+02, 2.870679321289062e+02, 2.867726745605469e+02, 2.865307006835938e+02, 2.863457641601562e+02, 2.862208557128906e+02, 2.861578979492188e+02, 2.861578979492188e+02, 2.862208557128906e+02, 2.863457641601562e+02, 2.865307006835938e+02, 2.867726745605469e+02, 2.870679321289062e+02, 2.874118041992188e+02, 2.877988586425781e+02, 2.882229919433594e+02, 2.88677490234375e+02, 2.891552429199219e+02, 2.89648681640625e+02, 2.901499938964844e+02, 2.906513366699219e+02, 2.911447448730469e+02, 2.916224975585938e+02, 2.920770263671875e+02, 2.925011291503906e+02, 2.9288818359375e+02, 2.932320556640625e+02, 2.935273132324219e+02, 2.937693176269531e+02, 2.939542236328125e+02, 2.940791625976562e+02, 2.941421203613281e+02, 2.941421203613281e+02, 2.940791625976562e+02, 2.939542236328125e+02, 2.937693176269531e+02, 2.935273132324219e+02, 2.932320556640625e+02, 2.9288818359375e+02, 2.925011291503906e+02, 2.920770263671875e+02, 2.916224975585938e+02, 2.911447448730469e+02, 2.906513366699219e+02, 2.901499938964844e+02, 2.89648681640625e+02, 2.891552429199219e+02, 2.88677490234375e+02, 2.882229919433594e+02, 2.877988586425781e+02, 2.874118041992188e+02, 2.870679321289062e+02, 2.867726745605469e+02, 2.865307006835938e+02, 2.863457641601562e+02, 2.862208557128906e+02, 2.861578979492188e+02, 2.861578979492188e+02, 2.862208557128906e+02, 2.863457641601562e+02, 2.865307006835938e+02, 2.867726745605469e+02, 2.870679321289062e+02, 2.874118041992188e+02, 2.877988586425781e+02, 2.882229919433594e+02, 2.88677490234375e+02, 2.891552429199219e+02, 2.89648681640625e+02, 2.901499938964844e+02] +wseSta1.VChiWat_flow=[9.999999776482582e-03, 9.999999776482582e-03] +wseSta1.uTowFanSpeMax=[1e+00, 1e+00] +wseSta1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +wseSta1.enaTWet.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +wseSta1.enaTChiWatRet.y=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +wseSta1.yConWatIsoVal=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +wseSta1.yRetVal=[1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.496721550822258e-02, 2.707290947437286e-01, 6.792987585067749e-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, 9.88143265247345e-01, 8.194440603256226e-01, 4.460585415363312e-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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +wseSta2.TOutWet=[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.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+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.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02, 2.831499938964844e+02] +wseSta2.TChiWatRet=[2.931499938964844e+02, 2.931499938964844e+02] +wseSta2.TChiWatRetDow=[2.901499938964844e+02, 2.906513366699219e+02, 2.911447448730469e+02, 2.916224975585938e+02, 2.920770263671875e+02, 2.925011291503906e+02, 2.9288818359375e+02, 2.932320556640625e+02, 2.935273132324219e+02, 2.937693176269531e+02, 2.939542236328125e+02, 2.940791625976562e+02, 2.941421203613281e+02, 2.941421203613281e+02, 2.940791625976562e+02, 2.939542236328125e+02, 2.937693176269531e+02, 2.935273132324219e+02, 2.932320556640625e+02, 2.9288818359375e+02, 2.925011291503906e+02, 2.920770263671875e+02, 2.916224975585938e+02, 2.911447448730469e+02, 2.906513366699219e+02, 2.901499938964844e+02, 2.89648681640625e+02, 2.891552429199219e+02, 2.88677490234375e+02, 2.882229919433594e+02, 2.877988586425781e+02, 2.874118041992188e+02, 2.870679321289062e+02, 2.867726745605469e+02, 2.865307006835938e+02, 2.863457641601562e+02, 2.862208557128906e+02, 2.861578979492188e+02, 2.861578979492188e+02, 2.862208557128906e+02, 2.863457641601562e+02, 2.865307006835938e+02, 2.867726745605469e+02, 2.870679321289062e+02, 2.874118041992188e+02, 2.877988586425781e+02, 2.882229919433594e+02, 2.88677490234375e+02, 2.891552429199219e+02, 2.89648681640625e+02, 2.901499938964844e+02, 2.906513366699219e+02, 2.911447448730469e+02, 2.916224975585938e+02, 2.920770263671875e+02, 2.925011291503906e+02, 2.9288818359375e+02, 2.932320556640625e+02, 2.935273132324219e+02, 2.937693176269531e+02, 2.939542236328125e+02, 2.940791625976562e+02, 2.941421203613281e+02, 2.941421203613281e+02, 2.940791625976562e+02, 2.939542236328125e+02, 2.937693176269531e+02, 2.935273132324219e+02, 2.932320556640625e+02, 2.9288818359375e+02, 2.925011291503906e+02, 2.920770263671875e+02, 2.916224975585938e+02, 2.911447448730469e+02, 2.906513366699219e+02, 2.901499938964844e+02, 2.89648681640625e+02, 2.891552429199219e+02, 2.88677490234375e+02, 2.882229919433594e+02, 2.877988586425781e+02, 2.874118041992188e+02, 2.870679321289062e+02, 2.867726745605469e+02, 2.865307006835938e+02, 2.863457641601562e+02, 2.862208557128906e+02, 2.861578979492188e+02, 2.861578979492188e+02, 2.862208557128906e+02, 2.863457641601562e+02, 2.865307006835938e+02, 2.867726745605469e+02, 2.870679321289062e+02, 2.874118041992188e+02, 2.877988586425781e+02, 2.882229919433594e+02, 2.88677490234375e+02, 2.891552429199219e+02, 2.89648681640625e+02, 2.901499938964844e+02] +wseSta2.VChiWat_flow=[9.999999776482582e-03, 9.999999776482582e-03] +wseSta2.uTowFanSpeMax=[1e+00, 1e+00] +wseSta2.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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +wseSta2.enaTWet.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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +wseSta2.enaTChiWatRet.y=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +wseSta2.yConWatIsoVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +wseSta2.yRetVal=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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.88143265247345e-01, 8.194440603256226e-01, 4.460585415363312e-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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +wseSta3.y=[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] +wseSta3.yPumOn=[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] +wseSta3.uIni=[0e+00, 0e+00] +wseSta3.uChiSta=[0e+00, 0e+00] +wseSta3.yConWatIsoVal=[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] +wseSta3.yPumSpe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.600000143051147e-01, 8.600000143051147e-01, 8.600000143051147e-01, 8.600000143051147e-01, 8.600000143051147e-01, 8.199999928474426e-01, 8.199999928474426e-01, 8.199999928474426e-01, 7.799999713897705e-01, 7.799999713897705e-01, 7.799999713897705e-01, 7.799999713897705e-01, 7.400000095367432e-01, 7.400000095367432e-01, 7.400000095367432e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.600000262260437e-01, 6.600000262260437e-01, 6.600000262260437e-01, 6.600000262260437e-01, 6.200000047683716e-01, 6.200000047683716e-01, 6.200000047683716e-01, 5.799999833106995e-01, 5.799999833106995e-01, 5.799999833106995e-01, 5.400000214576721e-01, 5.400000214576721e-01, 5.400000214576721e-01, 5.400000214576721e-01, 5e-01, 5e-01, 5e-01, 4.600000083446503e-01, 4.600000083446503e-01, 4.600000083446503e-01, 4.199999868869781e-01, 4.199999868869781e-01, 4.199999868869781e-01, 4.199999868869781e-01, 4.099999964237213e-01, 4.099999964237213e-01, 4.099999964237213e-01, 4.000000059604645e-01, 4.000000059604645e-01, 4.000000059604645e-01, 3.899999856948853e-01, 3.899999856948853e-01, 3.899999856948853e-01, 3.899999856948853e-01, 3.799999952316284e-01, 3.799999952316284e-01, 3.799999952316284e-01, 3.700000047683716e-01, 3.700000047683716e-01, 3.700000047683716e-01, 3.899999856948853e-01, 3.899999856948853e-01, 3.899999856948853e-01, 3.899999856948853e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_ContinuousLeadSwapTwo_uDevSta.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_ContinuousLeadSwapTwo_uDevSta.txt new file mode 100644 index 00000000000..7d6efcd27e7 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_ContinuousLeadSwapTwo_uDevSta.txt @@ -0,0 +1,32 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1.8e+02] +leaSwa.uDevRolSet[1]=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 3.814682699498917e-06, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +leaSwa.uDevRolSet[2]=[0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 9.999961853173005e-01, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00] +leaSwa.uDevSta[1]=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 3.814682699498917e-06, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +leaSwa.uDevSta[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999898275774282e-01, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999898275774282e-01, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999898275773808e-01, 1e+00, 1e+00, 1e+00, 1e+00] +leaSwa.yDevStaSet[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 3.814682699498917e-06, 0e+00, 0e+00, 1e+00, 1e+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, 0e+00, 0e+00, 0e+00, 1e+00, 1e+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, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1.017242257184137e-05, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+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, 0e+00, 0e+00, 0e+00] +leaSwa.yDevStaSet[2]=[0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 9.999961853173005e-01, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00] +leaSwa1.uDevRolSet[1]=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 3.814682699498917e-06, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +leaSwa1.uDevRolSet[2]=[0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 9.999961853173005e-01, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00] +leaSwa1.uDevSta[1]=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 3.814682699498917e-06, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 9.999961853173005e-01, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +leaSwa1.uDevSta[2]=[0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 9.999961853172827e-01, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00] +leaSwa1.yDevStaSet[1]=[1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 3.814682717262485e-06, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +leaSwa1.yDevStaSet[2]=[0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 9.999961853173005e-01, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 3.814682699498917e-06, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00] +leaSwa2.uDevRolSet[1]=[1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1.017242257184137e-05, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 3.947452950517012e-14, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00] +leaSwa2.uDevRolSet[2]=[0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 9.999898275774282e-01, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 9.999999999999605e-01, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +leaSwa2.uDevSta[1]=[1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1.017242257184137e-05, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 3.947452950517012e-14, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00] +leaSwa2.uDevSta[2]=[0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 9.99999364217523e-01, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 9.999898275774282e-01, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 9.999389685687561e-01, 1e+00, 0e+00, 0e+00, 9.999898275774756e-01, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00] +leaSwa2.yDevStaSet[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 6.357824769986919e-07, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.017242257184137e-05, 0e+00, 1e+00, 1e+00, 1e+00, 1.017242257184137e-05, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 6.103143124391863e-05, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00] +leaSwa2.yDevStaSet[2]=[0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 9.999898275774282e-01, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 9.999999999999605e-01, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +leaSwa3.uDevRolSet[1]=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 3.814682699498917e-06, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +leaSwa3.uDevRolSet[2]=[0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 9.999961853173005e-01, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00] +leaSwa3.uDevSta[1]=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 3.814682699498917e-06, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +leaSwa3.uDevSta[2]=[1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 9.999961853172827e-01, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 3.814682699498917e-06, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00] +leaSwa3.yDevStaSet[1]=[1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 3.814682717262485e-06, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +leaSwa3.yDevStaSet[2]=[0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 9.999961853173005e-01, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_LeastRuntime_uDevRol.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_LeastRuntime_uDevRol.txt new file mode 100644 index 00000000000..09895a016c2 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_LeastRuntime_uDevRol.txt @@ -0,0 +1,26 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+05] +rotTwo.yDevRol[1]=[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, 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, 1.820765760385257e-14, 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, 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, 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, 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, 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] +rotTwo.yDevRol[2]=[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, 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, 9.999999999999818e-01, 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, 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, 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, 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, 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] +leaRunTim.uDevSta[1]=[1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+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, 0e+00, 0e+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, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +leaRunTim.uDevSta[2]=[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, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+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, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+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, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00] +leaRunTim.accTim[1].y=[0e+00, 7.2e+02, 7.2e+02, 7.2e+02, 1.12e+03, 2.12e+03, 2.88e+03, 2.88e+03, 3.68e+03, 4.68e+03, 5.68e+03, 6.68e+03, 7.2e+03, 7.2e+03, 7.2e+03, 7.8e+03, 8.8e+03, 9.8e+03, 1.08e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.192e+04, 1.224e+04, 1.224e+04, 1.224e+04, 1.304e+04, 1.404e+04, 1.44e+04, 1.46e+04, 1.512e+04, 1.512e+04, 1.512e+04, 1.572e+04, 1.672e+04, 1.728e+04, 1.728e+04, 1.828e+04, 1.928e+04, 2.028e+04, 2.128e+04, 2.16e+04, 2.16e+04, 2.16e+04, 2.24e+04, 2.34e+04, 2.44e+04, 2.54e+04, 2.592e+04, 2.592e+04, 2.592e+04, 2.652e+04, 2.664e+04, 2.664e+04, 2.664e+04, 2.764000000000001e+04, 2.864000000000001e+04, 2.88e+04, 2.919999999999999e+04, 2.952e+04, 2.952e+04, 2.952e+04, 3.032e+04, 3.132e+04, 3.168e+04, 3.188e+04, 3.288e+04, 3.388e+04, 3.488e+04, 3.588e+04, 3.6e+04, 3.6e+04, 3.6e+04, 3.7e+04, 3.8e+04, 3.9e+04, 4e+04, 4.032e+04, 4.032e+04, 4.032e+04, 4.104e+04, 4.104e+04, 4.104e+04, 4.124e+04, 4.224e+04, 4.32e+04, 4.32e+04, 4.38e+04, 4.392e+04, 4.392e+04, 4.392e+04, 4.492e+04, 4.592e+04, 4.608e+04, 4.648e+04, 4.748e+04, 4.848e+04, 4.948e+04, 5.04e+04, 5.04e+04, 5.04e+04] +leaRunTim.accTim[2].y=[0e+00, 1e+03, 2e+03, 3e+03, 4e+03, 4.32e+03, 4.32e+03, 4.32e+03, 5.04e+03, 5.04e+03, 5.04e+03, 5.24e+03, 6.24e+03, 7.2e+03, 7.2e+03, 7.8e+03, 7.92e+03, 7.92e+03, 7.92e+03, 8.92e+03, 9.92e+03, 1.008e+04, 1.048e+04, 1.148e+04, 1.248e+04, 1.348e+04, 1.44e+04, 1.44e+04, 1.44e+04, 1.46e+04, 1.56e+04, 1.66e+04, 1.76e+04, 1.86e+04, 1.872e+04, 1.872e+04, 1.872e+04, 1.944e+04, 1.944e+04, 1.944e+04, 1.984e+04, 2.084e+04, 2.16e+04, 2.16e+04, 2.232e+04, 2.232e+04, 2.232e+04, 2.252e+04, 2.352e+04, 2.448e+04, 2.448e+04, 2.508e+04, 2.608e+04, 2.708e+04, 2.808e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.919999999999999e+04, 3.02e+04, 3.12e+04, 3.22e+04, 3.312e+04, 3.312e+04, 3.312e+04, 3.332e+04, 3.384e+04, 3.384e+04, 3.384e+04, 3.444e+04, 3.544e+04, 3.6e+04, 3.6e+04, 3.672e+04, 3.672e+04, 3.672e+04, 3.712e+04, 3.812e+04, 3.888e+04, 3.888e+04, 3.968e+04, 4.068e+04, 4.168e+04, 4.268e+04, 4.32e+04, 4.32e+04, 4.32e+04, 4.38e+04, 4.48e+04, 4.58e+04, 4.68e+04, 4.752e+04, 4.752e+04, 4.752e+04, 4.792e+04, 4.824e+04, 4.824e+04, 4.824e+04, 4.904e+04, 5.004e+04, 5.04e+04] +rotTwo1.yDevRol[1]=[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, 1e+00, 1e+00, 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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +rotTwo1.yDevRol[2]=[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, 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, 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, 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] +leaRunTim1.uDevSta[1]=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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] +leaRunTim1.uDevSta[2]=[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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +leaRunTim1.accTim[1].y=[0e+00, 1e+03, 2e+03, 3e+03, 4e+03, 5e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.76e+03, 6.16e+03, 7.16e+03, 8.16e+03, 9.16e+03, 1.016e+04, 1.116e+04, 1.152e+04, 1.172e+04, 1.272e+04, 1.372e+04, 1.472e+04, 1.572e+04, 1.672e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.728e+04, 1.788e+04, 1.888e+04, 1.988e+04, 2.088e+04, 2.188000000000001e+04, 2.288000000000001e+04, 2.304e+04, 2.343999999999999e+04, 2.444e+04, 2.544e+04, 2.644e+04, 2.744e+04, 2.844e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.88e+04, 2.96e+04, 3.06e+04, 3.16e+04, 3.26e+04, 3.36e+04, 3.456e+04, 3.456e+04, 3.516e+04, 3.616e+04, 3.716e+04, 3.816e+04, 3.916e+04, 4.016e+04, 4.032e+04, 4.032e+04, 4.032e+04, 4.032e+04, 4.032e+04, 4.032e+04, 4.032e+04, 4.032e+04] +leaRunTim1.accTim[2].y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8e+02, 1.8e+03, 2.8e+03, 3.8e+03, 4.8e+03, 5.76e+03, 5.76e+03, 6.36e+03, 7.36e+03, 8.36e+03, 9.36e+03, 1.036e+04, 1.136e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.152e+04, 1.252e+04, 1.352e+04, 1.452e+04, 1.552e+04, 1.652e+04, 1.728e+04, 1.728e+04, 1.808e+04, 1.908e+04, 2.008e+04, 2.108e+04, 2.208e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.304e+04, 2.324e+04, 2.424e+04, 2.524e+04, 2.624e+04, 2.724e+04, 2.824e+04, 2.88e+04, 2.88e+04, 2.98e+04, 3.08e+04, 3.18e+04, 3.28e+04, 3.38e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.456e+04, 3.496e+04, 3.596e+04, 3.696e+04, 3.796e+04, 3.896e+04, 3.996e+04, 4.032e+04] +rotTwo2.yDevRol[1]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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, 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] +rotTwo2.yDevRol[2]=[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, 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, 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, 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, 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, 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] +leaRunTim2.uDevSta[1]=[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, 0e+00, 0e+00, 1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 0e+00, 0e+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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +leaRunTim2.uDevSta[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+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, 0e+00, 1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+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, 1e+00, 0e+00, 0e+00] +leaRunTim2.accTim[1].y=[0e+00, 1e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.44e+03, 1.44e+03, 2.24e+03, 3.24e+03, 4.24e+03, 5.24e+03, 6.24e+03, 7.2e+03, 7.2e+03, 7.8e+03, 8.8e+03, 9.8e+03, 1.008e+04, 1.008e+04, 1.008e+04, 1.008e+04, 1.048e+04, 1.148e+04, 1.248e+04, 1.348e+04, 1.448e+04, 1.548e+04, 1.648e+04, 1.656e+04, 1.656e+04, 1.656e+04, 1.656e+04, 1.716e+04, 1.816e+04, 1.872e+04, 1.872e+04, 1.972e+04, 2.072e+04, 2.16e+04, 2.16e+04, 2.16e+04, 2.16e+04, 2.16e+04, 2.24e+04, 2.34e+04, 2.44e+04, 2.54e+04, 2.64e+04, 2.74e+04, 2.808e+04, 2.808e+04, 2.808e+04, 2.808e+04, 2.808e+04, 2.908000000000001e+04, 2.916e+04, 2.916e+04, 2.916e+04, 2.916e+04, 2.976e+04, 3.076e+04, 3.176e+04, 3.276e+04, 3.312e+04, 3.332e+04, 3.42e+04, 3.42e+04, 3.42e+04, 3.42e+04, 3.42e+04, 3.456e+04, 3.456e+04, 3.556e+04, 3.656e+04, 3.756e+04, 3.856e+04, 3.924e+04, 3.924e+04, 3.924e+04, 3.924e+04, 3.924e+04, 4.024e+04, 4.124e+04, 4.224e+04, 4.32e+04, 4.32e+04, 4.38e+04, 4.428e+04, 4.428e+04, 4.428e+04, 4.428e+04, 4.448e+04, 4.464e+04, 4.504e+04, 4.604e+04, 4.704e+04, 4.804e+04, 4.904e+04, 5.004e+04, 5.04e+04] +leaRunTim2.accTim[2].y=[0e+00, 1e+03, 2e+03, 3e+03, 4e+03, 5e+03, 6e+03, 6.48e+03, 6.48e+03, 6.48e+03, 6.48e+03, 6.68e+03, 7.56e+03, 7.56e+03, 7.56e+03, 7.56e+03, 7.56e+03, 8.36e+03, 9.36e+03, 1.036e+04, 1.136e+04, 1.152e+04, 1.192e+04, 1.26e+04, 1.26e+04, 1.26e+04, 1.26e+04, 1.26e+04, 1.296e+04, 1.316e+04, 1.416e+04, 1.516e+04, 1.616e+04, 1.716e+04, 1.764e+04, 1.764e+04, 1.764e+04, 1.764e+04, 1.784e+04, 1.884e+04, 1.984e+04, 2.084e+04, 2.16e+04, 2.16e+04, 2.24e+04, 2.268e+04, 2.268e+04, 2.268e+04, 2.268e+04, 2.304e+04, 2.304e+04, 2.364e+04, 2.464e+04, 2.564e+04, 2.664e+04, 2.764000000000001e+04, 2.864000000000001e+04, 2.88e+04, 2.919999999999999e+04, 3.02e+04, 3.12e+04, 3.168e+04, 3.168e+04, 3.168e+04, 3.168e+04, 3.188e+04, 3.288e+04, 3.388e+04, 3.488e+04, 3.588e+04, 3.688e+04, 3.788e+04, 3.816e+04, 3.816e+04, 3.816e+04, 3.816e+04, 3.856e+04, 3.956e+04, 4.032e+04, 4.032e+04, 4.112e+04, 4.212e+04, 4.312e+04, 4.32e+04, 4.32e+04, 4.32e+04, 4.32e+04, 4.38e+04, 4.48e+04, 4.58e+04, 4.68e+04, 4.78e+04, 4.88e+04, 4.968e+04, 4.968e+04, 4.968e+04, 4.968e+04, 4.968e+04, 5.048e+04, 5.076e+04, 5.076e+04] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_MinimumLeadRuntime_uDevRol.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_MinimumLeadRuntime_uDevRol.txt new file mode 100644 index 00000000000..63ef081cd4a --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_MinimumLeadRuntime_uDevRol.txt @@ -0,0 +1,32 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+05] +rotTwo.yDevRol[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +rotTwo.yDevRol[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +minLeaTim.uDevSta[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+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, 0e+00] +minLeaTim.uDevSta[2]=[1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999999999999818e-01, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+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, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +minLeaTim.accTim[1].y=[0e+00, 1e+03, 2e+03, 3e+03, 4e+03, 5e+03, 5.76e+03, 5.76e+03, 6.56e+03, 7.56e+03, 8.56e+03, 9.56e+03, 1.056e+04, 1.152e+04, 1.152e+04, 1.212e+04, 1.312e+04, 1.412e+04, 1.512e+04, 1.612e+04, 1.712e+04, 1.728e+04, 1.768e+04, 1.868e+04, 1.968e+04, 2.068e+04, 2.168e+04, 2.268e+04, 2.304e+04, 2.324e+04, 2.424e+04, 2.524e+04, 2.624e+04, 2.724e+04, 2.824e+04, 2.88e+04, 2.88e+04, 2.98e+04, 3.08e+04, 3.18e+04, 3.28e+04, 3.38e+04, 3.456e+04, 3.456e+04, 3.536e+04, 3.636e+04, 3.736e+04, 3.836e+04, 3.936e+04, 4.032e+04, 4.032e+04, 4.092e+04, 4.192e+04, 4.292e+04, 4.392e+04, 7.2e+02, 7.2e+02, 7.2e+02, 1.119999999999993e+03, 1.44e+03, 1.44e+03, 1.44e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.36e+03, 2.88e+03, 2.88e+03, 2.88e+03, 3.48e+03, 3.6e+03, 3.6e+03, 3.6e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.72e+03, 5.04e+03, 5.04e+03, 5.04e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.96e+03, 6.48e+03, 6.48e+03, 6.48e+03, 7.08e+03, 7.2e+03, 7.2e+03, 7.2e+03, 7.92e+03, 7.92e+03, 7.92e+03, 8.32e+03, 8.64e+03, 8.64e+03, 8.64e+03, 9.44e+03, 1.044e+04, 1.08e+04] +minLeaTim.accTim[2].y=[0e+00, 7.2e+02, 7.2e+02, 7.2e+02, 1.12e+03, 1.44e+03, 1.44e+03, 1.44e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.36e+03, 2.88e+03, 2.88e+03, 2.88e+03, 3.48e+03, 3.6e+03, 3.6e+03, 3.6e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.72e+03, 5.04e+03, 5.04e+03, 5.04e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.959999999999996e+03, 6.48e+03, 6.48e+03, 6.48e+03, 7.08e+03, 7.2e+03, 7.2e+03, 7.2e+03, 7.92e+03, 7.92e+03, 7.92e+03, 8.32e+03, 8.64e+03, 8.64e+03, 8.64e+03, 9.36e+03, 9.36e+03, 9.36e+03, 9.56e+03, 1.008e+04, 1.008e+04, 1.008e+04, 1.068e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.180000000000001e+04, 1.280000000000001e+04, 1.296e+04, 1.335999999999999e+04, 1.436e+04, 1.536e+04, 1.636e+04, 1.736e+04, 1.836e+04, 1.872e+04, 1.892e+04, 1.992e+04, 2.092e+04, 2.192e+04, 2.292e+04, 2.392e+04, 2.448e+04, 2.448e+04, 2.548e+04, 2.648e+04, 2.748e+04, 2.848e+04, 2.948e+04, 3.024e+04, 3.024e+04, 3.104e+04, 3.204e+04, 3.304e+04, 3.404e+04, 3.504e+04, 3.6e+04, 3.6e+04, 3.66e+04, 3.76e+04, 3.86e+04, 3.96e+04, 4.06e+04, 4.16e+04, 4.176e+04, 4.216e+04, 4.316e+04, 4.416e+04, 4.516e+04, 7.2e+02, 7.2e+02, 7.2e+02] +minLeaTim.accTim[1].passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +minLeaTim.accTim[2].passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00] +rotTwo1.yDevRol[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +rotTwo1.yDevRol[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, 1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +minLeaTim1.uDevSta[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+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] +minLeaTim1.uDevSta[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, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +minLeaTim1.accTim[1].y=[0e+00, 1e+03, 2e+03, 3e+03, 4e+03, 5e+03, 5.76e+03, 5.76e+03, 6.56e+03, 7.56e+03, 8.56e+03, 9.56e+03, 1.056e+04, 1.152e+04, 1.152e+04, 1.212e+04, 1.312e+04, 1.412e+04, 1.512e+04, 1.612e+04, 1.712e+04, 1.728e+04, 1.768e+04, 1.868e+04, 1.968e+04, 2.068e+04, 2.168e+04, 2.268e+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, 0e+00, 0e+00, 0e+00, 0e+00, 3.999999999999927e+02, 1.4e+03, 2.4e+03, 3.4e+03, 4.4e+03, 5.4e+03, 5.76e+03, 5.96e+03, 6.96e+03, 7.96e+03, 8.96e+03, 9.96e+03, 1.096e+04, 1.152e+04, 1.152e+04, 1.252e+04, 1.352e+04, 1.452e+04, 1.552e+04, 1.652e+04, 1.728e+04, 1.728e+04, 1.808e+04, 1.908e+04, 2.008e+04, 2.108e+04, 2.208e+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] +minLeaTim1.accTim[2].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, 1.999999999999964e+02, 1.2e+03, 2.2e+03, 3.2e+03, 4.2e+03, 5.2e+03, 5.76e+03, 5.76e+03, 6.76e+03, 7.76e+03, 8.76e+03, 9.76e+03, 1.076e+04, 1.152e+04, 1.152e+04, 1.232e+04, 1.332e+04, 1.432e+04, 1.532e+04, 1.632e+04, 1.728e+04, 1.728e+04, 1.788e+04, 1.888e+04, 1.988e+04, 2.088e+04, 2.188000000000001e+04, 2.288000000000001e+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, 0e+00, 0e+00, 0e+00, 0e+00, 6e+02, 1.6e+03, 2.6e+03, 3.6e+03, 4.6e+03, 5.6e+03, 5.76e+03, 6.16e+03, 7.16e+03, 8.16e+03, 9.16e+03, 1.016e+04, 1.116e+04, 1.152e+04] +minLeaTim1.accTim[1].passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +minLeaTim1.accTim[2].passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +rotTwo2.yDevRol[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, 0e+00, 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, 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, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +rotTwo2.yDevRol[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, 0e+00, 0e+00, 0e+00, 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, 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, 0e+00] +minLeaTim2.uDevSta[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+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, 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, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +minLeaTim2.uDevSta[2]=[1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+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, 1e+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, 1e+00, 0e+00, 0e+00] +minLeaTim2.accTim[1].y=[0e+00, 1e+03, 2e+03, 3e+03, 4e+03, 5e+03, 5.76e+03, 5.76e+03, 6.56e+03, 7.56e+03, 8.56e+03, 9.56e+03, 1.056e+04, 1.152e+04, 1.152e+04, 1.212e+04, 1.312e+04, 1.412e+04, 1.512e+04, 1.612e+04, 1.712e+04, 0e+00, 4e+02, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 2.080000000000004e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.76e+03, 3.76e+03, 4.32e+03, 4.32e+03, 5.32e+03, 6.32e+03, 7.32e+03, 8.32e+03, 9.32e+03, 1.008e+04, 1.008e+04, 1.088e+04, 1.188e+04, 1.288e+04, 1.388e+04, 1.488e+04, 4e+02, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 2.080000000000007e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.76e+03, 3.24e+03, 3.24e+03, 3.24e+03, 3.24e+03, 3.44e+03, 4.44e+03, 5.44e+03, 6.44e+03, 7.44e+03, 8.44e+03, 9e+03, 9e+03, 1e+04, 1.1e+04, 1.2e+04, 1.3e+04, 1.4e+04, 0e+00, 0e+00, 0e+00, 0e+00, 1e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.68e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.36e+03, 2.52e+03, 2.92e+03, 3.92e+03, 4.92e+03, 5.92e+03, 6.92e+03, 7.92e+03, 8.28e+03] +minLeaTim2.accTim[2].y=[0e+00, 1e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.68e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.36e+03, 3.24e+03, 3.24e+03, 3.24e+03, 3.24e+03, 3.24e+03, 4.04e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.72e+03, 5.72e+03, 6.72e+03, 7.72e+03, 8.72e+03, 9.72e+03, 1.008e+04, 1.028e+04, 1.128e+04, 1.228e+04, 1.328e+04, 1.428e+04, 3.6e+02, 3.6e+02, 3.6e+02, 3.6e+02, 5.6e+02, 1.44e+03, 1.44e+03, 1.44e+03, 1.44e+03, 1.44e+03, 2.24e+03, 2.52e+03, 2.52e+03, 2.52e+03, 2.52e+03, 2.88e+03, 2.88e+03, 3.48e+03, 4.48e+03, 5.48e+03, 6.48e+03, 7.480000000000007e+03, 8.480000000000007e+03, 8.64e+03, 9.039999999999993e+03, 1.004e+04, 1.104e+04, 1.204e+04, 1.304e+04, 1.404e+04, 1.44e+04, 2e+02, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.88e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.56e+03, 3.24e+03, 3.24e+03, 3.24e+03, 4.04e+03, 5.04e+03, 6.04e+03, 7.04e+03, 8.04e+03, 9e+03, 9e+03, 9.6e+03, 1.06e+04, 1.16e+04, 1.26e+04, 1.36e+04, 2e+02, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.88e+03, 2.16e+03, 2.16e+03] +minLeaTim2.accTim[1].passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +minLeaTim2.accTim[2].passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_RuntimeCounter_uDevRol.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_RuntimeCounter_uDevRol.txt new file mode 100644 index 00000000000..301160e9040 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_RuntimeCounter_uDevRol.txt @@ -0,0 +1,32 @@ +last-generated=2019-11-12 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +rotTwo.yDevRol[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +rotTwo.yDevRol[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +time=[0e+00, 1e+05] +runCou.uDevSta[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+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, 0e+00] +runCou.uDevSta[2]=[1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999999999999818e-01, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+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, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +runCou.tim[1].y=[0e+00, 1e+03, 2e+03, 3e+03, 4e+03, 5e+03, 5.76e+03, 5.76e+03, 6.56e+03, 7.56e+03, 8.56e+03, 9.56e+03, 1.056e+04, 1.152e+04, 1.152e+04, 1.212e+04, 1.312e+04, 1.412e+04, 1.512e+04, 1.612e+04, 1.712e+04, 1.728e+04, 1.768e+04, 1.868e+04, 1.968e+04, 2.068e+04, 2.168e+04, 2.268e+04, 2.304e+04, 2.324e+04, 2.424e+04, 2.524e+04, 2.624e+04, 2.724e+04, 2.824e+04, 2.88e+04, 2.88e+04, 2.98e+04, 3.08e+04, 3.18e+04, 3.28e+04, 3.38e+04, 3.456e+04, 3.456e+04, 3.536e+04, 3.636e+04, 3.736e+04, 3.836e+04, 3.936e+04, 4.032e+04, 4.032e+04, 4.092e+04, 4.192e+04, 4.292e+04, 4.392e+04, 7.2e+02, 7.2e+02, 7.2e+02, 1.119999999999993e+03, 1.44e+03, 1.44e+03, 1.44e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.36e+03, 2.88e+03, 2.88e+03, 2.88e+03, 3.48e+03, 3.6e+03, 3.6e+03, 3.6e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.72e+03, 5.04e+03, 5.04e+03, 5.04e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.96e+03, 6.48e+03, 6.48e+03, 6.48e+03, 7.08e+03, 7.2e+03, 7.2e+03, 7.2e+03, 7.92e+03, 7.92e+03, 7.92e+03, 8.32e+03, 8.64e+03, 8.64e+03, 8.64e+03, 9.44e+03, 1.044e+04, 1.08e+04] +runCou.tim[2].y=[0e+00, 7.2e+02, 7.2e+02, 7.2e+02, 1.12e+03, 1.44e+03, 1.44e+03, 1.44e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.36e+03, 2.88e+03, 2.88e+03, 2.88e+03, 3.48e+03, 3.6e+03, 3.6e+03, 3.6e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.72e+03, 5.04e+03, 5.04e+03, 5.04e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.959999999999996e+03, 6.48e+03, 6.48e+03, 6.48e+03, 7.08e+03, 7.2e+03, 7.2e+03, 7.2e+03, 7.92e+03, 7.92e+03, 7.92e+03, 8.32e+03, 8.64e+03, 8.64e+03, 8.64e+03, 9.36e+03, 9.36e+03, 9.36e+03, 9.56e+03, 1.008e+04, 1.008e+04, 1.008e+04, 1.068e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.180000000000001e+04, 1.280000000000001e+04, 1.296e+04, 1.335999999999999e+04, 1.436e+04, 1.536e+04, 1.636e+04, 1.736e+04, 1.836e+04, 1.872e+04, 1.892e+04, 1.992e+04, 2.092e+04, 2.192e+04, 2.292e+04, 2.392e+04, 2.448e+04, 2.448e+04, 2.548e+04, 2.648e+04, 2.748e+04, 2.848e+04, 2.948e+04, 3.024e+04, 3.024e+04, 3.104e+04, 3.204e+04, 3.304e+04, 3.404e+04, 3.504e+04, 3.6e+04, 3.6e+04, 3.66e+04, 3.76e+04, 3.86e+04, 3.96e+04, 4.06e+04, 4.16e+04, 4.176e+04, 4.216e+04, 4.316e+04, 4.416e+04, 4.516e+04, 7.2e+02, 7.2e+02, 7.2e+02] +runCou.greEquThr[2].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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00] +runCou.greEquThr[1].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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +rotTwo1.yDevRol[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, 1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +rotTwo1.yDevRol[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +runCou1.uDevSta[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+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] +runCou1.uDevSta[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, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +runCou1.tim[2].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, 1.999999999999964e+02, 1.2e+03, 2.2e+03, 3.2e+03, 4.2e+03, 5.2e+03, 5.76e+03, 5.76e+03, 6.76e+03, 7.76e+03, 8.76e+03, 9.76e+03, 1.076e+04, 1.152e+04, 1.152e+04, 1.232e+04, 1.332e+04, 1.432e+04, 1.532e+04, 1.632e+04, 1.728e+04, 1.728e+04, 1.788e+04, 1.888e+04, 1.988e+04, 2.088e+04, 2.188000000000001e+04, 2.288000000000001e+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, 0e+00, 0e+00, 0e+00, 0e+00, 6e+02, 1.6e+03, 2.6e+03, 3.6e+03, 4.6e+03, 5.6e+03, 5.76e+03, 6.16e+03, 7.16e+03, 8.16e+03, 9.16e+03, 1.016e+04, 1.116e+04, 1.152e+04] +runCou1.tim[1].y=[0e+00, 1e+03, 2e+03, 3e+03, 4e+03, 5e+03, 5.76e+03, 5.76e+03, 6.56e+03, 7.56e+03, 8.56e+03, 9.56e+03, 1.056e+04, 1.152e+04, 1.152e+04, 1.212e+04, 1.312e+04, 1.412e+04, 1.512e+04, 1.612e+04, 1.712e+04, 1.728e+04, 1.768e+04, 1.868e+04, 1.968e+04, 2.068e+04, 2.168e+04, 2.268e+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, 0e+00, 0e+00, 0e+00, 0e+00, 3.999999999999927e+02, 1.4e+03, 2.4e+03, 3.4e+03, 4.4e+03, 5.4e+03, 5.76e+03, 5.96e+03, 6.96e+03, 7.96e+03, 8.96e+03, 9.96e+03, 1.096e+04, 1.152e+04, 1.152e+04, 1.252e+04, 1.352e+04, 1.452e+04, 1.552e+04, 1.652e+04, 1.728e+04, 1.728e+04, 1.808e+04, 1.908e+04, 2.008e+04, 2.108e+04, 2.208e+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] +runCou1.greEquThr[1].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, 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, 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] +runCou1.greEquThr[2].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, 0e+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] +rotTwo2.yDevRol[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, 0e+00, 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, 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, 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] +rotTwo2.yDevRol[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, 0e+00, 0e+00, 0e+00, 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, 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, 0e+00] +runCou2.uDevSta[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+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, 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, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +runCou2.uDevSta[2]=[1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+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, 1e+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, 1e+00, 0e+00, 0e+00] +runCou2.tim[1].y=[0e+00, 1e+03, 2e+03, 3e+03, 4e+03, 5e+03, 5.76e+03, 5.76e+03, 6.56e+03, 7.56e+03, 8.56e+03, 9.56e+03, 1.056e+04, 1.152e+04, 1.152e+04, 1.212e+04, 1.312e+04, 1.412e+04, 1.512e+04, 1.612e+04, 1.712e+04, 0e+00, 4e+02, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 2.080000000000004e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.76e+03, 3.76e+03, 4.32e+03, 4.32e+03, 5.32e+03, 6.32e+03, 7.32e+03, 8.32e+03, 9.32e+03, 1.008e+04, 1.008e+04, 1.088e+04, 1.188e+04, 1.288e+04, 1.388e+04, 1.488e+04, 4e+02, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 2.080000000000007e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.76e+03, 3.24e+03, 3.24e+03, 3.24e+03, 3.24e+03, 3.44e+03, 4.44e+03, 5.44e+03, 6.44e+03, 7.44e+03, 8.44e+03, 9e+03, 9e+03, 1e+04, 1.1e+04, 1.2e+04, 1.3e+04, 1.4e+04, 0e+00, 0e+00, 0e+00, 0e+00, 1e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.68e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.36e+03, 2.52e+03, 2.92e+03, 3.92e+03, 4.92e+03, 5.92e+03, 6.92e+03, 7.92e+03, 8.28e+03] +runCou2.tim[2].y=[0e+00, 1e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.68e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.36e+03, 3.24e+03, 3.24e+03, 3.24e+03, 3.24e+03, 3.24e+03, 4.04e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.72e+03, 5.72e+03, 6.72e+03, 7.72e+03, 8.72e+03, 9.72e+03, 1.008e+04, 1.028e+04, 1.128e+04, 1.228e+04, 1.328e+04, 1.428e+04, 3.6e+02, 3.6e+02, 3.6e+02, 3.6e+02, 5.6e+02, 1.44e+03, 1.44e+03, 1.44e+03, 1.44e+03, 1.44e+03, 2.24e+03, 2.52e+03, 2.52e+03, 2.52e+03, 2.52e+03, 2.88e+03, 2.88e+03, 3.48e+03, 4.48e+03, 5.48e+03, 6.48e+03, 7.480000000000007e+03, 8.480000000000007e+03, 8.64e+03, 9.039999999999993e+03, 1.004e+04, 1.104e+04, 1.204e+04, 1.304e+04, 1.404e+04, 0e+00, 2e+02, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.88e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.56e+03, 3.24e+03, 3.24e+03, 3.24e+03, 4.04e+03, 5.04e+03, 6.04e+03, 7.04e+03, 8.04e+03, 9e+03, 9e+03, 9.6e+03, 1.06e+04, 1.16e+04, 1.26e+04, 1.36e+04, 2e+02, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.88e+03, 2.16e+03, 2.16e+03] +runCou2.greEquThr[1].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, 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, 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] +runCou2.greEquThr[2].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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_Scheduler.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_Scheduler.txt new file mode 100644 index 00000000000..3d343008c52 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_Scheduler.txt @@ -0,0 +1,15 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3e+06] +truFalHol.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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truFalHol1.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truFalHol2.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truFalHol3.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truFalHol4.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, 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] +rotSch.calTim.weekDay=[2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 6e+00, 6e+00, 6e+00, 7e+00, 7e+00, 7e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 6e+00, 6e+00, 6e+00, 7e+00, 7e+00, 7e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 6e+00, 6e+00, 6e+00, 7e+00, 7e+00, 7e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 6e+00, 6e+00, 7e+00, 7e+00, 7e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 6e+00, 6e+00, 6e+00, 7e+00, 7e+00, 1e+00, 1e+00, 1e+00] +rotSch.calTim.hour=[0e+00, 8e+00, 1.6e+01, 0e+00, 9e+00, 1.7e+01, 1e+00, 1e+01, 1.8e+01, 2e+00, 1.1e+01, 1.9e+01, 3e+00, 1.2e+01, 2e+01, 4e+00, 1.3e+01, 2.1e+01, 5e+00, 1.4e+01, 2.2e+01, 6e+00, 1.5e+01, 2.3e+01, 7e+00, 1.6e+01, 0e+00, 8e+00, 1.7e+01, 9.999999999999516e-01, 9e+00, 1.8e+01, 2e+00, 1e+01, 1.9e+01, 3e+00, 1.1e+01, 2e+01, 4e+00, 1.2e+01, 2.1e+01, 5e+00, 1.3e+01, 2.2e+01, 6e+00, 1.4e+01, 2.3e+01, 7e+00, 1.5e+01, 0e+00, 8e+00, 1.6e+01, 1e+00, 9e+00, 1.7e+01, 2e+00, 1e+01, 1.799999999999994e+01, 2.999999999999806e+00, 1.1e+01, 1.9e+01, 4e+00, 1.2e+01, 2e+01, 5e+00, 1.3e+01, 2.1e+01, 6e+00, 1.4e+01, 2.199999999999994e+01, 7e+00, 1.5e+01, 2.3e+01, 8e+00, 1.6e+01, 0e+00, 9e+00, 1.7e+01, 1e+00, 1e+01, 1.8e+01, 2e+00, 1.1e+01, 1.9e+01, 3e+00, 1.2e+01, 2e+01, 4e+00, 1.3e+01, 2.1e+01, 5e+00, 1.4e+01, 2.2e+01, 6e+00, 1.5e+01, 2.3e+01, 7e+00, 1.6e+01, 0e+00, 8e+00, 1.7e+01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_Two_uRot.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_Two_uRot.txt new file mode 100644 index 00000000000..d397b2694b8 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Subsequences_Validation_Two_uRot.txt @@ -0,0 +1,16 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+06] +rotTwo.yDevRol[1]=[1e+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, 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, 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, 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, 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] +rotTwo.yDevRol[2]=[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, 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, 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, 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, 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] +rotTwo.yPreDevRolSig[1]=[1e+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, 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, 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, 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, 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] +rotTwo.yPreDevRolSig[2]=[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, 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, 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, 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, 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] +rotTwo1.yDevRol[1]=[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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +rotTwo1.yDevRol[2]=[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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +rotTwo1.yPreDevRolSig[1]=[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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +rotTwo1.yPreDevRolSig[2]=[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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Validation_ControllerTwo.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Validation_ControllerTwo.txt new file mode 100644 index 00000000000..0a93789414b --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Validation_ControllerTwo.txt @@ -0,0 +1,34 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+05] +leaLag.uLeaStaSet=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +leaLag.uLagStaSet=[1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999999999999818e-01, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +leaLag.yDevStaSet[1]=[1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+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, 0e+00, 0e+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, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +leaLag.yDevStaSet[2]=[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, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+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, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+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, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00] +leaLag.yDevRol[1]=[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, 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, 1.820765760385257e-14, 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, 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, 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, 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, 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] +leaLag.yDevRol[2]=[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, 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, 9.999999999999818e-01, 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, 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, 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, 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, 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] +leaLag1.uLeaStaSet=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +leaLag1.uLagStaSet=[1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00] +leaLag1.yDevStaSet[1]=[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, 0e+00, 0e+00, 1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 0e+00, 0e+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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +leaLag1.yDevStaSet[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+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, 0e+00, 1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+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, 1e+00, 0e+00, 0e+00] +leaLag1.yDevRol[1]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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, 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] +leaLag1.yDevRol[2]=[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, 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, 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, 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, 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, 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] +leaSta.uLeaStaSet=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +leaSta.yDevStaSet[1]=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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] +leaSta.yDevStaSet[2]=[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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +leaSta.yDevRol[1]=[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, 1e+00, 1e+00, 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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +leaSta.yDevRol[2]=[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, 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, 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, 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] +conLeaSimSta.yDevStaSet[1]=[1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00] +conLeaSimSta.yDevStaSet[2]=[1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00] +conLeaSimSta.yDevRol[1]=[1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00] +conLeaSimSta.yDevRol[2]=[0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1.820765760385257e-14, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00] +conLeaSch.yDevStaSet[1]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +conLeaSch.yDevStaSet[2]=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +conLeaSch.yDevRol[1]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +conLeaSch.yDevRol[2]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +conLeaSch.rotSch.onCouInt.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Validation_ControllerTwo_MinimumLeadRuntime.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Validation_ControllerTwo_MinimumLeadRuntime.txt new file mode 100644 index 00000000000..265e76868af --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_EquipmentRotation_Validation_ControllerTwo_MinimumLeadRuntime.txt @@ -0,0 +1,40 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+05] +leaLag.uLeaStaSet=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +leaLag.uLagStaSet=[1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999999999999818e-01, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +leaLag.yDevStaSet[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+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, 0e+00] +leaLag.yDevStaSet[2]=[1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999999999999818e-01, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+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, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +leaLag.yDevRol[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +leaLag.yDevRol[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +leaLag.minLeaTim.accTim[1].y=[0e+00, 1e+03, 2e+03, 3e+03, 4e+03, 5e+03, 5.76e+03, 5.76e+03, 6.56e+03, 7.56e+03, 8.56e+03, 9.56e+03, 1.056e+04, 1.152e+04, 1.152e+04, 1.212e+04, 1.312e+04, 1.412e+04, 1.512e+04, 1.612e+04, 1.712e+04, 1.728e+04, 1.768e+04, 1.868e+04, 1.968e+04, 2.068e+04, 2.168e+04, 2.268e+04, 2.304e+04, 2.324e+04, 2.424e+04, 2.524e+04, 2.624e+04, 2.724e+04, 2.824e+04, 2.88e+04, 2.88e+04, 2.98e+04, 3.08e+04, 3.18e+04, 3.28e+04, 3.38e+04, 3.456e+04, 3.456e+04, 3.536e+04, 3.636e+04, 3.736e+04, 3.836e+04, 3.936e+04, 4.032e+04, 4.032e+04, 4.092e+04, 4.192e+04, 4.292e+04, 4.392e+04, 7.2e+02, 7.2e+02, 7.2e+02, 1.119999999999993e+03, 1.44e+03, 1.44e+03, 1.44e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.36e+03, 2.88e+03, 2.88e+03, 2.88e+03, 3.48e+03, 3.6e+03, 3.6e+03, 3.6e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.72e+03, 5.04e+03, 5.04e+03, 5.04e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.96e+03, 6.48e+03, 6.48e+03, 6.48e+03, 7.08e+03, 7.2e+03, 7.2e+03, 7.2e+03, 7.92e+03, 7.92e+03, 7.92e+03, 8.32e+03, 8.64e+03, 8.64e+03, 8.64e+03, 9.44e+03, 1.044e+04, 1.08e+04] +leaLag.minLeaTim.accTim[2].y=[0e+00, 7.2e+02, 7.2e+02, 7.2e+02, 1.12e+03, 1.44e+03, 1.44e+03, 1.44e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.36e+03, 2.88e+03, 2.88e+03, 2.88e+03, 3.48e+03, 3.6e+03, 3.6e+03, 3.6e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.72e+03, 5.04e+03, 5.04e+03, 5.04e+03, 5.76e+03, 5.76e+03, 5.76e+03, 5.959999999999996e+03, 6.48e+03, 6.48e+03, 6.48e+03, 7.08e+03, 7.2e+03, 7.2e+03, 7.2e+03, 7.92e+03, 7.92e+03, 7.92e+03, 8.32e+03, 8.64e+03, 8.64e+03, 8.64e+03, 9.36e+03, 9.36e+03, 9.36e+03, 9.56e+03, 1.008e+04, 1.008e+04, 1.008e+04, 1.068e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.180000000000001e+04, 1.280000000000001e+04, 1.296e+04, 1.335999999999999e+04, 1.436e+04, 1.536e+04, 1.636e+04, 1.736e+04, 1.836e+04, 1.872e+04, 1.892e+04, 1.992e+04, 2.092e+04, 2.192e+04, 2.292e+04, 2.392e+04, 2.448e+04, 2.448e+04, 2.548e+04, 2.648e+04, 2.748e+04, 2.848e+04, 2.948e+04, 3.024e+04, 3.024e+04, 3.104e+04, 3.204e+04, 3.304e+04, 3.404e+04, 3.504e+04, 3.6e+04, 3.6e+04, 3.66e+04, 3.76e+04, 3.86e+04, 3.96e+04, 4.06e+04, 4.16e+04, 4.176e+04, 4.216e+04, 4.316e+04, 4.416e+04, 4.516e+04, 7.2e+02, 7.2e+02, 7.2e+02] +leaLag.minLeaRuntime=[4.32e+04, 4.32e+04] +leaLag.minLeaTim.accTim[1].passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +leaLag.minLeaTim.accTim[2].passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00] +leaLag1.uLeaStaSet=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +leaLag1.uLagStaSet=[1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00] +leaLag1.yDevStaSet[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00] +leaLag1.yDevStaSet[2]=[1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +leaLag1.yDevRol[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +leaLag1.yDevRol[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +leaLag1.minLeaTim.accTim[1].y=[0e+00, 1e+03, 2e+03, 3e+03, 4e+03, 5e+03, 5.76e+03, 5.76e+03, 6.56e+03, 7.56e+03, 8.56e+03, 9.56e+03, 1.056e+04, 1.152e+04, 1.152e+04, 1.212e+04, 1.312e+04, 1.412e+04, 1.512e+04, 1.612e+04, 1.712e+04, 1.728e+04, 1.768e+04, 1.868e+04, 1.968e+04, 2.068e+04, 2.168e+04, 2.268e+04, 2.304e+04, 2.324e+04, 2.424e+04, 2.524e+04, 2.624e+04, 2.724e+04, 2.824e+04, 2.88e+04, 2.88e+04, 2.98e+04, 3.08e+04, 3.18e+04, 3.28e+04, 3.38e+04, 3.456e+04, 3.456e+04, 3.536e+04, 3.636e+04, 3.736e+04, 3.836e+04, 3.936e+04, 4.032e+04, 4.032e+04, 4.092e+04, 4.192e+04, 4.292e+04, 4.392e+04, 4.492000000000001e+04, 4.592000000000001e+04, 4.608e+04, 4.647999999999999e+04, 4.748e+04, 4.848e+04, 4.948e+04, 5.048e+04, 5.148e+04, 5.184e+04, 5.204e+04, 5.304e+04, 5.404e+04, 5.504e+04, 5.604e+04, 5.704e+04, 8e+02, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.48e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.16e+03, 3.16e+03, 3.24e+03, 3.24e+03, 3.24e+03, 3.24e+03, 3.84e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.52e+03, 5.4e+03, 5.4e+03, 5.4e+03, 5.4e+03, 5.4e+03, 6.2e+03, 6.48e+03, 6.48e+03] +leaLag1.minLeaTim.accTim[2].y=[0e+00, 1e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.08e+03, 1.68e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.16e+03, 2.36e+03, 3.24e+03, 3.24e+03, 3.24e+03, 3.24e+03, 3.24e+03, 4.04e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.32e+03, 4.72e+03, 5.4e+03, 5.4e+03, 5.4e+03, 5.4e+03, 5.4e+03, 6.400000000000004e+03, 6.48e+03, 6.48e+03, 6.48e+03, 6.48e+03, 7.08e+03, 7.56e+03, 7.56e+03, 7.56e+03, 7.56e+03, 7.76e+03, 8.64e+03, 8.64e+03, 8.64e+03, 8.64e+03, 8.64e+03, 9.44e+03, 9.72e+03, 9.72e+03, 9.72e+03, 9.72e+03, 1.012e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.180000000000001e+04, 1.188e+04, 1.188e+04, 1.188e+04, 1.188e+04, 1.248e+04, 1.296e+04, 1.296e+04, 1.296e+04, 1.296e+04, 1.316e+04, 1.404e+04, 1.404e+04, 1.404e+04, 1.404e+04, 1.404e+04, 1.44e+04, 1.44e+04, 1.54e+04, 1.64e+04, 1.74e+04, 1.84e+04, 1.94e+04, 2.016e+04, 2.016e+04, 2.096e+04, 2.196e+04, 2.296e+04, 2.396e+04, 2.496e+04, 2.592e+04, 2.592e+04, 2.652e+04, 2.752e+04, 2.852e+04, 2.952e+04, 3.052e+04, 3.152e+04, 3.168e+04, 3.208e+04, 3.308e+04, 3.408e+04, 3.508e+04, 3.608e+04, 3.708e+04, 3.744e+04] +leaLag1.minLeaRuntime=[5.4e+04, 5.4e+04] +leaLag1.minLeaTim.accTim[1].passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +leaLag1.minLeaTim.accTim[2].passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +leaSta.uLeaStaSet=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +leaSta.yDevStaSet[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 9.999999999999818e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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] +leaSta.yDevStaSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +leaSta.yDevRol[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +leaSta.yDevRol[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +leaSta.minLeaTim.accTim[1].y=[0e+00, 4e+02, 1.4e+03, 2.4e+03, 3.4e+03, 4.4e+03, 5.16e+03, 5.16e+03, 5.36e+03, 6.36e+03, 7.36e+03, 8.36e+03, 9.36e+03, 1.032e+04, 1.032e+04, 1.032e+04, 1.132e+04, 1.232e+04, 1.332e+04, 1.432e+04, 1.532e+04, 1.548e+04, 1.548e+04, 1.628e+04, 1.728e+04, 1.828e+04, 1.928e+04, 2.028e+04, 2.064e+04, 2.064e+04, 2.124e+04, 2.224e+04, 2.324e+04, 2.424e+04, 2.524e+04, 2.58e+04, 2.58e+04, 2.62e+04, 2.72e+04, 2.82e+04, 2.92e+04, 3.02e+04, 3.096e+04, 3.096e+04, 3.116e+04, 3.216e+04, 3.316e+04, 3.416e+04, 3.516e+04, 3.612e+04, 3.612e+04, 3.612e+04, 3.712e+04, 3.812e+04, 3.912e+04, 4.012000000000001e+04, 4.112000000000001e+04, 4.128e+04, 4.128e+04, 4.208e+04, 4.308e+04, 4.408e+04, 4.508e+04, 4.608e+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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +leaSta.minLeaTim.accTim[2].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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6e+02, 1.6e+03, 2.6e+03, 3.6e+03, 4.6e+03, 5.16e+03, 5.16e+03, 5.56e+03, 6.56e+03, 7.56e+03, 8.56e+03, 9.56e+03, 1.032e+04, 1.032e+04, 1.052e+04, 1.152e+04, 1.252e+04, 1.352e+04, 1.452e+04, 1.548e+04, 1.548e+04, 1.548e+04, 1.648e+04, 1.748e+04, 1.848e+04, 1.948e+04, 2.048e+04, 2.064e+04, 2.064e+04, 2.144e+04, 2.244e+04, 2.344e+04, 2.444e+04, 2.544e+04, 2.58e+04] +leaSta.minLeaRuntime=[4.32e+04, 4.32e+04] +leaSta.minLeaTim.accTim[1].passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +leaSta.minLeaTim.accTim[2].passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_PlantEnable_Validation_DisableChillers.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_PlantEnable_Validation_DisableChillers.txt new file mode 100644 index 00000000000..334423fee94 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_PlantEnable_Validation_DisableChillers.txt @@ -0,0 +1,32 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +disPlaFroChi.chaPro=[0e+00, 0e+00] +disPlaFroChi.uChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPlaFroChi.uChi[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] +disPlaFroChi.uChiWatReq[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPlaFroChi.uChiWatReq[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] +disPlaFroChi.uConWatReq[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPlaFroChi.uConWatReq[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] +disPlaFroChi.uChiWatIsoVal[1]=[1e+00, 1e+00] +disPlaFroChi.uChiWatIsoVal[2]=[0e+00, 0e+00] +disPlaFroChi.uConWatIsoVal[1]=[1e+00, 1e+00] +disPlaFroChi.uConWatIsoVal[2]=[0e+00, 0e+00] +disPlaFroChi.uChiWatPumSpe[1]=[7.5e-01, 7.5e-01] +disPlaFroChi.uChiWatPumSpe[2]=[0e+00, 0e+00] +disPlaFroChi.uConWatPumSpe[1]=[7.5e-01, 7.5e-01] +disPlaFroChi.uConWatPumSpe[2]=[0e+00, 0e+00] +disPlaFroChi.yChiWatIsoVal[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPlaFroChi.yChiWatIsoVal[2]=[0e+00, 0e+00] +disPlaFroChi.yConWatIsoVal[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPlaFroChi.yConWatIsoVal[2]=[0e+00, 0e+00] +disPlaFroChi.yChiWatPumSpe[1]=[7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-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] +disPlaFroChi.yChiWatPumSpe[2]=[0e+00, 0e+00] +disPlaFroChi.yConWatPumSpe[1]=[7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-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] +disPlaFroChi.yConWatPumSpe[2]=[0e+00, 0e+00] +disPlaFroChi.yTowCel=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_PlantEnable_Validation_Enable.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_PlantEnable_Validation_Enable.txt new file mode 100644 index 00000000000..92ca5e7d745 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_PlantEnable_Validation_Enable.txt @@ -0,0 +1,16 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 8.64e+04] +disPlaReq.ignReq=[1e+00, 1e+00] +disPlaReq.chiPlaReq=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPlaReq.yPla=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPlaOutTem.TOut=[2.751499938964844e+02, 2.756209411621094e+02, 2.760899963378906e+02, 2.765553588867188e+02, 2.770151672363281e+02, 2.774676208496094e+02, 2.779109191894531e+02, 2.783433532714844e+02, 2.787631530761719e+02, 2.79168701171875e+02, 2.795583801269531e+02, 2.799306945800781e+02, 2.802840881347656e+02, 2.806172790527344e+02, 2.809288635253906e+02, 2.812176208496094e+02, 2.814824523925781e+02, 2.817222900390625e+02, 2.819361877441406e+02, 2.821233215332031e+02, 2.822829284667969e+02, 2.824143676757812e+02, 2.825171508789062e+02, 2.825908508300781e+02, 2.826351928710938e+02, 2.826499938964844e+02, 2.826351928710938e+02, 2.825908508300781e+02, 2.825171508789062e+02, 2.824143676757812e+02, 2.822829284667969e+02, 2.821233215332031e+02, 2.819361877441406e+02, 2.817222900390625e+02, 2.814824523925781e+02, 2.812176208496094e+02, 2.809288635253906e+02, 2.806172790527344e+02, 2.802840881347656e+02, 2.799306945800781e+02, 2.795583801269531e+02, 2.79168701171875e+02, 2.787631530761719e+02, 2.783433532714844e+02, 2.779109191894531e+02, 2.774676208496094e+02, 2.770151672363281e+02, 2.765553588867188e+02, 2.760899963378906e+02, 2.756209411621094e+02, 2.751499938964844e+02, 2.746790771484375e+02, 2.742099914550781e+02, 2.7374462890625e+02, 2.732848205566406e+02, 2.728323669433594e+02, 2.723890686035156e+02, 2.719566650390625e+02, 2.715368347167969e+02, 2.711312866210938e+02, 2.707416076660156e+02, 2.703693237304688e+02, 2.700158996582031e+02, 2.696827392578125e+02, 2.693711547851562e+02, 2.690823669433594e+02, 2.688175354003906e+02, 2.685776977539062e+02, 2.683638000488281e+02, 2.681766662597656e+02, 2.6801708984375e+02, 2.678856201171875e+02, 2.677828369140625e+02, 2.677091369628906e+02, 2.67664794921875e+02, 2.676499938964844e+02, 2.67664794921875e+02, 2.677091369628906e+02, 2.677828369140625e+02, 2.678856201171875e+02, 2.6801708984375e+02, 2.681766662597656e+02, 2.683638000488281e+02, 2.685776977539062e+02, 2.688175354003906e+02, 2.690823669433594e+02, 2.693711547851562e+02, 2.696827392578125e+02, 2.700158996582031e+02, 2.703693237304688e+02, 2.707416076660156e+02, 2.711312866210938e+02, 2.715368347167969e+02, 2.719566650390625e+02, 2.723890686035156e+02, 2.728323669433594e+02, 2.732848205566406e+02, 2.7374462890625e+02, 2.742099914550781e+02, 2.746790771484375e+02, 2.751499938964844e+02] +disPlaOutTem.TChiLocOut=[2.775e+02, 2.775e+02] +disPlaOutTem.yPla=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPlaSch.enaSch.y[1]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPlaSch.yPla=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_PlantEnable_Validation_EnableDevices.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_PlantEnable_Validation_EnableDevices.txt new file mode 100644 index 00000000000..070ecb95e3e --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_PlantEnable_Validation_EnableDevices.txt @@ -0,0 +1,19 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +enaDev.uPla=[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] +enaDev.uChiWatPum[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaDev.uConWatPum[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaDev.uIni=[1e+00, 1e+00] +enaDev.uChiSta=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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] +enaDev.yEnaPlaPro=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaDev.yChiWatIsoVal=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaDev.yConWatIsoVal=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaDev.yLeaPriChiPum=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaDev.yLeaConPum=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaDev.yLeaChi=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_Validation_IdentifyStage.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_Validation_IdentifyStage.txt new file mode 100644 index 00000000000..4a5740a8d76 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Generic_Validation_IdentifyStage.txt @@ -0,0 +1,15 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 5e+00] +ideSta.uChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +ideSta.uChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +ideSta.ySta=[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, 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, 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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +ideSta1.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +ideSta1.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +ideSta1.uChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +ideSta1.ySta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_HeadPressure_Subsequences_Validation_ControlLoop.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_HeadPressure_Subsequences_Validation_ControlLoop.txt new file mode 100644 index 00000000000..e6aa6532b9e --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_HeadPressure_Subsequences_Validation_ControlLoop.txt @@ -0,0 +1,15 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "1", + "numerical Jacobians": "0" +} +time=[0e+00, 5e+00] +chiHeaPreLoo.uHeaPreEna=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiHeaPreLoo.TConWatRet=[2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+02, 2.821499938964844e+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] +chiHeaPreLoo.TChiWatSup=[2.801499938964844e+02, 2.801499938964844e+02] +chiHeaPreLoo.conPID.u_s=[1e+00, 1e+00] +chiHeaPreLoo.conPID.u_m=[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.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.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, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00] +chiHeaPreLoo.conPID.y=[8.00000011920929e-01, 8.799999940395378e-01, 9.599999761581457e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 7.999997913836196e-02, 1.599999582769334e-01, 2.400000327824054e-01, 3.200000119209504e-01, 4.000000059604645e-01, 4.799999701976564e-01, 5.599999642374691e-01, 6.40000023841744e-01, 7.200000476837015e-01, 8.00000011920929e-01, 8.800000715258012e-01, 9.599999403953838e-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, 5.560896706581685e-01, 5.260896706576568e-01, 4.96089783907107e-01, 4.660897541045573e-01, 4.360897243022919e-01, 4.060896944998841e-01, 3.760896646974768e-01, 3.460897779463585e-01, 3.160897481440931e-01, 2.860897183418274e-01, 2.560896885394198e-01, 2.260896587371541e-01, 1.960897719860362e-01, 1.660897421836994e-01, 1.360897123813629e-01, 1.060896825790262e-01, 7.608966022719921e-02, 4.608976975089725e-02, 1.608974181118841e-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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_HeadPressure_Subsequences_Validation_MappingWithWSE.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_HeadPressure_Subsequences_Validation_MappingWithWSE.txt new file mode 100644 index 00000000000..d203e76de17 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_HeadPressure_Subsequences_Validation_MappingWithWSE.txt @@ -0,0 +1,20 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 5e+00] +witWSE.uHeaPreCon=[0e+00, 1.428571415266822e-02, 2.857142830533629e-02, 4.285714232495821e-02, 5.714285661067266e-02, 7.14285746216774e-02, 8.571428464991705e-02, 1.000000031931015e-01, 1.142857132213501e-01, 1.285714392150974e-01, 1.428571492433548e-01, 1.571428592715843e-01, 1.714285692998544e-01, 1.857142963579164e-01, 2.000000063862044e-01, 2.142857164144516e-01, 2.285714264426811e-01, 2.428571364709513e-01, 2.571428784301389e-01, 2.714285884584445e-01, 2.857142984867096e-01, 3.000000255447463e-01, 3.142857185431686e-01, 3.285714456012764e-01, 3.428571385996276e-01, 3.571428656578064e-01, 3.714285927159852e-01, 3.857142857142654e-01, 4.000000127724442e-01, 4.142857057707244e-01, 4.285714328289032e-01, 4.42857159887082e-01, 4.571428528853622e-01, 4.71428579943541e-01, 4.857142729418213e-01, 5e-01, 5.142857568602169e-01, 5.285714200564591e-01, 5.42857176916818e-01, 5.57142840112918e-01, 5.714285969734192e-01, 5.857142942292756e-01, 6.000000510897767e-01, 6.142856802258361e-01, 6.285714370863372e-01, 6.428571343421936e-01, 6.571428912026949e-01, 6.71428588458551e-01, 6.857142771992553e-01, 6.999999744551116e-01, 7.142857313156128e-01, 7.285714285714692e-01, 7.428571854319703e-01, 7.571428145680298e-01, 7.714285714285308e-01, 7.857142686843872e-01, 8.000000255448885e-01, 8.142857228007446e-01, 8.285714115414489e-01, 8.428571087973051e-01, 8.571428656578064e-01, 8.714285629136628e-01, 8.857143197741639e-01, 8.999999489102233e-01, 9.142857057707244e-01, 9.285714030265808e-01, 9.428571598870821e-01, 9.571428571429383e-01, 9.714285458836426e-01, 9.85714243139783e-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] +witWSE.yMaxTowSpeSet=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +witWSE.yConWatPumSpeSet=[7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +witWSE.desConWatPumSpe=[7.5e-01, 7.5e-01] +witWSE.yHeaPreConVal=[1e+00, 9.871428610810193e-01, 9.742857221620388e-01, 9.614285842009799e-01, 9.485714443240769e-01, 9.357143044471741e-01, 9.228571684019551e-01, 9.100000246933351e-01, 8.971428290435424e-01, 8.842856853349224e-01, 8.714285492897034e-01, 8.585714132445645e-01, 8.457142771993893e-01, 8.328571258273336e-01, 8.199999897820873e-01, 8.071428537368774e-01, 7.942857176916676e-01, 7.814285816464211e-01, 7.685714302743657e-01, 7.557142942291903e-01, 7.428571581840515e-01, 7.300000068117808e-01, 7.171428860936317e-01, 7.042857347215031e-01, 6.914285543988515e-01, 6.785714030265808e-01, 6.657142516545943e-01, 6.528571309363032e-01, 6.399999795641745e-01, 6.271428588460256e-01, 6.142857074737549e-01, 6.014285561017684e-01, 5.885714353833351e-01, 5.757142840113486e-01, 5.628571632929155e-01, 5.50000011920929e-01, 5.371428605486582e-01, 5.242857398305092e-01, 5.114285884583807e-01, 4.985714379379093e-01, 4.857142865657806e-01, 4.72857135193652e-01, 4.599999838215233e-01, 4.471428937569278e-01, 4.342857125827609e-01, 4.214285612106323e-01, 4.085714098385036e-01, 3.957142584663751e-01, 3.828571684020637e-01, 3.70000017029935e-01, 3.571428656578064e-01, 3.442857142856778e-01, 3.314285331115109e-01, 3.185714430469153e-01, 3.057142916747867e-01, 2.928571403026581e-01, 2.799999889305294e-01, 2.671428375584008e-01, 2.542857474940895e-01, 2.414285812207997e-01, 2.28571429848671e-01, 2.157142784765423e-01, 2.028571122033946e-01, 1.900000221389412e-01, 1.771428707668125e-01, 1.642857193946838e-01, 1.51428553121465e-01, 1.385714017494074e-01, 1.257143116849539e-01, 1.128571528622448e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +witWSE.uHeaPreEna=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +noWSE.uHeaPreCon=[0e+00, 1.428571415266822e-02, 2.857142830533629e-02, 4.285714232495821e-02, 5.714285661067266e-02, 7.14285746216774e-02, 8.571428464991705e-02, 1.000000031931015e-01, 1.142857132213501e-01, 1.285714392150974e-01, 1.428571492433548e-01, 1.571428592715843e-01, 1.714285692998544e-01, 1.857142963579164e-01, 2.000000063862044e-01, 2.142857164144516e-01, 2.285714264426811e-01, 2.428571364709513e-01, 2.571428784301389e-01, 2.714285884584445e-01, 2.857142984867096e-01, 3.000000255447463e-01, 3.142857185431686e-01, 3.285714456012764e-01, 3.428571385996276e-01, 3.571428656578064e-01, 3.714285927159852e-01, 3.857142857142654e-01, 4.000000127724442e-01, 4.142857057707244e-01, 4.285714328289032e-01, 4.42857159887082e-01, 4.571428528853622e-01, 4.71428579943541e-01, 4.857142729418213e-01, 5e-01, 5.142857568602169e-01, 5.285714200564591e-01, 5.42857176916818e-01, 5.57142840112918e-01, 5.714285969734192e-01, 5.857142942292756e-01, 6.000000510897767e-01, 6.142856802258361e-01, 6.285714370863372e-01, 6.428571343421936e-01, 6.571428912026949e-01, 6.71428588458551e-01, 6.857142771992553e-01, 6.999999744551116e-01, 7.142857313156128e-01, 7.285714285714692e-01, 7.428571854319703e-01, 7.571428145680298e-01, 7.714285714285308e-01, 7.857142686843872e-01, 8.000000255448885e-01, 8.142857228007446e-01, 8.285714115414489e-01, 8.428571087973051e-01, 8.571428656578064e-01, 8.714285629136628e-01, 8.857143197741639e-01, 8.999999489102233e-01, 9.142857057707244e-01, 9.285714030265808e-01, 9.428571598870821e-01, 9.571428571429383e-01, 9.714285458836426e-01, 9.85714243139783e-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] +noWSE.yMaxTowSpeSet=[1e+00, 9.74285722162043e-01, 9.485714443240864e-01, 9.228571684019596e-01, 8.971428290435269e-01, 8.714285492897034e-01, 8.457142771993365e-01, 8.199999897820609e-01, 7.94285717691694e-01, 7.685714302744184e-01, 7.428571581840515e-01, 7.171428860936317e-01, 6.914285543986364e-01, 6.657142516546674e-01, 6.399999795641035e-01, 6.142857074737549e-01, 5.885714353834062e-01, 5.628571632929845e-01, 5.371428605488734e-01, 5.114285884584517e-01, 4.857142865657806e-01, 4.599999838215233e-01, 4.342857125827609e-01, 4.085714098385747e-01, 3.828571684020637e-01, 3.571428656578064e-01, 3.314285331113688e-01, 3.057142916747867e-01, 2.799999889305294e-01, 2.542857474939474e-01, 2.28571429848671e-01, 2.028571122033235e-01, 1.771428707667769e-01, 1.514285531214294e-01, 1.257143116848829e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +noWSE.yConWatPumSpeSet=[7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.31428545883813e-01, 7.128571360452809e-01, 6.942856819289518e-01, 6.757143316949223e-01, 6.571428775787354e-01, 6.385714234622641e-01, 6.199999693463613e-01, 6.014286037852e-01, 5.828571496692971e-01, 5.642856955528259e-01, 5.457142414366388e-01, 5.271428469245284e-01, 5.085714813639354e-01, 4.900000272477482e-01, 4.714285731315613e-01, 4.528571190152322e-01, 4.342856648991872e-01, 4.157143291403481e-01, 3.971428750243033e-01, 3.785714209079742e-01, 3.599999965939674e-01, 3.414285424776385e-01, 3.228571769170455e-01, 3.042857228007164e-01, 2.857142984867096e-01, 2.671428443703805e-01, 2.485713902541934e-01, 2.300000395944775e-01, 2.114285854782904e-01, 1.928571462631226e-01, 1.742856921468644e-01, 1.557142529316255e-01, 1.371428873710324e-01, 1.185714481558292e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +noWSE.desConWatPumSpe=[7.5e-01, 7.5e-01] +noWSE.yHeaPreConVal=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +noWSE.uHeaPreEna=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_HeadPressure_Subsequences_Validation_MappingWithoutWSE.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_HeadPressure_Subsequences_Validation_MappingWithoutWSE.txt new file mode 100644 index 00000000000..dbd15e74cff --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_HeadPressure_Subsequences_Validation_MappingWithoutWSE.txt @@ -0,0 +1,17 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 5e+00] +fixPumSpe.uHeaPreCon=[0e+00, 1.428571415266822e-02, 2.857142830533629e-02, 4.285714232495821e-02, 5.714285661067266e-02, 7.14285746216774e-02, 8.571428464991705e-02, 1.000000031931015e-01, 1.142857132213501e-01, 1.285714392150974e-01, 1.428571492433548e-01, 1.571428592715843e-01, 1.714285692998544e-01, 1.857142963579164e-01, 2.000000063862044e-01, 2.142857164144516e-01, 2.285714264426811e-01, 2.428571364709513e-01, 2.571428784301389e-01, 2.714285884584445e-01, 2.857142984867096e-01, 3.000000255447463e-01, 3.142857185431686e-01, 3.285714456012764e-01, 3.428571385996276e-01, 3.571428656578064e-01, 3.714285927159852e-01, 3.857142857142654e-01, 4.000000127724442e-01, 4.142857057707244e-01, 4.285714328289032e-01, 4.42857159887082e-01, 4.571428528853622e-01, 4.71428579943541e-01, 4.857142729418213e-01, 5e-01, 5.142857568602169e-01, 5.285714200564591e-01, 5.42857176916818e-01, 5.57142840112918e-01, 5.714285969734192e-01, 5.857142942292756e-01, 6.000000510897767e-01, 6.142856802258361e-01, 6.285714370863372e-01, 6.428571343421936e-01, 6.571428912026949e-01, 6.71428588458551e-01, 6.857142771992553e-01, 6.999999744551116e-01, 7.142857313156128e-01, 7.285714285714692e-01, 7.428571854319703e-01, 7.571428145680298e-01, 7.714285714285308e-01, 7.857142686843872e-01, 8.000000255448885e-01, 8.142857228007446e-01, 8.285714115414489e-01, 8.428571087973051e-01, 8.571428656578064e-01, 8.714285629136628e-01, 8.857143197741639e-01, 8.999999489102233e-01, 9.142857057707244e-01, 9.285714030265808e-01, 9.428571598870821e-01, 9.571428571429383e-01, 9.714285458836426e-01, 9.85714243139783e-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] +fixPumSpe.yMaxTowSpeSet=[1e+00, 9.74285722162043e-01, 9.485714443240864e-01, 9.228571684019596e-01, 8.971428290435269e-01, 8.714285492897034e-01, 8.457142771993365e-01, 8.199999897820609e-01, 7.94285717691694e-01, 7.685714302744184e-01, 7.428571581840515e-01, 7.171428860936317e-01, 6.914285543986364e-01, 6.657142516546674e-01, 6.399999795641035e-01, 6.142857074737549e-01, 5.885714353834062e-01, 5.628571632929845e-01, 5.371428605488734e-01, 5.114285884584517e-01, 4.857142865657806e-01, 4.599999838215233e-01, 4.342857125827609e-01, 4.085714098385747e-01, 3.828571684020637e-01, 3.571428656578064e-01, 3.314285331113688e-01, 3.057142916747867e-01, 2.799999889305294e-01, 2.542857474939474e-01, 2.28571429848671e-01, 2.028571122033235e-01, 1.771428707667769e-01, 1.514285531214294e-01, 1.257143116848829e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-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] +fixPumSpe.yHeaPreConVal=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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.742856972557428e-01, 9.485714558193027e-01, 9.228571530750455e-01, 8.971428520339606e-01, 8.714285492897034e-01, 8.457142465454461e-01, 8.199999438011887e-01, 7.942857636725662e-01, 7.685714609283087e-01, 7.428571581840515e-01, 7.171428554397941e-01, 6.914284930914607e-01, 6.657143129622696e-01, 6.400000102180121e-01, 6.142857074737549e-01, 5.885714047294976e-01, 5.628571019852402e-01, 5.371429218566175e-01, 5.11428619112076e-01, 4.857142865657806e-01, 4.599999838215232e-01, 4.342856512752281e-01, 4.08571471146321e-01, 3.828571684020639e-01, 3.571428656578064e-01, 3.314285331113689e-01, 3.057142303672536e-01, 2.800000502383468e-01, 2.542857474939473e-01, 2.28571429848671e-01, 2.028571122033234e-01, 1.771428094591372e-01, 1.514286144292112e-01, 1.257143116848831e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-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] +fixPumSpe.uHeaPreEna=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +varPumSpe.uHeaPreCon=[0e+00, 1.428571415266822e-02, 2.857142830533629e-02, 4.285714232495821e-02, 5.714285661067266e-02, 7.14285746216774e-02, 8.571428464991705e-02, 1.000000031931015e-01, 1.142857132213501e-01, 1.285714392150974e-01, 1.428571492433548e-01, 1.571428592715843e-01, 1.714285692998544e-01, 1.857142963579164e-01, 2.000000063862044e-01, 2.142857164144516e-01, 2.285714264426811e-01, 2.428571364709513e-01, 2.571428784301389e-01, 2.714285884584445e-01, 2.857142984867096e-01, 3.000000255447463e-01, 3.142857185431686e-01, 3.285714456012764e-01, 3.428571385996276e-01, 3.571428656578064e-01, 3.714285927159852e-01, 3.857142857142654e-01, 4.000000127724442e-01, 4.142857057707244e-01, 4.285714328289032e-01, 4.42857159887082e-01, 4.571428528853622e-01, 4.71428579943541e-01, 4.857142729418213e-01, 5e-01, 5.142857568602169e-01, 5.285714200564591e-01, 5.42857176916818e-01, 5.57142840112918e-01, 5.714285969734192e-01, 5.857142942292756e-01, 6.000000510897767e-01, 6.142856802258361e-01, 6.285714370863372e-01, 6.428571343421936e-01, 6.571428912026949e-01, 6.71428588458551e-01, 6.857142771992553e-01, 6.999999744551116e-01, 7.142857313156128e-01, 7.285714285714692e-01, 7.428571854319703e-01, 7.571428145680298e-01, 7.714285714285308e-01, 7.857142686843872e-01, 8.000000255448885e-01, 8.142857228007446e-01, 8.285714115414489e-01, 8.428571087973051e-01, 8.571428656578064e-01, 8.714285629136628e-01, 8.857143197741639e-01, 8.999999489102233e-01, 9.142857057707244e-01, 9.285714030265808e-01, 9.428571598870821e-01, 9.571428571429383e-01, 9.714285458836426e-01, 9.85714243139783e-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] +varPumSpe.yMaxTowSpeSet=[1e+00, 9.74285722162043e-01, 9.485714443240864e-01, 9.228571684019596e-01, 8.971428290435269e-01, 8.714285492897034e-01, 8.457142771993365e-01, 8.199999897820609e-01, 7.94285717691694e-01, 7.685714302744184e-01, 7.428571581840515e-01, 7.171428860936317e-01, 6.914285543986364e-01, 6.657142516546674e-01, 6.399999795641035e-01, 6.142857074737549e-01, 5.885714353834062e-01, 5.628571632929845e-01, 5.371428605488734e-01, 5.114285884584517e-01, 4.857142865657806e-01, 4.599999838215233e-01, 4.342857125827609e-01, 4.085714098385747e-01, 3.828571684020637e-01, 3.571428656578064e-01, 3.314285331113688e-01, 3.057142916747867e-01, 2.799999889305294e-01, 2.542857474939474e-01, 2.28571429848671e-01, 2.028571122033235e-01, 1.771428707667769e-01, 1.514285531214294e-01, 1.257143116848829e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-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] +varPumSpe.yConWatPumSpeSet=[7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.31428545883813e-01, 7.128571360452809e-01, 6.942856819289518e-01, 6.757143316949223e-01, 6.571428775787354e-01, 6.385714234622641e-01, 6.199999693463613e-01, 6.014286037852e-01, 5.828571496692971e-01, 5.642856955528259e-01, 5.457142414366388e-01, 5.271428469245284e-01, 5.085714813639354e-01, 4.900000272477482e-01, 4.714285731315613e-01, 4.528571190152322e-01, 4.342856648991872e-01, 4.157143291403481e-01, 3.971428750243033e-01, 3.785714209079742e-01, 3.599999965939674e-01, 3.414285424776385e-01, 3.228571769170455e-01, 3.042857228007164e-01, 2.857142984867096e-01, 2.671428443703805e-01, 2.485713902541934e-01, 2.300000395944775e-01, 2.114285854782904e-01, 1.928571462631226e-01, 1.742856921468644e-01, 1.557142529316255e-01, 1.371428873710324e-01, 1.185714481558292e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-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] +varPumSpe.desConWatPumSpe=[7.5e-01, 7.5e-01] +varPumSpe.uHeaPreEna=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_HeadPressure_Validation_Controller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_HeadPressure_Validation_Controller.txt new file mode 100644 index 00000000000..ee968a21df1 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_HeadPressure_Validation_Controller.txt @@ -0,0 +1,25 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "4", + "numerical Jacobians": "0" +} +time=[0e+00, 5e+00] +enaWSE.TConWatRet=[3.001499938964844e+02, 2.994592895610654e+02, 2.987713318075594e+02, 2.980888062333615e+02, 2.974143982333317e+02, 2.967508239746094e+02, 2.961006166086733e+02, 2.954664305897388e+02, 2.948507080802627e+02, 2.942559202715495e+02, 2.936843566894531e+02, 2.93138336309261e+02, 2.926199953588209e+02, 2.921313474321516e+02, 2.916743468195999e+02, 2.912508239746094e+02, 2.908623963294013e+02, 2.905106202777671e+02, 2.901968992756017e+02, 2.899224547742851e+02, 2.896883850097656e+02, 2.894955747912462e+02, 2.893448486965499e+02, 2.892367248142982e+02, 2.891716919400788e+02, 2.891499938964844e+02, 2.891716919400788e+02, 2.892367248142982e+02, 2.893448486965499e+02, 2.894955747912462e+02, 2.896883850097656e+02, 2.89922455080494e+02, 2.901968992756009e+02, 2.905106202777681e+02, 2.908623958905515e+02, 2.912508239746094e+02, 2.916743473471437e+02, 2.921313474321503e+02, 2.926199953588223e+02, 2.931383356763977e+02, 2.936843566894531e+02, 2.942559209688048e+02, 2.948507091670191e+02, 2.954664294748789e+02, 2.961006158438971e+02, 2.967508239746094e+02, 2.974143988329167e+02, 2.980888074486296e+02, 2.987713304803461e+02, 2.994592888933251e+02, 3.001499938964844e+02, 3.008406988997892e+02, 3.015286573126226e+02, 3.022111803443391e+02, 3.028855889601976e+02, 3.035491943359375e+02, 3.041993719492172e+02, 3.048335583183809e+02, 3.054492786259496e+02, 3.060440973415966e+02, 3.066156311035156e+02, 3.071616521165711e+02, 3.07680024148548e+02, 3.081686392283873e+02, 3.08625640445825e+02, 3.090491943359375e+02, 3.094376224198498e+02, 3.097893683035515e+02, 3.101030878102168e+02, 3.103775327124747e+02, 3.106116333007812e+02, 3.108044130017226e+02, 3.10955169916386e+02, 3.110632627659941e+02, 3.111282958528899e+02, 3.111499938964844e+02, 3.111282958528899e+02, 3.110632627659941e+02, 3.10955169916386e+02, 3.108044130017226e+02, 3.106116333007812e+02, 3.103775339141502e+02, 3.101030878102304e+02, 3.097893683035365e+02, 3.094376206436754e+02, 3.090491943359375e+02, 3.08625642536752e+02, 3.08168639228409e+02, 3.076800241485252e+02, 3.071616495694501e+02, 3.066156311035156e+02, 3.060441001174697e+02, 3.054492786259772e+02, 3.048335583183526e+02, 3.041993688804195e+02, 3.035491943359375e+02, 3.028855921490466e+02, 3.022111803443701e+02, 3.015286573125915e+02, 3.008406956100973e+02, 3.001499938964844e+02] +enaWSE.TChiWatSup=[2.791499938964844e+02, 2.792127990713311e+02, 2.792753295879838e+02, 2.79337371818805e+02, 2.793986816369961e+02, 2.794590148925781e+02, 2.795181274274364e+02, 2.79575775153251e+02, 2.796317443781809e+02, 2.796858215457905e+02, 2.7973779296875e+02, 2.797874145391761e+02, 2.798345336695057e+02, 2.798789673055288e+02, 2.799205017184795e+02, 2.799590148925781e+02, 2.799943237223561e+02, 2.800263061377191e+02, 2.80054840100478e+02, 2.800797729546393e+02, 2.801010437011719e+02, 2.801185913231457e+02, 2.801322936953511e+02, 2.801421203648933e+02, 2.801480407672643e+02, 2.801499938964844e+02, 2.801480407672643e+02, 2.801421203648933e+02, 2.801322936953511e+02, 2.801185913231457e+02, 2.801010437011719e+02, 2.800797729268088e+02, 2.80054840100478e+02, 2.800263061377191e+02, 2.799943237623375e+02, 2.799590148925781e+02, 2.799205016705673e+02, 2.798789673055289e+02, 2.798345336695056e+02, 2.797874145967654e+02, 2.7973779296875e+02, 2.796858214824169e+02, 2.796317442794096e+02, 2.795757752547507e+02, 2.795181274969946e+02, 2.794590148925781e+02, 2.793986815825628e+02, 2.793373717083012e+02, 2.792753297085875e+02, 2.792127991320741e+02, 2.791499938964844e+02, 2.790872191784728e+02, 2.790246580843813e+02, 2.789626160846675e+02, 2.789013062105515e+02, 2.788409729003906e+02, 2.787818602961196e+02, 2.787242125385091e+02, 2.786682435135591e+02, 2.786141663105519e+02, 2.785622253417969e+02, 2.785125731962034e+02, 2.78465454014833e+02, 2.784210205904674e+02, 2.783794861224015e+02, 2.783409729003906e+02, 2.783056640307768e+02, 2.782736815835814e+02, 2.782451782741701e+02, 2.782202148661599e+02, 2.781989440917969e+02, 2.781814269874012e+02, 2.781677245875471e+02, 2.781578979649348e+02, 2.78151977543137e+02, 2.781499938964844e+02, 2.78151977543137e+02, 2.781578979649348e+02, 2.781677245875471e+02, 2.781814269874012e+02, 2.781989440917969e+02, 2.782202147570226e+02, 2.782451782741688e+02, 2.782736815835828e+02, 2.783056641923001e+02, 2.783409729003906e+02, 2.783794859326479e+02, 2.784210205904655e+02, 2.784654540148351e+02, 2.785125734278657e+02, 2.785622253417969e+02, 2.786141660583717e+02, 2.786682435135566e+02, 2.787242125385116e+02, 2.787818605750748e+02, 2.788409729003906e+02, 2.789013059206825e+02, 2.789626160846647e+02, 2.790246580843841e+02, 2.790872194775093e+02, 2.791499938964844e+02] +enaWSE.chiHeaPreLoo.conPID.u_s=[1e+00, 1e+00] +enaWSE.chiHeaPreLoo.conPID.u_m=[2.099999904632568e+00, 2.024651290107922e+00, 1.949600102748307e+00, 1.875142463940302e+00, 1.801572088786697e+00, 1.729179620742798e+00, 1.658250587052231e+00, 1.589064828393591e+00, 1.521895654952301e+00, 1.457007869862198e+00, 1.394657731056213e+00, 1.335091247176151e+00, 1.27854349865218e+00, 1.225237583510258e+00, 1.175384152485254e+00, 1.12917959690094e+00, 1.086806545448022e+00, 1.048432010048456e+00, 1.014207467235015e+00, 9.842681819642189e-01, 9.587321877479553e-01, 9.377001945576755e-01, 9.212552974669062e-01, 9.094623284437903e-01, 9.023679544513404e-01, 8.999999761581421e-01, 9.023679544513404e-01, 9.094623284437903e-01, 9.212552974669062e-01, 9.377001945576755e-01, 9.587321877479553e-01, 9.842682153660832e-01, 1.014207467234925e+00, 1.04843201004856e+00, 1.086806497574307e+00, 1.12917959690094e+00, 1.175384210037281e+00, 1.225237583510113e+00, 1.278543498652337e+00, 1.335091178138616e+00, 1.394657731056213e+00, 1.457007945931367e+00, 1.521895773502941e+00, 1.589064706765943e+00, 1.658250503609047e+00, 1.729179620742798e+00, 1.801572154184053e+00, 1.875142596529847e+00, 1.949599957957253e+00, 2.024651217253154e+00, 2.099999904632568e+00, 2.175348592013119e+00, 2.25039997051831e+00, 2.324857331944579e+00, 2.398427893499663e+00, 2.470820426940918e+00, 2.541749544074101e+00, 2.610935340916636e+00, 2.678104274180775e+00, 2.742992101752348e+00, 2.805342197418213e+00, 2.864908750336379e+00, 2.921456679605953e+00, 2.974762340624598e+00, 3.024615956854588e+00, 3.070820331573486e+00, 3.113193550109409e+00, 3.151568004433167e+00, 3.185792384088413e+00, 3.21573183231678e+00, 3.241267919540405e+00, 3.262299793521395e+00, 3.278744723630123e+00, 3.29053757682912e+00, 3.297631974022802e+00, 3.299999952316284e+00, 3.297631974022802e+00, 3.29053757682912e+00, 3.278744723630123e+00, 3.262299793521395e+00, 3.241267919540405e+00, 3.215731963401029e+00, 3.185792384089893e+00, 3.151568004431535e+00, 3.113193356329172e+00, 3.070820331573486e+00, 3.024616184967655e+00, 2.974762340626961e+00, 2.921456679603468e+00, 2.864908472463508e+00, 2.805342197418213e+00, 2.742992404569953e+00, 2.67810427418379e+00, 2.610935340913543e+00, 2.541749209309953e+00, 2.470820426940918e+00, 2.398428241378498e+00, 2.324857331947951e+00, 2.25039997051491e+00, 2.175348233126193e+00, 2.099999904632568e+00] +enaWSE.chiHeaPreLoo.conPID.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.310123832805005e-02, 4.899079188535559e-02, 7.713524157120355e-02, 1.069865523297738e-01, 1.379931420087814e-01, 1.695982440209568e-01, 2.012429534073562e-01, 2.323693033790357e-01, 2.624207804591516e-01, 2.908443212509155e-01, 3.17093127685973e-01, 3.406291497594124e-01, 3.609255638719529e-01, 3.774680949019433e-01, 3.897576630115509e-01, 3.973122878140073e-01, 3.996667265097641e-01, 3.963773217854336e-01, 3.870230430386352e-01, 3.712069392204285e-01, 3.48557834002467e-01, 3.187310851935769e-01, 2.814099290625286e-01, 2.363075925385385e-01, 1.831677258014679e-01, 1.217661313334768e-01, 5.191123999449709e-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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaWSE.uChiHeaCon=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaWSE.yMaxTowSpeSet=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaWSE.yHeaPreConVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.792088918377054e-01, 9.559083100273247e-01, 9.305782788606567e-01, 9.037120872570136e-01, 8.758061528205872e-01, 8.473615714404652e-01, 8.188813464036745e-01, 7.908676135479116e-01, 7.638212975867671e-01, 7.38240122795105e-01, 7.146161582607899e-01, 6.934337711769365e-01, 6.751670163569866e-01, 6.602786907466347e-01, 6.492180824279785e-01, 6.424189171256066e-01, 6.402999759435205e-01, 6.432604223140884e-01, 6.516792672257354e-01, 6.659137606620789e-01, 6.862979166154098e-01, 7.131420233257453e-01, 7.46731060863556e-01, 7.873231354230544e-01, 8.351490497589111e-01, 8.904104803098649e-01, 9.532798810246831e-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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaWSE.yConWatPumSpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-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] +disWSE.yMaxTowSpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.584177836754818e-01, 9.118165604502888e-01, 8.611565577213134e-01, 8.074242341186009e-01, 7.516123652458191e-01, 6.947231428809304e-01, 6.377626928073491e-01, 5.81735227095681e-01, 5.276425951735343e-01, 4.764802157878876e-01, 4.292323761256562e-01, 3.868675125516927e-01, 3.503339731095416e-01, 3.205574112953076e-01, 2.984362244606018e-01, 2.848378640533935e-01, 2.805998922824672e-01, 2.865208148257835e-01, 3.033585046491485e-01, 3.318274915218353e-01, 3.72595892835038e-01, 4.262840466514905e-01, 4.934621515293632e-01, 5.746463304504695e-01, 6.702980995178223e-01, 7.808209606194456e-01, 9.065597620495083e-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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disWSE.yHeaPreConVal=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disWSE.yConWatPumSpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-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] +conSpePum.yMaxTowSpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.584177836754818e-01, 9.118165604502888e-01, 8.611565577213134e-01, 8.074242341186009e-01, 7.516123652458191e-01, 6.947231428809304e-01, 6.377626928073491e-01, 5.81735227095681e-01, 5.276425951735343e-01, 4.764802157878876e-01, 4.292323761256562e-01, 3.868675125516927e-01, 3.503339731095416e-01, 3.205574112953076e-01, 2.984362244606018e-01, 2.848378640533935e-01, 2.805998922824672e-01, 2.865208148257835e-01, 3.033585046491485e-01, 3.318274915218353e-01, 3.72595892835038e-01, 4.262840466514905e-01, 4.934621515293632e-01, 5.746463304504695e-01, 6.702980995178223e-01, 7.808209606194456e-01, 9.065597620495083e-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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +conSpePum.yHeaPreConVal=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +varSpePum.yMaxTowSpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.584177836754818e-01, 9.118165604502888e-01, 8.611565577213134e-01, 8.074242341186009e-01, 7.516123652458191e-01, 6.947231428809304e-01, 6.377626928073491e-01, 5.81735227095681e-01, 5.276425951735343e-01, 4.764802157878876e-01, 4.292323761256562e-01, 3.868675125516927e-01, 3.503339731095416e-01, 3.205574112953076e-01, 2.984362244606018e-01, 2.848378640533935e-01, 2.805998922824672e-01, 2.865208148257835e-01, 3.033585046491485e-01, 3.318274915218353e-01, 3.72595892835038e-01, 4.262840466514905e-01, 4.934621515293632e-01, 5.746463304504695e-01, 6.702980995178223e-01, 7.808209606194456e-01, 9.065597620495083e-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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +varSpePum.yConWatPumSpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_MinimumFlowBypass_Validation_Controller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_MinimumFlowBypass_Validation_Controller.txt new file mode 100644 index 00000000000..64ac775919d --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_MinimumFlowBypass_Validation_Controller.txt @@ -0,0 +1,13 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "1", + "numerical Jacobians": "0" +} +time=[0e+00, 4e+00] +minBypValCon.uChiWatPum=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +minBypValCon.VChiWat_flow=[4.999999888241291e-03, 5.313333130877201e-03, 5.621724775579981e-03, 5.920311455544293e-03, 6.204384403529948e-03, 6.469462979104102e-03, 6.711368013718301e-03, 6.926283234260287e-03, 7.110819715705536e-03, 7.262067354535373e-03, 7.37764126050103e-03, 7.455718241183927e-03, 7.495066620918303e-03, 7.495066605401024e-03, 7.455718241183927e-03, 7.377641331145766e-03, 7.262067354535373e-03, 7.110819715705536e-03, 6.926283381358526e-03, 6.71136792813143e-03, 6.46946307325745e-03, 6.20438419736031e-03, 5.920311401066818e-03, 5.621724888558798e-03, 5.313332956475382e-03, 4.999999888241291e-03, 4.686666821481712e-03, 4.378275807606248e-03, 4.079688841077051e-03, 3.795615634938761e-03, 3.53053708398853e-03, 3.588632198528318e-03, 3.673716987443916e-03, 3.789180022928171e-03, 3.937932138826213e-03, 4.122358870019521e-03, 4.344281401082139e-03, 4.60493318598303e-03, 4.904933428126278e-03, 5.24428259317317e-03, 5.622358292600303e-03, 6.037932511354775e-03, 6.489180646915638e-03, 6.973716540410844e-03, 7.488632235781188e-03, 8.030537247901913e-03, 8.595615146926278e-03, 9.179689060868822e-03, 9.778275803880259e-03, 1.038666663149031e-02, 1.099999994039536e-02, 1.161333324929172e-02, 1.222172587689314e-02, 1.282031351172357e-02, 1.340438301695089e-02, 1.396946263289868e-02, 1.451136717934746e-02, 1.502628380603419e-02, 1.551082062836824e-02, 1.596206911966247e-02, 1.637763993247551e-02, 1.675571821894452e-02, 1.709506645266673e-02, 1.739506622914665e-02, 1.765571754838427e-02, 1.787764254014319e-02, 1.806206770406681e-02, 1.82108187657402e-02, 1.832628242768744e-02, 1.841136814792253e-02, 1.846946408574414e-02, 1.850438495407986e-02, 1.852031049429438e-02, 1.852172427504673e-02, 1.851333306303697e-02, 1.850000023841858e-02, 1.848666741380019e-02, 1.847827620179043e-02, 1.847968811992428e-02, 1.84956155227573e-02, 1.853053639108192e-02, 1.828863291005805e-02, 1.807371699117261e-02, 1.788917901399922e-02, 1.773793216181786e-02, 1.762235933738536e-02, 1.754428269002365e-02, 1.750493237014509e-02, 1.750493237014509e-02, 1.754428269002365e-02, 1.762235933738536e-02, 1.773793216181786e-02, 1.788917901399922e-02, 1.807371699117261e-02, 1.828863291005805e-02, 1.853053674871201e-02, 1.879561565687175e-02, 1.907968810501779e-02, 1.937827410074091e-02, 1.96866669518713e-02, 1.999999955296516e-02] +minBypValCon.VChiWatSet_flow=[9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03] +minBypValCon.yValPos=[3.333333432674408e-01, 3.382746578176414e-01, 3.418868483442221e-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, 9.964411301123141e-01, 9.633345363985284e-01, 9.295864730358765e-01, 8.955608309753748e-01, 8.616028639179925e-01, 8.280263424188259e-01, 7.951173341648357e-01, 7.631261199267073e-01, 7.322628067363625e-01, 7.026942283253504e-01, 6.745404727960943e-01, 6.47879167170447e-01, 6.227339085635192e-01, 5.990804379496678e-01, 5.768459183792123e-01, 5.559103650987069e-01, 5.361083704823089e-01, 5.172300096810122e-01, 4.990258686543932e-01, 4.812110960483551e-01, 1.03471411603127e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_MinimumFlowBypass_Validation_FlowSetpoint.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_MinimumFlowBypass_Validation_FlowSetpoint.txt new file mode 100644 index 00000000000..74c3968d89c --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_MinimumFlowBypass_Validation_FlowSetpoint.txt @@ -0,0 +1,38 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 4e+00] +staUp.uStaUp=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +staUp.uUpsDevSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +staUp.uOnOff=[0e+00, 0e+00] +staUp.yChaSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staUp.yChiWatMinFloSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 1.013333347241103e-02, 1.026666639596499e-02, 1.039999985347297e-02, 1.053333370834451e-02, 1.066666663189681e-02, 1.080000008940812e-02, 1.093333301295875e-02, 1.106666686783196e-02, 1.119999979138925e-02, 1.13333332488939e-02, 1.146666710376711e-02, 1.160000002731774e-02, 1.173333348482905e-02, 1.186666640837968e-02, 1.200000026325289e-02, 1.213333278944162e-02, 1.226666664431483e-02, 1.240000049918803e-02, 1.253333302537677e-02, 1.266666688024998e-02, 1.279999980379871e-02, 1.293333365867002e-02, 1.306666751354134e-02, 1.319999964237813e-02, 1.333333349724944e-02, 1.346666642079723e-02, 1.360000027566948e-02, 1.373333319921822e-02, 1.386666705408953e-02, 1.400000011423779e-02, 1.413333303779763e-02, 1.426666689266894e-02, 1.439999981621768e-02, 1.453333367108899e-02, 1.466666659464883e-02, 1.479999965479709e-02, 1.493333350966063e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02] +staUp.uChi[1]=[1e+00, 1e+00] +staUp.uChi[2]=[1e+00, 1e+00] +staUp.uChi[3]=[0e+00, 0e+00] +staUp.nexEnaChi=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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, 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, 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, 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, 3e+00, 3e+00, 3e+00] +onOffStaUp.uStaUp=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +onOffStaUp.uUpsDevSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +onOffStaUp.uOnOff=[1e+00, 1e+00] +onOffStaUp.uSubCha=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +onOffStaUp.yChaSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onOffStaUp.yChiWatMinFloSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 1.013333347241103e-02, 1.026666639596499e-02, 1.039999985347297e-02, 1.053333370834451e-02, 1.066666663189681e-02, 1.080000008940812e-02, 1.093333301295875e-02, 1.106666686783196e-02, 1.119999979138925e-02, 1.13333332488939e-02, 1.146666710376711e-02, 1.160000002731774e-02, 1.173333348482905e-02, 1.186666640837968e-02, 1.200000026325289e-02, 1.213333278944162e-02, 1.226666664431483e-02, 1.240000049918803e-02, 1.253333302537677e-02, 1.266666688024998e-02, 1.279999980379871e-02, 1.293333365867002e-02, 1.306666751354134e-02, 1.319999964237813e-02, 1.333333349724944e-02, 1.346666642079723e-02, 1.360000027566948e-02, 1.373333319921822e-02, 1.386666705408953e-02, 1.400000011423779e-02, 1.413333303779763e-02, 1.426666689266894e-02, 1.439999981621768e-02, 1.453333367108899e-02, 1.466666659464883e-02, 1.479999965479709e-02, 1.493333350966063e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 1.499999966472387e-02, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03] +onOffStaUp.uChi[1]=[1e+00, 1e+00] +onOffStaUp.uChi[2]=[1e+00, 1e+00] +onOffStaUp.uChi[3]=[0e+00, 0e+00] +onOffStaUp.nexEnaChi=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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, 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, 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, 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, 3e+00, 3e+00, 3e+00] +onOffStaUp.nexDisChi=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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, 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] +staDow.uStaDow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +staDow.uUpsDevSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +staDow.uOnOff=[0e+00, 0e+00] +staDow.yChaSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staDow.yChiWatMinFloSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.866667011876709e-03, 9.733333157003502e-03, 9.600000630814766e-03, 9.46666677594156e-03, 9.333332921068355e-03, 9.200000394879617e-03, 9.066666540006412e-03, 8.93333361645578e-03, 8.799999761582576e-03, 8.666666304074038e-03, 8.533333380520633e-03, 8.399999525647427e-03, 8.26666699945869e-03, 8.133333144585484e-03, 8.000000221029303e-03, 7.866666763523541e-03, 7.733333374311624e-03, 7.599999985097207e-03, 7.46666699324968e-03, 7.333333138376474e-03, 7.199999749166451e-03, 7.066666359956428e-03, 6.933332970746404e-03, 6.800000376248325e-03, 6.666666987038301e-03, 6.533333597829225e-03, 6.399999742956968e-03, 6.266666353746945e-03, 6.133332964536922e-03, 6.000000370038842e-03, 5.866666980828819e-03, 5.733333591618795e-03, 5.599999736747485e-03, 5.466666347537461e-03, 5.333332958327438e-03, 5.200000363829358e-03, 5.066666974619335e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03, 4.999999888241291e-03] +staDow.uChi[1]=[1e+00, 1e+00] +staDow.uChi[2]=[1e+00, 1e+00] +staDow.uChi[3]=[0e+00, 0e+00] +staDow.nexEnaChi=[0e+00, 0e+00] +staDow.nexDisChi=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_EnableLag_primary_dP.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_EnableLag_primary_dP.txt new file mode 100644 index 00000000000..3a98c801372 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_EnableLag_primary_dP.txt @@ -0,0 +1,15 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +enaLagChiPum.chiWatFloRat.y=[5e-01, 5.313952565193176e-01, 5.626665949821472e-01, 5.936906337738037e-01, 6.243449449539185e-01, 6.545084714889526e-01, 6.840623021125793e-01, 7.128896713256836e-01, 7.408768534660339e-01, 7.679134011268616e-01, 7.938926219940186e-01, 8.187119960784912e-01, 8.422735333442688e-01, 8.644843101501465e-01, 8.852566480636597e-01, 9.045084714889526e-01, 9.221639633178711e-01, 9.381533265113831e-01, 9.524134993553162e-01, 9.648882150650024e-01, 9.755282402038574e-01, 9.842915534973145e-01, 9.911436438560486e-01, 9.960573315620422e-01, 9.99013364315033e-01, 1e+00, 9.99013364315033e-01, 9.960573315620422e-01, 9.911436438560486e-01, 9.842915534973145e-01, 9.755282402038574e-01, 9.648882150650024e-01, 9.524134993553162e-01, 9.381533265113831e-01, 9.221639633178711e-01, 9.045084714889526e-01, 8.852566480636597e-01, 8.644843101501465e-01, 8.422735333442688e-01, 8.187119960784912e-01, 7.938926219940186e-01, 7.679134011268616e-01, 7.408768534660339e-01, 7.128896713256836e-01, 6.840623021125793e-01, 6.545084714889526e-01, 6.243449449539185e-01, 5.936906337738037e-01, 5.626665949821472e-01, 5.313952565193176e-01, 5e-01, 4.686047434806824e-01, 4.373333752155304e-01, 4.063093364238739e-01, 3.756550550460814e-01, 3.454914987087248e-01, 3.159377276897429e-01, 2.871103584766388e-01, 2.591231763362885e-01, 2.320865988731384e-01, 2.061073780059814e-01, 1.812880039215088e-01, 1.5772645175457e-01, 1.355156898498535e-01, 1.147433817386627e-01, 9.549150615930557e-02, 7.783603668212891e-02, 6.184665858745575e-02, 4.758647456765175e-02, 3.511175885796547e-02, 2.447174116969109e-02, 1.570841856300831e-02, 8.856374770402908e-03, 3.942649345844984e-03, 9.866358013823628e-04, 0e+00, 9.866358013823628e-04, 3.942649345844984e-03, 8.856374770402908e-03, 1.570841856300831e-02, 2.447174116969109e-02, 3.511175885796547e-02, 4.758647456765175e-02, 6.184665858745575e-02, 7.783603668212891e-02, 9.549150615930557e-02, 1.147433817386627e-01, 1.355156898498535e-01, 1.5772645175457e-01, 1.812880039215088e-01, 2.061073780059814e-01, 2.320865988731384e-01, 2.591231763362885e-01, 2.871103584766388e-01, 3.15937727689743e-01, 3.45491498708725e-01, 3.756550550460815e-01, 4.063093364238739e-01, 4.373333752155304e-01, 4.686047434806824e-01, 5e-01] +enaLagChiPum.yUp=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaLagChiPum.truDel.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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +enaLagChiPum.enaPum.y=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaLagChiPum.yDown=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +enaLagChiPum.truDel1.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +enaLagChiPum.disPum.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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_EnableLead_dedicated.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_EnableLead_dedicated.txt new file mode 100644 index 00000000000..c82967fba32 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_EnableLead_dedicated.txt @@ -0,0 +1,18 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +enaLeaChiPum.uPla=[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, 1e+00] +enaLeaChiPum.uLeaChiEna=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaLeaChiPum.uLeaChiSta=[0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaLeaChiPum.uLeaChiWatReq=[0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaLeaChiPum.yLea=[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, 1e+00] +disLeaChiPum.uPla=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +disLeaChiPum.uLeaChiEna=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +disLeaChiPum.uLeaChiSta=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +disLeaChiPum.uLeaChiWatReq=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +disLeaChiPum.yLea=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_EnableLead_headered.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_EnableLead_headered.txt new file mode 100644 index 00000000000..5261b9a2412 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_EnableLead_headered.txt @@ -0,0 +1,11 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +enaLeaChiPum.uChiWatIsoVal[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.00000037997961e-03, 1.999999955296516e-02, 3.200000151991844e-02, 4.399999976158142e-02, 5.60000017285347e-02, 6.800000369548799e-02, 7.999999821186066e-02, 9.200000017881393e-02, 1.040000021457672e-01, 1.159999966621399e-01, 1.280000060796738e-01, 1.400000005960464e-01, 1.519999951124191e-01, 1.64000004529953e-01, 1.759999990463257e-01, 1.879999935626984e-01, 2.000000029802322e-01, 2.119999974966049e-01, 2.240000069141388e-01, 2.360000014305115e-01, 2.479999959468842e-01, 2.599999904632568e-01, 2.720000147819519e-01, 2.840000092983246e-01, 2.960000038146973e-01, 3.079999983310699e-01, 3.199999928474426e-01, 3.319999873638153e-01, 3.440000116825104e-01, 3.560000061988831e-01, 3.680000007152557e-01, 3.799999952316284e-01, 3.919999897480011e-01, 4.040000140666962e-01, 4.160000085830688e-01, 4.280000030994415e-01, 4.399999976158142e-01, 4.519999921321869e-01, 4.639999866485596e-01, 4.760000109672546e-01, 4.880000054836273e-01, 5e-01, 5.120000243186951e-01, 5.239999890327454e-01, 5.360000133514404e-01, 5.479999780654908e-01, 5.600000023841859e-01, 5.72000026702881e-01, 5.839999914169312e-01, 5.960000157356262e-01, 6.079999804496765e-01, 6.200000047683716e-01, 6.320000290870667e-01, 6.439999938011169e-01, 6.56000018119812e-01, 6.679999828338623e-01, 6.800000071525574e-01, 6.919999718666077e-01, 7.039999961853027e-01, 7.160000205039978e-01, 7.279999852180481e-01, 7.400000095367432e-01, 7.519999742507935e-01, 7.639999985694885e-01, 7.760000228881836e-01, 7.879999876022339e-01, 8.00000011920929e-01, 8.119999766349792e-01, 8.240000009536743e-01, 8.360000252723694e-01, 8.479999899864197e-01, 8.600000143051147e-01, 8.71999979019165e-01, 8.840000033378601e-01, 8.960000276565552e-01, 9.079999923706055e-01, 9.200000166893005e-01, 9.319999814033508e-01, 9.440000057220459e-01, 9.559999704360962e-01, 9.679999947547913e-01, 9.800000190734863e-01, 9.919999837875366e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaLeaChiPum.uChiWatIsoVal[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, 1.200000010430813e-02, 2.400000020861629e-02, 3.599999845027927e-02, 4.800000041723251e-02, 5.999999865889549e-02, 7.199999690055847e-02, 8.399999886751175e-02, 9.600000083446503e-02, 1.080000028014183e-01, 1.19999997317791e-01, 1.319999992847443e-01, 1.439999938011169e-01, 1.560000032186508e-01, 1.679999977350235e-01, 1.800000071525574e-01, 1.920000016689301e-01, 2.039999961853027e-01, 2.160000056028366e-01, 2.280000001192093e-01, 2.39999994635582e-01, 2.520000040531158e-01, 2.639999985694885e-01, 2.759999930858612e-01, 2.879999876022339e-01, 3.00000011920929e-01, 3.120000064373016e-01, 3.240000009536743e-01, 3.35999995470047e-01, 3.479999899864197e-01, 3.600000143051148e-01, 3.720000088214875e-01, 3.840000033378601e-01, 3.959999978542328e-01, 4.079999923706055e-01, 4.199999868869781e-01, 4.320000112056732e-01, 4.440000057220459e-01, 4.560000002384186e-01, 4.679999947547913e-01, 4.799999892711639e-01, 4.92000013589859e-01, 5.040000081062317e-01, 5.15999972820282e-01, 5.279999971389771e-01, 5.400000214576721e-01, 5.519999861717224e-01, 5.640000104904175e-01, 5.759999752044678e-01, 5.879999995231628e-01, 6.000000238418579e-01, 6.119999885559082e-01, 6.240000128746033e-01, 6.359999775886536e-01, 6.480000019073486e-01, 6.600000262260437e-01, 6.71999990940094e-01, 6.840000152587891e-01, 6.959999799728394e-01, 7.080000042915344e-01, 7.200000286102295e-01, 7.319999933242798e-01, 7.440000176429749e-01, 7.559999823570251e-01, 7.680000066757202e-01, 7.799999713897705e-01, 7.919999957084656e-01, 8.040000200271606e-01, 8.159999847412109e-01, 8.28000009059906e-01, 8.399999737739563e-01, 8.519999980926514e-01, 8.640000224113464e-01, 8.759999871253967e-01, 8.880000114440918e-01, 8.999999761581421e-01] +enaLeaChiPum.yLea=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_Speed_primary_localDp.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_Speed_primary_localDp.txt new file mode 100644 index 00000000000..24b551c981d --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_Speed_primary_localDp.txt @@ -0,0 +1,26 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "3", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +chiPumSpe.dpChiWat_remote[1]=[5.8605375e+04, 5.925476170908258e+04, 5.990158591827226e+04, 6.054329679881786e+04, 6.117735543117581e+04, 6.1801265625e+04, 6.241256626184407e+04, 6.300883600738398e+04, 6.358773040063553e+04, 6.414696106778711e+04, 6.468432421875e+04, 6.519769519250828e+04, 6.568504664779568e+04, 6.614446114818275e+04, 6.657411728550316e+04, 6.6972328125e+04, 6.733752335366227e+04, 6.766824984901474e+04, 6.796321106766099e+04, 6.822124224362156e+04, 6.84413203125e+04, 6.862258608781561e+04, 6.876431244002277e+04, 6.886595316189903e+04, 6.892709370719637e+04, 6.89475e+04, 6.892709370719637e+04, 6.886595316189903e+04, 6.876431244002277e+04, 6.862258608781561e+04, 6.84413203125e+04, 6.822124195574947e+04, 6.796321106766176e+04, 6.766824984901384e+04, 6.733752376625717e+04, 6.6972328125e+04, 6.657411678948961e+04, 6.6144461148184e+04, 6.568504664779433e+04, 6.519769578749359e+04, 6.468432421875e+04, 6.414696041219631e+04, 6.358772937891528e+04, 6.300883705564695e+04, 6.241256698098833e+04, 6.1801265625e+04, 6.117735486756208e+04, 6.054329565608386e+04, 5.990158716613916e+04, 5.925476233698114e+04, 5.8605375e+04, 5.795598766301886e+04, 5.730916283386084e+04, 5.666745434391614e+04, 5.603339513243792e+04, 5.5409484375e+04, 5.479818301901166e+04, 5.420191294435305e+04, 5.362302062108472e+04, 5.306378958780369e+04, 5.252642578125e+04, 5.201305421250641e+04, 5.15257022268689e+04, 5.106628991659812e+04, 5.063662930426039e+04, 5.0238421875e+04, 4.987323013999282e+04, 4.954249940976444e+04, 4.924753959726593e+04, 4.898951195048191e+04, 4.87694296875e+04, 4.858816781839714e+04, 4.844643727540204e+04, 4.834480094430611e+04, 4.828365629280363e+04, 4.826325e+04, 4.828365629280363e+04, 4.834480094430611e+04, 4.844643727540204e+04, 4.858816781839714e+04, 4.87694296875e+04, 4.898951082075208e+04, 4.924753959725318e+04, 4.954249940977851e+04, 4.987323181004733e+04, 5.0238421875e+04, 5.06366273383112e+04, 5.106628991657776e+04, 5.152570222689032e+04, 5.201305660732167e+04, 5.252642578125e+04, 5.306378697794976e+04, 5.362302062105874e+04, 5.420191294437971e+04, 5.479818590419666e+04, 5.5409484375e+04, 5.603339213422957e+04, 5.666745434388708e+04, 5.730916283389014e+04, 5.795599075605271e+04, 5.8605375e+04] +chiPumSpe.dpChiWat_remote[2]=[5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.903830119339789e+04, 5.946951541990395e+04, 5.989732442140599e+04, 6.032003084919563e+04, 6.073596875e+04, 6.11435003831651e+04, 6.154101543754322e+04, 6.192694549288804e+04, 6.229976527480375e+04, 6.26580078125e+04, 6.300025422291861e+04, 6.332515609852955e+04, 6.363142982796221e+04, 6.391787082841594e+04, 6.418334375e+04, 6.442680490667767e+04, 6.464728896185187e+04, 6.484392977428072e+04, 6.501595297049344e+04, 6.5162671875e+04, 6.52835157252104e+04, 6.537800014971956e+04, 6.544575770379593e+04, 6.548651950271425e+04, 6.5500125e+04, 6.548651950271425e+04, 6.544575770379593e+04, 6.537800014971956e+04, 6.52835157252104e+04, 6.5162671875e+04, 6.501595297049344e+04, 6.484392933102663e+04, 6.464728945600279e+04, 6.442680490667767e+04, 6.418334375e+04, 6.391787082841594e+04, 6.363142911812609e+04, 6.332515684876648e+04, 6.300025422291861e+04, 6.26580078125e+04, 6.229976527480375e+04, 6.192694458595594e+04, 6.15410163704313e+04, 6.11435003831651e+04, 6.073596875e+04, 6.032003084919563e+04, 5.989732340615165e+04, 5.946951644411761e+04, 5.903830119339789e+04, 5.8605375e+04, 5.817244880660211e+04, 5.774123355588239e+04, 5.731342659384835e+04, 5.689071915080436e+04, 5.647478125e+04, 5.60672496168349e+04, 5.56697336295687e+04, 5.528380541404406e+04, 5.491098472519625e+04, 5.45527421875e+04, 5.421049737365594e+04, 5.38855931512478e+04, 5.357932088186034e+04, 5.329287786088296e+04, 5.302740625e+04, 5.278394620669822e+04, 5.256346054400659e+04, 5.236682066896487e+04, 5.219479627635955e+04, 5.2048078125e+04, 5.192723479602268e+04, 5.183274985028401e+04, 5.176499229620148e+04, 5.172423037532186e+04, 5.1710625e+04, 5.172423037532186e+04, 5.176499229620148e+04, 5.183274985028401e+04, 5.192723479602268e+04, 5.2048078125e+04] +chiPumSpe.dpChiWatSet_remote[1]=[5.8605375e+04, 5.8605375e+04] +chiPumSpe.dpChiWatSet_remote[2]=[5.8605375e+04, 5.8605375e+04] +chiPumSpe.maxRemDP.u[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, 4.874138627201319e-03, 1.706547646116065e-02, 3.142340481903009e-02, 4.788783618655109e-02, 6.640527045046367e-02, 8.689615875482559e-02, 1.092797816218224e-01, 1.334686313497459e-01, 1.593671083529187e-01, 1.868729174155588e-01, 2.158772051334381e-01, 2.462655305065196e-01, 2.779180130606867e-01, 3.107096515337807e-01, 3.445113273392596e-01, 3.791894614696503e-01, 4.146071119787437e-01, 4.506245948125049e-01, 4.870995776675973e-01, 5.238884931756846e-01, 5.608459115028381e-01, 5.978259796424702e-01, 6.34682784974255e-01, 6.712705989916021e-01, 7.074455871817478e-01, 7.430647015571594e-01, 7.779873938027065e-01, 8.120758576937461e-01, 8.451954098695158e-01, 8.772155341628433e-01, 9.080097675323486e-01, 9.374564380505243e-01, 9.654397884472257e-01, 9.918488368923462e-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, 9.999999888384817e-01, 9.912427663803101e-01] +chiPumSpe.maxRemDP.u[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, 3.238661214709282e-03, 1.136518196475416e-02, 2.09350803344155e-02, 3.191455116499174e-02, 4.425934964016319e-02, 5.79199455678463e-02, 7.284242662588977e-02, 8.896828670825351e-02, 1.06234032417344e-01, 1.24571149052575e-01, 1.439072340726852e-01, 1.641659546527683e-01, 1.852676832827132e-01, 2.071287507649232e-01, 2.296632507756629e-01, 2.527818381786346e-01, 2.763934718182403e-01, 3.004052206694839e-01, 3.247218858427205e-01, 3.492479965048121e-01, 3.738861978054047e-01, 3.985394789771043e-01, 4.231108595917138e-01, 4.475028349462868e-01, 4.716196674206271e-01, 4.953656494617462e-01, 5.186474039141694e-01, 5.413731762920878e-01, 5.634528578760151e-01, 5.847997269397608e-01, 6.053290963172913e-01] +chiPumSpe.maxRemDP.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, 4.874138627201319e-03, 1.706547646116065e-02, 3.142340481903009e-02, 4.788783618655109e-02, 6.640527045046367e-02, 8.689615875482559e-02, 1.092797816218224e-01, 1.334686313497459e-01, 1.593671083529187e-01, 1.868729174155588e-01, 2.158772051334381e-01, 2.462655305065196e-01, 2.779180130606867e-01, 3.107096515337807e-01, 3.445113273392596e-01, 3.791894614696503e-01, 4.146071119787437e-01, 4.506245948125049e-01, 4.870995776675973e-01, 5.238884931756846e-01, 5.608459115028381e-01, 5.978259796424702e-01, 6.34682784974255e-01, 6.712705989916021e-01, 7.074455871817478e-01, 7.430647015571594e-01, 7.779873938027065e-01, 8.120758576937461e-01, 8.451954098695158e-01, 8.772155341628433e-01, 9.080097675323486e-01, 9.374564380505243e-01, 9.654397884472257e-01, 9.918488368923462e-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, 9.999999888384817e-01, 9.912427663803101e-01] +chiPumSpe.locDpSet.y=[3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.480980859375e+04, 3.565037198133851e+04, 3.664031455524462e+04, 3.777549772522382e+04, 3.905222919840617e+04, 4.04650234375e+04, 4.20083179502353e+04, 4.367607753675746e+04, 4.5461715257388e+04, 4.735817002582e+04, 4.93579453125e+04, 5.145314267430277e+04, 5.363550425506789e+04, 5.589640578800768e+04, 5.822694306545864e+04, 6.06179140625e+04, 6.305987344774457e+04, 6.554319227567771e+04, 6.805804987121662e+04, 7.059455226251995e+04, 7.3142671875e+04, 7.569235399075829e+04, 7.823353607880037e+04, 8.075618270711144e+04, 8.325035700947567e+04, 8.5706203125e+04, 8.811403351482964e+04, 9.04643481592578e+04, 9.27478628871698e+04, 9.495556823799563e+04, 9.707875e+04, 9.910903146695597e+04, 1.010384098079433e+05, 1.028592466132671e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.034212492303726e+05, 1.028174609375e+05] +chiPumSpe.locDpSet.f1=[3.447375e+04, 3.447375e+04] +chiPumSpe.locDpSet.f2=[1.0342125e+05, 1.0342125e+05] +chiPumSpe.dpChiWat_local=[5.8605375e+04, 5.94695156121722e+04, 6.032003122491133e+04, 6.114349990350106e+04, 6.192694526693739e+04, 6.26580078125e+04, 6.332515609765456e+04, 6.391787115857923e+04, 6.442680463106663e+04, 6.484392977309768e+04, 6.5162671875e+04, 6.537799995874703e+04, 6.548651950013467e+04, 6.548651950013467e+04, 6.537799995874703e+04, 6.5162671875e+04, 6.484392977309794e+04, 6.442680490446914e+04, 6.391787082643382e+04, 6.332515609765411e+04, 6.26580078125e+04, 6.192694458349724e+04, 6.11435003821779e+04, 6.032003084858096e+04, 5.946951644339118e+04, 5.8605375e+04, 5.774123355660882e+04, 5.689071915141903e+04, 5.60672496178221e+04, 5.528380541650276e+04, 5.45527421875e+04, 5.388559315482843e+04, 5.329287917356777e+04, 5.278394509552957e+04, 5.236682067366724e+04, 5.2048078125e+04, 5.183274985538409e+04, 5.172423049986552e+04, 5.172423049986552e+04, 5.183274985538409e+04, 5.2048078125e+04, 5.236682067366724e+04, 5.278394621543672e+04, 5.329287786897918e+04, 5.388559315482843e+04, 5.45527421875e+04, 5.528380541650276e+04, 5.606725154398529e+04, 5.689071715471741e+04, 5.774123355660882e+04, 5.8605375e+04, 5.946951644339118e+04, 6.032003284528259e+04, 6.114349845601471e+04, 6.192694458349725e+04, 6.26580078125e+04, 6.332515684517157e+04, 6.391787213102081e+04, 6.442680378456328e+04, 6.484392932633276e+04, 6.5162671875e+04, 6.537800014461591e+04, 6.54865196142868e+04, 6.54865196142868e+04, 6.537800014461591e+04, 6.5162671875e+04, 6.484392932633276e+04, 6.442680378456328e+04, 6.391787213102081e+04, 6.332515684517157e+04, 6.26580078125e+04, 6.192694458349725e+04, 6.114349845601471e+04, 6.032003284528259e+04, 5.946951644339118e+04, 5.8605375e+04, 5.774123355660882e+04, 5.689071715471741e+04, 5.606725154398529e+04, 5.528380541650275e+04, 5.45527421875e+04, 5.388559618747615e+04, 5.329287786900391e+04, 5.27839462154152e+04, 5.236681894296562e+04, 5.2048078125e+04, 5.183275066003183e+04, 5.172423038571518e+04, 5.172423038571518e+04, 5.183275066003183e+04, 5.2048078125e+04, 5.236681894296562e+04, 5.27839462154152e+04, 5.329287786900391e+04, 5.388559618747615e+04, 5.45527421875e+04, 5.528380181156721e+04, 5.606725154394847e+04, 5.689071715475545e+04, 5.774123765884274e+04, 5.8605375e+04] +chiPumSpe.conPID1.u_s=[1e+00, 1e+00] +chiPumSpe.conPID1.u_m=[1.700000047683716e+00, 1.725066661462614e+00, 1.749737977253812e+00, 1.773624894203921e+00, 1.796350716222911e+00, 1.817557096481323e+00, 1.836909408918567e+00, 1.854102613422338e+00, 1.86886560753199e+00, 1.880965354541326e+00, 1.890211343765259e+00, 1.896457432503864e+00, 1.899605392506776e+00, 1.899605392506776e+00, 1.896457432503864e+00, 1.890211343765259e+00, 1.880965354541334e+00, 1.868865615462678e+00, 1.854102603787492e+00, 1.836909408918554e+00, 1.817557096481323e+00, 1.796350696398215e+00, 1.773624908089356e+00, 1.749737966337466e+00, 1.725066685573688e+00, 1.700000047683716e+00, 1.674933290584454e+00, 1.650262009820676e+00, 1.62637506806907e+00, 1.603649279760495e+00, 1.582442998886108e+00, 1.563090545556503e+00, 1.545897372370696e+00, 1.531134360695711e+00, 1.519034634576552e+00, 1.509788751602173e+00, 1.503542538262532e+00, 1.500394702860377e+00, 1.500394702860377e+00, 1.503542538262532e+00, 1.509788751602173e+00, 1.519034634576552e+00, 1.531134393181471e+00, 1.545897334528007e+00, 1.563090545556503e+00, 1.582442998886108e+00, 1.603649279760495e+00, 1.626375123943077e+00, 1.650261951900303e+00, 1.674933290584454e+00, 1.683587908744812e+00, 1.668131690619571e+00, 1.646274875761218e+00, 1.618602213593985e+00, 1.585746798278169e+00, 1.54844856262207e+00, 1.507443267908645e+00, 1.46345261006505e+00, 1.417166203588835e+00, 1.369223760090835e+00, 1.3202064037323e+00, 1.270631861969219e+00, 1.22095468128182e+00, 1.171569441192649e+00, 1.122813509399224e+00, 1.074973821640015e+00, 1.028291420081886e+00, 9.829671727489185e-01, 9.391669858096847e-01, 8.970261611450308e-01, 8.566545844078064e-01, 8.181399942697797e-01, 7.815509955227566e-01, 7.469401408378122e-01, 7.143455450826938e-01, 6.83793842792511e-01, 6.553011872736401e-01, 6.288744326842103e-01, 6.045126171823512e-01, 5.822071041927382e-01, 5.619431734085083e-01, 5.437001655205453e-01, 5.274516652779978e-01, 5.131667513992186e-01, 5.063448415897558e-01, 5.032628774642944e-01, 5.011808339998782e-01, 5.001315466484085e-01, 5.001315466484085e-01, 5.011808339998782e-01, 5.032628774642944e-01, 5.063448415897558e-01, 5.103781310600929e-01, 5.152991313772213e-01, 5.210302111746903e-01, 5.274809598922729e-01, 5.345497449311095e-01, 5.421250611816497e-01, 5.500873173002795e-01, 5.583111406952831e-01, 5.699943900108337e-01] +chiPumSpe.conPID1.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, 0e+00, 0e+00, 0e+00, 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.486009186759111e-08, 3.910254665624879e-02, 9.071575893158093e-02, 1.492651117178249e-01, 2.14298814535141e-01, 2.853654439344773e-01, 3.62017426124029e-01, 4.438116443228817e-01, 5.303111426570464e-01, 6.210828423500061e-01, 7.157002417942261e-01, 8.137439010952904e-01, 9.148012835202476e-01, 9.999999882982027e-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] +chiPumSpe.yChiWatPumSpe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000148641775e-01, 1.351922841676244e-01, 1.816441822934642e-01, 2.343385886251987e-01, 2.928689420223236e-01, 3.568289025213612e-01, 4.258156894720906e-01, 4.994304530687592e-01, 5.772800283913702e-01, 6.589745283126831e-01, 7.441302176149172e-01, 8.323694990652303e-01, 9.233211909309528e-01, 9.999999894683256e-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] +chiPumSpe.pumSpe.f1=[1.000000014901161e-01, 1.000000014901161e-01] +chiPumSpe.pumSpe.f2=[1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_Speed_primary_remoteDp.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_Speed_primary_remoteDp.txt new file mode 100644 index 00000000000..16144d36091 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Subsequences_Validation_Speed_primary_remoteDp.txt @@ -0,0 +1,22 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "2", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +chiPumSpe.dpChiWat_remote[1]=[5.8605375e+04, 5.925476170908258e+04, 5.990158591827226e+04, 6.054329679881786e+04, 6.117735543117581e+04, 6.1801265625e+04, 6.241256626184407e+04, 6.300883600738398e+04, 6.358773040063553e+04, 6.414696106778711e+04, 6.468432421875e+04, 6.519769519250828e+04, 6.568504664779568e+04, 6.614446114818275e+04, 6.657411728550316e+04, 6.6972328125e+04, 6.733752335366227e+04, 6.766824984901474e+04, 6.796321106766099e+04, 6.822124224362156e+04, 6.84413203125e+04, 6.862258608781561e+04, 6.876431244002277e+04, 6.886595316189903e+04, 6.892709370719637e+04, 6.89475e+04, 6.892709370719637e+04, 6.886595316189903e+04, 6.876431244002277e+04, 6.862258608781561e+04, 6.84413203125e+04, 6.822124195574947e+04, 6.796321106766176e+04, 6.766824984901384e+04, 6.733752376625717e+04, 6.6972328125e+04, 6.657411678948961e+04, 6.6144461148184e+04, 6.568504664779433e+04, 6.519769578749359e+04, 6.468432421875e+04, 6.414696041219631e+04, 6.358772937891528e+04, 6.300883705564695e+04, 6.241256698098833e+04, 6.1801265625e+04, 6.117735486756208e+04, 6.054329565608386e+04, 5.990158716613916e+04, 5.925476233698114e+04, 5.8605375e+04, 5.795598766301886e+04, 5.730916283386084e+04, 5.666745434391614e+04, 5.603339513243792e+04, 5.5409484375e+04, 5.479818301901166e+04, 5.420191294435305e+04, 5.362302062108472e+04, 5.306378958780369e+04, 5.252642578125e+04, 5.201305421250641e+04, 5.15257022268689e+04, 5.106628991659812e+04, 5.063662930426039e+04, 5.0238421875e+04, 4.987323013999282e+04, 4.954249940976444e+04, 4.924753959726593e+04, 4.898951195048191e+04, 4.87694296875e+04, 4.858816781839714e+04, 4.844643727540204e+04, 4.834480094430611e+04, 4.828365629280363e+04, 4.826325e+04, 4.828365629280363e+04, 4.834480094430611e+04, 4.844643727540204e+04, 4.858816781839714e+04, 4.87694296875e+04, 4.898951082075208e+04, 4.924753959725318e+04, 4.954249940977851e+04, 4.987323181004733e+04, 5.0238421875e+04, 5.06366273383112e+04, 5.106628991657776e+04, 5.152570222689032e+04, 5.201305660732167e+04, 5.252642578125e+04, 5.306378697794976e+04, 5.362302062105874e+04, 5.420191294437971e+04, 5.479818590419666e+04, 5.5409484375e+04, 5.603339213422957e+04, 5.666745434388708e+04, 5.730916283389014e+04, 5.795599075605271e+04, 5.8605375e+04] +chiPumSpe.dpChiWat_remote[2]=[5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.8605375e+04, 5.903830119339789e+04, 5.946951541990395e+04, 5.989732442140599e+04, 6.032003084919563e+04, 6.073596875e+04, 6.11435003831651e+04, 6.154101543754322e+04, 6.192694549288804e+04, 6.229976527480375e+04, 6.26580078125e+04, 6.300025422291861e+04, 6.332515609852955e+04, 6.363142982796221e+04, 6.391787082841594e+04, 6.418334375e+04, 6.442680490667767e+04, 6.464728896185187e+04, 6.484392977428072e+04, 6.501595297049344e+04, 6.5162671875e+04, 6.52835157252104e+04, 6.537800014971956e+04, 6.544575770379593e+04, 6.548651950271425e+04, 6.5500125e+04, 6.548651950271425e+04, 6.544575770379593e+04, 6.537800014971956e+04, 6.52835157252104e+04, 6.5162671875e+04, 6.501595297049344e+04, 6.484392933102663e+04, 6.464728945600279e+04, 6.442680490667767e+04, 6.418334375e+04, 6.391787082841594e+04, 6.363142911812609e+04, 6.332515684876648e+04, 6.300025422291861e+04, 6.26580078125e+04, 6.229976527480375e+04, 6.192694458595594e+04, 6.15410163704313e+04, 6.11435003831651e+04, 6.073596875e+04, 6.032003084919563e+04, 5.989732340615165e+04, 5.946951644411761e+04, 5.903830119339789e+04, 5.8605375e+04, 5.817244880660211e+04, 5.774123355588239e+04, 5.731342659384835e+04, 5.689071915080436e+04, 5.647478125e+04, 5.60672496168349e+04, 5.56697336295687e+04, 5.528380541404406e+04, 5.491098472519625e+04, 5.45527421875e+04, 5.421049737365594e+04, 5.38855931512478e+04, 5.357932088186034e+04, 5.329287786088296e+04, 5.302740625e+04, 5.278394620669822e+04, 5.256346054400659e+04, 5.236682066896487e+04, 5.219479627635955e+04, 5.2048078125e+04, 5.192723479602268e+04, 5.183274985028401e+04, 5.176499229620148e+04, 5.172423037532186e+04, 5.1710625e+04, 5.172423037532186e+04, 5.176499229620148e+04, 5.183274985028401e+04, 5.192723479602268e+04, 5.2048078125e+04] +chiPumSpe.dpChiWatSet_remote[1]=[5.8605375e+04, 5.8605375e+04] +chiPumSpe.dpChiWatSet_remote[2]=[5.8605375e+04, 5.8605375e+04] +chiPumSpe.maxLoo.u[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, 4.873210098594427e-03, 1.705880074139878e-02, 3.141743691715253e-02, 4.788671487417125e-02, 6.640174632758215e-02, 8.689171820878983e-02, 1.092753634271732e-01, 1.334637139651309e-01, 1.593608796712345e-01, 1.868650347033478e-01, 2.158679962158203e-01, 2.462556659376672e-01, 2.779080888873316e-01, 3.106999359761139e-01, 3.445017905959534e-01, 3.791800141334534e-01, 4.145978136541587e-01, 4.506154156974937e-01, 4.87090577365952e-01, 5.238794928746078e-01, 5.608369112014771e-01, 5.978170389454697e-01, 6.346739038821835e-01, 6.712618371088201e-01, 7.074368849036106e-01, 7.43056058883667e-01, 7.779788107338589e-01, 8.12067393834188e-01, 8.451869460099577e-01, 8.772070703032852e-01, 9.080012440681458e-01, 9.374479741898293e-01, 9.654313245870991e-01, 9.918403134281433e-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, 9.999999888953238e-01, 9.912598133087158e-01] +chiPumSpe.maxLoo.u[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, 3.239221638068557e-03, 1.136685928093877e-02, 2.093904032088046e-02, 3.191775491892944e-02, 4.42611564062244e-02, 5.792215093970299e-02, 7.284627112764494e-02, 8.89754765244981e-02, 1.062427123433131e-01, 1.245790615700572e-01, 1.439148634672165e-01, 1.641739714763537e-01, 1.852757448104928e-01, 2.07136633479479e-01, 2.296711185890574e-01, 2.527896761894226e-01, 2.764012502243835e-01, 3.004129990756271e-01, 3.247295748421808e-01, 3.492555662946986e-01, 3.738937377929688e-01, 3.985471083710672e-01, 4.231185187888516e-01, 4.475105835498234e-01, 4.716274458267702e-01, 4.953734874725342e-01, 5.18655212122635e-01, 5.413810441046298e-01, 5.634607256891254e-01, 5.848075947540079e-01, 6.053370237350464e-01] +chiPumSpe.maxLoo.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, 4.873210098594427e-03, 1.705880074139878e-02, 3.141743691715253e-02, 4.788671487417125e-02, 6.640174632758215e-02, 8.689171820878983e-02, 1.092753634271732e-01, 1.334637139651309e-01, 1.593608796712345e-01, 1.868650347033478e-01, 2.158679962158203e-01, 2.462556659376672e-01, 2.779080888873316e-01, 3.106999359761139e-01, 3.445017905959534e-01, 3.791800141334534e-01, 4.145978136541587e-01, 4.506154156974937e-01, 4.87090577365952e-01, 5.238794928746078e-01, 5.608369112014771e-01, 5.978170389454697e-01, 6.346739038821835e-01, 6.712618371088201e-01, 7.074368849036106e-01, 7.43056058883667e-01, 7.779788107338589e-01, 8.12067393834188e-01, 8.451869460099577e-01, 8.772070703032852e-01, 9.080012440681458e-01, 9.374479741898293e-01, 9.654313245870991e-01, 9.918403134281433e-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, 9.999999888953238e-01, 9.912598133087158e-01] +chiPumSpe.pumSpe.y=[1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.043858900666237e-01, 1.153529178732992e-01, 1.282756895002393e-01, 1.430980415240699e-01, 1.597615761651794e-01, 1.782025545835495e-01, 1.983478270844665e-01, 2.201173440587197e-01, 2.434248021348671e-01, 2.681785282528377e-01, 2.942811846733093e-01, 3.216300874230141e-01, 3.501172919195558e-01, 3.796299423786446e-01, 4.100516145166188e-01, 4.412620067596436e-01, 4.731380352689893e-01, 5.055538443259051e-01, 5.383815136692049e-01, 5.714915078244454e-01, 6.047531962394714e-01, 6.380353290905719e-01, 6.712064777315762e-01, 7.041356533978245e-01, 7.366932321759512e-01, 7.687504291534424e-01, 8.001809415812599e-01, 8.308606723323332e-01, 8.606682454482701e-01, 8.894863453914779e-01, 9.172011613845825e-01, 9.437031946517851e-01, 9.688881504053652e-01, 9.926562463227695e-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, 9.999999900060188e-01, 9.921338558197021e-01] +chiPumSpe.pumSpe.f1=[1.000000014901161e-01, 1.000000014901161e-01] +chiPumSpe.pumSpe.f2=[1e+00, 1e+00] +chiPumSpe.yChiWatPumSpe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.043858900666237e-01, 1.153529178732992e-01, 1.282756895002393e-01, 1.430980415240699e-01, 1.597615761651794e-01, 1.782025545835495e-01, 1.983478270844665e-01, 2.201173440587197e-01, 2.434248021348671e-01, 2.681785282528377e-01, 2.942811846733093e-01, 3.216300874230141e-01, 3.501172919195558e-01, 3.796299423786446e-01, 4.100516145166188e-01, 4.412620067596436e-01, 4.731380352689893e-01, 5.055538443259051e-01, 5.383815136692049e-01, 5.714915078244454e-01, 6.047531962394714e-01, 6.380353290905719e-01, 6.712064777315762e-01, 7.041356533978245e-01, 7.366932321759512e-01, 7.687504291534424e-01, 8.001809415812599e-01, 8.308606723323332e-01, 8.606682454482701e-01, 8.894863453914779e-01, 9.172011613845825e-01, 9.437031946517851e-01, 9.688881504053652e-01, 9.926562463227695e-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, 9.999999900060188e-01, 9.921338558197021e-01] +chiPumSpe.uChiWatPum[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] +chiPumSpe.uChiWatPum[2]=[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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Validation_Controller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Validation_Controller.txt new file mode 100644 index 00000000000..2069953dca9 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_ChilledWater_Validation_Controller.txt @@ -0,0 +1,38 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "7", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +heaNoLoc.VChiWat_flow=[2.5e-01, 2.656976282596588e-01, 2.813332974910736e-01, 2.968453168869019e-01, 3.121724724769592e-01, 3.272542357444763e-01, 3.420311510562897e-01, 3.564448356628418e-01, 3.70438426733017e-01, 3.839567005634308e-01, 3.969463109970093e-01, 4.093559980392456e-01, 4.211367666721344e-01, 4.322421550750732e-01, 4.426283240318298e-01, 4.522542357444763e-01, 4.610819816589355e-01, 4.690766632556915e-01, 4.762067496776581e-01, 4.824441075325012e-01, 4.877641201019287e-01, 4.921457767486572e-01, 4.955718219280243e-01, 4.980286657810211e-01, 4.995066821575165e-01, 5e-01, 4.995066821575165e-01, 4.980286657810211e-01, 4.955718219280243e-01, 4.921457767486572e-01, 4.877641201019287e-01, 4.824441075325012e-01, 4.762067496776581e-01, 4.690766632556915e-01, 4.610819816589355e-01, 4.522542357444763e-01, 4.426283240318298e-01, 4.322421550750732e-01, 4.211367666721344e-01, 4.093559980392456e-01, 3.969463109970093e-01, 3.839567005634308e-01, 3.70438426733017e-01, 3.564448356628418e-01, 3.420311510562897e-01, 3.272542357444763e-01, 3.121724724769592e-01, 2.968453168869019e-01, 2.813332974910736e-01, 2.656976282596588e-01, 2.5e-01, 2.343023717403412e-01, 2.186666876077652e-01, 2.03154668211937e-01, 1.878275275230407e-01, 1.727457493543624e-01, 1.579688638448714e-01, 1.435551792383194e-01, 1.295615881681442e-01, 1.160432994365692e-01, 1.030536890029907e-01, 9.064400196075439e-02, 7.8863225877285e-02, 6.775784492492676e-02, 5.737169086933136e-02, 4.774575307965279e-02, 3.891801834106445e-02, 3.092332929372787e-02, 2.379323728382587e-02, 1.755587942898273e-02, 1.223587058484554e-02, 7.854209281504154e-03, 4.428187385201454e-03, 1.971324672922492e-03, 4.933179006911814e-04, 0e+00, 4.933179006911814e-04, 1.971324672922492e-03, 4.428187385201454e-03, 7.854209281504154e-03, 1.223587058484554e-02, 1.755587942898273e-02, 2.379323728382587e-02, 3.092332929372787e-02, 3.891801834106445e-02, 4.774575307965279e-02, 5.737169086933136e-02, 6.775784492492676e-02, 7.8863225877285e-02, 9.064400196075439e-02, 1.030536890029907e-01, 1.160432994365692e-01, 1.295615881681442e-01, 1.435551792383194e-01, 1.579688638448715e-01, 1.727457493543625e-01, 1.878275275230408e-01, 2.03154668211937e-01, 2.186666876077652e-01, 2.343023717403412e-01, 2.5e-01] +heaNoLoc.VChiWat_flow_nominal=[5e-01, 5e-01] +heaNoLoc.yChiWatPum[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] +heaNoLoc.yChiWatPum[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +heaNoLoc.yChiWatPum[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +heaNoLoc.dpChiWat_remote[1]=[5.79158984375e+04, 5.8002484375e+04, 5.80887265625e+04, 5.81742890625e+04, 5.825883203125e+04, 5.834201953125e+04, 5.84235234375e+04, 5.850302734375e+04, 5.858021484375e+04, 5.865477734375e+04, 5.872642578125e+04, 5.8794875e+04, 5.885985546875e+04, 5.8921109375e+04, 5.89783984375e+04, 5.90314921875e+04, 5.90801875e+04, 5.912428125e+04, 5.9163609375e+04, 5.9198015625e+04, 5.9227359375e+04, 5.925152734375e+04, 5.927042578125e+04, 5.92839765625e+04, 5.929212890625e+04, 5.92948515625e+04, 5.929212890625e+04, 5.92839765625e+04, 5.927042578125e+04, 5.925152734375e+04, 5.9227359375e+04, 5.9198015625e+04, 5.9163609375e+04, 5.912428125e+04, 5.90801875e+04, 5.90314921875e+04, 5.89783984375e+04, 5.8921109375e+04, 5.885985546875e+04, 5.8794875e+04, 5.872642578125e+04, 5.865477734375e+04, 5.858021484375e+04, 5.850302734375e+04, 5.84235234375e+04, 5.834201953125e+04, 5.825883203125e+04, 5.81742890625e+04, 5.80887265625e+04, 5.8002484375e+04, 5.79158984375e+04, 5.782931640625e+04, 5.77430703125e+04, 5.765751171875e+04, 5.757296875e+04, 5.748978125e+04, 5.74082734375e+04, 5.73287734375e+04, 5.72515859375e+04, 5.71770234375e+04, 5.7105375e+04, 5.703692578125e+04, 5.69719453125e+04, 5.69106875e+04, 5.685340234375e+04, 5.68003046875e+04, 5.675161328125e+04, 5.6707515625e+04, 5.66681875e+04, 5.663378515625e+04, 5.660444140625e+04, 5.65802734375e+04, 5.6561375e+04, 5.654782421875e+04, 5.6539671875e+04, 5.653694921875e+04, 5.6539671875e+04, 5.654782421875e+04, 5.6561375e+04, 5.65802734375e+04, 5.660444140625e+04, 5.663378515625e+04, 5.66681875e+04, 5.6707515625e+04, 5.675161328125e+04, 5.68003046875e+04, 5.685340234375e+04, 5.69106875e+04, 5.69719453125e+04, 5.703692578125e+04, 5.7105375e+04, 5.71770234375e+04, 5.72515859375e+04, 5.73287734375e+04, 5.74082734375e+04, 5.748978125e+04, 5.757296875e+04, 5.765751171875e+04, 5.77430703125e+04, 5.782931640625e+04, 5.79158984375e+04] +heaNoLoc.dpChiWat_remote[2]=[5.8605375e+04, 5.86258203125e+04, 5.864738671875e+04, 5.86687890625e+04, 5.868994140625e+04, 5.87107578125e+04, 5.873116015625e+04, 5.875106640625e+04, 5.87703984375e+04, 5.8789078125e+04, 5.880703125e+04, 5.882419140625e+04, 5.8840484375e+04, 5.88558515625e+04, 5.887023046875e+04, 5.888356640625e+04, 5.889580078125e+04, 5.8906890625e+04, 5.89167890625e+04, 5.892545703125e+04, 5.89328671875e+04, 5.893898046875e+04, 5.894377734375e+04, 5.89472421875e+04, 5.894935546875e+04, 5.8950109375e+04, 5.894950390625e+04, 5.894754296875e+04, 5.894423046875e+04, 5.8939578125e+04, 5.8933609375e+04, 5.892634375e+04, 5.89178125e+04, 5.8908046875e+04, 5.889708984375e+04, 5.888498046875e+04, 5.8871765625e+04, 5.88575e+04, 5.884223828125e+04, 5.882604296875e+04, 5.880898046875e+04, 5.8791109375e+04, 5.87725078125e+04, 5.875324609375e+04, 5.87333984375e+04, 5.8713046875e+04, 5.86922734375e+04, 5.867115234375e+04, 5.864977734375e+04, 5.862822265625e+04, 5.8606578125e+04, 5.85849296875e+04, 5.856336328125e+04, 5.85419609375e+04, 5.852080859375e+04, 5.84999921875e+04, 5.847958984375e+04, 5.845968359375e+04, 5.84403515625e+04, 5.8421671875e+04, 5.840371875e+04, 5.838655859375e+04, 5.8370265625e+04, 5.83548984375e+04, 5.834051953125e+04, 5.832718359375e+04, 5.831494921875e+04, 5.8303859375e+04, 5.82939609375e+04, 5.828529296875e+04, 5.82778828125e+04, 5.827176953125e+04, 5.826697265625e+04, 5.82635078125e+04, 5.826139453125e+04, 5.8260640625e+04, 5.826124609375e+04, 5.826320703125e+04, 5.826651953125e+04, 5.8271171875e+04, 5.8277140625e+04, 5.828440625e+04, 5.82929375e+04, 5.8302703125e+04, 5.831366015625e+04, 5.832576953125e+04, 5.8338984375e+04, 5.835325e+04, 5.836851171875e+04, 5.838470703125e+04, 5.840176953125e+04, 5.8419640625e+04, 5.84382421875e+04, 5.845750390625e+04, 5.84773515625e+04, 5.8497703125e+04, 5.85184765625e+04, 5.853959765625e+04, 5.856097265625e+04, 5.858252734375e+04, 5.8604171875e+04] +heaNoLoc.dpChiWatSet_remote[1]=[5.8605375e+04, 5.8605375e+04] +heaNoLoc.dpChiWatSet_remote[2]=[5.8605375e+04, 5.8605375e+04] +heaNoLoc.yPumSpe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.050185933709145e-01, 1.764687448740005e-01, 3.346084952354431e-01, 5.81822395324707e-01, 9.201420545578003e-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] +heaNoLoc.uChiWatIsoVal[1]=[0e+00, 2.999999932944775e-02, 5.999999865889549e-02, 9.000000357627869e-02, 1.19999997317791e-01, 1.500000059604645e-01, 1.800000071525574e-01, 2.099999934434891e-01, 2.39999994635582e-01, 2.700000107288361e-01, 3.00000011920929e-01, 3.300000131130219e-01, 3.600000143051147e-01, 3.899999856948853e-01, 4.199999868869782e-01, 4.49999988079071e-01, 4.799999892711639e-01, 5.099999904632568e-01, 5.400000214576721e-01, 5.699999928474426e-01, 6.000000238418579e-01, 6.299999952316284e-01, 6.600000262260437e-01, 6.899999976158142e-01, 7.200000286102295e-01, 7.5e-01, 7.799999713897705e-01, 8.100000023841859e-01, 8.399999737739564e-01, 8.700000047683716e-01, 8.999999761581421e-01, 9.300000071525574e-01, 9.599999785423279e-01, 9.900000095367432e-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, 1e+00, 1e+00] +heaNoLoc.uChiWatIsoVal[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.999999955296516e-02, 5.000000074505806e-02, 7.999999821186066e-02, 1.099999994039536e-01, 1.400000005960464e-01, 1.700000017881394e-01, 2.000000029802322e-01, 2.300000041723251e-01, 2.599999904632568e-01, 2.899999916553497e-01, 3.199999928474426e-01, 3.499999940395355e-01, 3.799999952316284e-01, 4.099999964237213e-01, 4.399999976158142e-01, 4.699999988079071e-01, 5e-01, 5.299999713897705e-01, 5.600000023841859e-01, 5.899999737739564e-01, 6.200000047683716e-01, 6.499999761581421e-01, 6.800000071525574e-01, 7.099999785423279e-01, 7.400000095367432e-01, 7.699999809265137e-01, 8.00000011920929e-01, 8.299999833106995e-01, 8.600000143051147e-01, 8.899999856948853e-01, 9.200000166893005e-01, 9.49999988079071e-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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +dedNoLoc.uLeaChiEna=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dedNoLoc.uLeaChiSta=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dedNoLoc.uLeaChiWatReq=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dedNoLoc.enaDedLeaPum.yLea=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dedNoLoc.dpChiWat_remote[1]=[5.79158984375e+04, 5.8002484375e+04, 5.80887265625e+04, 5.81742890625e+04, 5.825883203125e+04, 5.834201953125e+04, 5.84235234375e+04, 5.850302734375e+04, 5.858021484375e+04, 5.865477734375e+04, 5.872642578125e+04, 5.8794875e+04, 5.885985546875e+04, 5.8921109375e+04, 5.89783984375e+04, 5.90314921875e+04, 5.90801875e+04, 5.912428125e+04, 5.9163609375e+04, 5.9198015625e+04, 5.9227359375e+04, 5.925152734375e+04, 5.927042578125e+04, 5.92839765625e+04, 5.929212890625e+04, 5.92948515625e+04, 5.929212890625e+04, 5.92839765625e+04, 5.927042578125e+04, 5.925152734375e+04, 5.9227359375e+04, 5.9198015625e+04, 5.9163609375e+04, 5.912428125e+04, 5.90801875e+04, 5.90314921875e+04, 5.89783984375e+04, 5.8921109375e+04, 5.885985546875e+04, 5.8794875e+04, 5.872642578125e+04, 5.865477734375e+04, 5.858021484375e+04, 5.850302734375e+04, 5.84235234375e+04, 5.834201953125e+04, 5.825883203125e+04, 5.81742890625e+04, 5.80887265625e+04, 5.8002484375e+04, 5.79158984375e+04, 5.782931640625e+04, 5.77430703125e+04, 5.765751171875e+04, 5.757296875e+04, 5.748978125e+04, 5.74082734375e+04, 5.73287734375e+04, 5.72515859375e+04, 5.71770234375e+04, 5.7105375e+04, 5.703692578125e+04, 5.69719453125e+04, 5.69106875e+04, 5.685340234375e+04, 5.68003046875e+04, 5.675161328125e+04, 5.6707515625e+04, 5.66681875e+04, 5.663378515625e+04, 5.660444140625e+04, 5.65802734375e+04, 5.6561375e+04, 5.654782421875e+04, 5.6539671875e+04, 5.653694921875e+04, 5.6539671875e+04, 5.654782421875e+04, 5.6561375e+04, 5.65802734375e+04, 5.660444140625e+04, 5.663378515625e+04, 5.66681875e+04, 5.6707515625e+04, 5.675161328125e+04, 5.68003046875e+04, 5.685340234375e+04, 5.69106875e+04, 5.69719453125e+04, 5.703692578125e+04, 5.7105375e+04, 5.71770234375e+04, 5.72515859375e+04, 5.73287734375e+04, 5.74082734375e+04, 5.748978125e+04, 5.757296875e+04, 5.765751171875e+04, 5.77430703125e+04, 5.782931640625e+04, 5.79158984375e+04] +dedNoLoc.dpChiWat_remote[2]=[5.8605375e+04, 5.86258203125e+04, 5.864738671875e+04, 5.86687890625e+04, 5.868994140625e+04, 5.87107578125e+04, 5.873116015625e+04, 5.875106640625e+04, 5.87703984375e+04, 5.8789078125e+04, 5.880703125e+04, 5.882419140625e+04, 5.8840484375e+04, 5.88558515625e+04, 5.887023046875e+04, 5.888356640625e+04, 5.889580078125e+04, 5.8906890625e+04, 5.89167890625e+04, 5.892545703125e+04, 5.89328671875e+04, 5.893898046875e+04, 5.894377734375e+04, 5.89472421875e+04, 5.894935546875e+04, 5.8950109375e+04, 5.894950390625e+04, 5.894754296875e+04, 5.894423046875e+04, 5.8939578125e+04, 5.8933609375e+04, 5.892634375e+04, 5.89178125e+04, 5.8908046875e+04, 5.889708984375e+04, 5.888498046875e+04, 5.8871765625e+04, 5.88575e+04, 5.884223828125e+04, 5.882604296875e+04, 5.880898046875e+04, 5.8791109375e+04, 5.87725078125e+04, 5.875324609375e+04, 5.87333984375e+04, 5.8713046875e+04, 5.86922734375e+04, 5.867115234375e+04, 5.864977734375e+04, 5.862822265625e+04, 5.8606578125e+04, 5.85849296875e+04, 5.856336328125e+04, 5.85419609375e+04, 5.852080859375e+04, 5.84999921875e+04, 5.847958984375e+04, 5.845968359375e+04, 5.84403515625e+04, 5.8421671875e+04, 5.840371875e+04, 5.838655859375e+04, 5.8370265625e+04, 5.83548984375e+04, 5.834051953125e+04, 5.832718359375e+04, 5.831494921875e+04, 5.8303859375e+04, 5.82939609375e+04, 5.828529296875e+04, 5.82778828125e+04, 5.827176953125e+04, 5.826697265625e+04, 5.82635078125e+04, 5.826139453125e+04, 5.8260640625e+04, 5.826124609375e+04, 5.826320703125e+04, 5.826651953125e+04, 5.8271171875e+04, 5.8277140625e+04, 5.828440625e+04, 5.82929375e+04, 5.8302703125e+04, 5.831366015625e+04, 5.832576953125e+04, 5.8338984375e+04, 5.835325e+04, 5.836851171875e+04, 5.838470703125e+04, 5.840176953125e+04, 5.8419640625e+04, 5.84382421875e+04, 5.845750390625e+04, 5.84773515625e+04, 5.8497703125e+04, 5.85184765625e+04, 5.853959765625e+04, 5.856097265625e+04, 5.858252734375e+04, 5.8604171875e+04] +dedNoLoc.dpChiWatSet_remote[1]=[5.8605375e+04, 5.8605375e+04] +dedNoLoc.dpChiWatSet_remote[2]=[5.8605375e+04, 5.8605375e+04] +dedNoLoc.yPumSpe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.976413577795029e-01, 3.533392846584321e-01, 4.224187433719635e-01, 4.076147079467773e-01, 3.119966387748718e-01, 1.389491409063339e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.050185933709145e-01, 1.764687448740005e-01, 3.346084952354431e-01, 5.81822395324707e-01, 9.201420545578003e-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] +dedLoc.uLeaChiEna=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dedLoc.uLeaChiSta=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dedLoc.uLeaChiWatReq=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dedLoc.dpChiWat_remote[1]=[5.79158984375e+04, 5.8002484375e+04, 5.80887265625e+04, 5.81742890625e+04, 5.825883203125e+04, 5.834201953125e+04, 5.84235234375e+04, 5.850302734375e+04, 5.858021484375e+04, 5.865477734375e+04, 5.872642578125e+04, 5.8794875e+04, 5.885985546875e+04, 5.8921109375e+04, 5.89783984375e+04, 5.90314921875e+04, 5.90801875e+04, 5.912428125e+04, 5.9163609375e+04, 5.9198015625e+04, 5.9227359375e+04, 5.925152734375e+04, 5.927042578125e+04, 5.92839765625e+04, 5.929212890625e+04, 5.92948515625e+04, 5.929212890625e+04, 5.92839765625e+04, 5.927042578125e+04, 5.925152734375e+04, 5.9227359375e+04, 5.9198015625e+04, 5.9163609375e+04, 5.912428125e+04, 5.90801875e+04, 5.90314921875e+04, 5.89783984375e+04, 5.8921109375e+04, 5.885985546875e+04, 5.8794875e+04, 5.872642578125e+04, 5.865477734375e+04, 5.858021484375e+04, 5.850302734375e+04, 5.84235234375e+04, 5.834201953125e+04, 5.825883203125e+04, 5.81742890625e+04, 5.80887265625e+04, 5.8002484375e+04, 5.79158984375e+04, 5.782931640625e+04, 5.77430703125e+04, 5.765751171875e+04, 5.757296875e+04, 5.748978125e+04, 5.74082734375e+04, 5.73287734375e+04, 5.72515859375e+04, 5.71770234375e+04, 5.7105375e+04, 5.703692578125e+04, 5.69719453125e+04, 5.69106875e+04, 5.685340234375e+04, 5.68003046875e+04, 5.675161328125e+04, 5.6707515625e+04, 5.66681875e+04, 5.663378515625e+04, 5.660444140625e+04, 5.65802734375e+04, 5.6561375e+04, 5.654782421875e+04, 5.6539671875e+04, 5.653694921875e+04, 5.6539671875e+04, 5.654782421875e+04, 5.6561375e+04, 5.65802734375e+04, 5.660444140625e+04, 5.663378515625e+04, 5.66681875e+04, 5.6707515625e+04, 5.675161328125e+04, 5.68003046875e+04, 5.685340234375e+04, 5.69106875e+04, 5.69719453125e+04, 5.703692578125e+04, 5.7105375e+04, 5.71770234375e+04, 5.72515859375e+04, 5.73287734375e+04, 5.74082734375e+04, 5.748978125e+04, 5.757296875e+04, 5.765751171875e+04, 5.77430703125e+04, 5.782931640625e+04, 5.79158984375e+04] +dedLoc.dpChiWat_remote[2]=[5.8605375e+04, 5.86258203125e+04, 5.864738671875e+04, 5.86687890625e+04, 5.868994140625e+04, 5.87107578125e+04, 5.873116015625e+04, 5.875106640625e+04, 5.87703984375e+04, 5.8789078125e+04, 5.880703125e+04, 5.882419140625e+04, 5.8840484375e+04, 5.88558515625e+04, 5.887023046875e+04, 5.888356640625e+04, 5.889580078125e+04, 5.8906890625e+04, 5.89167890625e+04, 5.892545703125e+04, 5.89328671875e+04, 5.893898046875e+04, 5.894377734375e+04, 5.89472421875e+04, 5.894935546875e+04, 5.8950109375e+04, 5.894950390625e+04, 5.894754296875e+04, 5.894423046875e+04, 5.8939578125e+04, 5.8933609375e+04, 5.892634375e+04, 5.89178125e+04, 5.8908046875e+04, 5.889708984375e+04, 5.888498046875e+04, 5.8871765625e+04, 5.88575e+04, 5.884223828125e+04, 5.882604296875e+04, 5.880898046875e+04, 5.8791109375e+04, 5.87725078125e+04, 5.875324609375e+04, 5.87333984375e+04, 5.8713046875e+04, 5.86922734375e+04, 5.867115234375e+04, 5.864977734375e+04, 5.862822265625e+04, 5.8606578125e+04, 5.85849296875e+04, 5.856336328125e+04, 5.85419609375e+04, 5.852080859375e+04, 5.84999921875e+04, 5.847958984375e+04, 5.845968359375e+04, 5.84403515625e+04, 5.8421671875e+04, 5.840371875e+04, 5.838655859375e+04, 5.8370265625e+04, 5.83548984375e+04, 5.834051953125e+04, 5.832718359375e+04, 5.831494921875e+04, 5.8303859375e+04, 5.82939609375e+04, 5.828529296875e+04, 5.82778828125e+04, 5.827176953125e+04, 5.826697265625e+04, 5.82635078125e+04, 5.826139453125e+04, 5.8260640625e+04, 5.826124609375e+04, 5.826320703125e+04, 5.826651953125e+04, 5.8271171875e+04, 5.8277140625e+04, 5.828440625e+04, 5.82929375e+04, 5.8302703125e+04, 5.831366015625e+04, 5.832576953125e+04, 5.8338984375e+04, 5.835325e+04, 5.836851171875e+04, 5.838470703125e+04, 5.840176953125e+04, 5.8419640625e+04, 5.84382421875e+04, 5.845750390625e+04, 5.84773515625e+04, 5.8497703125e+04, 5.85184765625e+04, 5.853959765625e+04, 5.856097265625e+04, 5.858252734375e+04, 5.8604171875e+04] +dedLoc.pumSpeLocDp.locDpSet.y=[3.52848984375e+04, 8.99172265625e+04, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 4.1953890625e+04, 5.388164843750001e+04, 5.91737109375e+04, 5.80396015625e+04, 5.07144609375e+04, 3.7457578125e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.447375e+04, 3.485821484375e+04, 4.033189453125e+04, 5.244671484375e+04, 7.1385359375e+04, 9.730346875e+04, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05, 1.0342125e+05] +dedLoc.dpChiWat_local=[5.8605375e+04, 5.868715625e+04, 5.877342578125e+04, 5.885903515625e+04, 5.8943640625e+04, 5.90269140625e+04, 5.91085234375e+04, 5.918814453125e+04, 5.926546875e+04, 5.934018359375e+04, 5.941200390625e+04, 5.948063671875e+04, 5.954581640625e+04, 5.960728515625e+04, 5.966480078125e+04, 5.97181328125e+04, 5.976707421875e+04, 5.981143359375e+04, 5.985102734375e+04, 5.98857109375e+04, 5.991533984375e+04, 5.9939796875e+04, 5.995898828125e+04, 5.997283984375e+04, 5.998129296875e+04, 5.998431640625e+04, 5.99818984375e+04, 5.9974046875e+04, 5.996079296875e+04, 5.994219140625e+04, 5.99183125e+04, 5.988925390625e+04, 5.985512890625e+04, 5.98160703125e+04, 5.9772234375e+04, 5.972379296875e+04, 5.96709375e+04, 5.9613875e+04, 5.95528359375e+04, 5.94880546875e+04, 5.94197890625e+04, 5.93483125e+04, 5.927390234375e+04, 5.919685546875e+04, 5.911747265625e+04, 5.90360703125e+04, 5.895296484375e+04, 5.88684921875e+04, 5.87829765625e+04, 5.869676171875e+04, 5.86101875e+04, 5.852359375e+04, 5.843732421875e+04, 5.835171484375e+04, 5.8267109375e+04, 5.81838359375e+04, 5.81022265625e+04, 5.802260546875e+04, 5.794528125e+04, 5.787056640625e+04, 5.779874609375e+04, 5.773011328125e+04, 5.766493359375e+04, 5.760346484375e+04, 5.754594921875e+04, 5.74926171875e+04, 5.744367578125e+04, 5.739931640625e+04, 5.735972265625e+04, 5.73250390625e+04, 5.729541015625e+04, 5.7270953125e+04, 5.725176171875e+04, 5.723791015625e+04, 5.722945703125e+04, 5.722643359375e+04, 5.72288515625e+04, 5.7236703125e+04, 5.724995703125e+04, 5.726855859375e+04, 5.72924375e+04, 5.732149609375e+04, 5.735562109375e+04, 5.73946796875e+04, 5.7438515625e+04, 5.748695703125e+04, 5.75398125e+04, 5.7596875e+04, 5.76579140625e+04, 5.77226953125e+04, 5.77909609375e+04, 5.78624375e+04, 5.793684765625e+04, 5.801389453125e+04, 5.809327734375e+04, 5.81746796875e+04, 5.825778515625e+04, 5.83422578125e+04, 5.84277734375e+04, 5.851398828125e+04, 5.86005625e+04] +dedLoc.yPumSpe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_CondenserWater_Subsequences_Validation_EnableLead_dedicated.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_CondenserWater_Subsequences_Validation_EnableLead_dedicated.txt new file mode 100644 index 00000000000..424260fb8e9 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_CondenserWater_Subsequences_Validation_EnableLead_dedicated.txt @@ -0,0 +1,16 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +enaLeaConPum.uLeaChiEna=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaLeaConPum.uLeaChiSta=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaLeaConPum.uLeaConWatReq=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaLeaConPum.yLea=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disLeaConPum.uLeaChiEna=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disLeaConPum.uLeaChiSta=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disLeaConPum.uLeaConWatReq=[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, 1e+00, 1e+00] +disLeaConPum.yLea=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_CondenserWater_Subsequences_Validation_EnableLead_headered.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_CondenserWater_Subsequences_Validation_EnableLead_headered.txt new file mode 100644 index 00000000000..a7073b3dbf0 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_CondenserWater_Subsequences_Validation_EnableLead_headered.txt @@ -0,0 +1,11 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +enaLeaConPum.uChiConIsoVal[1]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaLeaConPum.uWseConIsoVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaLeaConPum.yLea=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_CondenserWater_Subsequences_Validation_Speed.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_CondenserWater_Subsequences_Validation_Speed.txt new file mode 100644 index 00000000000..5de91651952 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_CondenserWater_Subsequences_Validation_Speed.txt @@ -0,0 +1,12 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +conPumSpe.uWSE=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +conPumSpe.uChiSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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] +conPumSpe.yConWatPumNum=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 2e+00, 2e+00, 2e+00, 2e+00, 2e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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] +conPumSpe.yDesConWatPumSpe=[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, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_CondenserWater_Validation_Controller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_CondenserWater_Validation_Controller.txt new file mode 100644 index 00000000000..fe450ff3173 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Pumps_CondenserWater_Validation_Controller.txt @@ -0,0 +1,25 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +chiSta.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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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] +wseSta.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +chiOn.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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +meaPumSpe.y=[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, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-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, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-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, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-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, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01] +pumSpeSet.y=[3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-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, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-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, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-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, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-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, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01] +heaHavWse.yLeaPum=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +heaHavWse.yDesConWatPumSpe=[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, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01] +heaHavWse.yConWatPumNum=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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] +heaHavWse.yPumSpeChe=[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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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] +dedHavWse.yLeaPum=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +dedHavWse.yDesConWatPumSpe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01] +dedHavWse.yConWatPumNum=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2e+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, 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] +dedHavWse.yPumSpeChe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +heaNoWse.yLeaPum=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +heaNoWse.yDesConWatPumSpe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.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] +heaNoWse.yConWatPumNum=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +heaNoWse.yPumSpeChe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_SetPoints_Validation_ChilledWaterPlantReset.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_SetPoints_Validation_ChilledWaterPlantReset.txt new file mode 100644 index 00000000000..3c494c30145 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_SetPoints_Validation_ChilledWaterPlantReset.txt @@ -0,0 +1,19 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 9e+03] +plaRes.triRes.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, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 1.999999955296516e-02, 1.999999955296516e-02, 1.999999955296516e-02, 1.999999955296516e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 1.299999952316284e-01, 1.299999952316284e-01, 1.299999952316284e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 7.000000029802322e-02, 7.000000029802322e-02, 7.000000029802322e-02, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.700000107288361e-01, 2.700000107288361e-01, 2.700000107288361e-01, 2.5e-01, 2.5e-01, 2.5e-01, 2.5e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.099999934434891e-01, 2.099999934434891e-01, 2.099999934434891e-01, 2.5e-01, 2.5e-01, 2.5e-01, 2.5e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.400000035762787e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.199999928474426e-01, 3.199999928474426e-01] +plaRes.yChiWatPlaRes=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 1.299999952316284e-01, 1.299999952316284e-01, 1.299999952316284e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.700000107288361e-01, 2.700000107288361e-01, 2.700000107288361e-01, 2.5e-01, 2.5e-01, 2.5e-01, 2.5e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01] +plaRes.chaPro=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +plaRes.triSam.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, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01] +plaRes.truHol.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +plaRes.TChiWatSupResReq=[0e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 5e+00, 5e+00, 4e+00, 4e+00, 3e+00, 2e+00, 2e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 5e+00, 5e+00, 4e+00, 4e+00, 3e+00, 2e+00, 2e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 5e+00, 5e+00, 4e+00, 4e+00, 3e+00, 2e+00, 2e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 5e+00, 5e+00, 4e+00, 4e+00, 3e+00, 2e+00, 2e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 5e+00, 5e+00, 4e+00, 4e+00, 3e+00, 2e+00, 2e+00, 1e+00, 1e+00] +devRes.triRes.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, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 1.299999952316284e-01, 1.299999952316284e-01, 1.299999952316284e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 7.000000029802322e-02, 7.000000029802322e-02, 7.000000029802322e-02, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.400000005960464e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.800000071525574e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.700000107288361e-01, 2.700000107288361e-01, 2.700000107288361e-01, 2.5e-01, 2.5e-01, 2.5e-01, 2.5e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-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] +devRes.yChiWatPlaRes=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 3.999999910593033e-02, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 1.299999952316284e-01, 1.299999952316284e-01, 1.299999952316284e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 9.000000357627869e-02, 9.000000357627869e-02, 9.000000357627869e-02, 7.000000029802322e-02, 7.000000029802322e-02, 7.000000029802322e-02, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.099999994039536e-01, 1.599999964237213e-01, 1.599999964237213e-01, 1.599999964237213e-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.000000029802322e-01, 2.700000107288361e-01, 2.700000107288361e-01, 2.5e-01, 2.5e-01, 2.5e-01, 2.5e-01, 2.300000041723251e-01, 2.300000041723251e-01, 2.300000041723251e-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] +devRes.TChiWatSupResReq=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e+00, 6e+00, 5e+00, 5e+00, 4e+00, 4e+00, 3e+00, 2e+00, 2e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 5e+00, 5e+00, 4e+00, 4e+00, 3e+00, 2e+00, 2e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 5e+00, 5e+00, 4e+00, 4e+00, 3e+00, 2e+00, 2e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 5e+00, 5e+00, 4e+00, 4e+00, 3e+00, 2e+00, 2e+00, 1e+00, 1e+00, 0e+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] +devRes.chaPro=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +devRes.triRes.uDevSta=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_SetPoints_Validation_ChilledWaterSupply.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_SetPoints_Validation_ChilledWaterSupply.txt new file mode 100644 index 00000000000..3dd8eda8863 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_SetPoints_Validation_ChilledWaterSupply.txt @@ -0,0 +1,11 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +chiWatSupSet.dpChiWatPumSet[1]=[6e+01, 6.179999923706055e+01, 6.359999847412109e+01, 6.540000152587891e+01, 6.719999694824219e+01, 6.9e+01, 7.080000305175781e+01, 7.259999847412109e+01, 7.440000152587891e+01, 7.619999694824219e+01, 7.8e+01, 7.980000305175781e+01, 8.159999847412109e+01, 8.340000152587891e+01, 8.519999694824219e+01, 8.7e+01, 8.880000305175781e+01, 9.059999847412109e+01, 9.240000152587891e+01, 9.419999694824219e+01, 9.6e+01, 9.780000305175781e+01, 9.959999847412109e+01, 1.014000015258789e+02, 1.031999969482422e+02, 1.05e+02, 1.068000030517578e+02, 1.085999984741211e+02, 1.104000015258789e+02, 1.121999969482422e+02, 1.14e+02, 1.158000030517578e+02, 1.175999984741211e+02, 1.194000015258789e+02, 1.211999969482422e+02, 1.23e+02, 1.248000030517578e+02, 1.265999984741211e+02, 1.283999938964844e+02, 1.301999969482422e+02, 1.32e+02, 1.338000030517578e+02, 1.356000061035156e+02, 1.373999938964844e+02, 1.391999969482422e+02, 1.41e+02, 1.428000030517578e+02, 1.446000061035156e+02, 1.463999938964844e+02, 1.481999969482422e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02, 1.5e+02] +chiWatSupSet.uChiWatPlaRes=[0e+00, 9.999999776482582e-03, 1.999999955296516e-02, 2.999999932944775e-02, 3.999999910593033e-02, 5.000000074505806e-02, 5.999999865889549e-02, 7.000000029802324e-02, 7.999999821186066e-02, 9.000000357627869e-02, 1.000000014901161e-01, 1.099999994039536e-01, 1.19999997317791e-01, 1.299999952316284e-01, 1.400000005960465e-01, 1.500000059604645e-01, 1.599999964237213e-01, 1.700000017881393e-01, 1.800000071525574e-01, 1.899999976158142e-01, 2.000000029802322e-01, 2.099999934434891e-01, 2.199999988079071e-01, 2.300000041723251e-01, 2.39999994635582e-01, 2.5e-01, 2.599999904632568e-01, 2.700000107288361e-01, 2.80000001192093e-01, 2.899999916553497e-01, 3.00000011920929e-01, 3.100000023841858e-01, 3.199999928474426e-01, 3.300000131130219e-01, 3.400000035762787e-01, 3.499999940395355e-01, 3.600000143051147e-01, 3.700000047683716e-01, 3.799999952316284e-01, 3.899999856948853e-01, 4.000000059604645e-01, 4.099999964237213e-01, 4.199999868869781e-01, 4.300000071525574e-01, 4.399999976158142e-01, 4.49999988079071e-01, 4.600000083446503e-01, 4.699999988079071e-01, 4.799999892711639e-01, 4.900000095367432e-01, 5e-01, 5.099999904632568e-01, 5.199999809265137e-01, 5.299999713897705e-01, 5.400000214576722e-01, 5.500000119209291e-01, 5.600000023841859e-01, 5.699999928474426e-01, 5.799999833106995e-01, 5.899999737739563e-01, 6.000000238418579e-01, 6.100000143051147e-01, 6.200000047683716e-01, 6.299999952316284e-01, 6.399999856948853e-01, 6.499999761581421e-01, 6.600000262260437e-01, 6.700000166893005e-01, 6.800000071525574e-01, 6.899999976158142e-01, 6.99999988079071e-01, 7.099999785423279e-01, 7.200000286102295e-01, 7.300000190734863e-01, 7.400000095367432e-01, 7.5e-01, 7.599999904632568e-01, 7.699999809265137e-01, 7.799999713897705e-01, 7.900000214576721e-01, 8.00000011920929e-01, 8.100000023841858e-01, 8.199999928474426e-01, 8.299999833106995e-01, 8.399999737739563e-01, 8.500000238418579e-01, 8.600000143051147e-01, 8.700000047683716e-01, 8.799999952316284e-01, 8.899999856948853e-01, 8.999999761581421e-01, 9.100000262260437e-01, 9.200000166893005e-01, 9.300000071525574e-01, 9.399999976158142e-01, 9.49999988079071e-01, 9.599999785423279e-01, 9.700000286102295e-01, 9.800000190734863e-01, 9.900000095367432e-01, 1e+00] +chiWatSupSet.TChiWatSupSet=[2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.909299926757812e+02, 2.907099914550781e+02, 2.90489990234375e+02, 2.902699890136719e+02, 2.900499877929688e+02, 2.898299865722656e+02, 2.896099853515625e+02, 2.893900146484375e+02, 2.891700134277344e+02, 2.889500122070312e+02, 2.887300109863281e+02, 2.88510009765625e+02, 2.882900085449219e+02, 2.880700073242188e+02, 2.878500061035156e+02, 2.876300048828125e+02, 2.874100036621094e+02, 2.871900024414062e+02, 2.869700012207031e+02, 2.8675e+02, 2.865299987792969e+02, 2.863099975585938e+02, 2.860899963378906e+02, 2.858699951171875e+02, 2.856499938964844e+02, 2.854299926757812e+02, 2.852099914550781e+02, 2.84989990234375e+02, 2.847699890136719e+02, 2.845499877929688e+02, 2.843299865722656e+02, 2.841099853515625e+02, 2.838900146484375e+02, 2.836700134277344e+02, 2.834500122070312e+02, 2.832300109863281e+02, 2.83010009765625e+02, 2.827900085449219e+02, 2.825700073242188e+02, 2.823500061035156e+02, 2.821300048828125e+02, 2.819100036621094e+02, 2.816900024414062e+02, 2.814700012207031e+02, 2.8125e+02, 2.810299987792969e+02, 2.808099975585938e+02, 2.805899963378906e+02, 2.803699951171875e+02, 2.801499938964844e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_CHWIsoVal.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_CHWIsoVal.txt new file mode 100644 index 00000000000..c2c0ea069f9 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_CHWIsoVal.txt @@ -0,0 +1,24 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +enaChiIsoVal.uChiWatIsoVal[1]=[1e+00, 1e+00] +enaChiIsoVal.uChiWatIsoVal[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, 1.133333370089531e-01, 2.333333343267441e-01, 3.533333241939545e-01, 4.73333328962326e-01, 5.933333039283752e-01, 7.133333086967468e-01, 8.333333134651187e-01, 9.533333182334903e-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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaChiIsoVal.uStaPro=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaChiIsoVal.uUpsDevSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +enaChiIsoVal.nexChaChi=[2e+00, 2e+00] +enaChiIsoVal.yChiWatIsoVal[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] +enaChiIsoVal.yChiWatIsoVal[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, 1.19999997317791e-01, 2.39999994635582e-01, 3.600000143051147e-01, 4.799999892711639e-01, 6.000000238418579e-01, 7.200000286102295e-01, 8.399999737739566e-01, 9.599999785423282e-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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaChiIsoVal.yEnaChiWatIsoVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +disChiIsoVal.uChiWatIsoVal[1]=[1e+00, 1e+00] +disChiIsoVal.uChiWatIsoVal[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, 8.866666555404663e-01, 7.666666507720947e-01, 6.466666460037231e-01, 5.266666412353516e-01, 4.066666662693024e-01, 2.866666615009308e-01, 1.6666667163372e-01, 4.666666686534843e-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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disChiIsoVal.uStaPro=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +disChiIsoVal.uUpsDevSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +disChiIsoVal.nexChaChi=[2e+00, 2e+00] +disChiIsoVal.yChiWatIsoVal[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] +disChiIsoVal.yChiWatIsoVal[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, 8.799999952316284e-01, 7.599999904632568e-01, 6.399999856948853e-01, 5.199999809265137e-01, 4.000000059604645e-01, 2.800000011920929e-01, 1.599999964237209e-01, 3.999999910592995e-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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disChiIsoVal.yEnaChiWatIsoVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_DisableChiller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_DisableChiller.txt new file mode 100644 index 00000000000..f2b7628fa77 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_DisableChiller.txt @@ -0,0 +1,30 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +chiOnOff.nexEnaChi=[3e+00, 3e+00] +chiOnOff.nexDisChi=[2e+00, 2e+00] +chiOnOff.uStaDow=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiOnOff.uEnaChiWatIsoVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +chiOnOff.uChi[1]=[1e+00, 1e+00] +chiOnOff.uChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiOnOff.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiOnOff.yChi[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] +chiOnOff.yChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiOnOff.yChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiOnOff.yRelDemLim=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +chiOff.nexEnaChi=[0e+00, 0e+00] +chiOff.nexDisChi=[2e+00, 2e+00] +chiOff.uStaDow=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiOff.uEnaChiWatIsoVal=[0e+00, 0e+00] +chiOff.uChi[1]=[1e+00, 1e+00] +chiOff.uChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiOff.uChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiOff.yChi[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] +chiOff.yChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiOff.yChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiOff.yRelDemLim=[1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_DownStartWithOn.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_DownStartWithOn.txt new file mode 100644 index 00000000000..1d5fa410f4c --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_DownStartWithOn.txt @@ -0,0 +1,22 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1.2e+03] +staStaDow1.uStaDow=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staStaDow1.uChiLoa[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] +staStaDow1.uChiLoa[2]=[2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01] +staStaDow1.yChiDem[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] +staStaDow1.yChiDem[2]=[2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01] +staStaDow1.yChiHeaCon[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] +staStaDow1.yChiHeaCon[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staStaDow1.yChiWatIsoVal[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] +staStaDow1.yChiWatIsoVal[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staStaDow1.yChi[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] +staStaDow1.yChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +demLimRel.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staStaDow1.yChiWatMinFloSet=[0e+00, 0e+00, 0e+00, 0e+00, 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.039999961853027e+00, 1.080000042915344e+00, 1.120000004768372e+00, 1.159999966621399e+00, 1.200000047683716e+00, 1.240000009536743e+00, 1.279999971389771e+00, 1.320000052452087e+00, 1.360000014305115e+00, 1.399999976158142e+00, 1.440000057220459e+00, 1.480000019073486e+00, 1.519999980926514e+00, 1.559999942779541e+00, 1.600000023841858e+00, 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, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staStaDow1.VChiWat_flow=[0e+00, 0e+00, 0e+00, 0e+00, 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.033333301544189e+00, 1.066666722297668e+00, 1.100000023841858e+00, 1.133333325386047e+00, 1.166666626930237e+00, 1.233333349227905e+00, 1.266666650772095e+00, 1.299999952316284e+00, 1.333333373069763e+00, 1.366666674613953e+00, 1.433333277702332e+00, 1.466666698455811e+00, 1.5e+00, 1.533333301544189e+00, 1.566666722297668e+00, 1.633333325386047e+00, 1.666666626930237e+00, 1.700000047683716e+00, 1.733333349227905e+00, 1.766666650772095e+00, 1.833333373069763e+00, 1.866666674613953e+00, 1.899999976158142e+00, 1.933333277702332e+00, 1.966666698455811e+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, 2e+00, 2e+00, 2e+00, 2e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_DownStartWithoutOn.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_DownStartWithoutOn.txt new file mode 100644 index 00000000000..ea07083c96b --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_DownStartWithoutOn.txt @@ -0,0 +1,20 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1.2e+03] +staStaDow.uStaDow=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staStaDow.uChiLoa[1]=[1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03] +staStaDow.uChiLoa[2]=[1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staStaDow.yChiDem[1]=[1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03] +staStaDow.yChiDem[2]=[1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staStaDow.yChiHeaCon[1]=[1e+00, 1e+00] +staStaDow.yChiHeaCon[2]=[1e+00, 1e+00] +staStaDow.yChiWatIsoVal[1]=[1e+00, 1e+00] +staStaDow.yChiWatIsoVal[2]=[1e+00, 1e+00] +staStaDow.yChi[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] +staStaDow.yChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staStaDow.yReaDemLim=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_EnableCWPump.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_EnableCWPump.txt new file mode 100644 index 00000000000..f3c0dcd15f8 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_EnableCWPump.txt @@ -0,0 +1,18 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +staUpInd.uUpsDevSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +staUpInd.uStaUp=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staUpInd.uStaDow=[0e+00, 0e+00] +staUpInd.uStaSet=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 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] +staUpInd.yChiSta=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 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] +staDowInd.uUpsDevSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +staDowInd.uStaUp=[0e+00, 0e+00] +staDowInd.uStaDow=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staDowInd.uStaSet=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staDowInd.yChiSta=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_EnableChiller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_EnableChiller.txt new file mode 100644 index 00000000000..3cfe5c4145e --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_EnableChiller.txt @@ -0,0 +1,32 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +enaDisChi.nexEnaChi=[3e+00, 3e+00] +enaDisChi.nexDisChi=[2e+00, 2e+00] +enaDisChi.uStaUp=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaDisChi.uEnaChiWatIsoVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +enaDisChi.uOnOff=[1e+00, 1e+00] +enaDisChi.uChi[1]=[1e+00, 1e+00] +enaDisChi.uChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaDisChi.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaDisChi.yChi[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] +enaDisChi.yChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaDisChi.yChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaDisChi.yNewChiEna=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +enaOneChi.nexEnaChi=[3e+00, 3e+00] +enaOneChi.nexDisChi=[0e+00, 0e+00] +enaOneChi.uStaUp=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaOneChi.uEnaChiWatIsoVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +enaOneChi.uOnOff=[0e+00, 0e+00] +enaOneChi.uChi[1]=[1e+00, 1e+00] +enaOneChi.uChi[2]=[1e+00, 1e+00] +enaOneChi.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaOneChi.yChi[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] +enaOneChi.yChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaOneChi.yChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaOneChi.yNewChiEna=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_HeadControl.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_HeadControl.txt new file mode 100644 index 00000000000..277f00eb831 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_HeadControl.txt @@ -0,0 +1,40 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1.2e+02] +enaHeaCon.uStaPro=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaHeaCon.uUpsDevSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +enaHeaCon.uChiHeaCon[1]=[1e+00, 1e+00] +enaHeaCon.uChiHeaCon[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaHeaCon.yChiHeaCon[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] +enaHeaCon.yChiHeaCon[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaHeaCon.nexChaChi=[2e+00, 2e+00] +enaHeaCon.yEnaHeaCon=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +disHeaCon.uStaPro=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +disHeaCon.uUpsDevSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +disHeaCon.uChiHeaCon[1]=[1e+00, 1e+00] +disHeaCon.uChiHeaCon[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disHeaCon.yChiHeaCon[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] +disHeaCon.yChiHeaCon[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disHeaCon.nexChaChi=[2e+00, 2e+00] +disHeaCon.yEnaHeaCon=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +disHeaCon1.uStaPro=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +disHeaCon1.uUpsDevSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +disHeaCon1.uChiHeaCon[1]=[1e+00, 1e+00] +disHeaCon1.uChiHeaCon[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disHeaCon1.yChiHeaCon[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] +disHeaCon1.yChiHeaCon[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disHeaCon1.nexChaChi=[2e+00, 2e+00] +disHeaCon1.yEnaHeaCon=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +enaHeaCon1.uStaPro=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaHeaCon1.uUpsDevSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +enaHeaCon1.uChiHeaCon[1]=[1e+00, 1e+00] +enaHeaCon1.uChiHeaCon[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] +enaHeaCon1.yChiHeaCon[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] +enaHeaCon1.yChiHeaCon[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] +enaHeaCon1.nexChaChi=[2e+00, 2e+00] +enaHeaCon1.yEnaHeaCon=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_NextChiller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_NextChiller.txt new file mode 100644 index 00000000000..7b4c1a43118 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_NextChiller.txt @@ -0,0 +1,49 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1.2e+02] +nexChi.uStaSet=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 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] +nexChi.uChiSet[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nexChi.uChiSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi.endPro=[1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi.yNexEnaChi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi.yDisSmaChi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi.yOnOff=[0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nexChi.yLasDisChi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi.yEnaSmaChi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi.yUp=[0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nexChi.yDow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nexChi1.uStaSet=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 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] +nexChi1.uChiSet[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] +nexChi1.uChiSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi1.endPro=[1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi1.yNexEnaChi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi1.yDisSmaChi=[1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi1.yOnOff=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nexChi1.yLasDisChi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi1.yEnaSmaChi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi1.yUp=[0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nexChi1.yDow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nexChi2.uStaSet=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi2.uChiSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi2.uChiSet[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nexChi2.endPro=[1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi2.yNexEnaChi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi2.yDisSmaChi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi2.yOnOff=[0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nexChi2.yLasDisChi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi2.yEnaSmaChi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi2.yUp=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nexChi2.yDow=[0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nexChi3.uStaSet=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi3.uChiSet[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] +nexChi3.yNexEnaChi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi3.yOnOff=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nexChi3.yLasDisChi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi3.yEnaSmaChi=[1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nexChi3.yUp=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nexChi3.yDow=[0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_ReduceDemand.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_ReduceDemand.txt new file mode 100644 index 00000000000..853f819dde0 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_ReduceDemand.txt @@ -0,0 +1,27 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 6e+02] +chiDemRed.uDemLim=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiDemRed.uChiLoa[1]=[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, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01] +chiDemRed.uChiLoa[2]=[0e+00, 0e+00] +chiDemRed.uChi[1]=[1e+00, 1e+00] +chiDemRed.uChi[2]=[0e+00, 0e+00] +chiDemRed.yChiDem[1]=[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, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01] +chiDemRed.yChiDem[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] +chiDemRed.yChiDemRed=[1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiDemRed1.uDemLim=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiDemRed1.uStaDow=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiDemRed1.uOnOff=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiDemRed1.uChiLoa[1]=[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, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01] +chiDemRed1.uChiLoa[2]=[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, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01] +chiDemRed1.yOpeParLoaRatMin=[6.99999988079071e-01, 6.99999988079071e-01] +chiDemRed1.uChi[1]=[1e+00, 1e+00] +chiDemRed1.uChi[2]=[1e+00, 1e+00] +chiDemRed1.yChiDem[1]=[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, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01] +chiDemRed1.yChiDem[2]=[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, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01, 3.75e+01] +chiDemRed1.yChiDemRed=[1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_ResetMinBypass.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_ResetMinBypass.txt new file mode 100644 index 00000000000..e628d302fff --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_ResetMinBypass.txt @@ -0,0 +1,14 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 6e+02] +minBypRes.uUpsDevSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +minBypRes.uStaPro=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +minBypRes.uSetChaPro=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +minBypRes.VChiWat_flow=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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.037500023841858e+00, 1.075000047683716e+00, 1.112499952316284e+00, 1.149999976158142e+00, 1.1875e+00, 1.225000023841858e+00, 1.262500047683716e+00, 1.299999952316284e+00, 1.337499976158142e+00, 1.375e+00, 1.412500023841858e+00, 1.450000047683716e+00, 1.487499952316284e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00] +minBypRes.VMinChiWat_setpoint=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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.049999952316284e+00, 1.100000023841858e+00, 1.149999976158142e+00, 1.200000047683716e+00, 1.25e+00, 1.299999952316284e+00, 1.350000023841858e+00, 1.399999976158142e+00, 1.450000047683716e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00] +minBypRes.yMinBypRes=[1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_UpEndWithOff.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_UpEndWithOff.txt new file mode 100644 index 00000000000..14a453d1dbd --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_UpEndWithOff.txt @@ -0,0 +1,24 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1.2e+03] +endUp1.uStaUp=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +endUp1.uEnaChiWatIsoVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +endUp1.uChiHeaCon[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +endUp1.uChiHeaCon[2]=[1e+00, 1e+00] +endUp1.uChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +endUp1.uChi[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] +endUp1.uChiWatReq[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +endUp1.uChiWatReq[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] +endUp1.uConWatReq[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +endUp1.uConWatReq[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] +endUp1.yChiWatIsoVal[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, 9.599999785423279e-01, 9.200000166893005e-01, 8.799999952316284e-01, 8.399999737739563e-01, 8.00000011920929e-01, 7.599999904632568e-01, 7.200000286102295e-01, 6.800000071525574e-01, 6.399999856948853e-01, 6.000000238418579e-01, 5.600000023841855e-01, 5.19999980926514e-01, 4.799999892711639e-01, 4.399999976158142e-01, 4.000000059604645e-01, 3.600000143051147e-01, 3.199999928474426e-01, 2.800000011920929e-01, 2.39999994635582e-01, 2.000000029802322e-01, 1.599999964237213e-01, 1.19999997317791e-01, 7.999999821186028e-02, 3.99999991059307e-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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +endUp1.yChiWatIsoVal[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +endUp1.yChiHeaCon[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +endUp1.yChiHeaCon[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +endUp1.yChiWatMinSet=[1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +endUp1.yEndSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_UpEndWithoutOff.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_UpEndWithoutOff.txt new file mode 100644 index 00000000000..03ad4fb2607 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Subsequences_Validation_UpEndWithoutOff.txt @@ -0,0 +1,20 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1.2e+03] +endUp.uStaUp=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +endUp.uEnaChiWatIsoVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +endUp.uChiHeaCon[1]=[1e+00, 1e+00] +endUp.uChiHeaCon[2]=[1e+00, 1e+00] +endUp.uChi[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] +endUp.uChi[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] +endUp.yChi[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] +endUp.yChi[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] +endUp.yChiWatMinSet=[1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00, 1.66700005531311e+00] +endUp.yEndSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +triSam.u=[0e+00, 6.279052048921585e-02, 1.25333234667778e-01, 1.87381312251091e-01, 2.486898899078369e-01, 3.0901700258255e-01, 3.681245446205139e-01, 4.257792830467225e-01, 4.817536771297455e-01, 5.358268022537231e-01, 5.877852439880371e-01, 6.374239921569824e-01, 6.845471262931824e-01, 7.28968620300293e-01, 7.705132365226747e-01, 8.0901700258255e-01, 8.443279266357422e-01, 8.763066530227662e-01, 9.048270583152771e-01, 9.297764897346497e-01, 9.510565400123596e-01, 9.685831665992737e-01, 9.822872281074524e-01, 9.921147227287292e-01, 9.980267286300659e-01, 1e+00, 9.980267286300659e-01, 9.921147227287292e-01, 9.822872281074523e-01, 9.685831665992737e-01, 9.510565400123596e-01, 9.297764897346497e-01, 9.048270583152771e-01, 8.763066530227661e-01, 8.443279266357421e-01, 8.0901700258255e-01, 7.705132365226746e-01, 7.28968620300293e-01, 6.845471262931824e-01, 6.374239921569824e-01, 5.877852439880371e-01, 5.358268022537234e-01, 4.817536771297455e-01, 4.257792830467224e-01, 3.681245446205139e-01, 3.0901700258255e-01, 2.486898899078369e-01, 1.87381312251091e-01, 1.25333234667778e-01, 6.279052048921585e-02, -3.216245245915458e-16, -6.279052048921585e-02, -1.25333234667778e-01, -1.87381312251091e-01, -2.486898899078369e-01, -3.0901700258255e-01, -3.681245446205145e-01, -4.257792830467219e-01, -4.817536771297455e-01, -5.358268022537231e-01, -5.877852439880371e-01, -6.374239921569824e-01, -6.845471262931824e-01, -7.28968620300293e-01, -7.705132365226746e-01, -8.0901700258255e-01, -8.443279266357422e-01, -8.763066530227661e-01, -9.048270583152773e-01, -9.297764897346494e-01, -9.510565400123596e-01, -9.685831665992737e-01, -9.822872281074524e-01, -9.921147227287292e-01, -9.980267286300659e-01, -1e+00, -9.980267286300659e-01, -9.921147227287292e-01, -9.822872281074524e-01, -9.685831665992737e-01, -9.510565400123596e-01, -9.297764897346494e-01, -9.048270583152773e-01, -8.763066530227661e-01, -8.443279266357422e-01, -8.0901700258255e-01, -7.705132365226746e-01, -7.28968620300293e-01, -6.845471262931824e-01, -6.374239921569824e-01, -5.877852439880371e-01, -5.358268022537231e-01, -4.817536771297455e-01, -4.257792830467224e-01, -3.681245446205139e-01, -3.0901700258255e-01, -2.486898899078369e-01, -1.87381312251091e-01, -1.25333234667778e-01, -6.279052048921585e-02, 6.432490491830917e-16] +triSam.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, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Validation_DownWithOnOff.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Validation_DownWithOnOff.txt new file mode 100644 index 00000000000..28ef4dd3d83 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Validation_DownWithOnOff.txt @@ -0,0 +1,21 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 2.4e+03] +dowProCon.uStaSet=[2e+00, 2e+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] +dowProCon.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +dowProCon.uChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dowProCon.yStaPro=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dowProCon.uChiLoa[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +dowProCon.uChiLoa[2]=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 1.559999942779541e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dowProCon.yChiWatIsoVal[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, 6.571435928344727e-02, 1.457143574953079e-01, 2.257143557071686e-01, 3.057143688201904e-01, 3.857143521308899e-01, 4.657143652439117e-01, 5.457143783569336e-01, 6.257143616676334e-01, 7.057143449783325e-01, 7.85714328289032e-01, 8.657143712043762e-01, 9.457143545150757e-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, 1e+00, 1e+00, 1e+00] +dowProCon.yChiWatIsoVal[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, 9.342856407165527e-01, 8.542856574058533e-01, 7.74285614490509e-01, 6.942856311798096e-01, 6.142856478691101e-01, 5.342856645584106e-01, 4.542856514453888e-01, 3.742856383323669e-01, 2.942856550216675e-01, 2.142856419086456e-01, 1.342856436967842e-01, 5.428564175963478e-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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dowProCon.yChiHeaCon[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +dowProCon.yChiHeaCon[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dowProCon.yChiWatMinFloSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.031111121177673e+00, 1.084444403648376e+00, 1.137777805328369e+00, 1.191111087799072e+00, 1.244444489479065e+00, 1.297777771949768e+00, 1.351111054420471e+00, 1.404444456100464e+00, 1.457777738571167e+00, 1.51111114025116e+00, 1.564444422721863e+00, 1.617777824401856e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 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] +dowProCon.yDesConWatPumSpe=[6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01] +dowProCon.yConWatPumNum=[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, 2e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Validation_DownWithoutOnOff.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Validation_DownWithoutOnOff.txt new file mode 100644 index 00000000000..29896240c58 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Validation_DownWithoutOnOff.txt @@ -0,0 +1,21 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1.5e+03] +dowProCon.uStaSet=[2e+00, 2e+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] +dowProCon.uChi[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] +dowProCon.uChi[2]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dowProCon.yStaPro=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dowProCon.uChiLoa[1]=[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, 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] +dowProCon.uChiLoa[2]=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dowProCon.yChiWatIsoVal[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] +dowProCon.yChiWatIsoVal[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.49999988079071e-01, 8.999999761581421e-01, 8.500000238418579e-01, 8.00000011920929e-01, 7.5e-01, 6.99999988079071e-01, 6.499999761581421e-01, 6.000000238418579e-01, 5.500000119209288e-01, 5e-01, 4.49999988079071e-01, 4.000000059604644e-01, 3.499999940395355e-01, 3.00000011920929e-01, 2.5e-01, 2.000000029802322e-01, 1.500000059604645e-01, 1.000000014901161e-01, 5.000000074505806e-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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dowProCon.yChiHeaCon[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] +dowProCon.yChiHeaCon[2]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dowProCon.yChiWatMinFloSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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.950000047683716e+00, 1.899999976158142e+00, 1.850000023841858e+00, 1.799999952316284e+00, 1.75e+00, 1.700000047683716e+00, 1.649999976158142e+00, 1.600000023841858e+00, 1.549999952316284e+00, 1.5e+00, 1.450000047683716e+00, 1.399999976158142e+00, 1.350000023841858e+00, 1.299999952316284e+00, 1.25e+00, 1.200000047683716e+00, 1.149999976158142e+00, 1.100000023841858e+00, 1.049999952316284e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +dowProCon.yDesConWatPumSpe=[6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01] +dowProCon.yConWatPumNum=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Validation_UpWithOnOff.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Validation_UpWithOnOff.txt new file mode 100644 index 00000000000..04b74f8271d --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Validation_UpWithOnOff.txt @@ -0,0 +1,22 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 2e+03] +upProCon.uStaSet=[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, 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, 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] +upProCon.uChi[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +upProCon.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +upProCon.yStaPro=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +upProCon.yChiDem[1]=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +upProCon.yChiDem[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, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +upProCon.yChiWatIsoVal[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, 9.333333373069763e-01, 8.666666746139526e-01, 8.00000011920929e-01, 7.333333492279053e-01, 6.666666865348816e-01, 6.000000238418579e-01, 5.333333611488342e-01, 4.666666686534882e-01, 4.000000059604645e-01, 3.333333432674408e-01, 2.666666805744171e-01, 2.000000029802322e-01, 1.333333402872086e-01, 6.666667014360428e-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] +upProCon.yChiWatIsoVal[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, 4.76194778457284e-03, 7.142861187458038e-02, 1.380952745676041e-01, 2.047619521617889e-01, 2.714286148548126e-01, 3.380952775478363e-01, 4.0476194024086e-01, 4.714286029338837e-01, 5.380952954292297e-01, 6.047619581222534e-01, 6.714286208152771e-01, 7.380952835083008e-01, 8.047619462013245e-01, 8.714286088943481e-01, 9.380952715873718e-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] +upProCon.yChiHeaCon[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +upProCon.yChiHeaCon[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +upProCon.yChiWatMinFloSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 5.388888716697693e-01, 6.166666746139526e-01, 6.944444179534912e-01, 7.722222208976746e-01, 8.500000238418579e-01, 9.277777671813965e-01, 1.005555510520935e+00, 1.083333373069763e+00, 1.161111116409302e+00, 1.23888885974884e+00, 1.316666722297668e+00, 1.394444465637207e+00, 1.472222208976746e+00, 1.549999952316284e+00, 1.627777814865112e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +upProCon.VChiWat_flow=[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, 5.777778029441833e-01, 6.555555462837219e-01, 7.333333492279053e-01, 8.111110925674438e-01, 8.888888955116272e-01, 9.666666388511658e-01, 1.044444441795349e+00, 1.122222185134888e+00, 1.200000047683716e+00, 1.277777791023254e+00, 1.355555534362793e+00, 1.433333277702332e+00, 1.51111114025116e+00, 1.588888883590698e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1e+00, 1e+00, 1e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00, 1.666666626930237e+00] +upProCon.yDesConWatPumSpe=[7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01] +upProCon.yConWatPumNum=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 2e+00, 2e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Validation_UpWithoutOnOff.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Validation_UpWithoutOnOff.txt new file mode 100644 index 00000000000..1138d97c5bb --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_Processes_Validation_UpWithoutOnOff.txt @@ -0,0 +1,21 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 2e+03] +upProCon.uStaSet=[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, 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, 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] +upProCon.uChi[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] +upProCon.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +upProCon.yStaPro=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +upProCon.uChiLoa[1]=[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, 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] +upProCon.uChiLoa[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, 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] +upProCon.yChiWatIsoVal[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] +upProCon.yChiWatIsoVal[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, 3.333338350057602e-02, 1.000000536441803e-01, 1.66666716337204e-01, 2.333333790302277e-01, 3.000000417232513e-01, 3.66666704416275e-01, 4.333333969116211e-01, 5.000000596046448e-01, 5.666667222976685e-01, 6.333333849906921e-01, 7.000000476837158e-01, 7.666667103767395e-01, 8.333333730697632e-01, 9.000000357627869e-01, 9.666666984558105e-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] +upProCon.yChiHeaCon[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] +upProCon.yChiHeaCon[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +upProCon.yChiWatMinFloSet=[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, 1.033333301544189e+00, 1.100000023841858e+00, 1.166666626930237e+00, 1.233333349227905e+00, 1.299999952316284e+00, 1.366666674613953e+00, 1.433333277702332e+00, 1.5e+00, 1.566666722297668e+00, 1.633333325386047e+00, 1.700000047683716e+00, 1.766666650772095e+00, 1.833333373069763e+00, 1.899999976158142e+00, 1.966666698455811e+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, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +upProCon.yDesConWatPumSpe=[7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 7.5e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01] +upProCon.yConWatPumNum=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 2e+00, 2e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Capacities_u.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Capacities_u.txt new file mode 100644 index 00000000000..e4aa9e73a41 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Capacities_u.txt @@ -0,0 +1,58 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +staCap0.uDesCap[1]=[2e+05, 2e+05] +staCap0.uDesCap[2]=[1e+06, 1e+06] +staCap0.uDesCap[3]=[1.5e+06, 1.5e+06] +staCap0.uMinCap[1]=[4e+04, 4e+04] +staCap0.uMinCap[2]=[2e+05, 2e+05] +staCap0.uMinCap[3]=[3e+05, 3e+05] +staCap0.uLow=[1e+00, 1e+00] +staCap0.uHig=[0e+00, 0e+00] +staCap0.nSta=[3e+00, 3e+00] +staCap0.u=[0e+00, 0e+00] +staCap0.uUp=[1e+00, 1e+00] +staCap0.uDown=[0e+00, 0e+00] +staCap0.yDes=[2e+05, 2e+05] +staCap0.yDowDes=[0e+00, 0e+00] +staCap0.yUpDes=[2e+05, 2e+05] +staCap0.yMin=[0e+00, 0e+00] +staCap0.yUpMin=[4e+04, 4e+04] +staCap1.uLow=[1e+00, 1e+00] +staCap1.uHig=[0e+00, 0e+00] +staCap1.nSta=[3e+00, 3e+00] +staCap1.u=[1e+00, 1e+00] +staCap1.uUp=[3e+00, 3e+00] +staCap1.uDown=[0e+00, 0e+00] +staCap1.yDes=[2e+05, 2e+05] +staCap1.yDowDes=[4e+04, 4e+04] +staCap1.yUpDes=[1.5e+06, 1.5e+06] +staCap1.yMin=[4e+04, 4e+04] +staCap1.yUpMin=[3e+05, 3e+05] +staCap2.uLow=[0e+00, 0e+00] +staCap2.uHig=[0e+00, 0e+00] +staCap2.nSta=[3e+00, 3e+00] +staCap2.u=[2e+00, 2e+00] +staCap2.uUp=[3e+00, 3e+00] +staCap2.uDown=[1e+00, 1e+00] +staCap2.yDes=[1e+06, 1e+06] +staCap2.yDowDes=[2e+05, 2e+05] +staCap2.yUpDes=[1.5e+06, 1.5e+06] +staCap2.yMin=[2e+05, 2e+05] +staCap2.yUpMin=[3e+05, 3e+05] +staCap3.uLow=[0e+00, 0e+00] +staCap3.uHig=[1e+00, 1e+00] +staCap3.nSta=[3e+00, 3e+00] +staCap3.u=[3e+00, 3e+00] +staCap3.uUp=[3e+00, 3e+00] +staCap3.uDown=[2e+00, 2e+00] +staCap3.yDes=[1.5e+06, 1.5e+06] +staCap3.yDowDes=[1e+06, 1e+06] +staCap3.yUpDes=[1.5e+07, 1.5e+07] +staCap3.yMin=[3e+05, 3e+05] +staCap3.yUpMin=[1.5e+07, 1.5e+07] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Capacities_uLow_uHig.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Capacities_uLow_uHig.txt new file mode 100644 index 00000000000..2ec7a4a8105 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Capacities_uLow_uHig.txt @@ -0,0 +1,47 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +staCap0.uDesCap[1]=[2e+05, 2e+05] +staCap0.uDesCap[2]=[1e+06, 1e+06] +staCap0.uDesCap[3]=[1.5e+06, 1.5e+06] +staCap0.uMinCap[1]=[4e+04, 4e+04] +staCap0.uMinCap[2]=[2e+05, 2e+05] +staCap0.uMinCap[3]=[3e+05, 3e+05] +staCap0.uLow=[0e+00, 0e+00] +staCap0.uHig=[1e+00, 1e+00] +staCap0.nSta=[3e+00, 3e+00] +staCap0.u=[2e+00, 2e+00] +staCap0.uUp=[2e+00, 2e+00] +staCap0.uDown=[1e+00, 1e+00] +staCap0.yDes=[1e+06, 1e+06] +staCap0.yDowDes=[2e+05, 2e+05] +staCap0.yUpDes=[1e+07, 1e+07] +staCap0.yMin=[2e+05, 2e+05] +staCap0.yUpMin=[1e+07, 1e+07] +staCap1.uLow=[1e+00, 1e+00] +staCap1.uHig=[0e+00, 0e+00] +staCap1.nSta=[3e+00, 3e+00] +staCap1.u=[2e+00, 2e+00] +staCap1.uUp=[3e+00, 3e+00] +staCap1.uDown=[2e+00, 2e+00] +staCap1.yDes=[1e+06, 1e+06] +staCap1.yDowDes=[2e+05, 2e+05] +staCap1.yUpDes=[1.5e+06, 1.5e+06] +staCap1.yMin=[2e+05, 2e+05] +staCap1.yUpMin=[3e+05, 3e+05] +staCap2.uLow=[1e+00, 1e+00] +staCap2.uHig=[1e+00, 1e+00] +staCap2.nSta=[3e+00, 3e+00] +staCap2.u=[2e+00, 2e+00] +staCap2.uUp=[2e+00, 2e+00] +staCap2.uDown=[2e+00, 2e+00] +staCap2.yDes=[1e+06, 1e+06] +staCap2.yDowDes=[2e+05, 2e+05] +staCap2.yUpDes=[1e+07, 1e+07] +staCap2.yMin=[2e+05, 2e+05] +staCap2.yUpMin=[1e+07, 1e+07] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_CapacityRequirement.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_CapacityRequirement.txt new file mode 100644 index 00000000000..77e6ece9577 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_CapacityRequirement.txt @@ -0,0 +1,24 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "3", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +capReq.y=[0e+00, 3.4195296875e+05, 4.2390484375e+05, 4.7246025e+05, 4.7637278125e+05, 4.4397503125e+05, 3.9711190625e+05, 3.5736909375e+05, 3.3486021875e+05, 3.2788871875e+05, 3.0844940625e+05, 2.724875625e+05, 2.32410921875e+05, 2.02425921875e+05, 1.868741875e+05, 1.79161921875e+05, 1.7305353125e+05, 1.7182753125e+05, 1.84991609375e+05, 2.163693125e+05, 2.5690165625e+05, 2.91379125e+05, 3.1138828125e+05, 3.2067084375e+05, 3.2710840625e+05, 3.309040625e+05, 3.2347584375e+05, 2.978633437499999e+05, 2.587993593749999e+05, 2.20852e+05, 1.958879375e+05, 1.8389215625e+05, 1.77019453125e+05, 1.7164803125e+05, 1.74169421875e+05, 1.9362096875e+05, 2.29628921875e+05, 2.697276875e+05, 2.99683625e+05, 3.1523215625e+05, 3.2286790625e+05, 3.2895653125e+05, 3.302465e+05, 3.17078875e+05, 2.8574953125e+05, 2.452250625e+05, 2.1074165625e+05, 1.90738421875e+05, 1.8140303125e+05, 1.7493571875e+05, 1.71086265625e+05, 1.784903125e+05, 2.04189296875e+05, 2.43354984375e+05, 2.813535937500002e+05, 3.062935000000001e+05, 3.182048125000001e+05, 3.2501628125e+05, 3.3032415625e+05, 3.2783153125e+05, 3.0848078125e+05, 2.7249003125e+05, 2.324166875e+05, 2.0251284375e+05, 1.8689534375e+05, 1.79198984375e+05, 1.73084734375e+05, 1.71820609375e+05, 1.85005125e+05, 2.16361828125e+05, 2.56915546875e+05, 2.9139740625e+05, 3.11381625e+05, 3.20664125e+05, 3.2703746875e+05, 3.309268125e+05, 3.2349290625e+05, 2.9790103125e+05, 2.58807625e+05, 2.20840265625e+05, 1.9583290625e+05, 1.838811875e+05, 1.7703428125e+05, 1.7166915625e+05, 1.741749375e+05, 1.93625109375e+05, 2.2961596875e+05, 2.697574375e+05, 2.9971253125e+05, 3.1525796875e+05, 3.2290221875e+05, 3.28968375e+05, 3.3020303125e+05, 3.1699584375e+05, 2.857084375e+05, 2.451749375e+05, 2.10709953125e+05, 1.9069725e+05, 1.81378046875e+05, 1.749410625e+05, 1.710981875e+05] +capReq.chaPro=[0e+00, 0e+00] +capReq.VChiWat_flow=[1.999999955296516e-02, 2.368124574422836e-02, 2.684547193348408e-02, 2.904826961457729e-02, 2.998026646673679e-02, 2.951056510210037e-02, 2.770513296127319e-02, 2.481753751635551e-02, 2.125333249568939e-02, 1.75131019204855e-02, 1.412214711308479e-02, 1.155672036111355e-02, 1.017712708562613e-02, 1.017712708562613e-02, 1.155672036111355e-02, 1.412214711308479e-02, 1.75131019204855e-02, 2.125333249568939e-02, 2.481753751635551e-02, 2.770513296127319e-02, 2.951056510210037e-02, 2.998026646673679e-02, 2.904826961457729e-02, 2.684547193348408e-02, 2.368124574422836e-02, 1.999999955296516e-02, 1.631875522434711e-02, 1.315452903509139e-02, 1.095172949135303e-02, 1.001973263919353e-02, 1.048943493515253e-02, 1.229486800730228e-02, 1.518246345221996e-02, 1.874666847288609e-02, 2.248689904808998e-02, 2.587785199284554e-02, 2.844327874481678e-02, 2.982287295162678e-02, 2.982287295162678e-02, 2.844327874481678e-02, 2.587785199284554e-02, 2.248689904808998e-02, 1.874666847288609e-02, 1.518246345221996e-02, 1.229486800730228e-02, 1.048943493515253e-02, 1.001973263919353e-02, 1.095172949135303e-02, 1.31545290350914e-02, 1.631875522434711e-02, 1.999999955296516e-02, 2.368124574422836e-02, 2.684547193348408e-02, 2.904826961457729e-02, 2.998026646673679e-02, 2.951056510210037e-02, 2.770513296127318e-02, 2.481753751635551e-02, 2.125333249568939e-02, 1.75131019204855e-02, 1.412214711308479e-02, 1.155672036111355e-02, 1.017712708562613e-02, 1.017712708562613e-02, 1.155672036111355e-02, 1.412214711308479e-02, 1.75131019204855e-02, 2.125333249568939e-02, 2.481753751635551e-02, 2.770513296127319e-02, 2.951056510210037e-02, 2.998026646673679e-02, 2.904826961457729e-02, 2.684547193348408e-02, 2.368124574422836e-02, 1.999999955296516e-02, 1.631875522434711e-02, 1.31545290350914e-02, 1.095172949135303e-02, 1.001973263919353e-02, 1.048943493515253e-02, 1.229486800730228e-02, 1.518246345221996e-02, 1.874666847288609e-02, 2.248689904808998e-02, 2.587785199284554e-02, 2.844327874481678e-02, 2.982287295162678e-02, 2.982287295162678e-02, 2.844327874481678e-02, 2.587785199284554e-02, 2.248689904808998e-02, 1.874666847288609e-02, 1.518246345221996e-02, 1.229486800730228e-02, 1.048943493515253e-02, 1.001973263919353e-02, 1.095172949135303e-02, 1.31545290350914e-02, 1.631875522434711e-02, 1.999999955296516e-02] +capReq.TChiWatRet=[2.881499938964844e+02, 2.895191040039062e+02, 2.901460571289062e+02, 2.896910400390625e+02, 2.884006652832031e+02, 2.869744262695312e+02, 2.861854248046875e+02, 2.864613342285156e+02, 2.876526184082031e+02, 2.891134948730469e+02, 2.900521240234375e+02, 2.899596557617188e+02, 2.888862609863281e+02, 2.874137573242188e+02, 2.8634033203125e+02, 2.862478942871094e+02, 2.871864929199219e+02, 2.886473693847656e+02, 2.898386535644531e+02, 2.901145629882812e+02, 2.893255615234375e+02, 2.878993225097656e+02, 2.866089782714844e+02, 2.861539611816406e+02, 2.867809143066406e+02, 2.881499938964844e+02, 2.895191040039062e+02, 2.901460571289062e+02, 2.896910400390625e+02, 2.884006652832031e+02, 2.869744262695312e+02, 2.861854248046875e+02, 2.864613342285156e+02, 2.876526184082031e+02, 2.891134948730469e+02, 2.900521240234375e+02, 2.899596557617188e+02, 2.888862609863281e+02, 2.874137573242188e+02, 2.8634033203125e+02, 2.862478942871094e+02, 2.871864929199219e+02, 2.886473693847656e+02, 2.898386535644531e+02, 2.901145629882812e+02, 2.893255615234375e+02, 2.878993225097656e+02, 2.866089782714844e+02, 2.861539611816406e+02, 2.867809143066406e+02, 2.881499938964844e+02, 2.895191040039062e+02, 2.901460571289062e+02, 2.896910400390625e+02, 2.884006652832031e+02, 2.869744262695312e+02, 2.861854248046875e+02, 2.864613342285156e+02, 2.876526184082031e+02, 2.891134948730469e+02, 2.900521240234375e+02, 2.899596557617188e+02, 2.888862609863281e+02, 2.874137573242188e+02, 2.8634033203125e+02, 2.862478942871094e+02, 2.871864929199219e+02, 2.886473693847656e+02, 2.898386535644531e+02, 2.901145629882812e+02, 2.893255615234375e+02, 2.878993225097656e+02, 2.866089782714844e+02, 2.861539611816406e+02, 2.867809143066406e+02, 2.881499938964844e+02, 2.895191040039062e+02, 2.901460571289062e+02, 2.896910400390625e+02, 2.884006652832031e+02, 2.869744262695312e+02, 2.861854248046875e+02, 2.864613342285156e+02, 2.876526184082031e+02, 2.891134948730469e+02, 2.900521240234375e+02, 2.899596557617188e+02, 2.888862609863281e+02, 2.874137573242188e+02, 2.8634033203125e+02, 2.862478942871094e+02, 2.871864929199219e+02, 2.886473693847656e+02, 2.898386535644531e+02, 2.901145629882812e+02, 2.893255615234375e+02, 2.878993225097656e+02, 2.866089782714844e+02, 2.861539611816406e+02, 2.867809143066406e+02, 2.881499938964844e+02] +capReq.TChiWatSupSet=[2.851499938964844e+02, 2.851499938964844e+02] +capReq1.y=[0e+00, 3.4195296875e+05, 4.2390484375e+05, 4.7246025e+05, 4.7637278125e+05, 4.4397503125e+05, 3.9711190625e+05, 3.5736909375e+05, 3.3486021875e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 1.74169421875e+05, 1.9362096875e+05, 2.29628921875e+05, 2.697276875e+05, 2.99683625e+05, 3.1523215625e+05, 3.2286790625e+05, 3.2895653125e+05, 3.302465e+05, 3.17078875e+05, 2.8574953125e+05, 2.452250625e+05, 2.1074165625e+05, 1.90738421875e+05, 1.8140303125e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 1.79186296875e+05, 3.2703746875e+05, 3.309268125e+05, 3.2349290625e+05, 2.9790103125e+05, 2.58807625e+05, 2.20840265625e+05, 1.9583290625e+05, 1.838811875e+05, 1.7703428125e+05, 1.7166915625e+05, 1.741749375e+05, 1.93625109375e+05, 2.2961596875e+05, 2.697574375e+05, 2.9971253125e+05, 3.062975625e+05, 3.062975625e+05, 3.062975625e+05, 3.062975625e+05, 3.062975625e+05, 3.062975625e+05, 3.062975625e+05, 3.062975625e+05, 3.062975625e+05, 3.062975625e+05, 3.062975625e+05, 3.062975625e+05] +capReq1.chaPro=[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, 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, 1e+00, 1e+00] +capReq1.VChiWat_flow=[1.999999955296516e-02, 2.368124574422836e-02, 2.684547193348408e-02, 2.904826961457729e-02, 2.998026646673679e-02, 2.951056510210037e-02, 2.770513296127319e-02, 2.481753751635551e-02, 2.125333249568939e-02, 1.75131019204855e-02, 1.412214711308479e-02, 1.155672036111355e-02, 1.017712708562613e-02, 1.017712708562613e-02, 1.155672036111355e-02, 1.412214711308479e-02, 1.75131019204855e-02, 2.125333249568939e-02, 2.481753751635551e-02, 2.770513296127319e-02, 2.951056510210037e-02, 2.998026646673679e-02, 2.904826961457729e-02, 2.684547193348408e-02, 2.368124574422836e-02, 1.999999955296516e-02, 1.631875522434711e-02, 1.315452903509139e-02, 1.095172949135303e-02, 1.001973263919353e-02, 1.048943493515253e-02, 1.229486800730228e-02, 1.518246345221996e-02, 1.874666847288609e-02, 2.248689904808998e-02, 2.587785199284554e-02, 2.844327874481678e-02, 2.982287295162678e-02, 2.982287295162678e-02, 2.844327874481678e-02, 2.587785199284554e-02, 2.248689904808998e-02, 1.874666847288609e-02, 1.518246345221996e-02, 1.229486800730228e-02, 1.048943493515253e-02, 1.001973263919353e-02, 1.095172949135303e-02, 1.31545290350914e-02, 1.631875522434711e-02, 1.999999955296516e-02, 2.368124574422836e-02, 2.684547193348408e-02, 2.904826961457729e-02, 2.998026646673679e-02, 2.951056510210037e-02, 2.770513296127318e-02, 2.481753751635551e-02, 2.125333249568939e-02, 1.75131019204855e-02, 1.412214711308479e-02, 1.155672036111355e-02, 1.017712708562613e-02, 1.017712708562613e-02, 1.155672036111355e-02, 1.412214711308479e-02, 1.75131019204855e-02, 2.125333249568939e-02, 2.481753751635551e-02, 2.770513296127319e-02, 2.951056510210037e-02, 2.998026646673679e-02, 2.904826961457729e-02, 2.684547193348408e-02, 2.368124574422836e-02, 1.999999955296516e-02, 1.631875522434711e-02, 1.31545290350914e-02, 1.095172949135303e-02, 1.001973263919353e-02, 1.048943493515253e-02, 1.229486800730228e-02, 1.518246345221996e-02, 1.874666847288609e-02, 2.248689904808998e-02, 2.587785199284554e-02, 2.844327874481678e-02, 2.982287295162678e-02, 2.982287295162678e-02, 2.844327874481678e-02, 2.587785199284554e-02, 2.248689904808998e-02, 1.874666847288609e-02, 1.518246345221996e-02, 1.229486800730228e-02, 1.048943493515253e-02, 1.001973263919353e-02, 1.095172949135303e-02, 1.31545290350914e-02, 1.631875522434711e-02, 1.999999955296516e-02] +capReq1.TChiWatRet=[2.881499938964844e+02, 2.895191040039062e+02, 2.901460571289062e+02, 2.896910400390625e+02, 2.884006652832031e+02, 2.869744262695312e+02, 2.861854248046875e+02, 2.864613342285156e+02, 2.876526184082031e+02, 2.891134948730469e+02, 2.900521240234375e+02, 2.899596557617188e+02, 2.888862609863281e+02, 2.874137573242188e+02, 2.8634033203125e+02, 2.862478942871094e+02, 2.871864929199219e+02, 2.886473693847656e+02, 2.898386535644531e+02, 2.901145629882812e+02, 2.893255615234375e+02, 2.878993225097656e+02, 2.866089782714844e+02, 2.861539611816406e+02, 2.867809143066406e+02, 2.881499938964844e+02, 2.895191040039062e+02, 2.901460571289062e+02, 2.896910400390625e+02, 2.884006652832031e+02, 2.869744262695312e+02, 2.861854248046875e+02, 2.864613342285156e+02, 2.876526184082031e+02, 2.891134948730469e+02, 2.900521240234375e+02, 2.899596557617188e+02, 2.888862609863281e+02, 2.874137573242188e+02, 2.8634033203125e+02, 2.862478942871094e+02, 2.871864929199219e+02, 2.886473693847656e+02, 2.898386535644531e+02, 2.901145629882812e+02, 2.893255615234375e+02, 2.878993225097656e+02, 2.866089782714844e+02, 2.861539611816406e+02, 2.867809143066406e+02, 2.881499938964844e+02, 2.895191040039062e+02, 2.901460571289062e+02, 2.896910400390625e+02, 2.884006652832031e+02, 2.869744262695312e+02, 2.861854248046875e+02, 2.864613342285156e+02, 2.876526184082031e+02, 2.891134948730469e+02, 2.900521240234375e+02, 2.899596557617188e+02, 2.888862609863281e+02, 2.874137573242188e+02, 2.8634033203125e+02, 2.862478942871094e+02, 2.871864929199219e+02, 2.886473693847656e+02, 2.898386535644531e+02, 2.901145629882812e+02, 2.893255615234375e+02, 2.878993225097656e+02, 2.866089782714844e+02, 2.861539611816406e+02, 2.867809143066406e+02, 2.881499938964844e+02, 2.895191040039062e+02, 2.901460571289062e+02, 2.896910400390625e+02, 2.884006652832031e+02, 2.869744262695312e+02, 2.861854248046875e+02, 2.864613342285156e+02, 2.876526184082031e+02, 2.891134948730469e+02, 2.900521240234375e+02, 2.899596557617188e+02, 2.888862609863281e+02, 2.874137573242188e+02, 2.8634033203125e+02, 2.862478942871094e+02, 2.871864929199219e+02, 2.886473693847656e+02, 2.898386535644531e+02, 2.901145629882812e+02, 2.893255615234375e+02, 2.878993225097656e+02, 2.866089782714844e+02, 2.861539611816406e+02, 2.867809143066406e+02, 2.881499938964844e+02] +capReq1.TChiWatSupSet=[2.851499938964844e+02, 2.851499938964844e+02] +capReq2.y=[0e+00, 3.4195296875e+05, 4.2390484375e+05, 4.7246025e+05, 4.7637278125e+05, 4.4397503125e+05, 3.9711190625e+05, 3.5736909375e+05, 3.3486021875e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 3.3095228125e+05, 2.29628921875e+05, 2.697276875e+05, 2.99683625e+05, 3.1523215625e+05, 3.2286790625e+05, 3.2895653125e+05, 3.302465e+05, 3.17078875e+05, 2.8574953125e+05, 2.452250625e+05, 2.1074165625e+05, 1.90738421875e+05, 1.8140303125e+05, 1.7493571875e+05, 1.71086265625e+05, 1.784903125e+05, 2.04189296875e+05, 2.43354984375e+05, 2.813535937500002e+05, 3.062935000000001e+05, 3.182048125000001e+05, 3.2501628125e+05, 3.3032415625e+05, 3.2783153125e+05, 3.0848078125e+05, 2.7249003125e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 2.45243359375e+05, 3.1525796875e+05, 3.2290221875e+05, 3.28968375e+05, 3.3020303125e+05, 3.1699584375e+05, 2.857084375e+05, 2.451749375e+05, 2.10709953125e+05, 1.9069725e+05, 1.81378046875e+05, 1.749410625e+05, 1.710981875e+05] +capReq2.chaPro=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +capReq2.VChiWat_flow=[1.999999955296516e-02, 2.368124574422836e-02, 2.684547193348408e-02, 2.904826961457729e-02, 2.998026646673679e-02, 2.951056510210037e-02, 2.770513296127319e-02, 2.481753751635551e-02, 2.125333249568939e-02, 1.75131019204855e-02, 1.412214711308479e-02, 1.155672036111355e-02, 1.017712708562613e-02, 1.017712708562613e-02, 1.155672036111355e-02, 1.412214711308479e-02, 1.75131019204855e-02, 2.125333249568939e-02, 2.481753751635551e-02, 2.770513296127319e-02, 2.951056510210037e-02, 2.998026646673679e-02, 2.904826961457729e-02, 2.684547193348408e-02, 2.368124574422836e-02, 1.999999955296516e-02, 1.631875522434711e-02, 1.315452903509139e-02, 1.095172949135303e-02, 1.001973263919353e-02, 1.048943493515253e-02, 1.229486800730228e-02, 1.518246345221996e-02, 1.874666847288609e-02, 2.248689904808998e-02, 2.587785199284554e-02, 2.844327874481678e-02, 2.982287295162678e-02, 2.982287295162678e-02, 2.844327874481678e-02, 2.587785199284554e-02, 2.248689904808998e-02, 1.874666847288609e-02, 1.518246345221996e-02, 1.229486800730228e-02, 1.048943493515253e-02, 1.001973263919353e-02, 1.095172949135303e-02, 1.31545290350914e-02, 1.631875522434711e-02, 1.999999955296516e-02, 2.368124574422836e-02, 2.684547193348408e-02, 2.904826961457729e-02, 2.998026646673679e-02, 2.951056510210037e-02, 2.770513296127318e-02, 2.481753751635551e-02, 2.125333249568939e-02, 1.75131019204855e-02, 1.412214711308479e-02, 1.155672036111355e-02, 1.017712708562613e-02, 1.017712708562613e-02, 1.155672036111355e-02, 1.412214711308479e-02, 1.75131019204855e-02, 2.125333249568939e-02, 2.481753751635551e-02, 2.770513296127319e-02, 2.951056510210037e-02, 2.998026646673679e-02, 2.904826961457729e-02, 2.684547193348408e-02, 2.368124574422836e-02, 1.999999955296516e-02, 1.631875522434711e-02, 1.31545290350914e-02, 1.095172949135303e-02, 1.001973263919353e-02, 1.048943493515253e-02, 1.229486800730228e-02, 1.518246345221996e-02, 1.874666847288609e-02, 2.248689904808998e-02, 2.587785199284554e-02, 2.844327874481678e-02, 2.982287295162678e-02, 2.982287295162678e-02, 2.844327874481678e-02, 2.587785199284554e-02, 2.248689904808998e-02, 1.874666847288609e-02, 1.518246345221996e-02, 1.229486800730228e-02, 1.048943493515253e-02, 1.001973263919353e-02, 1.095172949135303e-02, 1.31545290350914e-02, 1.631875522434711e-02, 1.999999955296516e-02] +capReq2.TChiWatRet=[2.881499938964844e+02, 2.895191040039062e+02, 2.901460571289062e+02, 2.896910400390625e+02, 2.884006652832031e+02, 2.869744262695312e+02, 2.861854248046875e+02, 2.864613342285156e+02, 2.876526184082031e+02, 2.891134948730469e+02, 2.900521240234375e+02, 2.899596557617188e+02, 2.888862609863281e+02, 2.874137573242188e+02, 2.8634033203125e+02, 2.862478942871094e+02, 2.871864929199219e+02, 2.886473693847656e+02, 2.898386535644531e+02, 2.901145629882812e+02, 2.893255615234375e+02, 2.878993225097656e+02, 2.866089782714844e+02, 2.861539611816406e+02, 2.867809143066406e+02, 2.881499938964844e+02, 2.895191040039062e+02, 2.901460571289062e+02, 2.896910400390625e+02, 2.884006652832031e+02, 2.869744262695312e+02, 2.861854248046875e+02, 2.864613342285156e+02, 2.876526184082031e+02, 2.891134948730469e+02, 2.900521240234375e+02, 2.899596557617188e+02, 2.888862609863281e+02, 2.874137573242188e+02, 2.8634033203125e+02, 2.862478942871094e+02, 2.871864929199219e+02, 2.886473693847656e+02, 2.898386535644531e+02, 2.901145629882812e+02, 2.893255615234375e+02, 2.878993225097656e+02, 2.866089782714844e+02, 2.861539611816406e+02, 2.867809143066406e+02, 2.881499938964844e+02, 2.895191040039062e+02, 2.901460571289062e+02, 2.896910400390625e+02, 2.884006652832031e+02, 2.869744262695312e+02, 2.861854248046875e+02, 2.864613342285156e+02, 2.876526184082031e+02, 2.891134948730469e+02, 2.900521240234375e+02, 2.899596557617188e+02, 2.888862609863281e+02, 2.874137573242188e+02, 2.8634033203125e+02, 2.862478942871094e+02, 2.871864929199219e+02, 2.886473693847656e+02, 2.898386535644531e+02, 2.901145629882812e+02, 2.893255615234375e+02, 2.878993225097656e+02, 2.866089782714844e+02, 2.861539611816406e+02, 2.867809143066406e+02, 2.881499938964844e+02, 2.895191040039062e+02, 2.901460571289062e+02, 2.896910400390625e+02, 2.884006652832031e+02, 2.869744262695312e+02, 2.861854248046875e+02, 2.864613342285156e+02, 2.876526184082031e+02, 2.891134948730469e+02, 2.900521240234375e+02, 2.899596557617188e+02, 2.888862609863281e+02, 2.874137573242188e+02, 2.8634033203125e+02, 2.862478942871094e+02, 2.871864929199219e+02, 2.886473693847656e+02, 2.898386535644531e+02, 2.901145629882812e+02, 2.893255615234375e+02, 2.878993225097656e+02, 2.866089782714844e+02, 2.861539611816406e+02, 2.867809143066406e+02, 2.881499938964844e+02] +capReq2.TChiWatSupSet=[2.851499938964844e+02, 2.851499938964844e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Change.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Change.txt new file mode 100644 index 00000000000..9ec2f98e134 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Change.txt @@ -0,0 +1,32 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1.4e+04] +cha.ySta=[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, 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, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 0e+00, 0e+00, 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] +cha.uAvaUp=[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, 2e+00, 2e+00, 2e+00, 2e+00, 2e+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, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 1e+00, 1e+00, 1e+00, 1e+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, 2e+00, 2e+00] +cha.uAvaDow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+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, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +cha.uUp=[0e+00, 0e+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, 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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +cha.uDow=[0e+00, 0e+00] +cha.uIni=[0e+00, 0e+00] +truFalHol.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +cha.uPla=[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, 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] +cha1.ySta=[0e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +cha1.uAvaUp=[1e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+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, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00] +cha1.uAvaDow=[0e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00] +cha1.uUp=[0e+00, 0e+00] +cha1.uDow=[0e+00, 0e+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, 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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +cha1.uIni=[7e+00, 7e+00] +truFalHol1.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +cha1.uPla=[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, 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] +cha2.ySta=[0e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +cha2.uAvaUp=[1e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +cha2.uAvaDow=[0e+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, 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, 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, 1e+00, 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, 2e+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, 1e+00, 1e+00] +cha2.uUp=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +cha2.uDow=[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, 1e+00, 1e+00, 1e+00, 1e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +cha2.uIni=[3e+00, 3e+00] +truFalHol2.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +cha2.uPla=[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, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_ChillerIndices_u.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_ChillerIndices_u.txt new file mode 100644 index 00000000000..7b51057e00f --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_ChillerIndices_u.txt @@ -0,0 +1,67 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +chiInd.nSta=[3e+00, 3e+00] +chiInd.nChi=[2e+00, 2e+00] +chiInd.u=[0e+00, 0e+00] +chiInd.yChi[1]=[0e+00, 0e+00] +chiInd.yChi[2]=[0e+00, 0e+00] +chiInd1.nSta=[3e+00, 3e+00] +chiInd1.nChi=[2e+00, 2e+00] +chiInd1.u=[1e+00, 1e+00] +chiInd1.staMat[1, 1]=[1e+00, 1e+00] +chiInd1.staMat[1, 2]=[0e+00, 0e+00] +chiInd1.yChi[1]=[1e+00, 1e+00] +chiInd1.yChi[2]=[0e+00, 0e+00] +chiInd2.nSta=[3e+00, 3e+00] +chiInd2.nChi=[2e+00, 2e+00] +chiInd2.u=[2e+00, 2e+00] +chiInd2.staMat[2, 1]=[0e+00, 0e+00] +chiInd2.staMat[2, 2]=[1e+00, 1e+00] +chiInd2.yChi[1]=[0e+00, 0e+00] +chiInd2.yChi[2]=[1e+00, 1e+00] +chiInd3.nSta=[3e+00, 3e+00] +chiInd3.nChi=[2e+00, 2e+00] +chiInd3.u=[3e+00, 3e+00] +chiInd3.staMat[3, 1]=[1e+00, 1e+00] +chiInd3.staMat[3, 2]=[1e+00, 1e+00] +chiInd3.yChi[1]=[1e+00, 1e+00] +chiInd3.yChi[2]=[1e+00, 1e+00] +chiInd4.nSta=[5e+00, 5e+00] +chiInd4.nChi=[3e+00, 3e+00] +chiInd4.u=[0e+00, 0e+00] +chiInd4.yChi[1]=[0e+00, 0e+00] +chiInd4.yChi[2]=[0e+00, 0e+00] +chiInd4.yChi[3]=[0e+00, 0e+00] +chiInd5.nSta=[5e+00, 5e+00] +chiInd5.nChi=[3e+00, 3e+00] +chiInd5.u=[1e+00, 1e+00] +chiInd5.staMat[1, 1]=[1e+00, 1e+00] +chiInd5.staMat[1, 2]=[0e+00, 0e+00] +chiInd4.staMat[1, 3]=[0e+00, 0e+00] +chiInd5.yChi[1]=[1e+00, 1e+00] +chiInd5.yChi[2]=[0e+00, 0e+00] +chiInd5.yChi[3]=[0e+00, 0e+00] +chiInd6.nSta=[5e+00, 5e+00] +chiInd6.nChi=[3e+00, 3e+00] +chiInd6.u=[3e+00, 3e+00] +chiInd6.staMat[3, 1]=[1e+00, 1e+00] +chiInd6.staMat[3, 2]=[0e+00, 0e+00] +chiInd5.staMat[3, 3]=[1e+00, 1e+00] +chiInd6.yChi[1]=[1e+00, 1e+00] +chiInd6.yChi[2]=[0e+00, 0e+00] +chiInd6.yChi[3]=[1e+00, 1e+00] +chiInd7.nSta=[5e+00, 5e+00] +chiInd7.nChi=[3e+00, 3e+00] +chiInd7.u=[5e+00, 5e+00] +chiInd7.staMat[5, 1]=[1e+00, 1e+00] +chiInd7.staMat[5, 2]=[1e+00, 1e+00] +chiInd7.staMat[5, 3]=[1e+00, 1e+00] +chiInd7.yChi[1]=[1e+00, 1e+00] +chiInd7.yChi[2]=[1e+00, 1e+00] +chiInd7.yChi[3]=[1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Configurator_uChiAva.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Configurator_uChiAva.txt new file mode 100644 index 00000000000..6442dba58e1 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Configurator_uChiAva.txt @@ -0,0 +1,188 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +conf.nSta=[4e+00, 4e+00] +conf.nChi=[3e+00, 3e+00] +conf.uChiAva[1]=[1e+00, 1e+00] +conf.uChiAva[2]=[1e+00, 1e+00] +conf.uChiAva[3]=[1e+00, 1e+00] +conf.chiDesCap[1]=[1e+06, 1e+06] +conf.chiDesCap[2]=[1.5e+06, 1.5e+06] +conf.chiDesCap[3]=[2e+06, 2e+06] +conf.chiMinCap[1]=[2e+05, 2e+05] +conf.chiMinCap[2]=[3e+05, 3e+05] +conf.chiMinCap[3]=[4e+05, 4e+05] +conf.chiTyp[1]=[1e+00, 1e+00] +conf.chiTyp[2]=[2e+00, 2e+00] +conf.chiTyp[3]=[3e+00, 3e+00] +conf.yAva[1]=[1e+00, 1e+00] +conf.yAva[2]=[1e+00, 1e+00] +conf.yAva[3]=[1e+00, 1e+00] +conf.yAva[4]=[1e+00, 1e+00] +conf.yTyp[1]=[1e+00, 1e+00] +conf.yTyp[2]=[3e+00, 3e+00] +conf.yTyp[3]=[3e+00, 3e+00] +conf.yTyp[4]=[3e+00, 3e+00] +conf.yDesCap[1]=[1e+06, 1e+06] +conf.yDesCap[2]=[3e+06, 3e+06] +conf.yDesCap[3]=[3.5e+06, 3.5e+06] +conf.yDesCap[4]=[4.5e+06, 4.5e+06] +conf.yMinCap[1]=[2e+05, 2e+05] +conf.yMinCap[2]=[6e+05, 6e+05] +conf.yMinCap[3]=[7e+05, 7e+05] +conf.yMinCap[4]=[9e+05, 9e+05] +conf1.nSta=[4e+00, 4e+00] +conf1.nChi=[3e+00, 3e+00] +conf1.uChiAva[1]=[0e+00, 0e+00] +conf1.uChiAva[2]=[1e+00, 1e+00] +conf1.uChiAva[3]=[1e+00, 1e+00] +conf1.chiDesCap[1]=[1e+06, 1e+06] +conf1.chiDesCap[2]=[1.5e+06, 1.5e+06] +conf1.chiDesCap[3]=[2e+06, 2e+06] +conf1.chiMinCap[1]=[2e+05, 2e+05] +conf1.chiMinCap[2]=[3e+05, 3e+05] +conf1.chiMinCap[3]=[4e+05, 4e+05] +conf1.chiTyp[1]=[1e+00, 1e+00] +conf1.chiTyp[2]=[2e+00, 2e+00] +conf1.chiTyp[3]=[3e+00, 3e+00] +conf1.yAva[1]=[0e+00, 0e+00] +conf1.yAva[2]=[0e+00, 0e+00] +conf1.yAva[3]=[1e+00, 1e+00] +conf1.yAva[4]=[0e+00, 0e+00] +conf1.yTyp[1]=[1e+00, 1e+00] +conf1.yTyp[2]=[3e+00, 3e+00] +conf1.yTyp[3]=[3e+00, 3e+00] +conf1.yTyp[4]=[3e+00, 3e+00] +conf1.yDesCap[1]=[1e+06, 1e+06] +conf1.yDesCap[2]=[3e+06, 3e+06] +conf1.yDesCap[3]=[3.5e+06, 3.5e+06] +conf1.yDesCap[4]=[4.5e+06, 4.5e+06] +conf1.yMinCap[1]=[2e+05, 2e+05] +conf1.yMinCap[2]=[6e+05, 6e+05] +conf1.yMinCap[3]=[7e+05, 7e+05] +conf1.yMinCap[4]=[9e+05, 9e+05] +conf2.nSta=[4e+00, 4e+00] +conf2.nChi=[3e+00, 3e+00] +conf2.uChiAva[1]=[0e+00, 0e+00] +conf2.uChiAva[2]=[0e+00, 0e+00] +conf2.uChiAva[3]=[1e+00, 1e+00] +conf2.chiDesCap[1]=[1e+06, 1e+06] +conf2.chiDesCap[2]=[1.5e+06, 1.5e+06] +conf2.chiDesCap[3]=[2e+06, 2e+06] +conf2.chiMinCap[1]=[2e+05, 2e+05] +conf2.chiMinCap[2]=[3e+05, 3e+05] +conf2.chiMinCap[3]=[4e+05, 4e+05] +conf2.chiTyp[1]=[1e+00, 1e+00] +conf2.chiTyp[2]=[2e+00, 2e+00] +conf2.chiTyp[3]=[3e+00, 3e+00] +conf2.yAva[1]=[0e+00, 0e+00] +conf2.yAva[2]=[0e+00, 0e+00] +conf2.yAva[3]=[0e+00, 0e+00] +conf2.yAva[4]=[0e+00, 0e+00] +conf2.yTyp[1]=[1e+00, 1e+00] +conf2.yTyp[2]=[3e+00, 3e+00] +conf2.yTyp[3]=[3e+00, 3e+00] +conf2.yTyp[4]=[3e+00, 3e+00] +conf2.yDesCap[1]=[1e+06, 1e+06] +conf2.yDesCap[2]=[3e+06, 3e+06] +conf2.yDesCap[3]=[3.5e+06, 3.5e+06] +conf2.yDesCap[4]=[4.5e+06, 4.5e+06] +conf2.yMinCap[1]=[2e+05, 2e+05] +conf2.yMinCap[2]=[6e+05, 6e+05] +conf2.yMinCap[3]=[7e+05, 7e+05] +conf2.yMinCap[4]=[9e+05, 9e+05] +conf3.nSta=[4e+00, 4e+00] +conf3.nChi=[3e+00, 3e+00] +conf3.uChiAva[1]=[1e+00, 1e+00] +conf3.uChiAva[2]=[1e+00, 1e+00] +conf3.uChiAva[3]=[0e+00, 0e+00] +conf3.chiDesCap[1]=[1e+06, 1e+06] +conf3.chiDesCap[2]=[1.5e+06, 1.5e+06] +conf3.chiDesCap[3]=[2e+06, 2e+06] +conf3.chiMinCap[1]=[2e+05, 2e+05] +conf3.chiMinCap[2]=[3e+05, 3e+05] +conf3.chiMinCap[3]=[4e+05, 4e+05] +conf3.chiTyp[1]=[1e+00, 1e+00] +conf3.chiTyp[2]=[2e+00, 2e+00] +conf3.chiTyp[3]=[3e+00, 3e+00] +conf3.yAva[1]=[1e+00, 1e+00] +conf3.yAva[2]=[0e+00, 0e+00] +conf3.yAva[3]=[0e+00, 0e+00] +conf3.yAva[4]=[0e+00, 0e+00] +conf3.yTyp[1]=[1e+00, 1e+00] +conf3.yTyp[2]=[3e+00, 3e+00] +conf3.yTyp[3]=[3e+00, 3e+00] +conf3.yTyp[4]=[3e+00, 3e+00] +conf3.yDesCap[1]=[1e+06, 1e+06] +conf3.yDesCap[2]=[3e+06, 3e+06] +conf3.yDesCap[3]=[3.5e+06, 3.5e+06] +conf3.yDesCap[4]=[4.5e+06, 4.5e+06] +conf3.yMinCap[1]=[2e+05, 2e+05] +conf3.yMinCap[2]=[6e+05, 6e+05] +conf3.yMinCap[3]=[7e+05, 7e+05] +conf3.yMinCap[4]=[9e+05, 9e+05] +conf4.nSta=[4e+00, 4e+00] +conf4.nChi=[3e+00, 3e+00] +conf4.uChiAva[1]=[1e+00, 1e+00] +conf4.uChiAva[2]=[0e+00, 0e+00] +conf4.uChiAva[3]=[0e+00, 0e+00] +conf4.chiDesCap[1]=[1e+06, 1e+06] +conf4.chiDesCap[2]=[1.5e+06, 1.5e+06] +conf4.chiDesCap[3]=[2e+06, 2e+06] +conf4.chiMinCap[1]=[2e+05, 2e+05] +conf4.chiMinCap[2]=[3e+05, 3e+05] +conf4.chiMinCap[3]=[4e+05, 4e+05] +conf4.chiTyp[1]=[1e+00, 1e+00] +conf4.chiTyp[2]=[2e+00, 2e+00] +conf4.chiTyp[3]=[3e+00, 3e+00] +conf4.yAva[1]=[1e+00, 1e+00] +conf4.yAva[2]=[0e+00, 0e+00] +conf4.yAva[3]=[0e+00, 0e+00] +conf4.yAva[4]=[0e+00, 0e+00] +conf4.yTyp[1]=[1e+00, 1e+00] +conf4.yTyp[2]=[3e+00, 3e+00] +conf4.yTyp[3]=[3e+00, 3e+00] +conf4.yTyp[4]=[3e+00, 3e+00] +conf4.yDesCap[1]=[1e+06, 1e+06] +conf4.yDesCap[2]=[3e+06, 3e+06] +conf4.yDesCap[3]=[3.5e+06, 3.5e+06] +conf4.yDesCap[4]=[4.5e+06, 4.5e+06] +conf4.yMinCap[1]=[2e+05, 2e+05] +conf4.yMinCap[2]=[6e+05, 6e+05] +conf4.yMinCap[3]=[7e+05, 7e+05] +conf4.yMinCap[4]=[9e+05, 9e+05] +conf5.nSta=[4e+00, 4e+00] +conf5.nChi=[3e+00, 3e+00] +conf5.uChiAva[1]=[0e+00, 0e+00] +conf5.uChiAva[2]=[0e+00, 0e+00] +conf5.uChiAva[3]=[0e+00, 0e+00] +conf5.chiDesCap[1]=[1e+06, 1e+06] +conf5.chiDesCap[2]=[1.5e+06, 1.5e+06] +conf5.chiDesCap[3]=[2e+06, 2e+06] +conf5.chiMinCap[1]=[2e+05, 2e+05] +conf5.chiMinCap[2]=[3e+05, 3e+05] +conf5.chiMinCap[3]=[4e+05, 4e+05] +conf5.chiTyp[1]=[1e+00, 1e+00] +conf5.chiTyp[2]=[2e+00, 2e+00] +conf5.chiTyp[3]=[3e+00, 3e+00] +conf5.yAva[1]=[0e+00, 0e+00] +conf5.yAva[2]=[0e+00, 0e+00] +conf5.yAva[3]=[0e+00, 0e+00] +conf5.yAva[4]=[0e+00, 0e+00] +conf5.yTyp[1]=[1e+00, 1e+00] +conf5.yTyp[2]=[3e+00, 3e+00] +conf5.yTyp[3]=[3e+00, 3e+00] +conf5.yTyp[4]=[3e+00, 3e+00] +conf5.yDesCap[1]=[1e+06, 1e+06] +conf5.yDesCap[2]=[3e+06, 3e+06] +conf5.yDesCap[3]=[3.5e+06, 3.5e+06] +conf5.yDesCap[4]=[4.5e+06, 4.5e+06] +conf5.yMinCap[1]=[2e+05, 2e+05] +conf5.yMinCap[2]=[6e+05, 6e+05] +conf5.yMinCap[3]=[7e+05, 7e+05] +conf5.yMinCap[4]=[9e+05, 9e+05] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Down.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Down.txt new file mode 100644 index 00000000000..a9e77162df8 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Down.txt @@ -0,0 +1,35 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +withWSE.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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +withWSE.u=[2e+00, 2e+00] +withWSE.uOpeDow=[6.499999761581421e-01, 6.501110196113586e-01, 6.504437923431396e-01, 6.509976387023926e-01, 6.517712473869324e-01, 6.527630090713501e-01, 6.539706587791443e-01, 6.553914546966553e-01, 6.570223569869995e-01, 6.588596701622009e-01, 6.608993411064148e-01, 6.631368398666382e-01, 6.655672192573547e-01, 6.681850552558899e-01, 6.709845066070557e-01, 6.739593744277954e-01, 6.771031618118286e-01, 6.804087162017822e-01, 6.838688254356384e-01, 6.874757409095764e-01, 6.912214756011963e-01, 6.950977444648743e-01, 6.990958452224731e-01, 7.032070159912109e-01, 7.074220776557922e-01, 7.117316722869873e-01, 7.161262035369873e-01, 7.205959558486938e-01, 7.251310348510742e-01, 7.297212481498718e-01, 7.343565821647644e-01, 7.390265464782715e-01, 7.437209486961365e-01, 7.484292387962341e-01, 7.531411051750183e-01, 7.57845938205719e-01, 7.625333070755005e-01, 7.671929001808167e-01, 7.718143463134766e-01, 7.763873338699341e-01, 7.809016704559326e-01, 7.853474617004395e-01, 7.897148132324219e-01, 7.939938902854919e-01, 7.981753945350647e-01, 8.022498488426208e-01, 8.062083125114441e-01, 8.100420236587524e-01, 8.137423992156982e-01, 8.173012733459473e-01, 8.207106590270996e-01, 8.239631056785583e-01, 8.270513415336609e-01, 8.299684524536133e-01, 8.327080607414246e-01, 8.352640271186829e-01, 8.376306891441345e-01, 8.398027420043945e-01, 8.417754769325256e-01, 8.435444235801697e-01, 8.451056480407715e-01, 8.464557528495789e-01, 8.475916981697083e-01, 8.485109210014343e-01, 8.492114543914795e-01, 8.496917486190796e-01, 8.499506711959839e-01, 8.499876856803894e-01, 8.498026728630066e-01, 8.493961095809937e-01, 8.487688302993774e-01, 8.479222655296326e-01, 8.468583226203918e-01, 8.455793261528015e-01, 8.44088077545166e-01, 8.423879742622375e-01, 8.404827117919922e-01, 8.383765816688538e-01, 8.3607417345047e-01, 8.335807323455811e-01, 8.309016823768616e-01, 8.280430436134338e-01, 8.25011134147644e-01, 8.21812629699707e-01, 8.184546828269958e-01, 8.149448037147522e-01, 8.112906813621521e-01, 8.075005412101746e-01, 8.035826683044434e-01, 7.995458841323853e-01, 7.953990697860718e-01, 7.911514639854431e-01, 7.868124842643738e-01, 7.823917269706726e-01, 7.778990864753723e-01, 7.733445167541504e-01, 7.687381505966187e-01, 7.640901207923889e-01, 7.594108581542969e-01, 7.547106742858887e-01, 7.5e-01] +withWSE.uStaDow=[8.00000011920929e-01, 8.00000011920929e-01] +withWSE.dpChiWatPumSet_local=[4.48175e+05, 4.48175e+05] +withWSE.dpChiWatPum_local=[4.48175e+05, 4.48175e+05] +withWSE.TChiWatSup=[2.871499938964844e+02, 2.871499938964844e+02] +withWSE.TChiWatSupSet=[2.871499938964844e+02, 2.871499938964844e+02] +withWSE.TWsePre=[2.871499938964844e+02, 2.871499938964844e+02] +withWSE.uTowFanSpeMax=[8.999999761581421e-01, 8.999999761581421e-01] +noWSE.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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +noWSE.u=[2e+00, 2e+00] +noWSE.uOpeDow=[6.499999761581421e-01, 6.501110196113586e-01, 6.504437923431396e-01, 6.509976387023926e-01, 6.517712473869324e-01, 6.527630090713501e-01, 6.539706587791443e-01, 6.553914546966553e-01, 6.570223569869995e-01, 6.588596701622009e-01, 6.608993411064148e-01, 6.631368398666382e-01, 6.655672192573547e-01, 6.681850552558899e-01, 6.709845066070557e-01, 6.739593744277954e-01, 6.771031618118286e-01, 6.804087162017822e-01, 6.838688254356384e-01, 6.874757409095764e-01, 6.912214756011963e-01, 6.950977444648743e-01, 6.990958452224731e-01, 7.032070159912109e-01, 7.074220776557922e-01, 7.117316722869873e-01, 7.161262035369873e-01, 7.205959558486938e-01, 7.251310348510742e-01, 7.297212481498718e-01, 7.343565821647644e-01, 7.390265464782715e-01, 7.437209486961365e-01, 7.484292387962341e-01, 7.531411051750183e-01, 7.57845938205719e-01, 7.625333070755005e-01, 7.671929001808167e-01, 7.718143463134766e-01, 7.763873338699341e-01, 7.809016704559326e-01, 7.853474617004395e-01, 7.897148132324219e-01, 7.939938902854919e-01, 7.981753945350647e-01, 8.022498488426208e-01, 8.062083125114441e-01, 8.100420236587524e-01, 8.137423992156982e-01, 8.173012733459473e-01, 8.207106590270996e-01, 8.239631056785583e-01, 8.270513415336609e-01, 8.299684524536133e-01, 8.327080607414246e-01, 8.352640271186829e-01, 8.376306891441345e-01, 8.398027420043945e-01, 8.417754769325256e-01, 8.435444235801697e-01, 8.451056480407715e-01, 8.464557528495789e-01, 8.475916981697083e-01, 8.485109210014343e-01, 8.492114543914795e-01, 8.496917486190796e-01, 8.499506711959839e-01, 8.499876856803894e-01, 8.498026728630066e-01, 8.493961095809937e-01, 8.487688302993774e-01, 8.479222655296326e-01, 8.468583226203918e-01, 8.455793261528015e-01, 8.44088077545166e-01, 8.423879742622375e-01, 8.404827117919922e-01, 8.383765816688538e-01, 8.3607417345047e-01, 8.335807323455811e-01, 8.309016823768616e-01, 8.280430436134338e-01, 8.25011134147644e-01, 8.21812629699707e-01, 8.184546828269958e-01, 8.149448037147522e-01, 8.112906813621521e-01, 8.075005412101746e-01, 8.035826683044434e-01, 7.995458841323853e-01, 7.953990697860718e-01, 7.911514639854431e-01, 7.868124842643738e-01, 7.823917269706726e-01, 7.778990864753723e-01, 7.733445167541504e-01, 7.687381505966187e-01, 7.640901207923889e-01, 7.594108581542969e-01, 7.547106742858887e-01, 7.5e-01] +noWSE.uStaDow=[8.00000011920929e-01, 8.00000011920929e-01] +noWSE.dpChiWatPumSet_local=[4.48175e+05, 4.48175e+05] +noWSE.dpChiWatPum_local=[4.48175e+05, 4.48175e+05] +noWSE.TChiWatSup=[2.871499938964844e+02, 2.871499938964844e+02] +noWSE.TChiWatSupSet=[2.871499938964844e+02, 2.871499938964844e+02] +withWSE1.y=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +withWSE1.u=[1e+00, 1e+00] +withWSE1.TChiWatSupSet=[2.871499938964844e+02, 2.871499938964844e+02] +withWSE1.TWsePre=[2.856499938964844e+02, 2.860800170898438e+02, 2.865050354003906e+02, 2.86920166015625e+02, 2.87320556640625e+02, 2.877015991210938e+02, 2.88058837890625e+02, 2.8838818359375e+02, 2.88685791015625e+02, 2.889482116699219e+02, 2.891723937988281e+02, 2.893557434082031e+02, 2.894961547851562e+02, 2.895919799804688e+02, 2.896421203613281e+02, 2.896459655761719e+02, 2.89603515625e+02, 2.895152587890625e+02, 2.893821716308594e+02, 2.892058410644531e+02, 2.8898828125e+02, 2.887320556640625e+02, 2.884400939941406e+02, 2.881157836914062e+02, 2.877629089355469e+02, 2.873855285644531e+02, 2.86988037109375e+02, 2.865750427246094e+02, 2.861513366699219e+02, 2.857218017578125e+02, 2.852914428710938e+02, 2.84865234375e+02, 2.844481201171875e+02, 2.840449523925781e+02, 2.836603698730469e+02, 2.832988586425781e+02, 2.82964599609375e+02, 2.826614685058594e+02, 2.823929443359375e+02, 2.821622009277344e+02, 2.819718933105469e+02, 2.818241882324219e+02, 2.817208557128906e+02, 2.816630554199219e+02, 2.816514587402344e+02, 2.816861877441406e+02, 2.817669067382812e+02, 2.818926086425781e+02, 2.820618591308594e+02, 2.822726745605469e+02, 2.825226745605469e+02, 2.828088989257812e+02, 2.831280822753906e+02, 2.834764709472656e+02, 2.838500366210938e+02, 2.842445068359375e+02, 2.846552429199219e+02, 2.850775146484375e+02, 2.855064086914062e+02, 2.859369812011719e+02, 2.863642272949219e+02, 2.86783203125e+02, 2.871890258789062e+02, 2.875770263671875e+02, 2.879426574707031e+02, 2.882817687988281e+02, 2.8859033203125e+02, 2.888648376464844e+02, 2.891020812988281e+02, 2.892992858886719e+02, 2.894542236328125e+02, 2.895650634765625e+02, 2.896305236816406e+02, 2.896498413085938e+02, 2.89622802734375e+02, 2.895497131347656e+02, 2.894314270019531e+02, 2.892693176269531e+02, 2.890652465820312e+02, 2.888215942382812e+02, 2.885411682128906e+02, 2.882272644042969e+02, 2.878834533691406e+02, 2.875137939453125e+02, 2.871224975585938e+02, 2.867141418457031e+02, 2.8629345703125e+02, 2.858653259277344e+02, 2.854346923828125e+02, 2.850065307617188e+02, 2.845858459472656e+02, 2.84177490234375e+02, 2.837862243652344e+02, 2.834165344238281e+02, 2.8307275390625e+02, 2.827588195800781e+02, 2.824784240722656e+02, 2.822347717285156e+02, 2.820307006835938e+02, 2.818685607910156e+02, 2.817502746582031e+02] +withWSE1.uWseSta=[1e+00, 1e+00] +withWSE1.uTowFanSpeMax=[8.999999761581421e-01, 8.999999761581421e-01] +withWSE1.TChiWatSup=[2.871499938964844e+02, 2.871499938964844e+02] +withWSE1.dpChiWatPumSet_local=[4.48175e+05, 4.48175e+05] +withWSE1.dpChiWatPum_local=[4.2749e+05, 4.2749e+05] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_EfficiencyCondition.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_EfficiencyCondition.txt new file mode 100644 index 00000000000..e4623c504f8 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_EfficiencyCondition.txt @@ -0,0 +1,11 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +effCon.uOpe=[8.500000238418579e-01, 8.607503771781921e-01, 8.71376097202301e-01, 8.817541003227234e-01, 8.917640447616577e-01, 9.012899398803711e-01, 9.102213382720947e-01, 9.184547066688538e-01, 9.258946776390076e-01, 9.324549436569214e-01, 9.380595684051514e-01, 9.426434636116028e-01, 9.461536407470703e-01, 9.485492706298828e-01, 9.498026967048645e-01, 9.498993158340454e-01, 9.488380551338196e-01, 9.466311931610107e-01, 9.433043003082275e-01, 9.388960003852844e-01, 9.334573149681091e-01, 9.27051305770874e-01, 9.197522401809692e-01, 9.116446971893311e-01, 9.028226733207703e-01, 8.933883905410767e-01, 8.834511637687683e-01, 8.731262683868408e-01, 8.625333309173584e-01, 8.517950773239136e-01, 8.410360813140869e-01, 8.30380916595459e-01, 8.199532032012939e-01, 8.098737001419067e-01, 8.002593517303467e-01, 7.912214994430542e-01, 7.828648686408997e-01, 7.752864360809326e-01, 7.685739994049072e-01, 7.628052830696106e-01, 7.580472230911255e-01, 7.543549537658691e-01, 7.517712712287903e-01, 7.503260970115662e-01, 7.500362396240234e-01, 7.509050369262695e-01, 7.529223561286926e-01, 7.560648918151855e-01, 7.602961659431458e-01, 7.655671834945679e-01, 7.718168497085571e-01, 7.789726853370667e-01, 7.869517803192139e-01, 7.956616282463074e-01, 8.050013184547425e-01, 8.148624897003175e-01, 8.251309990882875e-01, 8.356877565383911e-01, 8.464103937149048e-01, 8.571746349334717e-01, 8.678556680679321e-01, 8.783298134803772e-01, 8.884755373001099e-01, 8.981753587722778e-01, 9.073168039321899e-01, 9.157938957214355e-01, 9.2350834608078e-01, 9.303708672523499e-01, 9.363017678260803e-01, 9.41232442855835e-01, 9.451056718826294e-01, 9.47876513004303e-01, 9.495129585266113e-01, 9.499959945678711e-01, 9.493199586868286e-01, 9.47492778301239e-01, 9.445356130599976e-01, 9.404826760292053e-01, 9.353810548782349e-01, 9.292897582054138e-01, 9.222794771194458e-01, 9.144314527511597e-01, 9.058365821838379e-01, 8.965945243835449e-01, 8.868124485015869e-01, 8.766036629676819e-01, 8.660865426063538e-01, 8.553829789161682e-01, 8.446170091629028e-01, 8.339134454727173e-01, 8.233963251113892e-01, 8.131875395774841e-01, 8.034054636955261e-01, 7.941634058952332e-01, 7.855685949325562e-01, 7.777205109596252e-01, 7.707102298736572e-01, 7.646189332008362e-01, 7.595173120498657e-01, 7.554643750190735e-01, 7.52507209777832e-01] +effCon.uStaUp=[8.00000011920929e-01, 8.00000011920929e-01] +effCon.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, 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, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_FailsafeCondition.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_FailsafeCondition.txt new file mode 100644 index 00000000000..985a26cff5a --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_FailsafeCondition.txt @@ -0,0 +1,26 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +faiSafCon0.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +faiSafCon0.dpChiWatPumSet_local=[4.48175e+05, 4.48175e+05] +faiSafCon0.dpChiWatPum_local=[4.419695e+05, 4.419695e+05] +faiSafCon0.TChiWatSup=[2.911499938964844e+02, 2.911499938964844e+02] +faiSafCon0.TChiWatSupSet=[2.871499938964844e+02, 2.871499938964844e+02] +faiSafCon0.hysdpSup.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +faiSafCon0.hysTSup.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +faiSafCon1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +faiSafCon1.dpChiWatPumSet_local=[4.48175e+05, 4.48175e+05] +faiSafCon1.dpChiWatPum_local=[4.392605e+05, 4.3993759375e+05, 4.4048865625e+05, 4.4090121875e+05, 4.4116584375e+05, 4.4127659375e+05, 4.412309375e+05, 4.41029875e+05, 4.40678e+05, 4.401833125e+05, 4.3955703125e+05, 4.3881334375e+05, 4.37969125e+05, 4.3704359375e+05, 4.3605771875e+05, 4.35033875e+05, 4.339953125e+05, 4.329655625e+05, 4.319680625e+05, 4.3102540625e+05, 4.30159e+05, 4.2938853125e+05, 4.287314375e+05, 4.2820265625e+05, 4.2781421875e+05, 4.27574875e+05, 4.27490125e+05, 4.27561875e+05, 4.2778846875e+05, 4.2816478125e+05, 4.2868228125e+05, 4.2932921875e+05, 4.30090875e+05, 4.3095e+05, 4.31887125e+05, 4.3288090625e+05, 4.3390884375e+05, 4.349475625e+05, 4.3597353125e+05, 4.369634375e+05, 4.3789484375e+05, 4.387465625e+05, 4.394993125e+05, 4.4013596875e+05, 4.4064209375e+05, 4.4100621875e+05, 4.412200625e+05, 4.4127878125e+05, 4.4118103125e+05, 4.4092903125e+05, 4.405285e+05, 4.3998853125e+05, 4.39321375e+05, 4.385421875e+05, 4.3766865625e+05, 4.3672059375e+05, 4.3571953125e+05, 4.3468815625e+05, 4.3364990625e+05, 4.3262834375e+05, 4.3164665625e+05, 4.30727125e+05, 4.2989059375e+05, 4.2915609375e+05, 4.2854025e+05, 4.2805709375e+05, 4.2771753125e+05, 4.2752928125e+05, 4.2749665625e+05, 4.27620375e+05, 4.27897625e+05, 4.28322125e+05, 4.2888421875e+05, 4.2957115625e+05, 4.3036734375e+05, 4.3125475e+05, 4.3221315625e+05, 4.3322090625e+05, 4.3425503125e+05, 4.35292125e+05, 4.3630865625e+05, 4.372815e+05, 4.3818859375e+05, 4.39009375e+05, 4.397251875e+05, 4.403198125e+05, 4.4077971875e+05, 4.410945e+05, 4.41257e+05, 4.4126353125e+05, 4.411139375e+05, 4.40811625e+05, 4.403634375e+05, 4.3977959375e+05, 4.3907328125e+05, 4.382605625e+05, 4.37359875e+05, 4.363916875e+05, 4.3537796875e+05, 4.343416875e+05, 4.33306375e+05] +faiSafCon1.TChiWatSup=[2.886499938964844e+02, 2.890230407714844e+02, 2.893726196289062e+02, 2.896768188476562e+02, 2.8991650390625e+02, 2.900765991210938e+02, 2.901470336914062e+02, 2.901234436035156e+02, 2.900072326660156e+02, 2.898057556152344e+02, 2.895316772460938e+02, 2.892021789550781e+02, 2.888380126953125e+02, 2.884620056152344e+02, 2.880978088378906e+02, 2.87768310546875e+02, 2.874942321777344e+02, 2.872927551269531e+02, 2.871765747070312e+02, 2.871529541015625e+02, 2.872234191894531e+02, 2.873835144042969e+02, 2.876231689453125e+02, 2.879273681640625e+02, 2.882769775390625e+02, 2.886499938964844e+02, 2.890230407714844e+02, 2.893726196289062e+02, 2.896768188476562e+02, 2.8991650390625e+02, 2.900765991210938e+02, 2.901470336914062e+02, 2.901234436035156e+02, 2.900072326660156e+02, 2.898057556152344e+02, 2.895316772460938e+02, 2.892021789550781e+02, 2.888380126953125e+02, 2.884620056152344e+02, 2.880978088378906e+02, 2.87768310546875e+02, 2.874942321777344e+02, 2.872927551269531e+02, 2.871765747070312e+02, 2.871529541015625e+02, 2.872234191894531e+02, 2.873835144042969e+02, 2.876231689453125e+02, 2.879273681640625e+02, 2.882769775390625e+02, 2.886499938964844e+02, 2.890230407714844e+02, 2.893726196289062e+02, 2.896768188476562e+02, 2.8991650390625e+02, 2.900765991210938e+02, 2.901470336914062e+02, 2.901234436035156e+02, 2.900072326660156e+02, 2.898057556152344e+02, 2.895316772460938e+02, 2.892021789550781e+02, 2.888380126953125e+02, 2.884620056152344e+02, 2.880978088378906e+02, 2.87768310546875e+02, 2.874942321777344e+02, 2.872927551269531e+02, 2.871765747070312e+02, 2.871529541015625e+02, 2.872234191894531e+02, 2.873835144042969e+02, 2.876231689453125e+02, 2.879273681640625e+02, 2.882769775390625e+02, 2.886499938964844e+02, 2.890230407714844e+02, 2.893726196289062e+02, 2.896768188476562e+02, 2.8991650390625e+02, 2.900765991210938e+02, 2.901470336914062e+02, 2.901234436035156e+02, 2.900072326660156e+02, 2.898057556152344e+02, 2.895316772460938e+02, 2.892021789550781e+02, 2.888380126953125e+02, 2.884620056152344e+02, 2.880978088378906e+02, 2.87768310546875e+02, 2.874942321777344e+02, 2.872927551269531e+02, 2.871765747070312e+02, 2.871529541015625e+02, 2.872234191894531e+02, 2.873835144042969e+02, 2.876231689453125e+02, 2.879273681640625e+02, 2.882769775390625e+02, 2.886499938964844e+02] +faiSafCon1.TChiWatSupSet=[2.871499938964844e+02, 2.871499938964844e+02] +faiSafCon1.hysdpSup.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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00] +faiSafCon1.hysTSup.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +faiSafCon2.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +faiSafCon2.TChiWatSup=[2.886499938964844e+02, 2.888112487792969e+02, 2.889706420898438e+02, 2.891263122558594e+02, 2.892764587402344e+02, 2.894193420410156e+02, 2.895533142089844e+02, 2.896768188476562e+02, 2.897884216308594e+02, 2.898868103027344e+02, 2.899708862304688e+02, 2.900396423339844e+02, 2.900923156738281e+02, 2.901282348632812e+02, 2.901470336914062e+02, 2.901484985351562e+02, 2.90132568359375e+02, 2.900994567871094e+02, 2.90049560546875e+02, 2.899834289550781e+02, 2.8990185546875e+02, 2.898057556152344e+02, 2.896962890625e+02, 2.895746765136719e+02, 2.894423522949219e+02, 2.893008117675781e+02, 2.891517639160156e+02, 2.889968872070312e+02, 2.888380126953125e+02, 2.886769409179688e+02, 2.885155334472656e+02, 2.88355712890625e+02, 2.881993103027344e+02, 2.88048095703125e+02, 2.879039001464844e+02, 2.87768310546875e+02, 2.876429748535156e+02, 2.87529296875e+02, 2.874286193847656e+02, 2.873420715332031e+02, 2.872707214355469e+02, 2.8721533203125e+02, 2.871765747070312e+02, 2.871548767089844e+02, 2.871505432128906e+02, 2.8716357421875e+02, 2.8719384765625e+02, 2.87240966796875e+02, 2.87304443359375e+02, 2.873835144042969e+02, 2.874772644042969e+02, 2.875845947265625e+02, 2.877042846679688e+02, 2.878349304199219e+02, 2.879750061035156e+02, 2.881229248046875e+02, 2.882769775390625e+02, 2.88435302734375e+02, 2.885961608886719e+02, 2.887576293945312e+02, 2.889178466796875e+02, 2.89074951171875e+02, 2.892271423339844e+02, 2.893726196289062e+02, 2.89509765625e+02, 2.896369018554688e+02, 2.897526245117188e+02, 2.898555603027344e+02, 2.899445190429688e+02, 2.900184936523438e+02, 2.900765991210938e+02, 2.901181335449219e+02, 2.901427001953125e+02, 2.901499328613281e+02, 2.901398010253906e+02, 2.901123962402344e+02, 2.900680236816406e+02, 2.900072326660156e+02, 2.899307250976562e+02, 2.8983935546875e+02, 2.897341918945312e+02, 2.896164855957031e+02, 2.89487548828125e+02, 2.893489074707031e+02, 2.892021789550781e+02, 2.890490417480469e+02, 2.888912963867188e+02, 2.887307434082031e+02, 2.885692443847656e+02, 2.8840869140625e+02, 2.882509460449219e+02, 2.880978088378906e+02, 2.879510803222656e+02, 2.878124389648438e+02, 2.876835327148438e+02, 2.875657958984375e+02, 2.874606628417969e+02, 2.873692932128906e+02, 2.872927551269531e+02, 2.872319641113281e+02, 2.871876220703125e+02] +faiSafCon2.TChiWatSupSet=[2.871499938964844e+02, 2.871499938964844e+02] +faiSafCon2.hysTSup.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Initial_WSE.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Initial_WSE.txt new file mode 100644 index 00000000000..984753464dd --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Initial_WSE.txt @@ -0,0 +1,19 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 8.64e+04] +iniStaCol.yIni=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +iniStaCol.uUp=[1e+00, 1e+00] +iniStaCol.TChiWatSupSet=[2.851499938964844e+02, 2.851499938964844e+02] +iniStaCol.TOutWet=[2.701499938964844e+02, 2.70165771484375e+02, 2.702130737304688e+02, 2.702916870117188e+02, 2.704013366699219e+02, 2.705415344238281e+02, 2.707117919921875e+02, 2.70911376953125e+02, 2.711395568847656e+02, 2.713953857421875e+02, 2.716778564453125e+02, 2.719859008789062e+02, 2.723182373046875e+02, 2.726736145019531e+02, 2.730505981445312e+02, 2.734477233886719e+02, 2.738633728027344e+02, 2.742959594726562e+02, 2.747437744140625e+02, 2.752050170898438e+02, 2.756778564453125e+02, 2.761604919433594e+02, 2.766509399414062e+02, 2.771473388671875e+02, 2.776476745605469e+02, 2.781499938964844e+02, 2.786523132324219e+02, 2.791526794433594e+02, 2.796490478515625e+02, 2.801395263671875e+02, 2.806221313476562e+02, 2.810950012207031e+02, 2.815562438964844e+02, 2.820040283203125e+02, 2.824366149902344e+02, 2.82852294921875e+02, 2.832493896484375e+02, 2.836263732910156e+02, 2.839817504882812e+02, 2.843141174316406e+02, 2.846221313476562e+02, 2.849046325683594e+02, 2.851604614257812e+02, 2.853886108398438e+02, 2.855882263183594e+02, 2.857584533691406e+02, 2.858986511230469e+02, 2.8600830078125e+02, 2.860869140625e+02, 2.861342163085938e+02, 2.861499938964844e+02, 2.861342163085938e+02, 2.860869140625e+02, 2.8600830078125e+02, 2.858986511230469e+02, 2.857584533691406e+02, 2.855882263183594e+02, 2.853886108398438e+02, 2.851604614257812e+02, 2.849046325683594e+02, 2.846221313476562e+02, 2.843141174316406e+02, 2.839817504882812e+02, 2.836263732910156e+02, 2.832493896484375e+02, 2.82852294921875e+02, 2.824366149902344e+02, 2.820040283203125e+02, 2.815562438964844e+02, 2.810950012207031e+02, 2.806221313476562e+02, 2.801395263671875e+02, 2.796490478515625e+02, 2.791526794433594e+02, 2.786523132324219e+02, 2.781499938964844e+02, 2.776476745605469e+02, 2.771473388671875e+02, 2.766509399414062e+02, 2.761604919433594e+02, 2.756778564453125e+02, 2.752050170898438e+02, 2.747437744140625e+02, 2.742959594726562e+02, 2.738633728027344e+02, 2.734477233886719e+02, 2.730505981445312e+02, 2.726736145019531e+02, 2.723182373046875e+02, 2.719859008789062e+02, 2.716778564453125e+02, 2.713953857421875e+02, 2.711395568847656e+02, 2.70911376953125e+02, 2.707117919921875e+02, 2.705415344238281e+02, 2.704013366699219e+02, 2.702916870117188e+02, 2.702130737304688e+02, 2.70165771484375e+02, 2.701499938964844e+02] +iniStaCol.uTunPar=[5.999999865889549e-02, 5.999999865889549e-02] +iniStaCol.uPla=[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, 1e+00, 1e+00, 1e+00, 1e+00] +iniStaHot.yIni=[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, 1e+00, 1e+00, 1e+00, 1e+00] +iniStaHot.uUp=[1e+00, 1e+00] +iniStaHot.TChiWatSupSet=[2.851499938964844e+02, 2.851499938964844e+02] +iniStaHot.TOutWet=[2.901499938964844e+02, 2.90165771484375e+02, 2.902130737304688e+02, 2.902916870117188e+02, 2.904013366699219e+02, 2.905415344238281e+02, 2.907117919921875e+02, 2.90911376953125e+02, 2.911395568847656e+02, 2.913953857421875e+02, 2.916778564453125e+02, 2.919859008789062e+02, 2.923182373046875e+02, 2.926736145019531e+02, 2.930505981445312e+02, 2.934477233886719e+02, 2.938633728027344e+02, 2.942959594726562e+02, 2.947437744140625e+02, 2.952050170898438e+02, 2.956778564453125e+02, 2.961604919433594e+02, 2.966509399414062e+02, 2.971473388671875e+02, 2.976476745605469e+02, 2.981499938964844e+02, 2.986523132324219e+02, 2.991526794433594e+02, 2.996490478515625e+02, 3.001395263671875e+02, 3.006221313476562e+02, 3.010950012207031e+02, 3.015562438964844e+02, 3.020040283203125e+02, 3.024366149902344e+02, 3.02852294921875e+02, 3.032493896484375e+02, 3.036263732910156e+02, 3.039817504882812e+02, 3.043141174316406e+02, 3.046221313476562e+02, 3.049046325683594e+02, 3.051604614257812e+02, 3.053886108398438e+02, 3.055882263183594e+02, 3.057584533691406e+02, 3.058986511230469e+02, 3.0600830078125e+02, 3.060869140625e+02, 3.061342163085938e+02, 3.061499938964844e+02, 3.061342163085938e+02, 3.060869140625e+02, 3.0600830078125e+02, 3.058986511230469e+02, 3.057584533691406e+02, 3.055882263183594e+02, 3.053886108398438e+02, 3.051604614257812e+02, 3.049046325683594e+02, 3.046221313476562e+02, 3.043141174316406e+02, 3.039817504882812e+02, 3.036263732910156e+02, 3.032493896484375e+02, 3.02852294921875e+02, 3.024366149902344e+02, 3.020040283203125e+02, 3.015562438964844e+02, 3.010950012207031e+02, 3.006221313476562e+02, 3.001395263671875e+02, 2.996490478515625e+02, 2.991526794433594e+02, 2.986523132324219e+02, 2.981499938964844e+02, 2.976476745605469e+02, 2.971473388671875e+02, 2.966509399414062e+02, 2.961604919433594e+02, 2.956778564453125e+02, 2.952050170898438e+02, 2.947437744140625e+02, 2.942959594726562e+02, 2.938633728027344e+02, 2.934477233886719e+02, 2.930505981445312e+02, 2.926736145019531e+02, 2.923182373046875e+02, 2.919859008789062e+02, 2.916778564453125e+02, 2.913953857421875e+02, 2.911395568847656e+02, 2.90911376953125e+02, 2.907117919921875e+02, 2.905415344238281e+02, 2.904013366699219e+02, 2.902916870117188e+02, 2.902130737304688e+02, 2.90165771484375e+02, 2.901499938964844e+02] +iniStaHot.uTunPar=[5.999999865889549e-02, 5.999999865889549e-02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Initial_noWSE.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Initial_noWSE.txt new file mode 100644 index 00000000000..235521ec006 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Initial_noWSE.txt @@ -0,0 +1,16 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+02] +iniSta.yIni=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+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, 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] +iniSta.uUp=[2e+00, 2e+00] +iniSta.have_WSE=[0e+00, 0e+00] +iniSta.uPla=[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] +iniSta1.yIni=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +iniSta1.uUp=[2e+00, 2e+00] +iniSta1.have_WSE=[0e+00, 0e+00] +iniSta1.uPla=[1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_PartLoadRatios_u_uTyp.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_PartLoadRatios_u_uTyp.txt new file mode 100644 index 00000000000..a177ce7b64c --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_PartLoadRatios_u_uTyp.txt @@ -0,0 +1,181 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "4", + "numerical Jacobians": "0" +} +time=[0e+00, 1.2e+03] +PLRs0.yOpe=[8.999999761581421e-01, 9.251254200935364e-01, 9.502066969871521e-01, 9.751999378204346e-01, 1.000061273574829e+00, 1.024747014045715e+00, 1.049213886260986e+00, 1.073419094085693e+00, 1.097319960594177e+00, 1.120874762535095e+00, 1.144042015075684e+00, 1.166781067848206e+00, 1.189052224159241e+00, 1.210816264152527e+00, 1.232034921646118e+00, 1.252671122550964e+00, 1.272688627243042e+00, 1.292052388191223e+00, 1.310728311538696e+00, 1.328683614730835e+00, 1.345886945724487e+00, 1.362307906150818e+00, 1.377918004989624e+00, 1.39268946647644e+00, 1.406596779823303e+00, 1.419615268707275e+00, 1.431722164154053e+00, 1.442896246910095e+00, 1.453117847442627e+00, 1.462369203567505e+00, 1.470633864402771e+00, 1.477897524833679e+00, 1.484147310256958e+00, 1.489372372627258e+00, 1.493563413619995e+00, 1.496713161468506e+00, 1.498816013336182e+00, 1.499868392944336e+00, 1.499868392944336e+00, 1.498816013336182e+00, 1.496713161468506e+00, 1.493563413619995e+00, 1.489372372627258e+00, 1.484147310256958e+00, 1.477897524833679e+00, 1.470633864402771e+00, 1.462369203567505e+00, 1.453117847442627e+00, 1.442896246910095e+00, 1.431722164154053e+00, 1.419615268707275e+00, 1.406596779823303e+00, 1.39268946647644e+00, 1.377918004989624e+00, 1.362307906150818e+00, 1.345886945724487e+00, 1.328683614730835e+00, 1.310728311538697e+00, 1.292052388191223e+00, 1.272688627243042e+00, 1.252671122550964e+00, 1.232034921646118e+00, 1.210816264152527e+00, 1.189052224159241e+00, 1.166781067848206e+00, 1.144042015075684e+00, 1.120874762535095e+00, 1.097319960594177e+00, 1.073419094085693e+00, 1.049213886260987e+00, 1.024747014045715e+00, 1.000061273574829e+00, 9.751999378204346e-01, 9.502066969871521e-01, 9.251254200935364e-01, 8.999999761581421e-01, 8.748745918273926e-01, 8.497933149337769e-01, 8.248000741004944e-01, 7.999387383460999e-01, 7.752529978752136e-01, 7.507860660552976e-01, 7.265809178352358e-01, 7.026799917221069e-01, 6.791252493858337e-01, 6.559579968452454e-01, 6.332188844680786e-01, 6.109477877616882e-01, 5.891838073730469e-01, 5.679650902748108e-01, 5.473288297653198e-01, 5.273113250732422e-01, 5.079476237297058e-01, 4.892717301845551e-01, 4.71316397190094e-01, 4.54113095998764e-01, 4.376920461654663e-01, 4.220820367336273e-01, 4.073104858398438e-01, 3.934032320976257e-01, 3.803847432136536e-01] +PLRs0.yOpeUp=[6.000000238418579e-01, 6.167502403259277e-01, 6.334711313247681e-01, 6.501333117485046e-01, 6.667075157165527e-01, 6.83164656162262e-01, 6.994759440422058e-01, 7.156127095222473e-01, 7.315466403961182e-01, 7.472498416900635e-01, 7.626946568489075e-01, 7.778540849685669e-01, 7.927014827728271e-01, 8.072108030319214e-01, 8.213565945625305e-01, 8.351141214370728e-01, 8.484591245651245e-01, 8.613682389259338e-01, 8.738188147544861e-01, 8.857890963554382e-01, 8.97257924079895e-01, 9.082052707672119e-01, 9.186119437217712e-01, 9.284597039222717e-01, 9.37731146812439e-01, 9.464101791381836e-01, 9.544814229011536e-01, 9.619308114051819e-01, 9.68745231628418e-01, 9.749128222465515e-01, 9.804226160049438e-01, 9.852650165557861e-01, 9.894315600395203e-01, 9.929149150848389e-01, 9.957089424133301e-01, 9.978087544441223e-01, 9.992107152938843e-01, 9.999122619628906e-01, 9.999122619628906e-01, 9.992107152938843e-01, 9.978087544441223e-01, 9.957089424133301e-01, 9.929149150848389e-01, 9.894315600395203e-01, 9.852650165557861e-01, 9.804226160049438e-01, 9.749128222465515e-01, 9.68745231628418e-01, 9.619308114051819e-01, 9.544814229011536e-01, 9.464101791381836e-01, 9.37731146812439e-01, 9.284597039222717e-01, 9.186119437217712e-01, 9.082052707672119e-01, 8.97257924079895e-01, 8.857890963554381e-01, 8.738188147544862e-01, 8.613682389259338e-01, 8.484591245651245e-01, 8.351141214370728e-01, 8.213565945625305e-01, 8.072108030319214e-01, 7.927014827728271e-01, 7.778540849685669e-01, 7.626946568489075e-01, 7.472498416900635e-01, 7.315466403961182e-01, 7.156127095222472e-01, 6.994759440422059e-01, 6.83164656162262e-01, 6.667075157165527e-01, 6.501333117485046e-01, 6.334711313247681e-01, 6.167502403259277e-01, 6.000000238418579e-01, 5.832497477531433e-01, 5.66528856754303e-01, 5.498667359352112e-01, 5.332924723625183e-01, 5.168353319168091e-01, 5.005240440368651e-01, 4.843872785568239e-01, 4.684533476829529e-01, 4.5275017619133e-01, 4.373053312301636e-01, 4.221459329128265e-01, 4.072985351085663e-01, 3.927891850471497e-01, 3.786433935165405e-01, 3.648858964443207e-01, 3.515408933162689e-01, 3.386317491531372e-01, 3.261811435222626e-01, 3.142109215259552e-01, 3.02742063999176e-01, 2.917947173118591e-01, 2.813880443572998e-01, 2.715403139591217e-01, 2.622688412666321e-01, 2.535898387432098e-01] +PLRs0.yOpeDow=[4.5e+00, 4.625627040863037e+00, 4.751033306121826e+00, 4.875999927520752e+00, 5.000306129455566e+00, 5.123734951019287e+00, 5.246069431304932e+00, 5.367095470428467e+00, 5.486599922180176e+00, 5.604373455047607e+00, 5.720210075378418e+00, 5.833905696868896e+00, 5.945261001586914e+00, 6.054080963134766e+00, 6.16017484664917e+00, 6.263355731964111e+00, 6.363443374633789e+00, 6.460261821746826e+00, 6.553641319274902e+00, 6.643417835235596e+00, 6.729434490203857e+00, 6.811539649963379e+00, 6.889589786529541e+00, 6.963447570800781e+00, 7.032983779907227e+00, 7.098076343536377e+00, 7.158610820770264e+00, 7.214481353759766e+00, 7.265589237213135e+00, 7.311845779418945e+00, 7.353169441223145e+00, 7.389487743377686e+00, 7.420736789703369e+00, 7.446861743927002e+00, 7.467816829681396e+00, 7.483565807342529e+00, 7.494080066680908e+00, 7.49934196472168e+00, 7.49934196472168e+00, 7.494080066680908e+00, 7.483565807342529e+00, 7.467816829681396e+00, 7.446861743927002e+00, 7.420736789703369e+00, 7.389487743377686e+00, 7.353169441223145e+00, 7.311845779418945e+00, 7.265589237213135e+00, 7.214481353759766e+00, 7.158610820770264e+00, 7.098076343536377e+00, 7.032983779907227e+00, 6.963447570800781e+00, 6.889589786529541e+00, 6.811539649963379e+00, 6.729434490203857e+00, 6.643417835235595e+00, 6.553641319274903e+00, 6.460261821746826e+00, 6.363443374633789e+00, 6.263355731964111e+00, 6.16017484664917e+00, 6.054080963134766e+00, 5.945261001586914e+00, 5.833905696868896e+00, 5.720210075378418e+00, 5.604373455047607e+00, 5.486599922180176e+00, 5.367095470428466e+00, 5.246069431304933e+00, 5.123734951019287e+00, 5.000306129455566e+00, 4.875999927520752e+00, 4.751033306121826e+00, 4.625627040863037e+00, 4.5e+00, 4.374372959136963e+00, 4.248966693878174e+00, 4.124000072479248e+00, 3.999693870544434e+00, 3.876264810562134e+00, 3.753930330276488e+00, 3.632904529571535e+00, 3.513400077819824e+00, 3.395626306533813e+00, 3.279790163040161e+00, 3.166094541549683e+00, 3.054738998413086e+00, 2.945919036865234e+00, 2.839825391769409e+00, 2.736644268035889e+00, 2.636556625366211e+00, 2.539738178253174e+00, 2.446358680725098e+00, 2.356581926345825e+00, 2.270565509796143e+00, 2.188460350036621e+00, 2.110410213470459e+00, 2.036552429199219e+00, 1.967016220092773e+00, 1.901923775672913e+00] +PLRs0.yOpeMin=[2.000000029802322e-01, 2.000000029802322e-01] +PLRs0.yOpeUpMin=[2.000000029802322e-01, 2.000000029802322e-01] +PLRs0.yStaUp=[8.999999761581421e-01, 8.999999761581421e-01] +PLRs0.yStaDow=[1e+00, 1e+00] +PLRs0.uCapReq=[9e+05, 9.25125375e+05, 9.502066875e+05, 9.751999375e+05, 1.00006125e+06, 1.024747e+06, 1.049213875e+06, 1.073419125e+06, 1.09732e+06, 1.12087475e+06, 1.144042e+06, 1.166781125e+06, 1.18905225e+06, 1.21081625e+06, 1.232034875e+06, 1.252671125e+06, 1.272688625e+06, 1.292052375e+06, 1.31072825e+06, 1.328683625e+06, 1.345886875e+06, 1.362308e+06, 1.377918e+06, 1.3926895e+06, 1.40659675e+06, 1.41961525e+06, 1.431722125e+06, 1.44289625e+06, 1.453117875e+06, 1.46236925e+06, 1.470633875e+06, 1.4778975e+06, 1.484147375e+06, 1.489372375e+06, 1.493563375e+06, 1.496713125e+06, 1.498816e+06, 1.499868375e+06, 1.499868375e+06, 1.498816e+06, 1.496713125e+06, 1.493563375e+06, 1.489372375e+06, 1.484147375e+06, 1.4778975e+06, 1.470633875e+06, 1.46236925e+06, 1.453117875e+06, 1.44289625e+06, 1.431722125e+06, 1.41961525e+06, 1.40659675e+06, 1.3926895e+06, 1.377918e+06, 1.362308e+06, 1.345886875e+06, 1.328683625e+06, 1.31072825e+06, 1.292052375e+06, 1.272688625e+06, 1.252671125e+06, 1.232034875e+06, 1.21081625e+06, 1.18905225e+06, 1.166781125e+06, 1.144042e+06, 1.12087475e+06, 1.09732e+06, 1.073419125e+06, 1.049213875e+06, 1.024747e+06, 1.00006125e+06, 9.751999375e+05, 9.502066875e+05, 9.25125375e+05, 9e+05, 8.74874625e+05, 8.497933125e+05, 8.248000625e+05, 7.9993875e+05, 7.75253e+05, 7.507860624999998e+05, 7.265809375000002e+05, 7.0268e+05, 6.7912525e+05, 6.55958e+05, 6.33218875e+05, 6.109478125e+05, 5.891838125e+05, 5.679650625e+05, 5.47328875e+05, 5.273113125e+05, 5.07947625e+05, 4.8927175e+05, 4.7131640625e+05, 4.5411309375e+05, 4.376920625e+05, 4.220820625e+05, 4.0731046875e+05, 3.9340325e+05, 3.8038475e+05] +PLRs0.uCapDes=[1e+06, 1e+06] +PLRs0.uUpCapDes=[1.5e+06, 1.5e+06] +PLRs0.uDowCapDes=[2e+05, 2e+05] +PLRs0.uCapMin=[2e+05, 2e+05] +PLRs0.uUpCapMin=[3e+05, 3e+05] +PLRs0.nSta=[3e+00, 3e+00] +PLRs0.u=[1e+00, 1e+00] +PLRs0.uUp=[2e+00, 2e+00] +PLRs0.uDown=[0e+00, 0e+00] +PLRs0.uTyp[1]=[1e+00, 1e+00] +PLRs0.uTyp[2]=[3e+00, 3e+00] +PLRs0.uTyp[3]=[3e+00, 3e+00] +PLRs1.yOpe=[9.333333373069763e-01, 9.500836133956909e-01, 9.668044447898865e-01, 9.83466625213623e-01, 1.000040888786316e+00, 1.01649796962738e+00, 1.032809257507324e+00, 1.048946022987366e+00, 1.064880013465881e+00, 1.080583095550537e+00, 1.096027970314026e+00, 1.11118745803833e+00, 1.12603485584259e+00, 1.140544176101685e+00, 1.154689908027649e+00, 1.168447375297546e+00, 1.181792497634888e+00, 1.194701552391052e+00, 1.207152128219604e+00, 1.219122409820557e+00, 1.230591297149658e+00, 1.241538643836975e+00, 1.25194525718689e+00, 1.26179301738739e+00, 1.271064519882202e+00, 1.279743552207947e+00, 1.287814736366272e+00, 1.2952641248703e+00, 1.302078604698181e+00, 1.30824613571167e+00, 1.313755989074707e+00, 1.318598389625549e+00, 1.322764873504639e+00, 1.326248288154602e+00, 1.329042315483093e+00, 1.331142067909241e+00, 1.332543969154358e+00, 1.333245635032654e+00, 1.333245635032654e+00, 1.332543969154358e+00, 1.331142067909241e+00, 1.329042315483093e+00, 1.326248288154602e+00, 1.322764873504639e+00, 1.318598389625549e+00, 1.313755989074707e+00, 1.30824613571167e+00, 1.302078604698181e+00, 1.2952641248703e+00, 1.287814736366272e+00, 1.279743552207947e+00, 1.271064519882202e+00, 1.26179301738739e+00, 1.25194525718689e+00, 1.241538643836975e+00, 1.230591297149658e+00, 1.219122409820556e+00, 1.207152128219605e+00, 1.194701552391052e+00, 1.181792497634888e+00, 1.168447375297546e+00, 1.154689908027649e+00, 1.140544176101685e+00, 1.12603485584259e+00, 1.11118745803833e+00, 1.096027970314026e+00, 1.080583095550537e+00, 1.064880013465881e+00, 1.048946022987366e+00, 1.032809257507324e+00, 1.01649796962738e+00, 1.000040888786316e+00, 9.83466625213623e-01, 9.668044447898865e-01, 9.500836133956909e-01, 9.333333373069763e-01, 9.165830612182617e-01, 8.998621702194214e-01, 8.832000494003296e-01, 8.666258454322815e-01, 8.501686453819275e-01, 8.338573575019835e-01, 8.177205920219422e-01, 8.017866611480713e-01, 7.860835194587708e-01, 7.706387042999268e-01, 7.554792761802673e-01, 7.406318783760071e-01, 7.261225581169128e-01, 7.119767069816589e-01, 6.982192397117615e-01, 6.848742365837097e-01, 6.719650626182556e-01, 6.595144867897034e-01, 6.47544264793396e-01, 6.360753774642944e-01, 6.251280307769775e-01, 6.147213578224182e-01, 6.048736572265625e-01, 5.956021547317505e-01, 5.869231820106506e-01] +PLRs1.yOpeUp=[5.600000023841858e-01, 5.700501799583435e-01, 5.800826549530029e-01, 5.900799632072449e-01, 6.000245213508606e-01, 6.098988056182861e-01, 6.196855902671814e-01, 6.293676495552063e-01, 6.389279961585999e-01, 6.483498811721802e-01, 6.576167941093445e-01, 6.667124629020691e-01, 6.756208539009094e-01, 6.843264698982239e-01, 6.928139925003052e-01, 7.010684609413147e-01, 7.090754508972168e-01, 7.168209552764893e-01, 7.242913246154785e-01, 7.31473445892334e-01, 7.383547425270081e-01, 7.449231743812561e-01, 7.511671781539917e-01, 7.570757865905762e-01, 7.626386880874634e-01, 7.678461074829102e-01, 7.726888656616211e-01, 7.771584987640381e-01, 7.812471389770508e-01, 7.849476933479309e-01, 7.882535457611084e-01, 7.911590337753296e-01, 7.936589121818542e-01, 7.957489490509033e-01, 7.97425389289856e-01, 7.986852526664734e-01, 7.995263934135437e-01, 7.999473810195923e-01, 7.999473810195923e-01, 7.995263934135437e-01, 7.986852526664734e-01, 7.97425389289856e-01, 7.957489490509033e-01, 7.936589121818542e-01, 7.911590337753296e-01, 7.882535457611084e-01, 7.849476933479309e-01, 7.812471389770508e-01, 7.771584987640381e-01, 7.726888656616211e-01, 7.678461074829102e-01, 7.626386880874634e-01, 7.570757865905762e-01, 7.511671781539917e-01, 7.449231743812561e-01, 7.383547425270081e-01, 7.314734458923339e-01, 7.242913246154786e-01, 7.168209552764893e-01, 7.090754508972168e-01, 7.010684609413147e-01, 6.928139925003052e-01, 6.843264698982239e-01, 6.756208539009094e-01, 6.667124629020691e-01, 6.576167941093445e-01, 6.483498811721802e-01, 6.389279961585999e-01, 6.293676495552062e-01, 6.196855902671815e-01, 6.098988056182861e-01, 6.000245213508606e-01, 5.900799632072449e-01, 5.800826549530029e-01, 5.700501799583435e-01, 5.600000023841858e-01, 5.499498248100281e-01, 5.399172902107239e-01, 5.299200415611267e-01, 5.19975483417511e-01, 5.101011991500854e-01, 5.003144145011901e-01, 4.906323552131654e-01, 4.810720086097717e-01, 4.71650093793869e-01, 4.623832106590271e-01, 4.532875716686249e-01, 4.443791210651398e-01, 4.356735050678253e-01, 4.271860420703888e-01, 4.189315438270569e-01, 4.109245240688324e-01, 4.031790494918823e-01, 3.957086801528931e-01, 3.885265588760376e-01, 3.816452324390411e-01, 3.750768303871155e-01, 3.688328266143799e-01, 3.62924188375473e-01, 3.573612868785858e-01, 3.521538972854614e-01] +PLRs1.yOpeDow=[1.399999976158142e+00, 1.425125360488892e+00, 1.450206756591797e+00, 1.475199937820435e+00, 1.500061273574829e+00, 1.524747014045715e+00, 1.549213886260986e+00, 1.573419094085693e+00, 1.597319960594177e+00, 1.620874762535095e+00, 1.644042015075684e+00, 1.666781067848206e+00, 1.689052224159241e+00, 1.710816264152527e+00, 1.732034921646118e+00, 1.752671122550964e+00, 1.772688627243042e+00, 1.792052388191223e+00, 1.810728311538696e+00, 1.828683614730835e+00, 1.845886945724487e+00, 1.862307906150818e+00, 1.877918004989624e+00, 1.89268946647644e+00, 1.906596779823303e+00, 1.919615268707275e+00, 1.931722164154053e+00, 1.942896246910095e+00, 1.953117847442627e+00, 1.962369203567505e+00, 1.970633864402771e+00, 1.977897524833679e+00, 1.984147310256958e+00, 1.989372372627258e+00, 1.993563413619995e+00, 1.996713161468506e+00, 1.998816013336182e+00, 1.999868392944336e+00, 1.999868392944336e+00, 1.998816013336182e+00, 1.996713161468506e+00, 1.993563413619995e+00, 1.989372372627258e+00, 1.984147310256958e+00, 1.977897524833679e+00, 1.970633864402771e+00, 1.962369203567505e+00, 1.953117847442627e+00, 1.942896246910095e+00, 1.931722164154053e+00, 1.919615268707275e+00, 1.906596779823303e+00, 1.89268946647644e+00, 1.877918004989624e+00, 1.862307906150818e+00, 1.845886945724487e+00, 1.828683614730835e+00, 1.810728311538697e+00, 1.792052388191223e+00, 1.772688627243042e+00, 1.752671122550964e+00, 1.732034921646118e+00, 1.710816264152527e+00, 1.689052224159241e+00, 1.666781067848206e+00, 1.644042015075684e+00, 1.620874762535095e+00, 1.597319960594177e+00, 1.573419094085693e+00, 1.549213886260987e+00, 1.524747014045715e+00, 1.500061273574829e+00, 1.475199937820435e+00, 1.450206756591797e+00, 1.425125360488892e+00, 1.399999976158142e+00, 1.374874591827393e+00, 1.349793314933777e+00, 1.32480001449585e+00, 1.299938797950745e+00, 1.275252938270569e+00, 1.250786066055298e+00, 1.226580977439881e+00, 1.202679991722107e+00, 1.179125308990479e+00, 1.15595805644989e+00, 1.133218884468079e+00, 1.110947847366333e+00, 1.089183807373047e+00, 1.067965030670166e+00, 1.04732882976532e+00, 1.027311325073242e+00, 1.007947683334351e+00, 9.892717599868774e-01, 9.71316397190094e-01, 9.541131258010864e-01, 9.376920461654663e-01, 9.220820665359497e-01, 9.073104858398438e-01, 8.934032320976257e-01, 8.803847432136536e-01] +PLRs1.yOpeMin=[2.000000029802322e-01, 2.000000029802322e-01] +PLRs1.yOpeUpMin=[2.000000029802322e-01, 2.000000029802322e-01] +PLRs1.yStaUp=[8.999999761581421e-01, 8.999999761581421e-01] +PLRs1.yStaDow=[8.999999761581421e-01, 8.999999761581421e-01] +PLRs1.uCapReq=[1.4e+06, 1.425125375e+06, 1.45020675e+06, 1.4752e+06, 1.50006125e+06, 1.524747e+06, 1.549213875e+06, 1.573419125e+06, 1.59732e+06, 1.62087475e+06, 1.644042e+06, 1.666781125e+06, 1.68905225e+06, 1.71081625e+06, 1.732034875e+06, 1.752671125e+06, 1.772688625e+06, 1.792052375e+06, 1.81072825e+06, 1.828683625e+06, 1.845886875e+06, 1.862308e+06, 1.877918e+06, 1.8926895e+06, 1.90659675e+06, 1.91961525e+06, 1.931722125e+06, 1.94289625e+06, 1.953117875e+06, 1.96236925e+06, 1.970633875e+06, 1.9778975e+06, 1.984147375e+06, 1.989372375e+06, 1.993563375e+06, 1.996713125e+06, 1.998816e+06, 1.999868375e+06, 1.999868375e+06, 1.998816e+06, 1.996713125e+06, 1.993563375e+06, 1.989372375e+06, 1.984147375e+06, 1.9778975e+06, 1.970633875e+06, 1.96236925e+06, 1.953117875e+06, 1.94289625e+06, 1.931722125e+06, 1.91961525e+06, 1.90659675e+06, 1.8926895e+06, 1.877918e+06, 1.862308e+06, 1.845886875e+06, 1.828683625e+06, 1.81072825e+06, 1.792052375e+06, 1.772688625e+06, 1.752671125e+06, 1.732034875e+06, 1.71081625e+06, 1.68905225e+06, 1.666781125e+06, 1.644042e+06, 1.62087475e+06, 1.59732e+06, 1.573419125e+06, 1.549213875e+06, 1.524747e+06, 1.50006125e+06, 1.4752e+06, 1.45020675e+06, 1.425125375e+06, 1.4e+06, 1.374874625e+06, 1.34979325e+06, 1.3248e+06, 1.29993875e+06, 1.275253e+06, 1.250786125e+06, 1.226580875e+06, 1.20268e+06, 1.17912525e+06, 1.155958e+06, 1.133218875e+06, 1.11094775e+06, 1.08918375e+06, 1.067965125e+06, 1.047328875e+06, 1.0273113125e+06, 1.007947625e+06, 9.8927175e+05, 9.71316375e+05, 9.54113125e+05, 9.376920625e+05, 9.220820625e+05, 9.073105e+05, 8.9340325e+05, 8.8038475e+05] +PLRs1.uCapDes=[1.5e+06, 1.5e+06] +PLRs1.uUpCapDes=[2.5e+06, 2.5e+06] +PLRs1.uDowCapDes=[1e+06, 1e+06] +PLRs1.uCapMin=[3e+05, 3e+05] +PLRs1.uUpCapMin=[5e+05, 5e+05] +PLRs1.nSta=[3e+00, 3e+00] +PLRs1.u=[2e+00, 2e+00] +PLRs1.uUp=[3e+00, 3e+00] +PLRs1.uDown=[1e+00, 1e+00] +PLRs1.uTyp[1]=[1e+00, 1e+00] +PLRs1.uTyp[2]=[3e+00, 3e+00] +PLRs1.uTyp[3]=[3e+00, 3e+00] +PLRs2.yOpe=[7.599999904632568e-01, 7.700501680374146e-01, 7.800827026367188e-01, 7.900799512863159e-01, 8.000245094299316e-01, 8.098987936973572e-01, 8.196855783462524e-01, 8.293676376342773e-01, 8.389279842376709e-01, 8.483498692512512e-01, 8.576167821884155e-01, 8.667124509811401e-01, 8.756209015846252e-01, 8.843264579772949e-01, 8.928139805793762e-01, 9.010684490203857e-01, 9.090754389762878e-01, 9.168209433555603e-01, 9.242913126945496e-01, 9.31473433971405e-01, 9.383547306060791e-01, 9.449231624603271e-01, 9.511671662330627e-01, 9.57075834274292e-01, 9.626386761665344e-01, 9.678460955619812e-01, 9.726888537406921e-01, 9.771584868431091e-01, 9.812471270561218e-01, 9.84947681427002e-01, 9.882535934448242e-01, 9.911590218544006e-01, 9.936589598655701e-01, 9.957489371299744e-01, 9.97425377368927e-01, 9.986852407455444e-01, 9.995264410972595e-01, 9.999473690986633e-01, 9.999473690986633e-01, 9.995264410972595e-01, 9.986852407455444e-01, 9.97425377368927e-01, 9.957489371299744e-01, 9.936589598655701e-01, 9.911590218544006e-01, 9.882535934448242e-01, 9.84947681427002e-01, 9.812471270561218e-01, 9.771584868431091e-01, 9.726888537406921e-01, 9.678460955619812e-01, 9.626386761665344e-01, 9.57075834274292e-01, 9.511671662330627e-01, 9.449231624603271e-01, 9.383547306060791e-01, 9.314734339714049e-01, 9.242913126945497e-01, 9.168209433555603e-01, 9.090754389762878e-01, 9.010684490203857e-01, 8.928139805793762e-01, 8.843264579772949e-01, 8.756209015846252e-01, 8.667124509811401e-01, 8.576167821884155e-01, 8.483498692512512e-01, 8.389279842376709e-01, 8.293676376342772e-01, 8.196855783462526e-01, 8.098987936973572e-01, 8.000245094299316e-01, 7.900799512863159e-01, 7.800827026367188e-01, 7.700501680374146e-01, 7.599999904632568e-01, 7.499498724937439e-01, 7.399173378944397e-01, 7.299200296401978e-01, 7.19975471496582e-01, 7.101011872291565e-01, 7.003144025802611e-01, 6.906323432922364e-01, 6.810719966888428e-01, 6.716501116752625e-01, 6.623831987380981e-01, 6.532875299453735e-01, 6.443791389465332e-01, 6.356735229492188e-01, 6.271860003471375e-01, 6.189315319061279e-01, 6.109245419502258e-01, 6.031790375709534e-01, 5.957086682319641e-01, 5.885265469551086e-01, 5.816452503204346e-01, 5.750768184661865e-01, 5.688328146934509e-01, 5.629242062568665e-01, 5.573613047599792e-01, 5.521538853645325e-01] +PLRs2.yOpeUp=[7.599999904632568e-01, 7.700501680374146e-01, 7.800827026367188e-01, 7.900799512863159e-01, 8.000245094299316e-01, 8.098987936973572e-01, 8.196855783462524e-01, 8.293676376342773e-01, 8.389279842376709e-01, 8.483498692512512e-01, 8.576167821884155e-01, 8.667124509811401e-01, 8.756209015846252e-01, 8.843264579772949e-01, 8.928139805793762e-01, 9.010684490203857e-01, 9.090754389762878e-01, 9.168209433555603e-01, 9.242913126945496e-01, 9.31473433971405e-01, 9.383547306060791e-01, 9.449231624603271e-01, 9.511671662330627e-01, 9.57075834274292e-01, 9.626386761665344e-01, 9.678460955619812e-01, 9.726888537406921e-01, 9.771584868431091e-01, 9.812471270561218e-01, 9.84947681427002e-01, 9.882535934448242e-01, 9.911590218544006e-01, 9.936589598655701e-01, 9.957489371299744e-01, 9.97425377368927e-01, 9.986852407455444e-01, 9.995264410972595e-01, 9.999473690986633e-01, 9.999473690986633e-01, 9.995264410972595e-01, 9.986852407455444e-01, 9.97425377368927e-01, 9.957489371299744e-01, 9.936589598655701e-01, 9.911590218544006e-01, 9.882535934448242e-01, 9.84947681427002e-01, 9.812471270561218e-01, 9.771584868431091e-01, 9.726888537406921e-01, 9.678460955619812e-01, 9.626386761665344e-01, 9.57075834274292e-01, 9.511671662330627e-01, 9.449231624603271e-01, 9.383547306060791e-01, 9.314734339714049e-01, 9.242913126945497e-01, 9.168209433555603e-01, 9.090754389762878e-01, 9.010684490203857e-01, 8.928139805793762e-01, 8.843264579772949e-01, 8.756209015846252e-01, 8.667124509811401e-01, 8.576167821884155e-01, 8.483498692512512e-01, 8.389279842376709e-01, 8.293676376342772e-01, 8.196855783462526e-01, 8.098987936973572e-01, 8.000245094299316e-01, 7.900799512863159e-01, 7.800827026367188e-01, 7.700501680374146e-01, 7.599999904632568e-01, 7.499498724937439e-01, 7.399173378944397e-01, 7.299200296401978e-01, 7.19975471496582e-01, 7.101011872291565e-01, 7.003144025802611e-01, 6.906323432922364e-01, 6.810719966888428e-01, 6.716501116752625e-01, 6.623831987380981e-01, 6.532875299453735e-01, 6.443791389465332e-01, 6.356735229492188e-01, 6.271860003471375e-01, 6.189315319061279e-01, 6.109245419502258e-01, 6.031790375709534e-01, 5.957086682319641e-01, 5.885265469551086e-01, 5.816452503204346e-01, 5.750768184661865e-01, 5.688328146934509e-01, 5.629242062568665e-01, 5.573613047599792e-01, 5.521538853645325e-01] +PLRs2.yOpeDow=[1.266666650772095e+00, 1.283416986465454e+00, 1.300137758255005e+00, 1.316799998283386e+00, 1.33337414264679e+00, 1.349831342697144e+00, 1.366142630577087e+00, 1.382279396057129e+00, 1.398213267326355e+00, 1.4139164686203e+00, 1.429361343383789e+00, 1.444520711898804e+00, 1.459368109703064e+00, 1.473877429962158e+00, 1.488023281097412e+00, 1.50178074836731e+00, 1.515125751495361e+00, 1.528034925460815e+00, 1.540485501289368e+00, 1.55245578289032e+00, 1.563924551010132e+00, 1.574872016906738e+00, 1.585278630256653e+00, 1.595126390457153e+00, 1.604397892951965e+00, 1.61307680606842e+00, 1.621148109436035e+00, 1.628597497940063e+00, 1.635411977767944e+00, 1.641579508781433e+00, 1.647089242935181e+00, 1.651931643486023e+00, 1.656098246574402e+00, 1.659581542015076e+00, 1.662375569343567e+00, 1.664475440979004e+00, 1.665877342224121e+00, 1.666578888893127e+00, 1.666578888893127e+00, 1.665877342224121e+00, 1.664475440979004e+00, 1.662375569343567e+00, 1.659581542015076e+00, 1.656098246574402e+00, 1.651931643486023e+00, 1.647089242935181e+00, 1.641579508781433e+00, 1.635411977767944e+00, 1.628597497940063e+00, 1.621148109436035e+00, 1.61307680606842e+00, 1.604397892951965e+00, 1.595126390457153e+00, 1.585278630256653e+00, 1.574872016906738e+00, 1.563924551010132e+00, 1.55245578289032e+00, 1.540485501289368e+00, 1.528034925460815e+00, 1.515125751495361e+00, 1.50178074836731e+00, 1.488023281097412e+00, 1.473877429962158e+00, 1.459368109703064e+00, 1.444520711898804e+00, 1.429361343383789e+00, 1.4139164686203e+00, 1.398213267326355e+00, 1.382279396057129e+00, 1.366142630577088e+00, 1.349831342697144e+00, 1.33337414264679e+00, 1.316799998283386e+00, 1.300137758255005e+00, 1.283416986465454e+00, 1.266666650772095e+00, 1.249916434288025e+00, 1.233195543289185e+00, 1.216533422470093e+00, 1.1999591588974e+00, 1.183501958847046e+00, 1.167190670967102e+00, 1.151053905487061e+00, 1.135120034217834e+00, 1.119416832923889e+00, 1.1039719581604e+00, 1.088812589645386e+00, 1.073965191841125e+00, 1.059455871582031e+00, 1.045310020446777e+00, 1.03155255317688e+00, 1.018207550048828e+00, 1.005298376083374e+00, 9.928478002548218e-01, 9.808775782585144e-01, 9.694087505340576e-01, 9.584613442420959e-01, 9.480546712875366e-01, 9.382069706916809e-01, 9.289354681968689e-01, 9.20256495475769e-01] +PLRs2.yOpeMin=[2.000000029802322e-01, 2.000000029802322e-01] +PLRs2.yOpeUpMin=[2.000000029802322e-01, 2.000000029802322e-01] +PLRs2.yStaUp=[8.999999761581421e-01, 8.999999761581421e-01] +PLRs2.yStaDow=[8.999999761581421e-01, 8.999999761581421e-01] +PLRs2.uCapReq=[1.9e+06, 1.925125375e+06, 1.95020675e+06, 1.9752e+06, 2.00006125e+06, 2.024747e+06, 2.049213875e+06, 2.073419125e+06, 2.09732e+06, 2.12087475e+06, 2.144042e+06, 2.166781e+06, 2.18905225e+06, 2.21081625e+06, 2.232035e+06, 2.25267125e+06, 2.27268875e+06, 2.29205225e+06, 2.31072825e+06, 2.3286835e+06, 2.345887e+06, 2.362308e+06, 2.377918e+06, 2.3926895e+06, 2.40659675e+06, 2.41961525e+06, 2.43172225e+06, 2.44289625e+06, 2.453118e+06, 2.46236925e+06, 2.470634e+06, 2.4778975e+06, 2.48414725e+06, 2.48937225e+06, 2.4935635e+06, 2.49671325e+06, 2.498816e+06, 2.4998685e+06, 2.4998685e+06, 2.498816e+06, 2.49671325e+06, 2.4935635e+06, 2.48937225e+06, 2.48414725e+06, 2.4778975e+06, 2.470634e+06, 2.46236925e+06, 2.453118e+06, 2.44289625e+06, 2.43172225e+06, 2.41961525e+06, 2.40659675e+06, 2.3926895e+06, 2.377918e+06, 2.362308e+06, 2.345887e+06, 2.3286835e+06, 2.31072825e+06, 2.29205225e+06, 2.27268875e+06, 2.25267125e+06, 2.232035e+06, 2.21081625e+06, 2.18905225e+06, 2.166781e+06, 2.144042e+06, 2.12087475e+06, 2.09732e+06, 2.073419125e+06, 2.049213875e+06, 2.024747e+06, 2.00006125e+06, 1.9752e+06, 1.95020675e+06, 1.925125375e+06, 1.9e+06, 1.874874625e+06, 1.84979325e+06, 1.8248e+06, 1.79993875e+06, 1.775253e+06, 1.750786125e+06, 1.726580875e+06, 1.70268e+06, 1.67912525e+06, 1.655958e+06, 1.633218875e+06, 1.61094775e+06, 1.58918375e+06, 1.567965125e+06, 1.547328875e+06, 1.527311375e+06, 1.507947625e+06, 1.48927175e+06, 1.471316375e+06, 1.454113125e+06, 1.437692e+06, 1.422082e+06, 1.4073105e+06, 1.39340325e+06, 1.38038475e+06] +PLRs2.uCapDes=[2.5e+06, 2.5e+06] +PLRs2.uUpCapDes=[2.5e+06, 2.5e+06] +PLRs2.uDowCapDes=[1.5e+06, 1.5e+06] +PLRs2.uCapMin=[5e+05, 5e+05] +PLRs2.uUpCapMin=[5e+05, 5e+05] +PLRs2.nSta=[3e+00, 3e+00] +PLRs2.u=[3e+00, 3e+00] +PLRs2.uUp=[3e+00, 3e+00] +PLRs2.uDown=[2e+00, 2e+00] +PLRs2.uTyp[1]=[1e+00, 1e+00] +PLRs2.uTyp[2]=[3e+00, 3e+00] +PLRs2.uTyp[3]=[3e+00, 3e+00] +PLRs3.yOpe=[2.5e+00, 2.625627040863037e+00, 2.751033544540405e+00, 2.875999689102173e+00, 3.000306129455566e+00, 3.123735189437866e+00, 3.246069669723511e+00, 3.367095470428467e+00, 3.486599922180176e+00, 3.604373693466187e+00, 3.720209836959839e+00, 3.833905458450317e+00, 3.945261001586914e+00, 4.054080963134766e+00, 4.16017484664917e+00, 4.263355731964111e+00, 4.363443374633789e+00, 4.460261821746826e+00, 4.553641319274902e+00, 4.643417835235596e+00, 4.729434490203857e+00, 4.811539649963379e+00, 4.889589786529541e+00, 4.963447570800781e+00, 5.032983779907227e+00, 5.098076343536377e+00, 5.158610820770264e+00, 5.214481353759766e+00, 5.265589237213135e+00, 5.311845779418945e+00, 5.353169441223145e+00, 5.389487743377686e+00, 5.420736789703369e+00, 5.446861743927002e+00, 5.467816829681396e+00, 5.483565807342529e+00, 5.494080066680908e+00, 5.49934196472168e+00, 5.49934196472168e+00, 5.494080066680908e+00, 5.483565807342529e+00, 5.467816829681396e+00, 5.446861743927002e+00, 5.420736789703369e+00, 5.389487743377686e+00, 5.353169441223145e+00, 5.311845779418945e+00, 5.265589237213135e+00, 5.214481353759766e+00, 5.158610820770264e+00, 5.098076343536377e+00, 5.032983779907227e+00, 4.963447570800781e+00, 4.889589786529541e+00, 4.811539649963379e+00, 4.729434490203857e+00, 4.643417835235595e+00, 4.553641319274903e+00, 4.460261821746826e+00, 4.363443374633789e+00, 4.263355731964111e+00, 4.16017484664917e+00, 4.054080963134766e+00, 3.945261001586914e+00, 3.833905458450317e+00, 3.720209836959839e+00, 3.604373693466187e+00, 3.486599922180176e+00, 3.367095470428465e+00, 3.246069669723512e+00, 3.123735189437866e+00, 3.000306129455566e+00, 2.875999689102173e+00, 2.751033544540405e+00, 2.625627040863037e+00, 2.5e+00, 2.374372959136963e+00, 2.248966455459595e+00, 2.124000310897827e+00, 1.999693751335144e+00, 1.876264929771423e+00, 1.753930330276488e+00, 1.632904648780824e+00, 1.513400077819824e+00, 1.395626306533813e+00, 1.279790043830872e+00, 1.166094422340393e+00, 1.054738998413086e+00, 9.459189772605896e-01, 8.398253321647644e-01, 7.366442680358887e-01, 6.365566849708557e-01, 5.397381782531738e-01, 4.463586807250977e-01, 3.565819561481476e-01, 2.705655097961426e-01, 1.884602755308151e-01, 1.104102432727814e-01, 3.655237331986427e-02, 0e+00, 0e+00] +PLRs3.yOpeUp=[5e-01, 5.251253843307495e-01, 5.5020672082901e-01, 5.751999616622925e-01, 6.000612378120422e-01, 6.247470378875732e-01, 6.492139101028442e-01, 6.734190583229065e-01, 6.973199844360352e-01, 7.208747267723083e-01, 7.440419793128967e-01, 7.667810916900635e-01, 7.890521883964539e-01, 8.1081622838974e-01, 8.320349454879761e-01, 8.526711463928223e-01, 8.726886510848999e-01, 8.920523524284363e-01, 9.107282757759094e-01, 9.286835789680481e-01, 9.458869099617004e-01, 9.623079299926758e-01, 9.779179692268372e-01, 9.926895499229431e-01, 1.006596803665161e+00, 1.019615292549133e+00, 1.031722187995911e+00, 1.042896270751953e+00, 1.053117871284485e+00, 1.062369227409363e+00, 1.070633888244629e+00, 1.077897548675537e+00, 1.084147334098816e+00, 1.089372396469116e+00, 1.093563437461853e+00, 1.096713185310364e+00, 1.09881603717804e+00, 1.099868416786194e+00, 1.099868416786194e+00, 1.09881603717804e+00, 1.096713185310364e+00, 1.093563437461853e+00, 1.089372396469116e+00, 1.084147334098816e+00, 1.077897548675537e+00, 1.070633888244629e+00, 1.062369227409363e+00, 1.053117871284485e+00, 1.042896270751953e+00, 1.031722187995911e+00, 1.019615292549133e+00, 1.006596803665161e+00, 9.926895499229431e-01, 9.779179692268372e-01, 9.623079299926758e-01, 9.458869099617004e-01, 9.286835789680479e-01, 9.107282757759096e-01, 8.920523524284363e-01, 8.726886510848999e-01, 8.526711463928223e-01, 8.320349454879761e-01, 8.1081622838974e-01, 7.890521883964539e-01, 7.667810916900635e-01, 7.440419793128967e-01, 7.208747267723083e-01, 6.973199844360352e-01, 6.734190583229063e-01, 6.492139101028445e-01, 6.247470378875732e-01, 6.000612378120422e-01, 5.751999616622925e-01, 5.5020672082901e-01, 5.251253843307495e-01, 5e-01, 4.748746156692505e-01, 4.4979327917099e-01, 4.248000681400299e-01, 3.999387621879578e-01, 3.752529919147491e-01, 3.507860600948332e-01, 3.265809118747713e-01, 3.026800155639648e-01, 2.791252732276917e-01, 2.559580206871033e-01, 2.332188934087753e-01, 2.109477967023849e-01, 1.891838014125824e-01, 1.679650694131851e-01, 1.473288536071777e-01, 1.273113340139389e-01, 1.079476401209831e-01, 8.927173912525177e-02, 7.131639122962952e-02, 5.411310493946075e-02, 3.769205510616302e-02, 2.208204939961433e-02, 7.310474291443825e-03, 0e+00, 0e+00] +PLRs3.yOpeDow=[2.5e+00, 2.625627040863037e+00, 2.751033544540405e+00, 2.875999689102173e+00, 3.000306129455566e+00, 3.123735189437866e+00, 3.246069669723511e+00, 3.367095470428467e+00, 3.486599922180176e+00, 3.604373693466187e+00, 3.720209836959839e+00, 3.833905458450317e+00, 3.945261001586914e+00, 4.054080963134766e+00, 4.16017484664917e+00, 4.263355731964111e+00, 4.363443374633789e+00, 4.460261821746826e+00, 4.553641319274902e+00, 4.643417835235596e+00, 4.729434490203857e+00, 4.811539649963379e+00, 4.889589786529541e+00, 4.963447570800781e+00, 5.032983779907227e+00, 5.098076343536377e+00, 5.158610820770264e+00, 5.214481353759766e+00, 5.265589237213135e+00, 5.311845779418945e+00, 5.353169441223145e+00, 5.389487743377686e+00, 5.420736789703369e+00, 5.446861743927002e+00, 5.467816829681396e+00, 5.483565807342529e+00, 5.494080066680908e+00, 5.49934196472168e+00, 5.49934196472168e+00, 5.494080066680908e+00, 5.483565807342529e+00, 5.467816829681396e+00, 5.446861743927002e+00, 5.420736789703369e+00, 5.389487743377686e+00, 5.353169441223145e+00, 5.311845779418945e+00, 5.265589237213135e+00, 5.214481353759766e+00, 5.158610820770264e+00, 5.098076343536377e+00, 5.032983779907227e+00, 4.963447570800781e+00, 4.889589786529541e+00, 4.811539649963379e+00, 4.729434490203857e+00, 4.643417835235595e+00, 4.553641319274903e+00, 4.460261821746826e+00, 4.363443374633789e+00, 4.263355731964111e+00, 4.16017484664917e+00, 4.054080963134766e+00, 3.945261001586914e+00, 3.833905458450317e+00, 3.720209836959839e+00, 3.604373693466187e+00, 3.486599922180176e+00, 3.367095470428465e+00, 3.246069669723512e+00, 3.123735189437866e+00, 3.000306129455566e+00, 2.875999689102173e+00, 2.751033544540405e+00, 2.625627040863037e+00, 2.5e+00, 2.374372959136963e+00, 2.248966455459595e+00, 2.124000310897827e+00, 1.999693751335144e+00, 1.876264929771423e+00, 1.753930330276488e+00, 1.632904648780824e+00, 1.513400077819824e+00, 1.395626306533813e+00, 1.279790043830872e+00, 1.166094422340393e+00, 1.054738998413086e+00, 9.459189772605896e-01, 8.398253321647644e-01, 7.366442680358887e-01, 6.365566849708557e-01, 5.397381782531738e-01, 4.463586807250977e-01, 3.565819561481476e-01, 2.705655097961426e-01, 1.884602755308151e-01, 1.104102432727814e-01, 3.655237331986427e-02, 0e+00, 0e+00] +PLRs3.yOpeMin=[1e+00, 1e+00] +PLRs3.yOpeUpMin=[2.000000029802322e-01, 2.000000029802322e-01] +PLRs3.yStaUp=[8.00000011920929e-01, 8.00000011920929e-01] +PLRs3.yStaDow=[8.00000011920929e-01, 8.00000011920929e-01] +PLRs3.uCapReq=[5e+05, 5.25125375e+05, 5.502066875e+05, 5.751999375e+05, 6.0006125e+05, 6.24747e+05, 6.492139375e+05, 6.734190625e+05, 6.9732e+05, 7.2087475e+05, 7.44042e+05, 7.66781125e+05, 7.890521875e+05, 8.108161875e+05, 8.320349375e+05, 8.52671125e+05, 8.726886875e+05, 8.92052375e+05, 9.1072825e+05, 9.28683625e+05, 9.45886875e+05, 9.623079375e+05, 9.779179375e+05, 9.926895e+05, 1.00659675e+06, 1.01961525e+06, 1.031722125e+06, 1.04289625e+06, 1.053117875e+06, 1.06236925e+06, 1.070633875e+06, 1.0778975e+06, 1.084147375e+06, 1.089372375e+06, 1.093563375e+06, 1.096713125e+06, 1.098816e+06, 1.099868375e+06, 1.099868375e+06, 1.098816e+06, 1.096713125e+06, 1.093563375e+06, 1.089372375e+06, 1.084147375e+06, 1.0778975e+06, 1.070633875e+06, 1.06236925e+06, 1.053117875e+06, 1.04289625e+06, 1.031722125e+06, 1.01961525e+06, 1.00659675e+06, 9.926895e+05, 9.779179375e+05, 9.623079375e+05, 9.45886875e+05, 9.286836249999999e+05, 9.107282500000001e+05, 8.92052375e+05, 8.726886875e+05, 8.52671125e+05, 8.320349375e+05, 8.108161875e+05, 7.890521875e+05, 7.66781125e+05, 7.44042e+05, 7.2087475e+05, 6.9732e+05, 6.734190624999998e+05, 6.492139375000002e+05, 6.24747e+05, 6.0006125e+05, 5.751999375e+05, 5.502066875e+05, 5.25125375e+05, 5e+05, 4.7487459375e+05, 4.4979328125e+05, 4.248000625e+05, 3.9993875e+05, 3.75253e+05, 3.507860624999998e+05, 3.265809062500002e+05, 3.0268e+05, 2.7912528125e+05, 2.55958015625e+05, 2.33218890625e+05, 2.10947796875e+05, 1.89183796875e+05, 1.67965078125e+05, 1.4732884375e+05, 1.27311328125e+05, 1.07947640625e+05, 8.9271734375e+04, 7.1316390625e+04, 5.411310546875e+04, 3.76920546875e+04, 2.2082048828125e+04, 7.310474609375e+03, 0e+00, 0e+00] +PLRs3.uCapDes=[2e+05, 2e+05] +PLRs3.uUpCapDes=[1e+06, 1e+06] +PLRs3.uDowCapDes=[2e+05, 2e+05] +PLRs3.uCapMin=[2e+05, 2e+05] +PLRs3.uUpCapMin=[2e+05, 2e+05] +PLRs3.nSta=[3e+00, 3e+00] +PLRs3.u=[0e+00, 0e+00] +PLRs3.uUp=[1e+00, 1e+00] +PLRs3.uDown=[0e+00, 0e+00] +PLRs3.uTyp[1]=[1e+00, 1e+00] +PLRs3.uTyp[2]=[3e+00, 3e+00] +PLRs3.uTyp[3]=[3e+00, 3e+00] +PLRs4.yOpe=[8.999999761581421e-01, 9.251254200935364e-01, 9.502066969871521e-01, 9.751999378204346e-01, 1.000061273574829e+00, 1.024747014045715e+00, 1.049213886260986e+00, 1.073419094085693e+00, 1.097319960594177e+00, 1.120874762535095e+00, 1.144042015075684e+00, 1.166781067848206e+00, 1.189052224159241e+00, 1.210816264152527e+00, 1.232034921646118e+00, 1.252671122550964e+00, 1.272688627243042e+00, 1.292052388191223e+00, 1.310728311538696e+00, 1.328683614730835e+00, 1.345886945724487e+00, 1.362307906150818e+00, 1.377918004989624e+00, 1.39268946647644e+00, 1.406596779823303e+00, 1.419615268707275e+00, 1.431722164154053e+00, 1.442896246910095e+00, 1.453117847442627e+00, 1.462369203567505e+00, 1.470633864402771e+00, 1.477897524833679e+00, 1.484147310256958e+00, 1.489372372627258e+00, 1.493563413619995e+00, 1.496713161468506e+00, 1.498816013336182e+00, 1.499868392944336e+00, 1.499868392944336e+00, 1.498816013336182e+00, 1.496713161468506e+00, 1.493563413619995e+00, 1.489372372627258e+00, 1.484147310256958e+00, 1.477897524833679e+00, 1.470633864402771e+00, 1.462369203567505e+00, 1.453117847442627e+00, 1.442896246910095e+00, 1.431722164154053e+00, 1.419615268707275e+00, 1.406596779823303e+00, 1.39268946647644e+00, 1.377918004989624e+00, 1.362307906150818e+00, 1.345886945724487e+00, 1.328683614730835e+00, 1.310728311538697e+00, 1.292052388191223e+00, 1.272688627243042e+00, 1.252671122550964e+00, 1.232034921646118e+00, 1.210816264152527e+00, 1.189052224159241e+00, 1.166781067848206e+00, 1.144042015075684e+00, 1.120874762535095e+00, 1.097319960594177e+00, 1.073419094085693e+00, 1.049213886260987e+00, 1.024747014045715e+00, 1.000061273574829e+00, 9.751999378204346e-01, 9.502066969871521e-01, 9.251254200935364e-01, 8.999999761581421e-01, 8.748745918273926e-01, 8.497933149337769e-01, 8.248000741004944e-01, 7.999387383460999e-01, 7.752529978752136e-01, 7.507860660552976e-01, 7.265809178352358e-01, 7.026799917221069e-01, 6.791252493858337e-01, 6.559579968452454e-01, 6.332188844680786e-01, 6.109477877616882e-01, 5.891838073730469e-01, 5.679650902748108e-01, 5.473288297653198e-01, 5.273113250732422e-01, 5.079476237297058e-01, 4.892717301845551e-01, 4.71316397190094e-01, 4.54113095998764e-01, 4.376920461654663e-01, 4.220820367336273e-01, 4.073104858398438e-01, 3.934032320976257e-01, 3.803847432136536e-01] +PLRs4.yOpeUp=[6.000000238418579e-01, 6.167502403259277e-01, 6.334711313247681e-01, 6.501333117485046e-01, 6.667075157165527e-01, 6.83164656162262e-01, 6.994759440422058e-01, 7.156127095222473e-01, 7.315466403961182e-01, 7.472498416900635e-01, 7.626946568489075e-01, 7.778540849685669e-01, 7.927014827728271e-01, 8.072108030319214e-01, 8.213565945625305e-01, 8.351141214370728e-01, 8.484591245651245e-01, 8.613682389259338e-01, 8.738188147544861e-01, 8.857890963554382e-01, 8.97257924079895e-01, 9.082052707672119e-01, 9.186119437217712e-01, 9.284597039222717e-01, 9.37731146812439e-01, 9.464101791381836e-01, 9.544814229011536e-01, 9.619308114051819e-01, 9.68745231628418e-01, 9.749128222465515e-01, 9.804226160049438e-01, 9.852650165557861e-01, 9.894315600395203e-01, 9.929149150848389e-01, 9.957089424133301e-01, 9.978087544441223e-01, 9.992107152938843e-01, 9.999122619628906e-01, 9.999122619628906e-01, 9.992107152938843e-01, 9.978087544441223e-01, 9.957089424133301e-01, 9.929149150848389e-01, 9.894315600395203e-01, 9.852650165557861e-01, 9.804226160049438e-01, 9.749128222465515e-01, 9.68745231628418e-01, 9.619308114051819e-01, 9.544814229011536e-01, 9.464101791381836e-01, 9.37731146812439e-01, 9.284597039222717e-01, 9.186119437217712e-01, 9.082052707672119e-01, 8.97257924079895e-01, 8.857890963554381e-01, 8.738188147544862e-01, 8.613682389259338e-01, 8.484591245651245e-01, 8.351141214370728e-01, 8.213565945625305e-01, 8.072108030319214e-01, 7.927014827728271e-01, 7.778540849685669e-01, 7.626946568489075e-01, 7.472498416900635e-01, 7.315466403961182e-01, 7.156127095222472e-01, 6.994759440422059e-01, 6.83164656162262e-01, 6.667075157165527e-01, 6.501333117485046e-01, 6.334711313247681e-01, 6.167502403259277e-01, 6.000000238418579e-01, 5.832497477531433e-01, 5.66528856754303e-01, 5.498667359352112e-01, 5.332924723625183e-01, 5.168353319168091e-01, 5.005240440368651e-01, 4.843872785568239e-01, 4.684533476829529e-01, 4.5275017619133e-01, 4.373053312301636e-01, 4.221459329128265e-01, 4.072985351085663e-01, 3.927891850471497e-01, 3.786433935165405e-01, 3.648858964443207e-01, 3.515408933162689e-01, 3.386317491531372e-01, 3.261811435222626e-01, 3.142109215259552e-01, 3.02742063999176e-01, 2.917947173118591e-01, 2.813880443572998e-01, 2.715403139591217e-01, 2.622688412666321e-01, 2.535898387432098e-01] +PLRs4.yOpeDow=[4.5e+00, 4.625627040863037e+00, 4.751033306121826e+00, 4.875999927520752e+00, 5.000306129455566e+00, 5.123734951019287e+00, 5.246069431304932e+00, 5.367095470428467e+00, 5.486599922180176e+00, 5.604373455047607e+00, 5.720210075378418e+00, 5.833905696868896e+00, 5.945261001586914e+00, 6.054080963134766e+00, 6.16017484664917e+00, 6.263355731964111e+00, 6.363443374633789e+00, 6.460261821746826e+00, 6.553641319274902e+00, 6.643417835235596e+00, 6.729434490203857e+00, 6.811539649963379e+00, 6.889589786529541e+00, 6.963447570800781e+00, 7.032983779907227e+00, 7.098076343536377e+00, 7.158610820770264e+00, 7.214481353759766e+00, 7.265589237213135e+00, 7.311845779418945e+00, 7.353169441223145e+00, 7.389487743377686e+00, 7.420736789703369e+00, 7.446861743927002e+00, 7.467816829681396e+00, 7.483565807342529e+00, 7.494080066680908e+00, 7.49934196472168e+00, 7.49934196472168e+00, 7.494080066680908e+00, 7.483565807342529e+00, 7.467816829681396e+00, 7.446861743927002e+00, 7.420736789703369e+00, 7.389487743377686e+00, 7.353169441223145e+00, 7.311845779418945e+00, 7.265589237213135e+00, 7.214481353759766e+00, 7.158610820770264e+00, 7.098076343536377e+00, 7.032983779907227e+00, 6.963447570800781e+00, 6.889589786529541e+00, 6.811539649963379e+00, 6.729434490203857e+00, 6.643417835235595e+00, 6.553641319274903e+00, 6.460261821746826e+00, 6.363443374633789e+00, 6.263355731964111e+00, 6.16017484664917e+00, 6.054080963134766e+00, 5.945261001586914e+00, 5.833905696868896e+00, 5.720210075378418e+00, 5.604373455047607e+00, 5.486599922180176e+00, 5.367095470428466e+00, 5.246069431304933e+00, 5.123734951019287e+00, 5.000306129455566e+00, 4.875999927520752e+00, 4.751033306121826e+00, 4.625627040863037e+00, 4.5e+00, 4.374372959136963e+00, 4.248966693878174e+00, 4.124000072479248e+00, 3.999693870544434e+00, 3.876264810562134e+00, 3.753930330276488e+00, 3.632904529571535e+00, 3.513400077819824e+00, 3.395626306533813e+00, 3.279790163040161e+00, 3.166094541549683e+00, 3.054738998413086e+00, 2.945919036865234e+00, 2.839825391769409e+00, 2.736644268035889e+00, 2.636556625366211e+00, 2.539738178253174e+00, 2.446358680725098e+00, 2.356581926345825e+00, 2.270565509796143e+00, 2.188460350036621e+00, 2.110410213470459e+00, 2.036552429199219e+00, 1.967016220092773e+00, 1.901923775672913e+00] +PLRs4.yOpeMin=[2.000000029802322e-01, 2.000000029802322e-01] +PLRs4.yOpeUpMin=[2.000000029802322e-01, 2.000000029802322e-01] +PLRs4.yStaUp=[8.00000011920929e-01, 8.00000011920929e-01] +PLRs4.yStaDow=[1e+00, 1e+00] +PLRs4.uCapReq=[9e+05, 9.25125375e+05, 9.502066875e+05, 9.751999375e+05, 1.00006125e+06, 1.024747e+06, 1.049213875e+06, 1.073419125e+06, 1.09732e+06, 1.12087475e+06, 1.144042e+06, 1.166781125e+06, 1.18905225e+06, 1.21081625e+06, 1.232034875e+06, 1.252671125e+06, 1.272688625e+06, 1.292052375e+06, 1.31072825e+06, 1.328683625e+06, 1.345886875e+06, 1.362308e+06, 1.377918e+06, 1.3926895e+06, 1.40659675e+06, 1.41961525e+06, 1.431722125e+06, 1.44289625e+06, 1.453117875e+06, 1.46236925e+06, 1.470633875e+06, 1.4778975e+06, 1.484147375e+06, 1.489372375e+06, 1.493563375e+06, 1.496713125e+06, 1.498816e+06, 1.499868375e+06, 1.499868375e+06, 1.498816e+06, 1.496713125e+06, 1.493563375e+06, 1.489372375e+06, 1.484147375e+06, 1.4778975e+06, 1.470633875e+06, 1.46236925e+06, 1.453117875e+06, 1.44289625e+06, 1.431722125e+06, 1.41961525e+06, 1.40659675e+06, 1.3926895e+06, 1.377918e+06, 1.362308e+06, 1.345886875e+06, 1.328683625e+06, 1.31072825e+06, 1.292052375e+06, 1.272688625e+06, 1.252671125e+06, 1.232034875e+06, 1.21081625e+06, 1.18905225e+06, 1.166781125e+06, 1.144042e+06, 1.12087475e+06, 1.09732e+06, 1.073419125e+06, 1.049213875e+06, 1.024747e+06, 1.00006125e+06, 9.751999375e+05, 9.502066875e+05, 9.25125375e+05, 9e+05, 8.74874625e+05, 8.497933125e+05, 8.248000625e+05, 7.9993875e+05, 7.75253e+05, 7.507860624999998e+05, 7.265809375000002e+05, 7.0268e+05, 6.7912525e+05, 6.55958e+05, 6.33218875e+05, 6.109478125e+05, 5.891838125e+05, 5.679650625e+05, 5.47328875e+05, 5.273113125e+05, 5.07947625e+05, 4.8927175e+05, 4.7131640625e+05, 4.5411309375e+05, 4.376920625e+05, 4.220820625e+05, 4.0731046875e+05, 3.9340325e+05, 3.8038475e+05] +PLRs4.uCapDes=[1e+06, 1e+06] +PLRs4.uUpCapDes=[1.5e+06, 1.5e+06] +PLRs4.uDowCapDes=[2e+05, 2e+05] +PLRs4.uCapMin=[2e+05, 2e+05] +PLRs4.uUpCapMin=[3e+05, 3e+05] +PLRs4.nSta=[3e+00, 3e+00] +PLRs4.u=[1e+00, 1e+00] +PLRs4.uUp=[2e+00, 2e+00] +PLRs4.uDown=[0e+00, 0e+00] +PLRs4.uTyp[1]=[1e+00, 1e+00] +PLRs4.uTyp[2]=[2e+00, 2e+00] +PLRs4.uTyp[3]=[3e+00, 3e+00] +PLRs4.uLif=[1.6e+01, 1.6e+01] +PLRs4.uLifMax=[2e+01, 2e+01] +PLRs4.uLifMin=[1e+01, 1e+01] +PLRs5.yOpe=[9.333333373069763e-01, 9.500836133956909e-01, 9.668044447898865e-01, 9.83466625213623e-01, 1.000040888786316e+00, 1.01649796962738e+00, 1.032809257507324e+00, 1.048946022987366e+00, 1.064880013465881e+00, 1.080583095550537e+00, 1.096027970314026e+00, 1.11118745803833e+00, 1.12603485584259e+00, 1.140544176101685e+00, 1.154689908027649e+00, 1.168447375297546e+00, 1.181792497634888e+00, 1.194701552391052e+00, 1.207152128219604e+00, 1.219122409820557e+00, 1.230591297149658e+00, 1.241538643836975e+00, 1.25194525718689e+00, 1.26179301738739e+00, 1.271064519882202e+00, 1.279743552207947e+00, 1.287814736366272e+00, 1.2952641248703e+00, 1.302078604698181e+00, 1.30824613571167e+00, 1.313755989074707e+00, 1.318598389625549e+00, 1.322764873504639e+00, 1.326248288154602e+00, 1.329042315483093e+00, 1.331142067909241e+00, 1.332543969154358e+00, 1.333245635032654e+00, 1.333245635032654e+00, 1.332543969154358e+00, 1.331142067909241e+00, 1.329042315483093e+00, 1.326248288154602e+00, 1.322764873504639e+00, 1.318598389625549e+00, 1.313755989074707e+00, 1.30824613571167e+00, 1.302078604698181e+00, 1.2952641248703e+00, 1.287814736366272e+00, 1.279743552207947e+00, 1.271064519882202e+00, 1.26179301738739e+00, 1.25194525718689e+00, 1.241538643836975e+00, 1.230591297149658e+00, 1.219122409820556e+00, 1.207152128219605e+00, 1.194701552391052e+00, 1.181792497634888e+00, 1.168447375297546e+00, 1.154689908027649e+00, 1.140544176101685e+00, 1.12603485584259e+00, 1.11118745803833e+00, 1.096027970314026e+00, 1.080583095550537e+00, 1.064880013465881e+00, 1.048946022987366e+00, 1.032809257507324e+00, 1.01649796962738e+00, 1.000040888786316e+00, 9.83466625213623e-01, 9.668044447898865e-01, 9.500836133956909e-01, 9.333333373069763e-01, 9.165830612182617e-01, 8.998621702194214e-01, 8.832000494003296e-01, 8.666258454322815e-01, 8.501686453819275e-01, 8.338573575019835e-01, 8.177205920219422e-01, 8.017866611480713e-01, 7.860835194587708e-01, 7.706387042999268e-01, 7.554792761802673e-01, 7.406318783760071e-01, 7.261225581169128e-01, 7.119767069816589e-01, 6.982192397117615e-01, 6.848742365837097e-01, 6.719650626182556e-01, 6.595144867897034e-01, 6.47544264793396e-01, 6.360753774642944e-01, 6.251280307769775e-01, 6.147213578224182e-01, 6.048736572265625e-01, 5.956021547317505e-01, 5.869231820106506e-01] +PLRs5.yOpeUp=[5.600000023841858e-01, 5.700501799583435e-01, 5.800826549530029e-01, 5.900799632072449e-01, 6.000245213508606e-01, 6.098988056182861e-01, 6.196855902671814e-01, 6.293676495552063e-01, 6.389279961585999e-01, 6.483498811721802e-01, 6.576167941093445e-01, 6.667124629020691e-01, 6.756208539009094e-01, 6.843264698982239e-01, 6.928139925003052e-01, 7.010684609413147e-01, 7.090754508972168e-01, 7.168209552764893e-01, 7.242913246154785e-01, 7.31473445892334e-01, 7.383547425270081e-01, 7.449231743812561e-01, 7.511671781539917e-01, 7.570757865905762e-01, 7.626386880874634e-01, 7.678461074829102e-01, 7.726888656616211e-01, 7.771584987640381e-01, 7.812471389770508e-01, 7.849476933479309e-01, 7.882535457611084e-01, 7.911590337753296e-01, 7.936589121818542e-01, 7.957489490509033e-01, 7.97425389289856e-01, 7.986852526664734e-01, 7.995263934135437e-01, 7.999473810195923e-01, 7.999473810195923e-01, 7.995263934135437e-01, 7.986852526664734e-01, 7.97425389289856e-01, 7.957489490509033e-01, 7.936589121818542e-01, 7.911590337753296e-01, 7.882535457611084e-01, 7.849476933479309e-01, 7.812471389770508e-01, 7.771584987640381e-01, 7.726888656616211e-01, 7.678461074829102e-01, 7.626386880874634e-01, 7.570757865905762e-01, 7.511671781539917e-01, 7.449231743812561e-01, 7.383547425270081e-01, 7.314734458923339e-01, 7.242913246154786e-01, 7.168209552764893e-01, 7.090754508972168e-01, 7.010684609413147e-01, 6.928139925003052e-01, 6.843264698982239e-01, 6.756208539009094e-01, 6.667124629020691e-01, 6.576167941093445e-01, 6.483498811721802e-01, 6.389279961585999e-01, 6.293676495552062e-01, 6.196855902671815e-01, 6.098988056182861e-01, 6.000245213508606e-01, 5.900799632072449e-01, 5.800826549530029e-01, 5.700501799583435e-01, 5.600000023841858e-01, 5.499498248100281e-01, 5.399172902107239e-01, 5.299200415611267e-01, 5.19975483417511e-01, 5.101011991500854e-01, 5.003144145011901e-01, 4.906323552131654e-01, 4.810720086097717e-01, 4.71650093793869e-01, 4.623832106590271e-01, 4.532875716686249e-01, 4.443791210651398e-01, 4.356735050678253e-01, 4.271860420703888e-01, 4.189315438270569e-01, 4.109245240688324e-01, 4.031790494918823e-01, 3.957086801528931e-01, 3.885265588760376e-01, 3.816452324390411e-01, 3.750768303871155e-01, 3.688328266143799e-01, 3.62924188375473e-01, 3.573612868785858e-01, 3.521538972854614e-01] +PLRs5.yOpeDow=[1.399999976158142e+00, 1.425125360488892e+00, 1.450206756591797e+00, 1.475199937820435e+00, 1.500061273574829e+00, 1.524747014045715e+00, 1.549213886260986e+00, 1.573419094085693e+00, 1.597319960594177e+00, 1.620874762535095e+00, 1.644042015075684e+00, 1.666781067848206e+00, 1.689052224159241e+00, 1.710816264152527e+00, 1.732034921646118e+00, 1.752671122550964e+00, 1.772688627243042e+00, 1.792052388191223e+00, 1.810728311538696e+00, 1.828683614730835e+00, 1.845886945724487e+00, 1.862307906150818e+00, 1.877918004989624e+00, 1.89268946647644e+00, 1.906596779823303e+00, 1.919615268707275e+00, 1.931722164154053e+00, 1.942896246910095e+00, 1.953117847442627e+00, 1.962369203567505e+00, 1.970633864402771e+00, 1.977897524833679e+00, 1.984147310256958e+00, 1.989372372627258e+00, 1.993563413619995e+00, 1.996713161468506e+00, 1.998816013336182e+00, 1.999868392944336e+00, 1.999868392944336e+00, 1.998816013336182e+00, 1.996713161468506e+00, 1.993563413619995e+00, 1.989372372627258e+00, 1.984147310256958e+00, 1.977897524833679e+00, 1.970633864402771e+00, 1.962369203567505e+00, 1.953117847442627e+00, 1.942896246910095e+00, 1.931722164154053e+00, 1.919615268707275e+00, 1.906596779823303e+00, 1.89268946647644e+00, 1.877918004989624e+00, 1.862307906150818e+00, 1.845886945724487e+00, 1.828683614730835e+00, 1.810728311538697e+00, 1.792052388191223e+00, 1.772688627243042e+00, 1.752671122550964e+00, 1.732034921646118e+00, 1.710816264152527e+00, 1.689052224159241e+00, 1.666781067848206e+00, 1.644042015075684e+00, 1.620874762535095e+00, 1.597319960594177e+00, 1.573419094085693e+00, 1.549213886260987e+00, 1.524747014045715e+00, 1.500061273574829e+00, 1.475199937820435e+00, 1.450206756591797e+00, 1.425125360488892e+00, 1.399999976158142e+00, 1.374874591827393e+00, 1.349793314933777e+00, 1.32480001449585e+00, 1.299938797950745e+00, 1.275252938270569e+00, 1.250786066055298e+00, 1.226580977439881e+00, 1.202679991722107e+00, 1.179125308990479e+00, 1.15595805644989e+00, 1.133218884468079e+00, 1.110947847366333e+00, 1.089183807373047e+00, 1.067965030670166e+00, 1.04732882976532e+00, 1.027311325073242e+00, 1.007947683334351e+00, 9.892717599868774e-01, 9.71316397190094e-01, 9.541131258010864e-01, 9.376920461654663e-01, 9.220820665359497e-01, 9.073104858398438e-01, 8.934032320976257e-01, 8.803847432136536e-01] +PLRs5.yOpeMin=[2.000000029802322e-01, 2.000000029802322e-01] +PLRs5.yOpeUpMin=[7.999999821186066e-02, 7.999999821186066e-02] +PLRs5.yStaUp=[8.999999761581421e-01, 8.999999761581421e-01] +PLRs5.yStaDow=[8.00000011920929e-01, 8.00000011920929e-01] +PLRs5.uCapReq=[1.4e+06, 1.425125375e+06, 1.45020675e+06, 1.4752e+06, 1.50006125e+06, 1.524747e+06, 1.549213875e+06, 1.573419125e+06, 1.59732e+06, 1.62087475e+06, 1.644042e+06, 1.666781125e+06, 1.68905225e+06, 1.71081625e+06, 1.732034875e+06, 1.752671125e+06, 1.772688625e+06, 1.792052375e+06, 1.81072825e+06, 1.828683625e+06, 1.845886875e+06, 1.862308e+06, 1.877918e+06, 1.8926895e+06, 1.90659675e+06, 1.91961525e+06, 1.931722125e+06, 1.94289625e+06, 1.953117875e+06, 1.96236925e+06, 1.970633875e+06, 1.9778975e+06, 1.984147375e+06, 1.989372375e+06, 1.993563375e+06, 1.996713125e+06, 1.998816e+06, 1.999868375e+06, 1.999868375e+06, 1.998816e+06, 1.996713125e+06, 1.993563375e+06, 1.989372375e+06, 1.984147375e+06, 1.9778975e+06, 1.970633875e+06, 1.96236925e+06, 1.953117875e+06, 1.94289625e+06, 1.931722125e+06, 1.91961525e+06, 1.90659675e+06, 1.8926895e+06, 1.877918e+06, 1.862308e+06, 1.845886875e+06, 1.828683625e+06, 1.81072825e+06, 1.792052375e+06, 1.772688625e+06, 1.752671125e+06, 1.732034875e+06, 1.71081625e+06, 1.68905225e+06, 1.666781125e+06, 1.644042e+06, 1.62087475e+06, 1.59732e+06, 1.573419125e+06, 1.549213875e+06, 1.524747e+06, 1.50006125e+06, 1.4752e+06, 1.45020675e+06, 1.425125375e+06, 1.4e+06, 1.374874625e+06, 1.34979325e+06, 1.3248e+06, 1.29993875e+06, 1.275253e+06, 1.250786125e+06, 1.226580875e+06, 1.20268e+06, 1.17912525e+06, 1.155958e+06, 1.133218875e+06, 1.11094775e+06, 1.08918375e+06, 1.067965125e+06, 1.047328875e+06, 1.0273113125e+06, 1.007947625e+06, 9.8927175e+05, 9.71316375e+05, 9.54113125e+05, 9.376920625e+05, 9.220820625e+05, 9.073105e+05, 8.9340325e+05, 8.8038475e+05] +PLRs5.uCapDes=[1.5e+06, 1.5e+06] +PLRs5.uUpCapDes=[2.5e+06, 2.5e+06] +PLRs5.uDowCapDes=[1e+06, 1e+06] +PLRs5.uCapMin=[3e+05, 3e+05] +PLRs5.uUpCapMin=[2e+05, 2e+05] +PLRs5.nSta=[3e+00, 3e+00] +PLRs5.u=[2e+00, 2e+00] +PLRs5.uUp=[3e+00, 3e+00] +PLRs5.uDown=[1e+00, 1e+00] +PLRs5.uTyp[1]=[1e+00, 1e+00] +PLRs5.uTyp[2]=[2e+00, 2e+00] +PLRs5.uTyp[3]=[3e+00, 3e+00] +PLRs5.uLif=[1.6e+01, 1.6e+01] +PLRs5.uLifMax=[2e+01, 2e+01] +PLRs5.uLifMin=[1e+01, 1e+01] +PLRs6.yOpe=[7.599999904632568e-01, 7.700501680374146e-01, 7.800827026367188e-01, 7.900799512863159e-01, 8.000245094299316e-01, 8.098987936973572e-01, 8.196855783462524e-01, 8.293676376342773e-01, 8.389279842376709e-01, 8.483498692512512e-01, 8.576167821884155e-01, 8.667124509811401e-01, 8.756209015846252e-01, 8.843264579772949e-01, 8.928139805793762e-01, 9.010684490203857e-01, 9.090754389762878e-01, 9.168209433555603e-01, 9.242913126945496e-01, 9.31473433971405e-01, 9.383547306060791e-01, 9.449231624603271e-01, 9.511671662330627e-01, 9.57075834274292e-01, 9.626386761665344e-01, 9.678460955619812e-01, 9.726888537406921e-01, 9.771584868431091e-01, 9.812471270561218e-01, 9.84947681427002e-01, 9.882535934448242e-01, 9.911590218544006e-01, 9.936589598655701e-01, 9.957489371299744e-01, 9.97425377368927e-01, 9.986852407455444e-01, 9.995264410972595e-01, 9.999473690986633e-01, 9.999473690986633e-01, 9.995264410972595e-01, 9.986852407455444e-01, 9.97425377368927e-01, 9.957489371299744e-01, 9.936589598655701e-01, 9.911590218544006e-01, 9.882535934448242e-01, 9.84947681427002e-01, 9.812471270561218e-01, 9.771584868431091e-01, 9.726888537406921e-01, 9.678460955619812e-01, 9.626386761665344e-01, 9.57075834274292e-01, 9.511671662330627e-01, 9.449231624603271e-01, 9.383547306060791e-01, 9.314734339714049e-01, 9.242913126945497e-01, 9.168209433555603e-01, 9.090754389762878e-01, 9.010684490203857e-01, 8.928139805793762e-01, 8.843264579772949e-01, 8.756209015846252e-01, 8.667124509811401e-01, 8.576167821884155e-01, 8.483498692512512e-01, 8.389279842376709e-01, 8.293676376342772e-01, 8.196855783462526e-01, 8.098987936973572e-01, 8.000245094299316e-01, 7.900799512863159e-01, 7.800827026367188e-01, 7.700501680374146e-01, 7.599999904632568e-01, 7.499498724937439e-01, 7.399173378944397e-01, 7.299200296401978e-01, 7.19975471496582e-01, 7.101011872291565e-01, 7.003144025802611e-01, 6.906323432922364e-01, 6.810719966888428e-01, 6.716501116752625e-01, 6.623831987380981e-01, 6.532875299453735e-01, 6.443791389465332e-01, 6.356735229492188e-01, 6.271860003471375e-01, 6.189315319061279e-01, 6.109245419502258e-01, 6.031790375709534e-01, 5.957086682319641e-01, 5.885265469551086e-01, 5.816452503204346e-01, 5.750768184661865e-01, 5.688328146934509e-01, 5.629242062568665e-01, 5.573613047599792e-01, 5.521538853645325e-01] +PLRs6.yOpeUp=[7.599999904632568e-01, 7.700501680374146e-01, 7.800827026367188e-01, 7.900799512863159e-01, 8.000245094299316e-01, 8.098987936973572e-01, 8.196855783462524e-01, 8.293676376342773e-01, 8.389279842376709e-01, 8.483498692512512e-01, 8.576167821884155e-01, 8.667124509811401e-01, 8.756209015846252e-01, 8.843264579772949e-01, 8.928139805793762e-01, 9.010684490203857e-01, 9.090754389762878e-01, 9.168209433555603e-01, 9.242913126945496e-01, 9.31473433971405e-01, 9.383547306060791e-01, 9.449231624603271e-01, 9.511671662330627e-01, 9.57075834274292e-01, 9.626386761665344e-01, 9.678460955619812e-01, 9.726888537406921e-01, 9.771584868431091e-01, 9.812471270561218e-01, 9.84947681427002e-01, 9.882535934448242e-01, 9.911590218544006e-01, 9.936589598655701e-01, 9.957489371299744e-01, 9.97425377368927e-01, 9.986852407455444e-01, 9.995264410972595e-01, 9.999473690986633e-01, 9.999473690986633e-01, 9.995264410972595e-01, 9.986852407455444e-01, 9.97425377368927e-01, 9.957489371299744e-01, 9.936589598655701e-01, 9.911590218544006e-01, 9.882535934448242e-01, 9.84947681427002e-01, 9.812471270561218e-01, 9.771584868431091e-01, 9.726888537406921e-01, 9.678460955619812e-01, 9.626386761665344e-01, 9.57075834274292e-01, 9.511671662330627e-01, 9.449231624603271e-01, 9.383547306060791e-01, 9.314734339714049e-01, 9.242913126945497e-01, 9.168209433555603e-01, 9.090754389762878e-01, 9.010684490203857e-01, 8.928139805793762e-01, 8.843264579772949e-01, 8.756209015846252e-01, 8.667124509811401e-01, 8.576167821884155e-01, 8.483498692512512e-01, 8.389279842376709e-01, 8.293676376342772e-01, 8.196855783462526e-01, 8.098987936973572e-01, 8.000245094299316e-01, 7.900799512863159e-01, 7.800827026367188e-01, 7.700501680374146e-01, 7.599999904632568e-01, 7.499498724937439e-01, 7.399173378944397e-01, 7.299200296401978e-01, 7.19975471496582e-01, 7.101011872291565e-01, 7.003144025802611e-01, 6.906323432922364e-01, 6.810719966888428e-01, 6.716501116752625e-01, 6.623831987380981e-01, 6.532875299453735e-01, 6.443791389465332e-01, 6.356735229492188e-01, 6.271860003471375e-01, 6.189315319061279e-01, 6.109245419502258e-01, 6.031790375709534e-01, 5.957086682319641e-01, 5.885265469551086e-01, 5.816452503204346e-01, 5.750768184661865e-01, 5.688328146934509e-01, 5.629242062568665e-01, 5.573613047599792e-01, 5.521538853645325e-01] +PLRs6.yOpeDow=[1.266666650772095e+00, 1.283416986465454e+00, 1.300137758255005e+00, 1.316799998283386e+00, 1.33337414264679e+00, 1.349831342697144e+00, 1.366142630577087e+00, 1.382279396057129e+00, 1.398213267326355e+00, 1.4139164686203e+00, 1.429361343383789e+00, 1.444520711898804e+00, 1.459368109703064e+00, 1.473877429962158e+00, 1.488023281097412e+00, 1.50178074836731e+00, 1.515125751495361e+00, 1.528034925460815e+00, 1.540485501289368e+00, 1.55245578289032e+00, 1.563924551010132e+00, 1.574872016906738e+00, 1.585278630256653e+00, 1.595126390457153e+00, 1.604397892951965e+00, 1.61307680606842e+00, 1.621148109436035e+00, 1.628597497940063e+00, 1.635411977767944e+00, 1.641579508781433e+00, 1.647089242935181e+00, 1.651931643486023e+00, 1.656098246574402e+00, 1.659581542015076e+00, 1.662375569343567e+00, 1.664475440979004e+00, 1.665877342224121e+00, 1.666578888893127e+00, 1.666578888893127e+00, 1.665877342224121e+00, 1.664475440979004e+00, 1.662375569343567e+00, 1.659581542015076e+00, 1.656098246574402e+00, 1.651931643486023e+00, 1.647089242935181e+00, 1.641579508781433e+00, 1.635411977767944e+00, 1.628597497940063e+00, 1.621148109436035e+00, 1.61307680606842e+00, 1.604397892951965e+00, 1.595126390457153e+00, 1.585278630256653e+00, 1.574872016906738e+00, 1.563924551010132e+00, 1.55245578289032e+00, 1.540485501289368e+00, 1.528034925460815e+00, 1.515125751495361e+00, 1.50178074836731e+00, 1.488023281097412e+00, 1.473877429962158e+00, 1.459368109703064e+00, 1.444520711898804e+00, 1.429361343383789e+00, 1.4139164686203e+00, 1.398213267326355e+00, 1.382279396057129e+00, 1.366142630577088e+00, 1.349831342697144e+00, 1.33337414264679e+00, 1.316799998283386e+00, 1.300137758255005e+00, 1.283416986465454e+00, 1.266666650772095e+00, 1.249916434288025e+00, 1.233195543289185e+00, 1.216533422470093e+00, 1.1999591588974e+00, 1.183501958847046e+00, 1.167190670967102e+00, 1.151053905487061e+00, 1.135120034217834e+00, 1.119416832923889e+00, 1.1039719581604e+00, 1.088812589645386e+00, 1.073965191841125e+00, 1.059455871582031e+00, 1.045310020446777e+00, 1.03155255317688e+00, 1.018207550048828e+00, 1.005298376083374e+00, 9.928478002548218e-01, 9.808775782585144e-01, 9.694087505340576e-01, 9.584613442420959e-01, 9.480546712875366e-01, 9.382069706916809e-01, 9.289354681968689e-01, 9.20256495475769e-01] +PLRs6.yOpeMin=[2.000000029802322e-01, 2.000000029802322e-01] +PLRs6.yOpeUpMin=[2.000000029802322e-01, 2.000000029802322e-01] +PLRs6.yStaUp=[8.999999761581421e-01, 8.999999761581421e-01] +PLRs6.yStaDow=[8.999999761581421e-01, 8.999999761581421e-01] +PLRs6.uCapReq=[1.9e+06, 1.925125375e+06, 1.95020675e+06, 1.9752e+06, 2.00006125e+06, 2.024747e+06, 2.049213875e+06, 2.073419125e+06, 2.09732e+06, 2.12087475e+06, 2.144042e+06, 2.166781e+06, 2.18905225e+06, 2.21081625e+06, 2.232035e+06, 2.25267125e+06, 2.27268875e+06, 2.29205225e+06, 2.31072825e+06, 2.3286835e+06, 2.345887e+06, 2.362308e+06, 2.377918e+06, 2.3926895e+06, 2.40659675e+06, 2.41961525e+06, 2.43172225e+06, 2.44289625e+06, 2.453118e+06, 2.46236925e+06, 2.470634e+06, 2.4778975e+06, 2.48414725e+06, 2.48937225e+06, 2.4935635e+06, 2.49671325e+06, 2.498816e+06, 2.4998685e+06, 2.4998685e+06, 2.498816e+06, 2.49671325e+06, 2.4935635e+06, 2.48937225e+06, 2.48414725e+06, 2.4778975e+06, 2.470634e+06, 2.46236925e+06, 2.453118e+06, 2.44289625e+06, 2.43172225e+06, 2.41961525e+06, 2.40659675e+06, 2.3926895e+06, 2.377918e+06, 2.362308e+06, 2.345887e+06, 2.3286835e+06, 2.31072825e+06, 2.29205225e+06, 2.27268875e+06, 2.25267125e+06, 2.232035e+06, 2.21081625e+06, 2.18905225e+06, 2.166781e+06, 2.144042e+06, 2.12087475e+06, 2.09732e+06, 2.073419125e+06, 2.049213875e+06, 2.024747e+06, 2.00006125e+06, 1.9752e+06, 1.95020675e+06, 1.925125375e+06, 1.9e+06, 1.874874625e+06, 1.84979325e+06, 1.8248e+06, 1.79993875e+06, 1.775253e+06, 1.750786125e+06, 1.726580875e+06, 1.70268e+06, 1.67912525e+06, 1.655958e+06, 1.633218875e+06, 1.61094775e+06, 1.58918375e+06, 1.567965125e+06, 1.547328875e+06, 1.527311375e+06, 1.507947625e+06, 1.48927175e+06, 1.471316375e+06, 1.454113125e+06, 1.437692e+06, 1.422082e+06, 1.4073105e+06, 1.39340325e+06, 1.38038475e+06] +PLRs6.uCapDes=[2.5e+06, 2.5e+06] +PLRs6.uUpCapDes=[2.5e+06, 2.5e+06] +PLRs6.uDowCapDes=[1.5e+06, 1.5e+06] +PLRs6.uCapMin=[5e+05, 5e+05] +PLRs6.uUpCapMin=[5e+05, 5e+05] +PLRs6.nSta=[3e+00, 3e+00] +PLRs6.u=[3e+00, 3e+00] +PLRs6.uUp=[3e+00, 3e+00] +PLRs6.uDown=[2e+00, 2e+00] +PLRs6.uTyp[1]=[1e+00, 1e+00] +PLRs6.uTyp[2]=[2e+00, 2e+00] +PLRs6.uTyp[3]=[3e+00, 3e+00] +PLRs6.uLif=[1.6e+01, 1.6e+01] +PLRs6.uLifMax=[2e+01, 2e+01] +PLRs6.uLifMin=[1e+01, 1e+01] +PLRs7.yOpe=[2.5e+00, 2.625627040863037e+00, 2.751033544540405e+00, 2.875999689102173e+00, 3.000306129455566e+00, 3.123735189437866e+00, 3.246069669723511e+00, 3.367095470428467e+00, 3.486599922180176e+00, 3.604373693466187e+00, 3.720209836959839e+00, 3.833905458450317e+00, 3.945261001586914e+00, 4.054080963134766e+00, 4.16017484664917e+00, 4.263355731964111e+00, 4.363443374633789e+00, 4.460261821746826e+00, 4.553641319274902e+00, 4.643417835235596e+00, 4.729434490203857e+00, 4.811539649963379e+00, 4.889589786529541e+00, 4.963447570800781e+00, 5.032983779907227e+00, 5.098076343536377e+00, 5.158610820770264e+00, 5.214481353759766e+00, 5.265589237213135e+00, 5.311845779418945e+00, 5.353169441223145e+00, 5.389487743377686e+00, 5.420736789703369e+00, 5.446861743927002e+00, 5.467816829681396e+00, 5.483565807342529e+00, 5.494080066680908e+00, 5.49934196472168e+00, 5.49934196472168e+00, 5.494080066680908e+00, 5.483565807342529e+00, 5.467816829681396e+00, 5.446861743927002e+00, 5.420736789703369e+00, 5.389487743377686e+00, 5.353169441223145e+00, 5.311845779418945e+00, 5.265589237213135e+00, 5.214481353759766e+00, 5.158610820770264e+00, 5.098076343536377e+00, 5.032983779907227e+00, 4.963447570800781e+00, 4.889589786529541e+00, 4.811539649963379e+00, 4.729434490203857e+00, 4.643417835235595e+00, 4.553641319274903e+00, 4.460261821746826e+00, 4.363443374633789e+00, 4.263355731964111e+00, 4.16017484664917e+00, 4.054080963134766e+00, 3.945261001586914e+00, 3.833905458450317e+00, 3.720209836959839e+00, 3.604373693466187e+00, 3.486599922180176e+00, 3.367095470428465e+00, 3.246069669723512e+00, 3.123735189437866e+00, 3.000306129455566e+00, 2.875999689102173e+00, 2.751033544540405e+00, 2.625627040863037e+00, 2.5e+00, 2.374372959136963e+00, 2.248966455459595e+00, 2.124000310897827e+00, 1.999693751335144e+00, 1.876264929771423e+00, 1.753930330276488e+00, 1.632904648780824e+00, 1.513400077819824e+00, 1.395626306533813e+00, 1.279790043830872e+00, 1.166094422340393e+00, 1.054738998413086e+00, 9.459189772605896e-01, 8.398253321647644e-01, 7.366442680358887e-01, 6.365566849708557e-01, 5.397381782531738e-01, 4.463586807250977e-01, 3.565819561481476e-01, 2.705655097961426e-01, 1.884602755308151e-01, 1.104102432727814e-01, 3.655237331986427e-02, 0e+00, 0e+00] +PLRs7.yOpeUp=[5e-01, 5.251253843307495e-01, 5.5020672082901e-01, 5.751999616622925e-01, 6.000612378120422e-01, 6.247470378875732e-01, 6.492139101028442e-01, 6.734190583229065e-01, 6.973199844360352e-01, 7.208747267723083e-01, 7.440419793128967e-01, 7.667810916900635e-01, 7.890521883964539e-01, 8.1081622838974e-01, 8.320349454879761e-01, 8.526711463928223e-01, 8.726886510848999e-01, 8.920523524284363e-01, 9.107282757759094e-01, 9.286835789680481e-01, 9.458869099617004e-01, 9.623079299926758e-01, 9.779179692268372e-01, 9.926895499229431e-01, 1.006596803665161e+00, 1.019615292549133e+00, 1.031722187995911e+00, 1.042896270751953e+00, 1.053117871284485e+00, 1.062369227409363e+00, 1.070633888244629e+00, 1.077897548675537e+00, 1.084147334098816e+00, 1.089372396469116e+00, 1.093563437461853e+00, 1.096713185310364e+00, 1.09881603717804e+00, 1.099868416786194e+00, 1.099868416786194e+00, 1.09881603717804e+00, 1.096713185310364e+00, 1.093563437461853e+00, 1.089372396469116e+00, 1.084147334098816e+00, 1.077897548675537e+00, 1.070633888244629e+00, 1.062369227409363e+00, 1.053117871284485e+00, 1.042896270751953e+00, 1.031722187995911e+00, 1.019615292549133e+00, 1.006596803665161e+00, 9.926895499229431e-01, 9.779179692268372e-01, 9.623079299926758e-01, 9.458869099617004e-01, 9.286835789680479e-01, 9.107282757759096e-01, 8.920523524284363e-01, 8.726886510848999e-01, 8.526711463928223e-01, 8.320349454879761e-01, 8.1081622838974e-01, 7.890521883964539e-01, 7.667810916900635e-01, 7.440419793128967e-01, 7.208747267723083e-01, 6.973199844360352e-01, 6.734190583229063e-01, 6.492139101028445e-01, 6.247470378875732e-01, 6.000612378120422e-01, 5.751999616622925e-01, 5.5020672082901e-01, 5.251253843307495e-01, 5e-01, 4.748746156692505e-01, 4.4979327917099e-01, 4.248000681400299e-01, 3.999387621879578e-01, 3.752529919147491e-01, 3.507860600948332e-01, 3.265809118747713e-01, 3.026800155639648e-01, 2.791252732276917e-01, 2.559580206871033e-01, 2.332188934087753e-01, 2.109477967023849e-01, 1.891838014125824e-01, 1.679650694131851e-01, 1.473288536071777e-01, 1.273113340139389e-01, 1.079476401209831e-01, 8.927173912525177e-02, 7.131639122962952e-02, 5.411310493946075e-02, 3.769205510616302e-02, 2.208204939961433e-02, 7.310474291443825e-03, 0e+00, 0e+00] +PLRs7.yOpeDow=[2.5e+00, 2.625627040863037e+00, 2.751033544540405e+00, 2.875999689102173e+00, 3.000306129455566e+00, 3.123735189437866e+00, 3.246069669723511e+00, 3.367095470428467e+00, 3.486599922180176e+00, 3.604373693466187e+00, 3.720209836959839e+00, 3.833905458450317e+00, 3.945261001586914e+00, 4.054080963134766e+00, 4.16017484664917e+00, 4.263355731964111e+00, 4.363443374633789e+00, 4.460261821746826e+00, 4.553641319274902e+00, 4.643417835235596e+00, 4.729434490203857e+00, 4.811539649963379e+00, 4.889589786529541e+00, 4.963447570800781e+00, 5.032983779907227e+00, 5.098076343536377e+00, 5.158610820770264e+00, 5.214481353759766e+00, 5.265589237213135e+00, 5.311845779418945e+00, 5.353169441223145e+00, 5.389487743377686e+00, 5.420736789703369e+00, 5.446861743927002e+00, 5.467816829681396e+00, 5.483565807342529e+00, 5.494080066680908e+00, 5.49934196472168e+00, 5.49934196472168e+00, 5.494080066680908e+00, 5.483565807342529e+00, 5.467816829681396e+00, 5.446861743927002e+00, 5.420736789703369e+00, 5.389487743377686e+00, 5.353169441223145e+00, 5.311845779418945e+00, 5.265589237213135e+00, 5.214481353759766e+00, 5.158610820770264e+00, 5.098076343536377e+00, 5.032983779907227e+00, 4.963447570800781e+00, 4.889589786529541e+00, 4.811539649963379e+00, 4.729434490203857e+00, 4.643417835235595e+00, 4.553641319274903e+00, 4.460261821746826e+00, 4.363443374633789e+00, 4.263355731964111e+00, 4.16017484664917e+00, 4.054080963134766e+00, 3.945261001586914e+00, 3.833905458450317e+00, 3.720209836959839e+00, 3.604373693466187e+00, 3.486599922180176e+00, 3.367095470428465e+00, 3.246069669723512e+00, 3.123735189437866e+00, 3.000306129455566e+00, 2.875999689102173e+00, 2.751033544540405e+00, 2.625627040863037e+00, 2.5e+00, 2.374372959136963e+00, 2.248966455459595e+00, 2.124000310897827e+00, 1.999693751335144e+00, 1.876264929771423e+00, 1.753930330276488e+00, 1.632904648780824e+00, 1.513400077819824e+00, 1.395626306533813e+00, 1.279790043830872e+00, 1.166094422340393e+00, 1.054738998413086e+00, 9.459189772605896e-01, 8.398253321647644e-01, 7.366442680358887e-01, 6.365566849708557e-01, 5.397381782531738e-01, 4.463586807250977e-01, 3.565819561481476e-01, 2.705655097961426e-01, 1.884602755308151e-01, 1.104102432727814e-01, 3.655237331986427e-02, 0e+00, 0e+00] +PLRs7.yOpeMin=[1e+00, 1e+00] +PLRs7.yOpeUpMin=[2.000000029802322e-01, 2.000000029802322e-01] +PLRs7.yStaUp=[8.00000011920929e-01, 8.00000011920929e-01] +PLRs7.yStaDow=[8.00000011920929e-01, 8.00000011920929e-01] +PLRs7.uCapReq=[5e+05, 5.25125375e+05, 5.502066875e+05, 5.751999375e+05, 6.0006125e+05, 6.24747e+05, 6.492139375e+05, 6.734190625e+05, 6.9732e+05, 7.2087475e+05, 7.44042e+05, 7.66781125e+05, 7.890521875e+05, 8.108161875e+05, 8.320349375e+05, 8.52671125e+05, 8.726886875e+05, 8.92052375e+05, 9.1072825e+05, 9.28683625e+05, 9.45886875e+05, 9.623079375e+05, 9.779179375e+05, 9.926895e+05, 1.00659675e+06, 1.01961525e+06, 1.031722125e+06, 1.04289625e+06, 1.053117875e+06, 1.06236925e+06, 1.070633875e+06, 1.0778975e+06, 1.084147375e+06, 1.089372375e+06, 1.093563375e+06, 1.096713125e+06, 1.098816e+06, 1.099868375e+06, 1.099868375e+06, 1.098816e+06, 1.096713125e+06, 1.093563375e+06, 1.089372375e+06, 1.084147375e+06, 1.0778975e+06, 1.070633875e+06, 1.06236925e+06, 1.053117875e+06, 1.04289625e+06, 1.031722125e+06, 1.01961525e+06, 1.00659675e+06, 9.926895e+05, 9.779179375e+05, 9.623079375e+05, 9.45886875e+05, 9.286836249999999e+05, 9.107282500000001e+05, 8.92052375e+05, 8.726886875e+05, 8.52671125e+05, 8.320349375e+05, 8.108161875e+05, 7.890521875e+05, 7.66781125e+05, 7.44042e+05, 7.2087475e+05, 6.9732e+05, 6.734190624999998e+05, 6.492139375000002e+05, 6.24747e+05, 6.0006125e+05, 5.751999375e+05, 5.502066875e+05, 5.25125375e+05, 5e+05, 4.7487459375e+05, 4.4979328125e+05, 4.248000625e+05, 3.9993875e+05, 3.75253e+05, 3.507860624999998e+05, 3.265809062500002e+05, 3.0268e+05, 2.7912528125e+05, 2.55958015625e+05, 2.33218890625e+05, 2.10947796875e+05, 1.89183796875e+05, 1.67965078125e+05, 1.4732884375e+05, 1.27311328125e+05, 1.07947640625e+05, 8.9271734375e+04, 7.1316390625e+04, 5.411310546875e+04, 3.76920546875e+04, 2.2082048828125e+04, 7.310474609375e+03, 0e+00, 0e+00] +PLRs7.uCapDes=[2e+05, 2e+05] +PLRs7.uUpCapDes=[1e+06, 1e+06] +PLRs7.uDowCapDes=[2e+05, 2e+05] +PLRs7.uCapMin=[2e+05, 2e+05] +PLRs7.uUpCapMin=[2e+05, 2e+05] +PLRs7.nSta=[3e+00, 3e+00] +PLRs7.u=[0e+00, 0e+00] +PLRs7.uUp=[1e+00, 1e+00] +PLRs7.uDown=[0e+00, 0e+00] +PLRs7.uTyp[1]=[1e+00, 1e+00] +PLRs7.uTyp[2]=[2e+00, 2e+00] +PLRs7.uTyp[3]=[3e+00, 3e+00] +PLRs7.uLif=[1.6e+01, 1.6e+01] +PLRs7.uLifMax=[2e+01, 2e+01] +PLRs7.uLifMin=[1e+01, 1e+01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Status_u_uAva.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Status_u_uAva.txt new file mode 100644 index 00000000000..4c3f4dc3b52 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Status_u_uAva.txt @@ -0,0 +1,120 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +sta.nSta=[4e+00, 4e+00] +sta.nChi=[3e+00, 3e+00] +sta.u=[3e+00, 3e+00] +sta.uAva[1]=[1e+00, 1e+00] +sta.uAva[2]=[1e+00, 1e+00] +sta.uAva[3]=[1e+00, 1e+00] +sta.uAva[4]=[1e+00, 1e+00] +sta.staMat[3, 1]=[0e+00, 0e+00] +sta.staMat[3, 2]=[1e+00, 1e+00] +sta.staMat[3, 3]=[1e+00, 1e+00] +sta.yHig=[0e+00, 0e+00] +sta.yLow=[0e+00, 0e+00] +sta.yAvaUp=[4e+00, 4e+00] +sta.yAvaDow=[2e+00, 2e+00] +sta1.nSta=[4e+00, 4e+00] +sta1.nChi=[3e+00, 3e+00] +sta1.u=[2e+00, 2e+00] +sta1.uAva[1]=[0e+00, 0e+00] +sta1.uAva[2]=[1e+00, 1e+00] +sta1.uAva[3]=[1e+00, 1e+00] +sta1.uAva[4]=[1e+00, 1e+00] +sta1.staMat[3, 1]=[0e+00, 0e+00] +sta1.staMat[3, 2]=[1e+00, 1e+00] +sta1.staMat[3, 3]=[1e+00, 1e+00] +sta1.yHig=[0e+00, 0e+00] +sta1.yLow=[1e+00, 1e+00] +sta1.yAvaUp=[3e+00, 3e+00] +sta1.yAvaDow=[0e+00, 0e+00] +sta2.nSta=[4e+00, 4e+00] +sta2.nChi=[3e+00, 3e+00] +sta2.u=[3e+00, 3e+00] +sta2.uAva[1]=[1e+00, 1e+00] +sta2.uAva[2]=[0e+00, 0e+00] +sta2.uAva[3]=[1e+00, 1e+00] +sta2.uAva[4]=[0e+00, 0e+00] +sta2.staMat[3, 1]=[0e+00, 0e+00] +sta2.staMat[3, 2]=[1e+00, 1e+00] +sta2.staMat[3, 3]=[1e+00, 1e+00] +sta2.yHig=[1e+00, 1e+00] +sta2.yLow=[0e+00, 0e+00] +sta2.yAvaUp=[3e+00, 3e+00] +sta2.yAvaDow=[1e+00, 1e+00] +sta3.nSta=[4e+00, 4e+00] +sta3.nChi=[3e+00, 3e+00] +sta3.u=[1e+00, 1e+00] +sta3.uAva[1]=[1e+00, 1e+00] +sta3.uAva[2]=[0e+00, 0e+00] +sta3.uAva[3]=[1e+00, 1e+00] +sta3.uAva[4]=[0e+00, 0e+00] +sta3.staMat[1, 1]=[0e+00, 0e+00] +sta3.staMat[1, 2]=[1e+00, 1e+00] +sta3.staMat[1, 3]=[0e+00, 0e+00] +sta3.yHig=[0e+00, 0e+00] +sta3.yLow=[1e+00, 1e+00] +sta3.yAvaUp=[3e+00, 3e+00] +sta3.yAvaDow=[0e+00, 0e+00] +sta4.nSta=[4e+00, 4e+00] +sta4.nChi=[3e+00, 3e+00] +sta4.u=[4e+00, 4e+00] +sta4.uAva[1]=[1e+00, 1e+00] +sta4.uAva[2]=[1e+00, 1e+00] +sta4.uAva[3]=[1e+00, 1e+00] +sta4.uAva[4]=[1e+00, 1e+00] +sta4.staMat[3, 1]=[0e+00, 0e+00] +sta4.staMat[3, 2]=[1e+00, 1e+00] +sta4.staMat[3, 3]=[1e+00, 1e+00] +sta4.yHig=[1e+00, 1e+00] +sta4.yLow=[0e+00, 0e+00] +sta4.yAvaUp=[4e+00, 4e+00] +sta4.yAvaDow=[3e+00, 3e+00] +sta5.nSta=[4e+00, 4e+00] +sta5.nChi=[3e+00, 3e+00] +sta5.u=[0e+00, 0e+00] +sta5.uAva[1]=[1e+00, 1e+00] +sta5.uAva[2]=[1e+00, 1e+00] +sta5.uAva[3]=[1e+00, 1e+00] +sta5.uAva[4]=[1e+00, 1e+00] +sta5.staMat[1, 1]=[1e+00, 1e+00] +sta5.staMat[1, 2]=[0e+00, 0e+00] +sta5.staMat[1, 3]=[0e+00, 0e+00] +sta5.yHig=[0e+00, 0e+00] +sta5.yLow=[1e+00, 1e+00] +sta5.yAvaUp=[1e+00, 1e+00] +sta5.yAvaDow=[0e+00, 0e+00] +sta6.nSta=[4e+00, 4e+00] +sta6.nChi=[3e+00, 3e+00] +sta6.u=[2e+00, 2e+00] +sta6.uAva[1]=[1e+00, 1e+00] +sta6.uAva[2]=[0e+00, 0e+00] +sta6.uAva[3]=[1e+00, 1e+00] +sta6.uAva[4]=[0e+00, 0e+00] +sta6.staMat[3, 1]=[0e+00, 0e+00] +sta6.staMat[3, 2]=[1e+00, 1e+00] +sta6.staMat[3, 3]=[1e+00, 1e+00] +sta6.yHig=[0e+00, 0e+00] +sta6.yLow=[0e+00, 0e+00] +sta6.yAvaUp=[3e+00, 3e+00] +sta6.yAvaDow=[1e+00, 1e+00] +sta7.nSta=[4e+00, 4e+00] +sta7.nChi=[3e+00, 3e+00] +sta7.u=[3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+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, 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] +sta7.uAva[1]=[1e+00, 1e+00] +sta7.uAva[2]=[1e+00, 1e+00] +sta7.uAva[3]=[0e+00, 0e+00] +sta7.uAva[4]=[0e+00, 0e+00] +sta7.staMat[1, 1]=[1e+00, 1e+00] +sta7.staMat[1, 2]=[0e+00, 0e+00] +sta7.staMat[1, 3]=[0e+00, 0e+00] +sta7.yHig=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +sta7.yLow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +sta7.yAvaUp=[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, 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] +sta7.yAvaDow=[2e+00, 2e+00, 2e+00, 2e+00, 2e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Up.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Up.txt new file mode 100644 index 00000000000..9b47cba3d7b --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Subsequences_Validation_Up.txt @@ -0,0 +1,24 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +staUp.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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +staUp.uPla=[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] +staUp.uOpe=[8.500000238418579e-01, 8.553751707077026e-01, 8.606880307197571e-01, 8.658770322799683e-01, 8.708820343017578e-01, 8.756449818611145e-01, 8.801106810569763e-01, 8.842273354530334e-01, 8.879473209381104e-01, 8.912274837493896e-01, 8.940297961235046e-01, 8.96321713924408e-01, 8.980768322944641e-01, 8.992746472358704e-01, 8.999013304710388e-01, 8.999496698379517e-01, 8.994190096855164e-01, 8.983156085014343e-01, 8.966521620750427e-01, 8.944479823112488e-01, 8.917286396026611e-01, 8.88525664806366e-01, 8.848761320114136e-01, 8.808223605155945e-01, 8.764113187789917e-01, 8.716942071914673e-01, 8.667255640029907e-01, 8.615631461143494e-01, 8.562666773796082e-01, 8.508975505828857e-01, 8.455180525779724e-01, 8.401904702186584e-01, 8.349766135215759e-01, 8.299368619918823e-01, 8.251296877861023e-01, 8.206107616424561e-01, 8.164324164390564e-01, 8.126432299613953e-01, 8.092870116233826e-01, 8.064026236534119e-01, 8.040236234664917e-01, 8.021774888038635e-01, 8.008856177330017e-01, 8.001630902290344e-01, 8.000181317329407e-01, 8.004525303840637e-01, 8.014611601829529e-01, 8.030324578285217e-01, 8.051481246948242e-01, 8.077836036682129e-01, 8.109084367752075e-01, 8.144863247871399e-01, 8.184759020805359e-01, 8.228307962417603e-01, 8.275006413459778e-01, 8.324312567710876e-01, 8.375654816627502e-01, 8.428438901901245e-01, 8.482052087783813e-01, 8.535873293876648e-01, 8.58927845954895e-01, 8.641648888587952e-01, 8.692377805709839e-01, 8.740876913070679e-01, 8.786584138870239e-01, 8.828969597816467e-01, 8.867541551589966e-01, 8.901854157447815e-01, 8.931509256362915e-01, 8.956162333488464e-01, 8.975528478622437e-01, 8.989382386207581e-01, 8.997564911842346e-01, 8.999980092048645e-01, 8.996599912643433e-01, 8.987463712692261e-01, 8.972678184509277e-01, 8.95241379737854e-01, 8.926905393600464e-01, 8.896448612213135e-01, 8.861397504806519e-01, 8.822157382965088e-01, 8.779183030128479e-01, 8.732972741127014e-01, 8.684062361717224e-01, 8.633018136024475e-01, 8.580432534217834e-01, 8.526914715766907e-01, 8.473085165023804e-01, 8.419567346572876e-01, 8.366981744766235e-01, 8.315937519073486e-01, 8.267027139663696e-01, 8.220816850662231e-01, 8.17784309387207e-01, 8.138602375984192e-01, 8.103551268577576e-01, 8.073094487190247e-01, 8.047586679458618e-01, 8.027321696281433e-01, 8.01253616809845e-01] +staUp.uStaUp=[8.00000011920929e-01, 8.00000011920929e-01] +staUp.dpChiWatPumSet_local=[4.48175e+05, 4.48175e+05] +staUp.dpChiWatPum_local=[4.34385e+05, 4.34385e+05, 4.34385e+05, 4.34385e+05, 4.34385e+05, 4.34385e+05, 4.34385e+05, 4.34385e+05, 4.34385e+05, 4.352491875e+05, 4.365156875e+05, 4.377066875e+05, 4.3878003125e+05, 4.396976875e+05, 4.40427125e+05, 4.4094253125e+05, 4.41225625e+05, 4.4126640625e+05, 4.41063375e+05, 4.4062378125e+05, 4.399631875e+05, 4.391049375e+05, 4.3807953125e+05, 4.3692321875e+05, 4.35677e+05, 4.34385e+05, 4.33093e+05, 4.3184678125e+05, 4.3069046875e+05, 4.296650625e+05, 4.288068125e+05, 4.2814621875e+05, 4.27706625e+05, 4.2750359375e+05, 4.27544375e+05, 4.2782746875e+05, 4.28342875e+05, 4.290723125e+05, 4.2998996875e+05, 4.310633125e+05, 4.322543125e+05, 4.335208125e+05, 4.348179375e+05, 4.3609971875e+05, 4.3732075e+05, 4.3843778125e+05, 4.3941125e+05, 4.4020665625e+05, 4.407958125e+05, 4.41157875e+05, 4.4128e+05, 4.41157875e+05, 4.407958125e+05, 4.4020665625e+05, 4.3941125e+05, 4.3843778125e+05, 4.3732075e+05, 4.3609971875e+05, 4.348179375e+05, 4.335208125e+05, 4.322543125e+05, 4.310633125e+05, 4.2998996875e+05, 4.290723125e+05, 4.28342875e+05, 4.2782746875e+05, 4.27544375e+05, 4.2750359375e+05, 4.27706625e+05, 4.2814621875e+05, 4.288068125e+05, 4.296650625e+05, 4.3069046875e+05, 4.3184678125e+05, 4.33093e+05, 4.34385e+05, 4.35677e+05, 4.3692321875e+05, 4.3807953125e+05, 4.391049375e+05, 4.399631875e+05, 4.4062378125e+05, 4.41063375e+05, 4.4126640625e+05, 4.41225625e+05, 4.4094253125e+05, 4.40427125e+05, 4.396976875e+05, 4.3878003125e+05, 4.377066875e+05, 4.365156875e+05, 4.352491875e+05, 4.339520625e+05, 4.3267028125e+05, 4.3144925e+05, 4.3033221875e+05, 4.2935875e+05, 4.2856334375e+05, 4.279741875e+05, 4.27612125e+05, 4.2749e+05] +staUp.TChiWatSup=[2.891499938964844e+02, 2.8933837890625e+02, 2.895260009765625e+02, 2.89712158203125e+02, 2.898960571289062e+02, 2.900770568847656e+02, 2.902543640136719e+02, 2.904273376464844e+02, 2.905952758789062e+02, 2.907574768066406e+02, 2.909133605957031e+02, 2.910622863769531e+02, 2.912036437988281e+02, 2.913369140625e+02, 2.914615478515625e+02, 2.915770568847656e+02, 2.916829833984375e+02, 2.917789306640625e+02, 2.918644714355469e+02, 2.919393310546875e+02, 2.92003173828125e+02, 2.920557556152344e+02, 2.920968627929688e+02, 2.921263427734375e+02, 2.921440734863281e+02, 2.921499938964844e+02, 2.921440734863281e+02, 2.921263427734375e+02, 2.920968627929688e+02, 2.920557556152344e+02, 2.92003173828125e+02, 2.919393310546875e+02, 2.918644714355469e+02, 2.917789306640625e+02, 2.916829833984375e+02, 2.915770568847656e+02, 2.914615478515625e+02, 2.913369140625e+02, 2.912036437988281e+02, 2.910622863769531e+02, 2.909133605957031e+02, 2.907574768066406e+02, 2.905952758789062e+02, 2.904273376464844e+02, 2.902543640136719e+02, 2.900770568847656e+02, 2.898960571289062e+02, 2.89712158203125e+02, 2.895260009765625e+02, 2.8933837890625e+02, 2.891499938964844e+02, 2.889616394042969e+02, 2.887739868164062e+02, 2.885878601074219e+02, 2.884039306640625e+02, 2.882229614257812e+02, 2.880456237792969e+02, 2.878726501464844e+02, 2.877047424316406e+02, 2.875425109863281e+02, 2.873866577148438e+02, 2.872377319335938e+02, 2.870963439941406e+02, 2.869631042480469e+02, 2.868384704589844e+02, 2.867229614257812e+02, 2.866170043945312e+02, 2.865210876464844e+02, 2.864355163574219e+02, 2.863606567382812e+02, 2.862968444824219e+02, 2.862442626953125e+02, 2.86203125e+02, 2.861736450195312e+02, 2.861559143066406e+02, 2.861499938964844e+02, 2.861559143066406e+02, 2.861736450195312e+02, 2.86203125e+02, 2.862442626953125e+02, 2.862968444824219e+02, 2.863606567382812e+02, 2.864355163574219e+02, 2.865210876464844e+02, 2.866170043945312e+02, 2.867229614257812e+02, 2.868384704589844e+02, 2.869631042480469e+02, 2.870963439941406e+02, 2.872377319335938e+02, 2.873866577148438e+02, 2.875425109863281e+02, 2.877047424316406e+02, 2.878726501464844e+02, 2.880456237792969e+02, 2.882229614257812e+02, 2.884039306640625e+02, 2.885878601074219e+02, 2.887739868164062e+02, 2.889616394042969e+02, 2.891499938964844e+02] +staUp.TChiWatSupSet=[2.871499938964844e+02, 2.871499938964844e+02] +staUp1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 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] +staUp1.uPla=[1e+00, 1e+00] +staUp1.uOpe=[8.500000238418579e-01, 8.607503771781921e-01, 8.71376097202301e-01, 8.817541003227234e-01, 8.917640447616577e-01, 9.012899398803711e-01, 9.102213382720947e-01, 9.184547066688538e-01, 9.258946776390076e-01, 9.324549436569214e-01, 9.380595684051514e-01, 9.426434636116028e-01, 9.461536407470703e-01, 9.485492706298828e-01, 9.498026967048645e-01, 9.498993158340454e-01, 9.488380551338196e-01, 9.466311931610107e-01, 9.433043003082275e-01, 9.388960003852844e-01, 9.334573149681091e-01, 9.27051305770874e-01, 9.197522401809692e-01, 9.116446971893311e-01, 9.028226733207703e-01, 8.933883905410767e-01, 8.834511637687683e-01, 8.731262683868408e-01, 8.625333309173584e-01, 8.517950773239136e-01, 8.410360813140869e-01, 8.30380916595459e-01, 8.199532032012939e-01, 8.098737001419067e-01, 8.002593517303467e-01, 7.912214994430542e-01, 7.828648686408997e-01, 7.752864360809326e-01, 7.685739994049072e-01, 7.628052830696106e-01, 7.580472230911255e-01, 7.543549537658691e-01, 7.517712712287903e-01, 7.503260970115662e-01, 7.500362396240234e-01, 7.509050369262695e-01, 7.529223561286926e-01, 7.560648918151855e-01, 7.602961659431458e-01, 7.655671834945679e-01, 7.718168497085571e-01, 7.789726853370667e-01, 7.869517803192139e-01, 7.956616282463074e-01, 8.050013184547425e-01, 8.148624897003175e-01, 8.251309990882875e-01, 8.356877565383911e-01, 8.464103937149048e-01, 8.571746349334717e-01, 8.678556680679321e-01, 8.783298134803772e-01, 8.884755373001099e-01, 8.981753587722778e-01, 9.073168039321899e-01, 9.157938957214355e-01, 9.2350834608078e-01, 9.303708672523499e-01, 9.363017678260803e-01, 9.41232442855835e-01, 9.451056718826294e-01, 9.47876513004303e-01, 9.495129585266113e-01, 9.499959945678711e-01, 9.493199586868286e-01, 9.47492778301239e-01, 9.445356130599976e-01, 9.404826760292053e-01, 9.353810548782349e-01, 9.292897582054138e-01, 9.222794771194458e-01, 9.144314527511597e-01, 9.058365821838379e-01, 8.965945243835449e-01, 8.868124485015869e-01, 8.766036629676819e-01, 8.660865426063538e-01, 8.553829789161682e-01, 8.446170091629028e-01, 8.339134454727173e-01, 8.233963251113892e-01, 8.131875395774841e-01, 8.034054636955261e-01, 7.941634058952332e-01, 7.855685949325562e-01, 7.777205109596252e-01, 7.707102298736572e-01, 7.646189332008362e-01, 7.595173120498657e-01, 7.554643750190735e-01, 7.52507209777832e-01] +staUp1.uStaUp=[8.00000011920929e-01, 8.00000011920929e-01] +staUp1.dpChiWatPumSet_local=[4.48175e+05, 4.48175e+05] +staUp1.dpChiWatPum_local=[4.34385e+05, 4.34385e+05, 4.34385e+05, 4.34385e+05, 4.34385e+05, 4.34385e+05, 4.34385e+05, 4.34385e+05, 4.34385e+05, 4.30159e+05, 4.3125475e+05, 4.3246134375e+05, 4.33736125e+05, 4.35033875e+05, 4.3630865625e+05, 4.3751525e+05, 4.38611e+05, 4.3955703125e+05, 4.403198125e+05, 4.40872375e+05, 4.41195125e+05, 4.4127659375e+05, 4.411139375e+05, 4.4071290625e+05, 4.4008771875e+05, 4.392605e+05, 4.382605625e+05, 4.3712334375e+05, 4.3588909375e+05, 4.346015625e+05, 4.33306375e+05, 4.3204940625e+05, 4.3087515625e+05, 4.2982525e+05, 4.28936875e+05, 4.282415e+05, 4.2776378125e+05, 4.2752059375e+05, 4.2752059375e+05, 4.2776378125e+05, 4.282415e+05, 4.28936875e+05, 4.2982525e+05, 4.3087515625e+05, 4.3204940625e+05, 4.33306375e+05, 4.346015625e+05, 4.3588909375e+05, 4.3712334375e+05, 4.382605625e+05, 4.392605e+05, 4.4008771875e+05, 4.4071290625e+05, 4.411139375e+05, 4.4127659375e+05, 4.41195125e+05, 4.40872375e+05, 4.403198125e+05, 4.3955703125e+05, 4.38611e+05, 4.3751525e+05, 4.3630865625e+05, 4.35033875e+05, 4.33736125e+05, 4.3246134375e+05, 4.3125475e+05, 4.30159e+05, 4.2921296875e+05, 4.284501875e+05, 4.27897625e+05, 4.27574875e+05, 4.2749340625e+05, 4.276560625e+05, 4.2805709375e+05, 4.2868228125e+05, 4.295095e+05, 4.305094375e+05, 4.3164665625e+05, 4.3288090625e+05, 4.341684375e+05, 4.35463625e+05, 4.3672059375e+05, 4.3789484375e+05, 4.3894475e+05, 4.39833125e+05, 4.405285e+05, 4.4100621875e+05, 4.4124940625e+05, 4.4124940625e+05, 4.4100621875e+05, 4.405285e+05, 4.39833125e+05, 4.3894475e+05, 4.3789484375e+05, 4.3672059375e+05, 4.35463625e+05, 4.341684375e+05, 4.3288090625e+05, 4.3164665625e+05, 4.305094375e+05, 4.295095e+05] +staUp1.TChiWatSup=[2.886499938964844e+02, 2.8883837890625e+02, 2.890260009765625e+02, 2.89212158203125e+02, 2.893960571289062e+02, 2.895770568847656e+02, 2.897543640136719e+02, 2.899273376464844e+02, 2.900952758789062e+02, 2.902574768066406e+02, 2.904133605957031e+02, 2.905622863769531e+02, 2.907036437988281e+02, 2.908369140625e+02, 2.909615478515625e+02, 2.910770568847656e+02, 2.911829833984375e+02, 2.912789306640625e+02, 2.913644714355469e+02, 2.914393310546875e+02, 2.91503173828125e+02, 2.915557556152344e+02, 2.915968627929688e+02, 2.916263427734375e+02, 2.916440734863281e+02, 2.916499938964844e+02, 2.916440734863281e+02, 2.916263427734375e+02, 2.915968627929688e+02, 2.915557556152344e+02, 2.91503173828125e+02, 2.914393310546875e+02, 2.913644714355469e+02, 2.912789306640625e+02, 2.911829833984375e+02, 2.910770568847656e+02, 2.909615478515625e+02, 2.908369140625e+02, 2.907036437988281e+02, 2.905622863769531e+02, 2.904133605957031e+02, 2.902574768066406e+02, 2.900952758789062e+02, 2.899273376464844e+02, 2.897543640136719e+02, 2.895770568847656e+02, 2.893960571289062e+02, 2.89212158203125e+02, 2.890260009765625e+02, 2.8883837890625e+02, 2.886499938964844e+02, 2.884616394042969e+02, 2.882739868164062e+02, 2.880878601074219e+02, 2.879039306640625e+02, 2.877229614257812e+02, 2.875456237792969e+02, 2.873726501464844e+02, 2.872047424316406e+02, 2.870425109863281e+02, 2.868866577148438e+02, 2.867377319335938e+02, 2.865963439941406e+02, 2.864631042480469e+02, 2.863384704589844e+02, 2.862229614257812e+02, 2.861170043945312e+02, 2.860210876464844e+02, 2.859355163574219e+02, 2.858606567382812e+02, 2.857968444824219e+02, 2.857442626953125e+02, 2.85703125e+02, 2.856736450195312e+02, 2.856559143066406e+02, 2.856499938964844e+02, 2.856559143066406e+02, 2.856736450195312e+02, 2.85703125e+02, 2.857442626953125e+02, 2.857968444824219e+02, 2.858606567382812e+02, 2.859355163574219e+02, 2.860210876464844e+02, 2.861170043945312e+02, 2.862229614257812e+02, 2.863384704589844e+02, 2.864631042480469e+02, 2.865963439941406e+02, 2.867377319335938e+02, 2.868866577148438e+02, 2.870425109863281e+02, 2.872047424316406e+02, 2.873726501464844e+02, 2.875456237792969e+02, 2.877229614257812e+02, 2.879039306640625e+02, 2.880878601074219e+02, 2.882739868164062e+02, 2.884616394042969e+02, 2.886499938964844e+02] +staUp1.TChiWatSupSet=[2.871499938964844e+02, 2.871499938964844e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Validation_SetpointController_WSE.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Validation_SetpointController_WSE.txt new file mode 100644 index 00000000000..2e7e0e280e1 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Validation_SetpointController_WSE.txt @@ -0,0 +1,26 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "2", + "numerical Jacobians": "0" +} +time=[0e+00, 1.4e+04] +staSetCon.ySta=[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, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+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, 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, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+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, 1e+00, 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] +staSetCon.cap.yDes=[5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05] +staSetCon.capReq.y=[0e+00, 3.75069873046875e+03, 8.6942431640625e+03, 1.9492548828125e+04, 3.442346484375e+04, 5.28104609375e+04, 7.4562734375e+04, 9.956688281250001e+04, 1.276877578125e+05, 1.4509703125e+05, 1.4509703125e+05, 1.4509703125e+05, 1.4509703125e+05, 1.4509703125e+05, 1.4509703125e+05, 1.4509703125e+05, 4.4222471875e+05, 4.8923571875e+05, 5.3706025e+05, 5.854075625e+05, 6.3398025e+05, 6.82479e+05, 7.3060425e+05, 7.33307875e+05, 7.33307875e+05, 7.33307875e+05, 7.33307875e+05, 7.33307875e+05, 7.33307875e+05, 1.032673125e+06, 1.067612875e+06, 1.0997755e+06, 1.12896125e+06, 1.154985e+06, 1.177684875e+06, 1.195395625e+06, 1.195395625e+06, 1.195395625e+06, 1.195395625e+06, 1.195395625e+06, 1.195395625e+06, 1.195395625e+06, 1.22689775e+06, 1.215964e+06, 1.201327375e+06, 1.18307775e+06, 1.161332875e+06, 1.136228375e+06, 1.107917125e+06, 1.0765785e+06, 1.0424091875e+06, 1.0056199375e+06, 9.66442625e+05, 9.25120125e+05, 8.819148124999998e+05, 8.370944374999997e+05, 7.909375624999997e+05, 7.437335000000003e+05, 6.957716875000003e+05, 6.473511875e+05, 5.98771125e+05, 5.503291875e+05, 5.0232315625e+05, 4.5505409375e+05, 4.0880678125e+05, 3.638568125e+05, 3.204793125e+05, 2.7893359375e+05, 2.41209234375e+05, 2.41209234375e+05, 2.41209234375e+05, 2.41209234375e+05, 2.41209234375e+05, 2.41209234375e+05, 2.41209234375e+05, 3.897840625e+04, 2.309541015625e+04, 1.07252744140625e+04, 2.89363037109375e+03, 1.038126220703125e+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] +staSetCon.staUp.y=[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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staSetCon.staDow.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staSetCon.yChiSet[1]=[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, 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, 0e+00, 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] +staSetCon.yChiSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +staSetCon.chaPro=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staSetCon1.ySta=[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, 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, 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, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staSetCon1.cap.yDes=[3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05] +staSetCon1.capReq.y=[0e+00, 3.75069873046875e+03, 8.6942431640625e+03, 1.9492548828125e+04, 3.442346484375e+04, 5.28104609375e+04, 7.4562734375e+04, 9.956688281250001e+04, 1.276877578125e+05, 1.4509703125e+05, 1.4509703125e+05, 1.4509703125e+05, 1.4509703125e+05, 1.4509703125e+05, 1.4509703125e+05, 1.4509703125e+05, 4.4222471875e+05, 4.8923571875e+05, 5.3706025e+05, 5.854075625e+05, 6.3398025e+05, 6.82479e+05, 7.0316725e+05, 7.0316725e+05, 7.0316725e+05, 7.0316725e+05, 7.0316725e+05, 7.0316725e+05, 9.951764375000001e+05, 1.032673125e+06, 1.067612875e+06, 1.0997755e+06, 1.12896125e+06, 1.154985e+06, 1.177684875e+06, 1.183539625e+06, 1.183539625e+06, 1.183539625e+06, 1.183539625e+06, 1.183539625e+06, 1.183539625e+06, 1.234061e+06, 1.22689775e+06, 1.215964e+06, 1.201327375e+06, 1.18307775e+06, 1.161332875e+06, 1.136228375e+06, 1.1323765e+06, 1.1323765e+06, 1.1323765e+06, 1.1323765e+06, 1.1323765e+06, 1.1323765e+06, 8.819148124999998e+05, 8.370944374999997e+05, 7.909375624999997e+05, 7.437335000000003e+05, 6.957716875000003e+05, 6.473511875e+05, 5.98771125e+05, 5.503291875e+05, 5.0232315625e+05, 4.5505409375e+05, 4.0880678125e+05, 3.638568125e+05, 3.204793125e+05, 2.99203e+05, 2.99203e+05, 2.99203e+05, 2.99203e+05, 2.99203e+05, 2.99203e+05, 8.09639453125e+04, 5.829911328125e+04, 3.897840625e+04, 2.309541015625e+04, 1.07252744140625e+04, 2.89363037109375e+03, 1.038126220703125e+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] +staSetCon1.staUp.y=[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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staSetCon1.staDow.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, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staSetCon1.yChiSet[1]=[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, 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, 0e+00, 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] +staSetCon1.yChiSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +staSetCon1.yChiSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +staSetCon1.chaPro=[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, 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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Validation_SetpointController_noWSE.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Validation_SetpointController_noWSE.txt new file mode 100644 index 00000000000..900368ef654 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Staging_SetPoints_Validation_SetpointController_noWSE.txt @@ -0,0 +1,26 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "2", + "numerical Jacobians": "0" +} +time=[0e+00, 1.4e+04] +staSetCon.ySta=[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, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+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, 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, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staSetCon.cap.yDes=[5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05, 5e+05] +staSetCon.capReq.y=[0e+00, 2.281926879882812e+02, 2.281926879882812e+02, 2.281926879882812e+02, 2.281926879882812e+02, 2.281926879882812e+02, 2.281926879882812e+02, 9.956688281250001e+04, 1.276879765625e+05, 1.58769578125e+05, 1.92635453125e+05, 2.29089765625e+05, 2.6792040625e+05, 3.088988125e+05, 3.517821250000001e+05, 3.963135e+05, 4.4222471875e+05, 4.8923571875e+05, 5.3706025e+05, 5.854106875e+05, 6.33983375e+05, 6.82479e+05, 7.3060425e+05, 7.33307875e+05, 7.33307875e+05, 7.33307875e+05, 7.33307875e+05, 7.33307875e+05, 7.33307875e+05, 1.032673125e+06, 1.067612875e+06, 1.099778e+06, 1.128966e+06, 1.15498975e+06, 1.177684875e+06, 1.195395625e+06, 1.195395625e+06, 1.195395625e+06, 1.195395625e+06, 1.195395625e+06, 1.195395625e+06, 1.195395625e+06, 1.22689775e+06, 1.215964e+06, 1.201326875e+06, 1.1830765e+06, 1.161332e+06, 1.136228375e+06, 1.107917125e+06, 1.0765785e+06, 1.0424091875e+06, 1.0056165625e+06, 9.6643925e+05, 9.25120125e+05, 8.819147499999998e+05, 8.370944374999997e+05, 7.909375624999997e+05, 7.437335000000003e+05, 6.957716875000003e+05, 6.473511875e+05, 5.98771125e+05, 5.503291875e+05, 5.0232315625e+05, 4.5505409375e+05, 4.0880678125e+05, 3.638568125e+05, 3.204793125e+05, 2.7893359375e+05, 2.41209234375e+05, 2.41209234375e+05, 2.41209234375e+05, 2.41209234375e+05, 2.41209234375e+05, 2.41209234375e+05, 2.41209234375e+05, 3.897840625e+04, 2.309541015625e+04, 1.07252744140625e+04, 2.89363037109375e+03, 1.038126220703125e+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] +staSetCon.staUp.y=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +staSetCon.staDow.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staSetCon.yChiSet[1]=[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, 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, 0e+00, 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] +staSetCon.yChiSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +staSetCon.chaPro=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staSetCon1.ySta=[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, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+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, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+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, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staSetCon1.cap.yDes=[3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 1.2e+06, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 7e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 4e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05, 3e+05] +staSetCon1.capReq.y=[0e+00, 2.281926879882812e+02, 2.281926879882812e+02, 2.281926879882812e+02, 2.281926879882812e+02, 2.281926879882812e+02, 2.281926879882812e+02, 9.956688281250001e+04, 1.276879765625e+05, 1.58769578125e+05, 1.92635453125e+05, 2.29089765625e+05, 2.6792040625e+05, 3.088988125e+05, 3.517821250000001e+05, 3.963135e+05, 4.4222471875e+05, 4.8923571875e+05, 5.3706025e+05, 5.419833125e+05, 5.419833125e+05, 5.419833125e+05, 5.419833125e+05, 5.419833125e+05, 5.419833125e+05, 8.6978175e+05, 9.13477625e+05, 9.553613750000001e+05, 9.951764375000001e+05, 1.032673125e+06, 1.067612875e+06, 1.09852375e+06, 1.09852375e+06, 1.09852375e+06, 1.09852375e+06, 1.09852375e+06, 1.09852375e+06, 1.09852375e+06, 1.232671875e+06, 1.236992375e+06, 1.237437625e+06, 1.234061e+06, 1.22689775e+06, 1.215964e+06, 1.204286625e+06, 1.204286625e+06, 1.204286625e+06, 1.204286625e+06, 1.204286625e+06, 1.204286625e+06, 1.204286625e+06, 1.0056165625e+06, 9.6643925e+05, 9.25120125e+05, 8.819147499999998e+05, 8.370944374999997e+05, 7.909375624999997e+05, 7.437335000000003e+05, 6.957716875000003e+05, 6.473511875e+05, 5.98771125e+05, 5.503291875e+05, 5.0232315625e+05, 4.5505409375e+05, 4.0880678125e+05, 3.638568125e+05, 3.204793125e+05, 2.99203e+05, 2.99203e+05, 2.99203e+05, 2.99203e+05, 2.99203e+05, 2.99203e+05, 8.09639453125e+04, 5.829911328125e+04, 3.897840625e+04, 2.309541015625e+04, 1.07252744140625e+04, 2.89363037109375e+03, 1.038126220703125e+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] +staSetCon1.staUp.y=[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +staSetCon1.staDow.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, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staSetCon1.yChiSet[1]=[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, 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, 0e+00, 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] +staSetCon1.yChiSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +staSetCon1.yChiSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +staSetCon1.chaPro=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_EnabledWSE_Subsequences_Validation_IntegratedOperation.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_EnabledWSE_Subsequences_Validation_IntegratedOperation.txt new file mode 100644 index 00000000000..bee3c07eb63 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_EnabledWSE_Subsequences_Validation_IntegratedOperation.txt @@ -0,0 +1,18 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "1", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +intOpe.uChi[1]=[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, 1e+00] +intOpe.uChi[2]=[0e+00, 0e+00] +intOpe.uWse=[1e+00, 1e+00] +intOpe.chiLoa[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.18560703125e+04, 1.2071708984375e+04, 1.22493818359375e+04, 1.2382794921875e+04, 1.24672216796875e+04, 1.24996708984375e+04, 1.2478994140625e+04, 1.24059228515625e+04, 1.2283046875e+04, 1.2114716796875e+04, 1.19068984375e+04, 1.1666953125e+04, 1.14033798828125e+04, 1.11255166015625e+04, 1.084320703125e+04, 1.05664521484375e+04, 1.03050556640625e+04, 1.00682783203125e+04, 9.8645078125e+03, 9.7009619140625e+03, 9.583435546875e+03, 9.516091796875e+03, 9.5013154296875e+03, 9.5396318359375e+03, 9.629681640625e+03, 9.7682763671875e+03, 9.9505048828125e+03, 1.01699130859375e+04, 1.04187265625e+04, 1.06881328125e+04, 1.09685859375e+04, 1.12501533203125e+04, 1.15228583984375e+04, 1.17770400390625e+04, 1.20036962890625e+04, 1.2194794921875e+04, 1.23435673828125e+04, 1.2444744140625e+04, 1.24947392578125e+04, 1.2491783203125e+04, 1.24359794921875e+04, 1.23293056640625e+04, 1.21755400390625e+04, 1.1980130859375e+04, 1.175e+04, 1.14932998046875e+04, 1.1219125e+04, 1.09371865234375e+04, 1.06574736328125e+04, 1.03898955078125e+04, 1.01439296875e+04, 9.928291015625e+03, 9.7506181640625e+03, 9.617205078125e+03, 9.5327783203125e+03, 9.5003291015625e+03, 9.521005859375e+03, 9.5940771484375e+03, 9.716953125e+03, 9.885283203125e+03, 1.00931015625e+04, 1.0333046875e+04, 1.05966201171875e+04, 1.08744833984375e+04, 1.115679296875e+04, 1.14335478515625e+04, 1.16949443359375e+04, 1.19317216796875e+04, 1.21354921875e+04, 1.22990380859375e+04, 1.2416564453125e+04, 1.2483908203125e+04, 1.24986845703125e+04, 1.24603681640625e+04, 1.2370318359375e+04, 1.22317236328125e+04, 1.20494951171875e+04, 1.18300869140625e+04, 1.15812734375e+04, 1.13118671875e+04, 1.10314140625e+04, 1.07498466796875e+04, 1.04771416015625e+04, 1.02229599609375e+04, 9.9963037109375e+03, 9.805205078125e+03, 9.6564326171875e+03, 9.555255859375e+03, 9.5052607421875e+03, 9.508216796875e+03, 9.5640205078125e+03, 9.6706943359375e+03, 9.8244599609375e+03, 1.0019869140625e+04, 1.025e+04] +intOpe.chiMinCap[1]=[1e+04, 1e+04] +intOpe.ySpeSet=[1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-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, 8.897780776023865e-01, 7.172533869743347e-01, 5.157943964004517e-01, 2.925338447093964e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.237617880105972e-01, 1.926936507225037e-01, 3.040136098861694e-01, 4.53781932592392e-01, 6.366889476776123e-01, 8.462544083595276e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.97369647026062e-01, 9.581485390663143e-01, 8.747413158416741e-01, 7.500940561294547e-01, 5.886276364326477e-01, 3.960615396499634e-01, 1.79218053817749e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.106747090816498e-01, 1.648565977811813e-01, 2.624143958091736e-01, 3.998925089836121e-01, 5.724195837974548e-01, 7.738848328590393e-01, 9.971476197242737e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.762358069419861e-01, 9.073038101196289e-01, 7.959862351417542e-01, 6.462171673774719e-01, 4.633098840713501e-01, 2.537411153316498e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +intOpe.fanSpe.u3=[1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.771117597818375e-01, 3.385760188102724e-01, 5.311375260353088e-01, 7.47978150844574e-01, 9.814157485961914e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.893250465393066e-01, 9.351489543914795e-01, 8.375949859619141e-01, 8.897780776023865e-01, 7.172533869743347e-01, 5.157943964004517e-01, 2.925338447093964e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.237617880105972e-01, 1.926936507225037e-01, 3.040136098861694e-01, 4.53781932592392e-01, 6.366889476776123e-01, 8.462544083595276e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.97369647026062e-01, 9.581485390663143e-01, 8.747413158416741e-01, 7.500940561294547e-01, 5.886276364326477e-01, 3.960615396499634e-01, 1.79218053817749e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.106747090816498e-01, 1.648565977811813e-01, 2.624143958091736e-01, 3.998925089836121e-01, 5.724195837974548e-01, 7.738848328590393e-01, 9.971476197242737e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.762358069419861e-01, 9.073038101196289e-01, 7.959862351417542e-01, 6.462171673774719e-01, 4.633098840713501e-01, 2.537411153316498e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +intOpe.fanSpe.u1=[1e+00, 1e+00] +intOpe.fanSpe.u2=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_EnabledWSE_Subsequences_Validation_WSEOperation.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_EnabledWSE_Subsequences_Validation_WSEOperation.txt new file mode 100644 index 00000000000..6daf4d1ff99 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_EnabledWSE_Subsequences_Validation_WSEOperation.txt @@ -0,0 +1,14 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "1", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +wseOpe.uFanSpe=[0e+00, 1.93694680929184e-01, 3.22537899017334e-01, 4.906674325466156e-01, 6.964550614356995e-01, 9.376788735389709e-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, 9.956929683685302e-01, 9.571459293365476e-01, 8.809472322463989e-01, 7.693214416503906e-01, 6.250508427619934e-01, 4.514328241348267e-01, 2.522276043891907e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-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, 3.508269190788305e-01, 9.440269470214844e-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] +wseOpe.TChiWatSup=[2.8025e+02, 2.803126525878906e+02, 2.803743591308594e+02, 2.804340515136719e+02, 2.804908752441406e+02, 2.805438842773438e+02, 2.8059228515625e+02, 2.8063525390625e+02, 2.806721496582031e+02, 2.807024230957031e+02, 2.807255249023438e+02, 2.807411499023438e+02, 2.807490234375e+02, 2.807490234375e+02, 2.807411499023438e+02, 2.807255249023438e+02, 2.807024230957031e+02, 2.806721496582031e+02, 2.8063525390625e+02, 2.8059228515625e+02, 2.805438842773438e+02, 2.804908752441406e+02, 2.804340515136719e+02, 2.803743591308594e+02, 2.803126525878906e+02, 2.8025e+02, 2.801873474121094e+02, 2.801256408691406e+02, 2.800659484863281e+02, 2.800091247558594e+02, 2.799561157226562e+02, 2.7990771484375e+02, 2.7986474609375e+02, 2.798278503417969e+02, 2.797975769042969e+02, 2.797744750976562e+02, 2.797588500976562e+02, 2.797509765625e+02, 2.797509765625e+02, 2.797588500976562e+02, 2.797744750976562e+02, 2.797975769042969e+02, 2.798378295898438e+02, 2.799047546386719e+02, 2.799777221679688e+02, 2.800561218261719e+02, 2.801391296386719e+02, 2.802259521484375e+02, 2.803156433105469e+02, 2.804073486328125e+02, 2.805e+02, 2.805926513671875e+02, 2.806843566894531e+02, 2.807740478515625e+02, 2.808608703613281e+02, 2.809438781738281e+02, 2.810222778320312e+02, 2.810952453613281e+02, 2.811621704101562e+02, 2.81222412109375e+02, 2.812755432128906e+02, 2.813211364746094e+02, 2.813590087890625e+02, 2.813890075683594e+02, 2.814111328125e+02, 2.81425537109375e+02, 2.814324035644531e+02, 2.814321594238281e+02, 2.814252624511719e+02, 2.814122619628906e+02, 2.813938903808594e+02, 2.813708801269531e+02, 2.813440551757812e+02, 2.813143310546875e+02, 2.812826538085938e+02, 2.8125e+02, 2.812173461914062e+02, 2.811856689453125e+02, 2.811559448242188e+02, 2.811291198730469e+02, 2.811061096191406e+02, 2.810877380371094e+02, 2.810747375488281e+02, 2.810678405761719e+02, 2.810675964355469e+02, 2.81074462890625e+02, 2.810888671875e+02, 2.811109924316406e+02, 2.811409912109375e+02, 2.811788635253906e+02, 2.812244567871094e+02, 2.81277587890625e+02, 2.813378295898438e+02, 2.814047546386719e+02, 2.814777221679688e+02, 2.815561218261719e+02, 2.816391296386719e+02, 2.817259521484375e+02, 2.818156433105469e+02, 2.819073486328125e+02, 2.82e+02] +wseOpe.TChiWatSupSet=[2.801499938964844e+02, 2.801499938964844e+02] +wseOpe.ySpeSet=[1.089999973773956e-01, 1.998019963502884e-01, 3.30860048532486e-01, 5.011300444602966e-01, 7.089499831199646e-01, 9.520659446716309e-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, 9.945697188377379e-01, 9.538825154304502e-01, 8.75652015209198e-01, 7.621346116065979e-01, 6.161425709724426e-01, 4.41000372171402e-01, 2.404923141002655e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-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, 3.825346827507055e-01, 9.783401489257812e-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] +wseOpe.fanCycOff.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, 1e+00, 1e+00, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_EnabledWSE_Validation_Controller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_EnabledWSE_Validation_Controller.txt new file mode 100644 index 00000000000..b7745a98fe5 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_EnabledWSE_Validation_Controller.txt @@ -0,0 +1,18 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "2", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +wseOpe.chiLoa[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, 1.0312619140625e+04, 1.0131875e+04, 9.9641728515625e+03, 9.815453125e+03, 9.6909833984375e+03, 9.5951728515625e+03, 9.5314169921875e+03, 9.5019736328125e+03, 9.5078857421875e+03, 9.548943359375e+03, 9.623693359375e+03, 9.729486328125e+03, 9.862576171875e+03, 1.001824609375e+04, 1.01909833984375e+04, 1.03746669921875e+04, 1.05627900390625e+04, 1.0748689453125e+04, 1.0925779296875e+04, 1.108778515625e+04, 1.122896875e+04, 1.1344328125e+04, 1.14297763671875e+04, 1.1482287109375e+04, 1.15e+04, 1.1482287109375e+04, 1.14297763671875e+04, 1.1344328125e+04, 1.122896875e+04, 1.108778515625e+04, 1.0925779296875e+04, 1.0748689453125e+04, 1.05627900390625e+04, 1.03746669921875e+04, 1.01909833984375e+04, 1.001824609375e+04, 9.862576171875e+03, 9.729486328125e+03, 9.623693359375e+03, 9.548943359375e+03, 9.5078857421875e+03, 9.5019736328125e+03, 9.5314169921875e+03, 9.5951728515625e+03, 9.6909833984375e+03] +wseOpe.chiLoa[2]=[0e+00, 0e+00] +wseOpe.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +wseOpe.uChi[2]=[0e+00, 0e+00] +wseOpe.uWse=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +wseOpe.uFanSpe=[0e+00, 2.754999995231628e-01, 4.375e-01, 5.995000004768372e-01, 7.615000009536743e-01, 9.235000014305115e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 8.402500152587891e-01, 6.782500147819519e-01, 5.162500143051145e-01, 3.542500138282776e-01, 1.922499984502792e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.53999999165535e-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, 2.381021231412888e-01, 1.000000014901161e-01, 1.684765517711639e-01, 6.68911874294281e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.56498920917511e-01, 4.561682939529419e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 0e+00, 0e+00, 0e+00] +wseOpe.TChiWatSup=[2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.798999938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.816499938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02, 2.803999938964844e+02] +wseOpe.TChiWatSupSet=[2.801499938964844e+02, 2.801499938964844e+02] +wseOpe.ySpeSet=[1.225000023841858e-01, 2.845000028610229e-01, 4.465000033378601e-01, 6.085000038146973e-01, 7.705000042915344e-01, 9.325000047683716e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 8.31250011920929e-01, 6.692500114440918e-01, 5.072500109672544e-01, 3.452500104904175e-01, 1.832499951124191e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.080000042915344e-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, 1.924139857292175e-01, 1.000000014901161e-01, 1.839001774787903e-01, 7.098071575164795e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.435601830482483e-01, 4.113834798336029e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Subsequences_Validation_Coupled.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Subsequences_Validation_Coupled.txt new file mode 100644 index 00000000000..f45c6b90e2f --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Subsequences_Validation_Coupled.txt @@ -0,0 +1,20 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "1", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +couTowSpe.TConWatRetSet=[3.051499938964844e+02, 3.051499938964844e+02] +couTowSpe.TConWatRet=[3.051499938964844e+02, 3.052753295898438e+02, 3.05398681640625e+02, 3.055181274414062e+02, 3.056317443847656e+02, 3.0573779296875e+02, 3.058345336914062e+02, 3.059205017089844e+02, 3.059943237304688e+02, 3.060548400878906e+02, 3.061010437011719e+02, 3.061322937011719e+02, 3.061480407714844e+02, 3.061480407714844e+02, 3.061322937011719e+02, 3.061010437011719e+02, 3.060548400878906e+02, 3.059943237304688e+02, 3.059205017089844e+02, 3.058345336914062e+02, 3.0573779296875e+02, 3.056317443847656e+02, 3.055181274414062e+02, 3.05398681640625e+02, 3.052753295898438e+02, 3.051499938964844e+02, 3.05024658203125e+02, 3.049013061523438e+02, 3.047818603515625e+02, 3.046682434082031e+02, 3.045622253417969e+02, 3.044654541015625e+02, 3.043794860839844e+02, 3.043056640625e+02, 3.042451782226562e+02, 3.041989440917969e+02, 3.04167724609375e+02, 3.041519775390625e+02, 3.041519775390625e+02, 3.04167724609375e+02, 3.041989440917969e+02, 3.042451782226562e+02, 3.043123474121094e+02, 3.044061584472656e+02, 3.045121154785156e+02, 3.046288757324219e+02, 3.047549133300781e+02, 3.048885498046875e+02, 3.050279846191406e+02, 3.051713256835938e+02, 3.053166809082031e+02, 3.054620056152344e+02, 3.056053466796875e+02, 3.057447814941406e+02, 3.0587841796875e+02, 3.060044555664062e+02, 3.061212158203125e+02, 3.062271728515625e+02, 3.063209838867188e+02, 3.064014892578125e+02, 3.064677124023438e+02, 3.065189514160156e+02, 3.065546875e+02, 3.0657470703125e+02, 3.065789489746094e+02, 3.065677185058594e+02, 3.0654150390625e+02, 3.065010070800781e+02, 3.064471740722656e+02, 3.063812255859375e+02, 3.06304443359375e+02, 3.062184143066406e+02, 3.061247863769531e+02, 3.060253601074219e+02, 3.059219970703125e+02, 3.058166809082031e+02, 3.057113342285156e+02, 3.056079711914062e+02, 3.05508544921875e+02, 3.054149169921875e+02, 3.053288879394531e+02, 3.052521057128906e+02, 3.051861572265625e+02, 3.0513232421875e+02, 3.050918273925781e+02, 3.050656127929688e+02, 3.050543823242188e+02, 3.050586547851562e+02, 3.050786437988281e+02, 3.051143798828125e+02, 3.051656188964844e+02, 3.052318420410156e+02, 3.053123474121094e+02, 3.054061584472656e+02, 3.055121154785156e+02, 3.056288757324219e+02, 3.057549133300781e+02, 3.058885498046875e+02, 3.060279846191406e+02, 3.061713256835938e+02, 3.063166809082031e+02] +couTowSpe.uConWatPumSpe[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.333333414047956e-03, 8.333333767950535e-03, 1.333333365619183e-02, 1.833333261311054e-02, 2.333333343267441e-02, 2.833333425223828e-02, 3.333333507180214e-02, 3.833333402872086e-02, 4.333333298563957e-02, 4.833333194255829e-02, 5.33333346247673e-02, 5.833333358168602e-02, 6.333333253860474e-02, 6.833333522081375e-02, 7.333333045244217e-02, 7.833333313465118e-02, 8.33333358168602e-02, 8.833333104848862e-02, 9.333333373069765e-02, 9.833333641290666e-02, 1.033333316445351e-01, 1.083333343267441e-01, 1.133333370089531e-01, 1.183333322405815e-01, 1.233333349227905e-01, 1.283333301544189e-01, 1.333333402872086e-01, 1.38333335518837e-01, 1.433333307504654e-01, 1.483333259820938e-01, 1.533333361148834e-01, 1.583333313465118e-01, 1.633333265781403e-01, 1.683333367109299e-01, 1.733333319425583e-01, 1.783333271741867e-01, 1.833333373069763e-01, 1.883333325386047e-01, 1.933333277702332e-01, 1.983333379030228e-01, 2.033333331346512e-01, 2.083333283662796e-01, 2.133333384990692e-01, 2.183333337306976e-01, 2.23333328962326e-01, 2.283333390951157e-01, 2.333333343267441e-01, 2.383333295583725e-01, 2.433333396911621e-01, 2.483333349227905e-01, 2.533333301544189e-01, 2.583333253860474e-01, 2.633333206176758e-01, 2.683333456516266e-01, 2.73333340883255e-01, 2.783333361148834e-01, 2.833333313465118e-01, 2.883333265781403e-01, 2.933333218097687e-01, 2.983333468437195e-01, 3.033333420753479e-01, 3.083333373069763e-01, 3.133333325386047e-01, 3.183333277702332e-01, 3.233333230018616e-01, 3.283333480358124e-01, 3.333333432674408e-01, 3.383333384990692e-01, 3.433333337306976e-01, 3.48333328962326e-01, 3.533333241939545e-01, 3.583333194255829e-01, 3.633333444595337e-01, 3.683333396911621e-01, 3.733333349227905e-01, 3.783333301544189e-01, 3.833333253860474e-01, 3.883333206176758e-01, 3.933333456516266e-01, 3.98333340883255e-01, 4.033333361148834e-01, 4.083333313465118e-01, 4.133333265781403e-01, 4.183333218097687e-01, 4.233333468437195e-01, 4.283333420753479e-01, 4.333333373069763e-01, 4.383333325386047e-01, 4.433333277702332e-01, 4.483333230018616e-01, 4.533333480358124e-01, 4.583333432674408e-01] +couTowSpe.uConWatPumSpe[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.333333414047956e-03, 8.333333767950535e-03, 1.333333365619183e-02, 1.833333261311054e-02, 2.333333343267441e-02, 2.833333425223828e-02, 3.333333507180214e-02, 3.833333402872086e-02, 4.333333298563957e-02, 4.833333194255829e-02, 5.33333346247673e-02, 5.833333358168602e-02, 6.333333253860474e-02, 6.833333522081375e-02, 7.333333045244217e-02, 7.833333313465118e-02, 8.33333358168602e-02, 8.833333104848862e-02, 9.333333373069765e-02, 9.833333641290666e-02, 1.033333316445351e-01, 1.083333343267441e-01, 1.133333370089531e-01, 1.183333322405815e-01, 1.233333349227905e-01, 1.283333301544189e-01, 1.333333402872086e-01, 1.38333335518837e-01, 1.433333307504654e-01, 1.483333259820938e-01, 1.533333361148834e-01, 1.583333313465118e-01, 1.633333265781403e-01, 1.683333367109299e-01, 1.733333319425583e-01, 1.783333271741867e-01, 1.833333373069763e-01, 1.883333325386047e-01, 1.933333277702332e-01, 1.983333379030228e-01, 2.033333331346512e-01, 2.083333283662796e-01, 2.133333384990692e-01, 2.183333337306976e-01, 2.23333328962326e-01, 2.283333390951157e-01, 2.333333343267441e-01, 2.383333295583725e-01, 2.433333396911621e-01, 2.483333349227905e-01, 2.533333301544189e-01, 2.583333253860474e-01, 2.633333206176758e-01, 2.683333456516266e-01, 2.73333340883255e-01, 2.783333361148834e-01, 2.833333313465118e-01, 2.883333265781403e-01, 2.933333218097687e-01, 2.983333468437195e-01, 3.033333420753479e-01, 3.083333373069763e-01, 3.133333325386047e-01, 3.183333277702332e-01, 3.233333230018616e-01, 3.283333480358124e-01, 3.333333432674408e-01, 3.383333384990692e-01, 3.433333337306976e-01, 3.48333328962326e-01, 3.533333241939545e-01, 3.583333194255829e-01, 3.633333444595337e-01, 3.683333396911621e-01, 3.733333349227905e-01, 3.783333301544189e-01, 3.833333253860474e-01, 3.883333206176758e-01, 3.933333456516266e-01, 3.98333340883255e-01, 4.033333361148834e-01, 4.083333313465118e-01, 4.133333265781403e-01, 4.183333218097687e-01, 4.233333468437195e-01, 4.283333420753479e-01, 4.333333373069763e-01, 4.383333325386047e-01, 4.433333277702332e-01, 4.483333230018616e-01, 4.533333480358124e-01, 4.583333432674408e-01] +couTowSpe.uMaxTowSpeSet[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, 5.525000095367432e-01, 5.550000071525574e-01, 5.575000047683716e-01, 5.600000023841858e-01, 5.625e-01, 5.649999976158142e-01, 5.674999952316284e-01, 5.699999928474426e-01, 5.724999904632568e-01, 5.74999988079071e-01, 5.774999856948853e-01, 5.799999833106995e-01, 5.824999809265137e-01, 5.849999785423279e-01, 5.874999761581421e-01, 5.899999737739563e-01, 5.924999713897705e-01, 5.950000286102295e-01, 5.975000262260437e-01, 6.000000238418579e-01, 6.025000214576721e-01, 6.050000190734863e-01, 6.075000166893005e-01, 6.100000143051147e-01, 6.12500011920929e-01, 6.150000095367432e-01, 6.175000071525574e-01, 6.200000047683716e-01, 6.225000023841858e-01, 6.25e-01, 6.274999976158142e-01, 6.299999952316284e-01, 6.324999928474426e-01, 6.349999904632568e-01, 6.37499988079071e-01, 6.399999856948853e-01, 6.424999833106995e-01, 6.449999809265137e-01, 6.474999785423279e-01, 6.499999761581421e-01, 6.524999737739563e-01, 6.549999713897705e-01, 6.575000286102295e-01, 6.600000262260437e-01, 6.625000238418579e-01, 6.650000214576721e-01, 6.675000190734863e-01, 6.700000166893005e-01, 6.725000143051147e-01, 6.75000011920929e-01, 6.775000095367432e-01, 6.800000071525574e-01, 6.825000047683716e-01, 6.850000023841858e-01, 6.875e-01, 6.899999976158142e-01, 6.924999952316284e-01, 6.949999928474426e-01, 6.974999904632568e-01, 6.99999988079071e-01, 7.024999856948853e-01, 7.049999833106995e-01, 7.074999809265137e-01, 7.099999785423279e-01, 7.124999761581421e-01, 7.149999737739563e-01, 7.174999713897705e-01, 7.200000286102295e-01, 7.225000262260437e-01, 7.250000238418579e-01, 7.275000214576721e-01, 7.300000190734863e-01, 7.325000166893005e-01, 7.350000143051147e-01, 7.37500011920929e-01, 7.400000095367432e-01, 7.425000071525574e-01, 7.450000047683716e-01, 7.475000023841858e-01, 7.5e-01] +couTowSpe.uMaxTowSpeSet[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.724999785423279e-01, 7.699999809265137e-01, 7.674999833106995e-01, 7.649999856948853e-01, 7.62499988079071e-01, 7.599999904632568e-01, 7.574999928474426e-01, 7.549999952316284e-01, 7.524999976158142e-01, 7.5e-01, 7.475000023841858e-01, 7.450000047683716e-01, 7.425000071525574e-01, 7.400000095367432e-01, 7.37500011920929e-01, 7.350000143051147e-01, 7.325000166893005e-01, 7.300000190734863e-01, 7.275000214576721e-01, 7.250000238418579e-01, 7.225000262260437e-01, 7.200000286102295e-01, 7.174999713897705e-01, 7.149999737739563e-01, 7.124999761581421e-01, 7.099999785423279e-01, 7.074999809265137e-01, 7.049999833106995e-01, 7.024999856948853e-01, 6.99999988079071e-01, 6.974999904632568e-01, 6.949999928474426e-01, 6.924999952316284e-01, 6.899999976158142e-01, 6.875e-01, 6.850000023841858e-01, 6.825000047683716e-01, 6.800000071525574e-01, 6.775000095367432e-01, 6.75000011920929e-01, 6.725000143051147e-01, 6.700000166893005e-01, 6.675000190734863e-01, 6.650000214576721e-01, 6.625000238418579e-01, 6.600000262260437e-01, 6.575000286102295e-01, 6.549999713897705e-01, 6.524999737739563e-01, 6.499999761581421e-01, 6.474999785423279e-01, 6.449999809265137e-01, 6.424999833106995e-01, 6.399999856948853e-01, 6.37499988079071e-01, 6.349999904632568e-01, 6.324999928474426e-01, 6.299999952316284e-01, 6.274999976158142e-01, 6.25e-01, 6.225000023841858e-01, 6.200000047683716e-01, 6.175000071525574e-01, 6.150000095367432e-01, 6.12500011920929e-01, 6.100000143051147e-01, 6.075000166893005e-01, 6.050000190734863e-01, 6.025000214576721e-01, 6.000000238418579e-01, 5.975000262260437e-01, 5.950000286102295e-01, 5.924999713897705e-01, 5.899999737739563e-01, 5.874999761581421e-01, 5.849999785423279e-01, 5.824999809265137e-01, 5.799999833106995e-01, 5.774999856948853e-01, 5.74999988079071e-01, 5.724999904632568e-01, 5.699999928474426e-01, 5.674999952316284e-01, 5.649999976158142e-01, 5.625e-01, 5.600000023841858e-01, 5.575000047683716e-01, 5.550000071525574e-01, 5.525000095367432e-01, 5.50000011920929e-01] +couTowSpe.plrTowMaxSpe=[8.999999761581421e-01, 8.970000147819519e-01, 8.939999938011169e-01, 8.90999972820282e-01, 8.880000114440918e-01, 8.849999904632568e-01, 8.820000290870667e-01, 8.790000081062317e-01, 8.759999871253967e-01, 8.730000257492065e-01, 8.700000047683716e-01, 8.669999837875366e-01, 8.640000224113464e-01, 8.610000014305115e-01, 8.579999804496765e-01, 8.550000190734863e-01, 8.519999980926514e-01, 8.489999771118164e-01, 8.460000157356262e-01, 8.429999947547913e-01, 8.399999737739563e-01, 8.370000123977661e-01, 8.339999914169312e-01, 8.309999704360962e-01, 8.28000009059906e-01, 8.24999988079071e-01, 8.220000267028809e-01, 8.190000057220459e-01, 8.159999847412109e-01, 8.130000233650208e-01, 8.100000023841858e-01, 8.069999814033508e-01, 8.040000200271606e-01, 8.009999990463257e-01, 7.979999780654907e-01, 7.950000166893005e-01, 7.919999957084656e-01, 7.889999747276306e-01, 7.860000133514404e-01, 7.829999923706055e-01, 7.799999713897705e-01, 7.770000100135803e-01, 7.739999890327454e-01, 7.710000276565552e-01, 7.680000066757202e-01, 7.649999856948853e-01, 7.620000243186951e-01, 7.590000033378601e-01, 7.559999823570251e-01, 7.53000020980835e-01, 7.5e-01, 7.46999979019165e-01, 7.440000176429749e-01, 7.409999966621399e-01, 7.379999756813049e-01, 7.350000143051147e-01, 7.319999933242798e-01, 7.289999723434448e-01, 7.260000109672546e-01, 7.229999899864197e-01, 7.200000286102295e-01, 7.170000076293945e-01, 7.139999866485596e-01, 7.110000252723694e-01, 7.080000042915344e-01, 7.049999833106995e-01, 7.020000219345093e-01, 6.990000009536743e-01, 6.959999799728394e-01, 6.930000185966492e-01, 6.899999976158142e-01, 6.869999766349792e-01, 6.840000152587891e-01, 6.809999942779541e-01, 6.779999732971191e-01, 6.75000011920929e-01, 6.71999990940094e-01, 6.690000295639038e-01, 6.660000085830688e-01, 6.629999876022339e-01, 6.600000262260437e-01, 6.570000052452087e-01, 6.539999842643738e-01, 6.510000228881836e-01, 6.480000019073486e-01, 6.449999809265137e-01, 6.420000195503235e-01, 6.389999985694885e-01, 6.359999775886536e-01, 6.330000162124634e-01, 6.299999952316284e-01, 6.269999742507935e-01, 6.240000128746033e-01, 6.209999918937683e-01, 6.179999709129333e-01, 6.150000095367432e-01, 6.119999885559082e-01, 6.09000027179718e-01, 6.060000061988831e-01, 6.029999852180481e-01, 6.000000238418579e-01] +couTowSpe.CWRTSpd.y=[1.000000014901161e-01, 1.5193971991539e-01, 2.843776643276215e-01, 4.952361285686493e-01, 7.8118497133255e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5.316190719604492e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.998486638069153e-01, 9.479161500930786e-01, 8.154734373092646e-01, 6.046164631843559e-01, 3.186659514904022e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.031123697757721e-01, 1.7705337703228e-01, 3.452690839767456e-01, 6.069514751434326e-01, 9.600126147270203e-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, 9.962787628173828e-01, 9.67319130897522e-01, 9.179734587669373e-01, 8.578127026557922e-01, 7.967652678489685e-01, 7.449913620948792e-01, 7.126975059509277e-01, 7.099981307983398e-01, 7.467387914657593e-01, 8.323490619659424e-01, 9.756932258605957e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +couTowSpe.ySpeSet=[0e+00, 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.316190719604492e-01, 7.649999856948853e-01, 7.62499988079071e-01, 7.599999904632568e-01, 7.574999928474426e-01, 7.549999952316284e-01, 7.524999976158142e-01, 7.5e-01, 5.525000095367432e-01, 5.550000071525574e-01, 5.575000047683716e-01, 5.600000023841858e-01, 5.625e-01, 5.649999976158142e-01, 5.674999952316284e-01, 5.699999928474424e-01, 3.186659514904022e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.031123697757721e-01, 1.7705337703228e-01, 3.452690839767456e-01, 6.069514751434326e-01, 6.324999928474426e-01, 6.349999904632568e-01, 6.37499988079071e-01, 6.399999856948853e-01, 6.424999833106995e-01, 6.449999809265137e-01, 6.474999785423279e-01, 6.499999761581421e-01, 6.474999785423279e-01, 6.449999809265137e-01, 6.424999833106995e-01, 6.399999856948853e-01, 6.37499988079071e-01, 6.349999904632568e-01, 6.324999928474426e-01, 6.299999952316284e-01, 6.274999976158142e-01, 6.25e-01, 6.225000023841858e-01, 6.200000047683716e-01, 6.175000071525574e-01, 6.150000095367432e-01, 6.12500011920929e-01, 6.100000143051147e-01, 6.075000166893005e-01, 6.050000190734863e-01, 6.025000214576721e-01, 6.000000238418579e-01, 5.975000262260437e-01, 5.950000286102295e-01, 5.924999713897705e-01, 5.899999737739563e-01, 5.874999761581421e-01, 5.849999785423279e-01, 5.824999809265137e-01, 5.799999833106995e-01, 5.774999856948853e-01, 5.74999988079071e-01, 5.724999904632568e-01, 5.699999928474426e-01, 5.674999952316284e-01, 5.649999976158142e-01, 5.625e-01, 5.600000023841858e-01, 5.575000047683716e-01, 5.550000071525574e-01, 5.525000095367432e-01, 5.50000011920929e-01] +couTowSpe.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +couTowSpe.uChi[2]=[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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Subsequences_Validation_Enable.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Subsequences_Validation_Enable.txt new file mode 100644 index 00000000000..0afac001957 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Subsequences_Validation_Enable.txt @@ -0,0 +1,26 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +enaTow.uMaxTowSpeSet[1]=[2.000000029802322e-01, 2.000000029802322e-01] +enaTow.uMaxTowSpeSet[2]=[0e+00, 0e+00] +enaTow.fanSpeMin=[1.000000014901161e-01, 1.000000014901161e-01] +enaTow.TTowSet=[3.051499938964844e+02, 3.051499938964844e+02] +enaTow.TTow=[3.056499938964844e+02, 3.056700134277344e+02, 3.056900024414062e+02, 3.057099914550781e+02, 3.057300109863281e+02, 3.0575e+02, 3.057699890136719e+02, 3.057900085449219e+02, 3.058099975585938e+02, 3.058299865722656e+02, 3.058500061035156e+02, 3.058699951171875e+02, 3.058900146484375e+02, 3.059100036621094e+02, 3.059299926757812e+02, 3.059500122070312e+02, 3.059700012207031e+02, 3.05989990234375e+02, 3.06010009765625e+02, 3.060299987792969e+02, 3.060499877929688e+02, 3.060700073242188e+02, 3.060899963378906e+02, 3.061099853515625e+02, 3.061300048828125e+02, 3.061499938964844e+02, 3.061700134277344e+02, 3.061900024414062e+02, 3.062099914550781e+02, 3.062300109863281e+02, 3.0625e+02, 3.062699890136719e+02, 3.062900085449219e+02, 3.063099975585938e+02, 3.063299865722656e+02, 3.063500061035156e+02, 3.063699951171875e+02, 3.063900146484375e+02, 3.064100036621094e+02, 3.064299926757812e+02, 3.064500122070312e+02, 3.064700012207031e+02, 3.06489990234375e+02, 3.06510009765625e+02, 3.065299987792969e+02, 3.065499877929688e+02, 3.065700073242188e+02, 3.065899963378906e+02, 3.066099853515625e+02, 3.066300048828125e+02, 3.066499938964844e+02, 3.066700134277344e+02, 3.066900024414062e+02, 3.067099914550781e+02, 3.067300109863281e+02, 3.0675e+02, 3.067699890136719e+02, 3.067900085449219e+02, 3.068099975585938e+02, 3.068299865722656e+02, 3.068500061035156e+02, 3.068699951171875e+02, 3.068900146484375e+02, 3.069100036621094e+02, 3.069299926757812e+02, 3.069500122070312e+02, 3.069700012207031e+02, 3.06989990234375e+02, 3.07010009765625e+02, 3.070299987792969e+02, 3.070499877929688e+02, 3.070700073242188e+02, 3.070899963378906e+02, 3.071099853515625e+02, 3.071300048828125e+02, 3.071499938964844e+02, 3.071700134277344e+02, 3.071900024414062e+02, 3.072099914550781e+02, 3.072300109863281e+02, 3.0725e+02, 3.072699890136719e+02, 3.072900085449219e+02, 3.073099975585938e+02, 3.073299865722656e+02, 3.073500061035156e+02, 3.073699951171875e+02, 3.073900146484375e+02, 3.074100036621094e+02, 3.074299926757812e+02, 3.074500122070312e+02, 3.074700012207031e+02, 3.07489990234375e+02, 3.07510009765625e+02, 3.075299987792969e+02, 3.075499877929688e+02, 3.075700073242188e+02, 3.075899963378906e+02, 3.076099853515625e+02, 3.076300048828125e+02, 3.076499938964844e+02] +enaTow.uTow[1]=[0e+00, 0e+00] +enaTow.yTow=[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] +disTow.uMaxTowSpeSet[1]=[1.000000014901161e-01, 1.000000014901161e-01] +disTow.uMaxTowSpeSet[2]=[2.000000029802322e-01, 2.000000029802322e-01] +disTow.fanSpeMin=[1.000000014901161e-01, 1.000000014901161e-01] +disTow.uTow[1]=[1e+00, 1e+00] +disTow.uTow[4]=[1e+00, 1e+00] +disTow.yTow=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disTow1.uFanSpe=[1.000000014901161e-01, 1.000000014901161e-01] +disTow1.fanSpeMin=[1.000000014901161e-01, 1.000000014901161e-01] +disTow1.TTow=[3.056499938964844e+02, 3.056300048828125e+02, 3.056099853515625e+02, 3.055899963378906e+02, 3.055700073242188e+02, 3.055499877929688e+02, 3.055299987792969e+02, 3.05510009765625e+02, 3.05489990234375e+02, 3.054700012207031e+02, 3.054500122070312e+02, 3.054299926757812e+02, 3.054100036621094e+02, 3.053900146484375e+02, 3.053699951171875e+02, 3.053500061035156e+02, 3.053299865722656e+02, 3.053099975585938e+02, 3.052900085449219e+02, 3.052699890136719e+02, 3.0525e+02, 3.052300109863281e+02, 3.052099914550781e+02, 3.051900024414062e+02, 3.051700134277344e+02, 3.051499938964844e+02, 3.051300048828125e+02, 3.051099853515625e+02, 3.050899963378906e+02, 3.050700073242188e+02, 3.050499877929688e+02, 3.050299987792969e+02, 3.05010009765625e+02, 3.04989990234375e+02, 3.049700012207031e+02, 3.049500122070312e+02, 3.049299926757812e+02, 3.049100036621094e+02, 3.048900146484375e+02, 3.048699951171875e+02, 3.048500061035156e+02, 3.048299865722656e+02, 3.048099975585938e+02, 3.047900085449219e+02, 3.047699890136719e+02, 3.0475e+02, 3.047300109863281e+02, 3.047099914550781e+02, 3.046900024414062e+02, 3.046700134277344e+02, 3.046499938964844e+02, 3.046300048828125e+02, 3.046099853515625e+02, 3.045899963378906e+02, 3.045700073242188e+02, 3.045499877929688e+02, 3.045299987792969e+02, 3.04510009765625e+02, 3.04489990234375e+02, 3.044700012207031e+02, 3.044500122070312e+02, 3.044299926757812e+02, 3.044100036621094e+02, 3.043900146484375e+02, 3.043699951171875e+02, 3.043500061035156e+02, 3.043299865722656e+02, 3.043099975585938e+02, 3.042900085449219e+02, 3.042699890136719e+02, 3.0425e+02, 3.042300109863281e+02, 3.042099914550781e+02, 3.041900024414062e+02, 3.041700134277344e+02, 3.041499938964844e+02, 3.041300048828125e+02, 3.041099853515625e+02, 3.040899963378906e+02, 3.040700073242188e+02, 3.040499877929688e+02, 3.040299987792969e+02, 3.04010009765625e+02, 3.03989990234375e+02, 3.039700012207031e+02, 3.039500122070312e+02, 3.039299926757812e+02, 3.039100036621094e+02, 3.038900146484375e+02, 3.038699951171875e+02, 3.038500061035156e+02, 3.038299865722656e+02, 3.038099975585938e+02, 3.037900085449219e+02, 3.037699890136719e+02, 3.0375e+02, 3.037300109863281e+02, 3.037099914550781e+02, 3.036900024414062e+02, 3.036700134277344e+02, 3.036499938964844e+02] +disTow1.TTowSet=[3.051499938964844e+02, 3.051499938964844e+02] +disTow1.yTow=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Subsequences_Validation_LessCoupled.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Subsequences_Validation_LessCoupled.txt new file mode 100644 index 00000000000..aa23d5abdf2 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Subsequences_Validation_LessCoupled.txt @@ -0,0 +1,21 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "2", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +lesCouTowSpe.TConWatRetSet=[3.051499938964844e+02, 3.051499938964844e+02] +lesCouTowSpe.TConWatRet=[3.051499938964844e+02, 3.054006652832031e+02, 3.056473693847656e+02, 3.058862609863281e+02, 3.061134948730469e+02, 3.063255615234375e+02, 3.065191040039062e+02, 3.066910400390625e+02, 3.068386535644531e+02, 3.069596557617188e+02, 3.070521240234375e+02, 3.071145629882812e+02, 3.071460571289062e+02, 3.071460571289062e+02, 3.071145629882812e+02, 3.070521240234375e+02, 3.069596557617188e+02, 3.068386535644531e+02, 3.066910400390625e+02, 3.065191040039062e+02, 3.063255615234375e+02, 3.061134948730469e+02, 3.058862609863281e+02, 3.056473693847656e+02, 3.054006652832031e+02, 3.051499938964844e+02, 3.048993225097656e+02, 3.046526184082031e+02, 3.044137573242188e+02, 3.041864929199219e+02, 3.039744262695312e+02, 3.037809143066406e+02, 3.036089782714844e+02, 3.034613342285156e+02, 3.0334033203125e+02, 3.032478942871094e+02, 3.031854248046875e+02, 3.031539611816406e+02, 3.031539611816406e+02, 3.031854248046875e+02, 3.032478942871094e+02, 3.0334033203125e+02, 3.034713439941406e+02, 3.036489868164062e+02, 3.038508911132812e+02, 3.040744323730469e+02, 3.043164978027344e+02, 3.045737609863281e+02, 3.048426208496094e+02, 3.051193237304688e+02, 3.053999938964844e+02, 3.056806640625e+02, 3.059573669433594e+02, 3.062262573242188e+02, 3.064835205078125e+02, 3.067255554199219e+02, 3.069490966796875e+02, 3.071510314941406e+02, 3.073286437988281e+02, 3.074796447753906e+02, 3.076021118164062e+02, 3.07694580078125e+02, 3.077560424804688e+02, 3.077860412597656e+02, 3.077845764160156e+02, 3.077521057128906e+02, 3.076896667480469e+02, 3.075986633300781e+02, 3.074810180664062e+02, 3.073390808105469e+02, 3.071755676269531e+02, 3.069934997558594e+02, 3.067962341308594e+02, 3.065873718261719e+02, 3.063706665039062e+02, 3.061499938964844e+02, 3.059293212890625e+02, 3.057126159667969e+02, 3.055037536621094e+02, 3.053064880371094e+02, 3.051244201660156e+02, 3.049609069824219e+02, 3.048189697265625e+02, 3.047013549804688e+02, 3.046103515625e+02, 3.045478820800781e+02, 3.045154113769531e+02, 3.045139465332031e+02, 3.045439453125e+02, 3.046054382324219e+02, 3.046978759765625e+02, 3.048203430175781e+02, 3.049713439941406e+02, 3.051489868164062e+02, 3.053508911132812e+02, 3.055744323730469e+02, 3.058164978027344e+02, 3.060737609863281e+02, 3.063426208496094e+02, 3.066193237304688e+02, 3.068999938964844e+02] +lesCouTowSpe.TConWatSup=[3.021499938964844e+02, 3.024006652832031e+02, 3.026473693847656e+02, 3.028862609863281e+02, 3.031134948730469e+02, 3.033255615234375e+02, 3.035191040039062e+02, 3.036910400390625e+02, 3.038386535644531e+02, 3.039596557617188e+02, 3.040521240234375e+02, 3.041145629882812e+02, 3.041460571289062e+02, 3.041460571289062e+02, 3.041145629882812e+02, 3.040521240234375e+02, 3.039596557617188e+02, 3.038386535644531e+02, 3.036910400390625e+02, 3.035191040039062e+02, 3.033255615234375e+02, 3.031134948730469e+02, 3.028862609863281e+02, 3.026473693847656e+02, 3.024006652832031e+02, 3.021499938964844e+02, 3.018993225097656e+02, 3.016526184082031e+02, 3.014137573242188e+02, 3.011864929199219e+02, 3.009744262695312e+02, 3.007809143066406e+02, 3.006089782714844e+02, 3.004613342285156e+02, 3.0034033203125e+02, 3.002478942871094e+02, 3.001854248046875e+02, 3.001539611816406e+02, 3.001539611816406e+02, 3.001854248046875e+02, 3.002478942871094e+02, 3.0034033203125e+02, 3.004713439941406e+02, 3.006489868164062e+02, 3.008508911132812e+02, 3.010744323730469e+02, 3.013164978027344e+02, 3.015737609863281e+02, 3.018426208496094e+02, 3.021193237304688e+02, 3.023999938964844e+02, 3.026806640625e+02, 3.029573669433594e+02, 3.032262573242188e+02, 3.034835205078125e+02, 3.037255554199219e+02, 3.039490966796875e+02, 3.041510314941406e+02, 3.043286437988281e+02, 3.044796447753906e+02, 3.046021118164062e+02, 3.04694580078125e+02, 3.047560424804688e+02, 3.047860412597656e+02, 3.047845764160156e+02, 3.047521057128906e+02, 3.046896667480469e+02, 3.045986633300781e+02, 3.044810180664062e+02, 3.043390808105469e+02, 3.041755676269531e+02, 3.039934997558594e+02, 3.037962341308594e+02, 3.035873718261719e+02, 3.033706665039062e+02, 3.031499938964844e+02, 3.029293212890625e+02, 3.027126159667969e+02, 3.025037536621094e+02, 3.023064880371094e+02, 3.021244201660156e+02, 3.019609069824219e+02, 3.018189697265625e+02, 3.017013549804688e+02, 3.016103515625e+02, 3.015478820800781e+02, 3.015154113769531e+02, 3.015139465332031e+02, 3.015439453125e+02, 3.016054382324219e+02, 3.016978759765625e+02, 3.018203430175781e+02, 3.019713439941406e+02, 3.021489868164062e+02, 3.023508911132812e+02, 3.025744323730469e+02, 3.028164978027344e+02, 3.030737609863281e+02, 3.033426208496094e+02, 3.036193237304688e+02, 3.038999938964844e+02] +lesCouTowSpe.uConWatPumSpe[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.333333414047956e-03, 8.333333767950535e-03, 1.333333365619183e-02, 1.833333261311054e-02, 2.333333343267441e-02, 2.833333425223828e-02, 3.333333507180214e-02, 3.833333402872086e-02, 4.333333298563957e-02, 4.833333194255829e-02, 5.33333346247673e-02, 5.833333358168602e-02, 6.333333253860474e-02, 6.833333522081375e-02, 7.333333045244217e-02, 7.833333313465118e-02, 8.33333358168602e-02, 8.833333104848862e-02, 9.333333373069765e-02, 9.833333641290666e-02, 1.033333316445351e-01, 1.083333343267441e-01, 1.133333370089531e-01, 1.183333322405815e-01, 1.233333349227905e-01, 1.283333301544189e-01, 1.333333402872086e-01, 1.38333335518837e-01, 1.433333307504654e-01, 1.483333259820938e-01, 1.533333361148834e-01, 1.583333313465118e-01, 1.633333265781403e-01, 1.683333367109299e-01, 1.733333319425583e-01, 1.783333271741867e-01, 1.833333373069763e-01, 1.883333325386047e-01, 1.933333277702332e-01, 1.983333379030228e-01, 2.033333331346512e-01, 2.083333283662796e-01, 2.133333384990692e-01, 2.183333337306976e-01, 2.23333328962326e-01, 2.283333390951157e-01, 2.333333343267441e-01, 2.383333295583725e-01, 2.433333396911621e-01, 2.483333349227905e-01, 2.533333301544189e-01, 2.583333253860474e-01, 2.633333206176758e-01, 2.683333456516266e-01, 2.73333340883255e-01, 2.783333361148834e-01, 2.833333313465118e-01, 2.883333265781403e-01, 2.933333218097687e-01, 2.983333468437195e-01, 3.033333420753479e-01, 3.083333373069763e-01, 3.133333325386047e-01, 3.183333277702332e-01, 3.233333230018616e-01, 3.283333480358124e-01, 3.333333432674408e-01, 3.383333384990692e-01, 3.433333337306976e-01, 3.48333328962326e-01, 3.533333241939545e-01, 3.583333194255829e-01, 3.633333444595337e-01, 3.683333396911621e-01, 3.733333349227905e-01, 3.783333301544189e-01, 3.833333253860474e-01, 3.883333206176758e-01, 3.933333456516266e-01, 3.98333340883255e-01, 4.033333361148834e-01, 4.083333313465118e-01, 4.133333265781403e-01, 4.183333218097687e-01, 4.233333468437195e-01, 4.283333420753479e-01, 4.333333373069763e-01, 4.383333325386047e-01, 4.433333277702332e-01, 4.483333230018616e-01, 4.533333480358124e-01, 4.583333432674408e-01] +lesCouTowSpe.uConWatPumSpe[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.333333414047956e-03, 8.333333767950535e-03, 1.333333365619183e-02, 1.833333261311054e-02, 2.333333343267441e-02, 2.833333425223828e-02, 3.333333507180214e-02, 3.833333402872086e-02, 4.333333298563957e-02, 4.833333194255829e-02, 5.33333346247673e-02, 5.833333358168602e-02, 6.333333253860474e-02, 6.833333522081375e-02, 7.333333045244217e-02, 7.833333313465118e-02, 8.33333358168602e-02, 8.833333104848862e-02, 9.333333373069765e-02, 9.833333641290666e-02, 1.033333316445351e-01, 1.083333343267441e-01, 1.133333370089531e-01, 1.183333322405815e-01, 1.233333349227905e-01, 1.283333301544189e-01, 1.333333402872086e-01, 1.38333335518837e-01, 1.433333307504654e-01, 1.483333259820938e-01, 1.533333361148834e-01, 1.583333313465118e-01, 1.633333265781403e-01, 1.683333367109299e-01, 1.733333319425583e-01, 1.783333271741867e-01, 1.833333373069763e-01, 1.883333325386047e-01, 1.933333277702332e-01, 1.983333379030228e-01, 2.033333331346512e-01, 2.083333283662796e-01, 2.133333384990692e-01, 2.183333337306976e-01, 2.23333328962326e-01, 2.283333390951157e-01, 2.333333343267441e-01, 2.383333295583725e-01, 2.433333396911621e-01, 2.483333349227905e-01, 2.533333301544189e-01, 2.583333253860474e-01, 2.633333206176758e-01, 2.683333456516266e-01, 2.73333340883255e-01, 2.783333361148834e-01, 2.833333313465118e-01, 2.883333265781403e-01, 2.933333218097687e-01, 2.983333468437195e-01, 3.033333420753479e-01, 3.083333373069763e-01, 3.133333325386047e-01, 3.183333277702332e-01, 3.233333230018616e-01, 3.283333480358124e-01, 3.333333432674408e-01, 3.383333384990692e-01, 3.433333337306976e-01, 3.48333328962326e-01, 3.533333241939545e-01, 3.583333194255829e-01, 3.633333444595337e-01, 3.683333396911621e-01, 3.733333349227905e-01, 3.783333301544189e-01, 3.833333253860474e-01, 3.883333206176758e-01, 3.933333456516266e-01, 3.98333340883255e-01, 4.033333361148834e-01, 4.083333313465118e-01, 4.133333265781403e-01, 4.183333218097687e-01, 4.233333468437195e-01, 4.283333420753479e-01, 4.333333373069763e-01, 4.383333325386047e-01, 4.433333277702332e-01, 4.483333230018616e-01, 4.533333480358124e-01, 4.583333432674408e-01] +lesCouTowSpe.TConWatSupSet=[3.051499938964844e+02, 3.051499938964844e+02, 3.051499938964844e+02, 3.051499938964844e+02, 3.051499938964844e+02, 3.051499938964844e+02, 3.051499938964844e+02, 3.051499938964844e+02, 3.051499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02, 3.021499938964844e+02] +lesCouTowSpe.uMaxTowSpeSet[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, 5.525000095367432e-01, 5.550000071525574e-01, 5.575000047683716e-01, 5.600000023841858e-01, 5.625e-01, 5.649999976158142e-01, 5.674999952316284e-01, 5.699999928474426e-01, 5.724999904632568e-01, 5.74999988079071e-01, 5.774999856948853e-01, 5.799999833106995e-01, 5.824999809265137e-01, 5.849999785423279e-01, 5.874999761581421e-01, 5.899999737739563e-01, 5.924999713897705e-01, 5.950000286102295e-01, 5.975000262260437e-01, 6.000000238418579e-01, 6.025000214576721e-01, 6.050000190734863e-01, 6.075000166893005e-01, 6.100000143051147e-01, 6.12500011920929e-01, 6.150000095367432e-01, 6.175000071525574e-01, 6.200000047683716e-01, 6.225000023841858e-01, 6.25e-01, 6.274999976158142e-01, 6.299999952316284e-01, 6.324999928474426e-01, 6.349999904632568e-01, 6.37499988079071e-01, 6.399999856948853e-01, 6.424999833106995e-01, 6.449999809265137e-01, 6.474999785423279e-01, 6.499999761581421e-01, 6.524999737739563e-01, 6.549999713897705e-01, 6.575000286102295e-01, 6.600000262260437e-01, 6.625000238418579e-01, 6.650000214576721e-01, 6.675000190734863e-01, 6.700000166893005e-01, 6.725000143051147e-01, 6.75000011920929e-01, 6.775000095367432e-01, 6.800000071525574e-01, 6.825000047683716e-01, 6.850000023841858e-01, 6.875e-01, 6.899999976158142e-01, 6.924999952316284e-01, 6.949999928474426e-01, 6.974999904632568e-01, 6.99999988079071e-01, 7.024999856948853e-01, 7.049999833106995e-01, 7.074999809265137e-01, 7.099999785423279e-01, 7.124999761581421e-01, 7.149999737739563e-01, 7.174999713897705e-01, 7.200000286102295e-01, 7.225000262260437e-01, 7.250000238418579e-01, 7.275000214576721e-01, 7.300000190734863e-01, 7.325000166893005e-01, 7.350000143051147e-01, 7.37500011920929e-01, 7.400000095367432e-01, 7.425000071525574e-01, 7.450000047683716e-01, 7.475000023841858e-01, 7.5e-01] +lesCouTowSpe.uMaxTowSpeSet[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.724999785423279e-01, 7.699999809265137e-01, 7.674999833106995e-01, 7.649999856948853e-01, 7.62499988079071e-01, 7.599999904632568e-01, 7.574999928474426e-01, 7.549999952316284e-01, 7.524999976158142e-01, 7.5e-01, 7.475000023841858e-01, 7.450000047683716e-01, 7.425000071525574e-01, 7.400000095367432e-01, 7.37500011920929e-01, 7.350000143051147e-01, 7.325000166893005e-01, 7.300000190734863e-01, 7.275000214576721e-01, 7.250000238418579e-01, 7.225000262260437e-01, 7.200000286102295e-01, 7.174999713897705e-01, 7.149999737739563e-01, 7.124999761581421e-01, 7.099999785423279e-01, 7.074999809265137e-01, 7.049999833106995e-01, 7.024999856948853e-01, 6.99999988079071e-01, 6.974999904632568e-01, 6.949999928474426e-01, 6.924999952316284e-01, 6.899999976158142e-01, 6.875e-01, 6.850000023841858e-01, 6.825000047683716e-01, 6.800000071525574e-01, 6.775000095367432e-01, 6.75000011920929e-01, 6.725000143051147e-01, 6.700000166893005e-01, 6.675000190734863e-01, 6.650000214576721e-01, 6.625000238418579e-01, 6.600000262260437e-01, 6.575000286102295e-01, 6.549999713897705e-01, 6.524999737739563e-01, 6.499999761581421e-01, 6.474999785423279e-01, 6.449999809265137e-01, 6.424999833106995e-01, 6.399999856948853e-01, 6.37499988079071e-01, 6.349999904632568e-01, 6.324999928474426e-01, 6.299999952316284e-01, 6.274999976158142e-01, 6.25e-01, 6.225000023841858e-01, 6.200000047683716e-01, 6.175000071525574e-01, 6.150000095367432e-01, 6.12500011920929e-01, 6.100000143051147e-01, 6.075000166893005e-01, 6.050000190734863e-01, 6.025000214576721e-01, 6.000000238418579e-01, 5.975000262260437e-01, 5.950000286102295e-01, 5.924999713897705e-01, 5.899999737739563e-01, 5.874999761581421e-01, 5.849999785423279e-01, 5.824999809265137e-01, 5.799999833106995e-01, 5.774999856948853e-01, 5.74999988079071e-01, 5.724999904632568e-01, 5.699999928474426e-01, 5.674999952316284e-01, 5.649999976158142e-01, 5.625e-01, 5.600000023841858e-01, 5.575000047683716e-01, 5.550000071525574e-01, 5.525000095367432e-01, 5.50000011920929e-01] +lesCouTowSpe.ySpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.674999833106995e-01, 7.649999856948853e-01, 7.62499988079071e-01, 7.599999904632568e-01, 7.574999928474426e-01, 7.549999952316284e-01, 7.524999976158142e-01, 7.5e-01, 5.525000095367432e-01, 5.550000071525574e-01, 5.575000047683716e-01, 5.600000023841858e-01, 5.625e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 6.25e-01, 6.274999976158142e-01, 6.299999952316284e-01, 6.324999928474426e-01, 6.349999904632568e-01, 6.37499988079071e-01, 6.399999856948853e-01, 6.424999833106995e-01, 6.449999809265137e-01, 6.474999785423279e-01, 6.499999761581421e-01, 6.474999785423279e-01, 6.449999809265137e-01, 6.424999833106995e-01, 6.399999856948853e-01, 6.37499988079071e-01, 6.349999904632568e-01, 6.324999928474426e-01, 6.299999952316284e-01, 6.274999976158142e-01, 6.25e-01, 6.225000023841858e-01, 6.200000047683716e-01, 6.175000071525574e-01, 6.150000095367432e-01, 6.12500011920929e-01, 6.100000143051147e-01, 6.075000166893005e-01, 6.050000190734863e-01, 6.025000214576721e-01, 6.000000238418579e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 5.649999976158142e-01, 5.625e-01, 5.600000023841858e-01, 5.575000047683716e-01, 5.550000071525574e-01, 5.525000095367432e-01, 5.50000011920929e-01] +lesCouTowSpe.plrTowMaxSpe=[8.999999761581421e-01, 8.970000147819519e-01, 8.939999938011169e-01, 8.90999972820282e-01, 8.880000114440918e-01, 8.849999904632568e-01, 8.820000290870667e-01, 8.790000081062317e-01, 8.759999871253967e-01, 8.730000257492065e-01, 8.700000047683716e-01, 8.669999837875366e-01, 8.640000224113464e-01, 8.610000014305115e-01, 8.579999804496765e-01, 8.550000190734863e-01, 8.519999980926514e-01, 8.489999771118164e-01, 8.460000157356262e-01, 8.429999947547913e-01, 8.399999737739563e-01, 8.370000123977661e-01, 8.339999914169312e-01, 8.309999704360962e-01, 8.28000009059906e-01, 8.24999988079071e-01, 8.220000267028809e-01, 8.190000057220459e-01, 8.159999847412109e-01, 8.130000233650208e-01, 8.100000023841858e-01, 8.069999814033508e-01, 8.040000200271606e-01, 8.009999990463257e-01, 7.979999780654907e-01, 7.950000166893005e-01, 7.919999957084656e-01, 7.889999747276306e-01, 7.860000133514404e-01, 7.829999923706055e-01, 7.799999713897705e-01, 7.770000100135803e-01, 7.739999890327454e-01, 7.710000276565552e-01, 7.680000066757202e-01, 7.649999856948853e-01, 7.620000243186951e-01, 7.590000033378601e-01, 7.559999823570251e-01, 7.53000020980835e-01, 7.5e-01, 7.46999979019165e-01, 7.440000176429749e-01, 7.409999966621399e-01, 7.379999756813049e-01, 7.350000143051147e-01, 7.319999933242798e-01, 7.289999723434448e-01, 7.260000109672546e-01, 7.229999899864197e-01, 7.200000286102295e-01, 7.170000076293945e-01, 7.139999866485596e-01, 7.110000252723694e-01, 7.080000042915344e-01, 7.049999833106995e-01, 7.020000219345093e-01, 6.990000009536743e-01, 6.959999799728394e-01, 6.930000185966492e-01, 6.899999976158142e-01, 6.869999766349792e-01, 6.840000152587891e-01, 6.809999942779541e-01, 6.779999732971191e-01, 6.75000011920929e-01, 6.71999990940094e-01, 6.690000295639038e-01, 6.660000085830688e-01, 6.629999876022339e-01, 6.600000262260437e-01, 6.570000052452087e-01, 6.539999842643738e-01, 6.510000228881836e-01, 6.480000019073486e-01, 6.449999809265137e-01, 6.420000195503235e-01, 6.389999985694885e-01, 6.359999775886536e-01, 6.330000162124634e-01, 6.299999952316284e-01, 6.269999742507935e-01, 6.240000128746033e-01, 6.209999918937683e-01, 6.179999709129333e-01, 6.150000095367432e-01, 6.119999885559082e-01, 6.09000027179718e-01, 6.060000061988831e-01, 6.029999852180481e-01, 6.000000238418579e-01] +lesCouTowSpe.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +lesCouTowSpe.uChi[2]=[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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Subsequences_Validation_Setpoint.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Subsequences_Validation_Setpoint.txt new file mode 100644 index 00000000000..13a84e49dce --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Subsequences_Validation_Setpoint.txt @@ -0,0 +1,17 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +conWatRetSet.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +conWatRetSet.uChi[2]=[0e+00, 0e+00] +conWatRetSet.uPla=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +conWatRetSet.uOpeParLoaRat=[0e+00, 0e+00, 0e+00, 0e+00, 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.600000083446503e-02, 1.019999980926514e-01, 1.080000028014183e-01, 1.140000000596046e-01, 1.19999997317791e-01, 1.260000020265579e-01, 1.319999992847443e-01, 1.379999965429306e-01, 1.439999938011169e-01, 1.500000059604645e-01, 1.560000032186508e-01, 1.620000004768372e-01, 1.679999977350235e-01, 1.739999949932098e-01, 1.800000071525574e-01, 1.860000044107437e-01, 1.920000016689301e-01, 1.979999989271164e-01, 2.039999961853027e-01, 2.099999934434891e-01, 2.160000056028366e-01, 2.220000028610229e-01, 2.280000001192093e-01, 2.339999973773956e-01, 2.39999994635582e-01, 2.460000067949295e-01, 2.520000040531158e-01, 2.57999986410141e-01, 2.639999985694885e-01, 2.700000107288361e-01, 2.759999930858612e-01, 2.820000052452087e-01, 2.879999876022339e-01, 2.939999997615814e-01, 3.00000011920929e-01, 3.059999942779541e-01, 3.120000064373016e-01, 3.179999887943268e-01, 3.240000009536744e-01, 3.300000131130219e-01, 3.359999954700471e-01, 3.420000076293945e-01, 3.479999899864197e-01, 3.540000021457672e-01, 3.600000143051147e-01, 3.659999966621399e-01, 3.720000088214874e-01, 3.779999911785126e-01, 3.840000033378601e-01, 3.899999856948853e-01, 3.959999978542328e-01, 4.020000100135803e-01, 4.079999923706055e-01, 4.14000004529953e-01, 4.199999868869781e-01, 4.259999990463257e-01, 4.320000112056732e-01, 4.379999935626984e-01, 4.440000057220459e-01, 4.49999988079071e-01, 4.560000002384186e-01, 4.620000123977661e-01, 4.679999947547913e-01, 4.740000069141388e-01, 4.799999892711639e-01, 4.860000014305115e-01, 4.92000013589859e-01, 4.979999959468842e-01, 5.040000081062317e-01, 5.099999904632568e-01, 5.15999972820282e-01, 5.220000147819519e-01, 5.279999971389771e-01, 5.339999794960022e-01, 5.400000214576721e-01, 5.460000038146973e-01, 5.519999861717224e-01, 5.580000281333923e-01, 5.640000104904175e-01, 5.699999928474426e-01, 5.759999752044678e-01, 5.820000171661377e-01, 5.879999995231628e-01, 5.93999981880188e-01, 6.000000238418579e-01] +conWatRetSet.TChiWatSupSet=[2.796499938964844e+02, 2.796499938964844e+02] +conWatRetSet.TConWatRetSet=[2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975044555664062e+02, 2.972413940429688e+02, 2.969886169433594e+02, 2.967461547851562e+02, 2.965139770507812e+02, 2.962920837402344e+02, 2.960805053710938e+02, 2.958792114257812e+02, 2.95688232421875e+02, 2.955075378417969e+02, 2.953371276855469e+02, 2.95177001953125e+02, 2.950271911621094e+02, 2.948876953125e+02, 2.947584838867188e+02, 2.946395568847656e+02, 2.945309143066406e+02, 2.9455419921875e+02, 2.946400146484375e+02, 2.947257995605469e+02, 2.948116149902344e+02, 2.948973999023438e+02, 2.949831848144531e+02, 2.950690002441406e+02, 2.9515478515625e+02, 2.952406005859375e+02, 2.953263854980469e+02, 2.954122009277344e+02, 2.954979858398438e+02, 2.955838012695312e+02, 2.956695861816406e+02, 2.957554016113281e+02, 2.958411865234375e+02, 2.95927001953125e+02, 2.960127868652344e+02, 2.960986022949219e+02, 2.961843872070312e+02, 2.962702026367188e+02, 2.963559875488281e+02, 2.964418029785156e+02, 2.96527587890625e+02, 2.966134033203125e+02, 2.966991882324219e+02, 2.967850036621094e+02, 2.968707885742188e+02, 2.969566040039062e+02, 2.970423889160156e+02, 2.971282043457031e+02, 2.972139892578125e+02, 2.972998046875e+02, 2.973855895996094e+02, 2.974714050292969e+02, 2.975571899414062e+02, 2.976430053710938e+02, 2.977287902832031e+02, 2.978146057128906e+02, 2.97900390625e+02, 2.979862060546875e+02, 2.980719909667969e+02, 2.981578063964844e+02, 2.982435913085938e+02, 2.983294067382812e+02, 2.984151916503906e+02, 2.985010070800781e+02, 2.985867919921875e+02, 2.98672607421875e+02, 2.987583923339844e+02, 2.988442077636719e+02, 2.989299926757812e+02] +conWatRetSet.conWatRet.y=[2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.796499938964844e+02, 2.917228088378906e+02, 2.9180859375e+02, 2.918944091796875e+02, 2.919801940917969e+02, 2.920660095214844e+02, 2.921517944335938e+02, 2.922376098632812e+02, 2.923233947753906e+02, 2.924092102050781e+02, 2.924949951171875e+02, 2.92580810546875e+02, 2.926665954589844e+02, 2.927524108886719e+02, 2.928381958007812e+02, 2.929240112304688e+02, 2.930097961425781e+02, 2.930956115722656e+02, 2.93181396484375e+02, 2.932672119140625e+02, 2.933529968261719e+02, 2.934388122558594e+02, 2.935245971679688e+02, 2.936104125976562e+02, 2.936961975097656e+02, 2.937820129394531e+02, 2.938677978515625e+02, 2.9395361328125e+02, 2.940393981933594e+02, 2.941252136230469e+02, 2.942109985351562e+02, 2.942968139648438e+02, 2.943825988769531e+02, 2.944684143066406e+02, 2.9455419921875e+02, 2.946400146484375e+02, 2.947257995605469e+02, 2.948116149902344e+02, 2.948973999023438e+02, 2.949831848144531e+02, 2.950690002441406e+02, 2.9515478515625e+02, 2.952406005859375e+02, 2.953263854980469e+02, 2.954122009277344e+02, 2.954979858398438e+02, 2.955838012695312e+02, 2.956695861816406e+02, 2.957554016113281e+02, 2.958411865234375e+02, 2.95927001953125e+02, 2.960127868652344e+02, 2.960986022949219e+02, 2.961843872070312e+02, 2.962702026367188e+02, 2.963559875488281e+02, 2.964418029785156e+02, 2.96527587890625e+02, 2.966134033203125e+02, 2.966991882324219e+02, 2.967850036621094e+02, 2.968707885742188e+02, 2.969566040039062e+02, 2.970423889160156e+02, 2.971282043457031e+02, 2.972139892578125e+02, 2.972998046875e+02, 2.973855895996094e+02, 2.974714050292969e+02, 2.975571899414062e+02, 2.976430053710938e+02, 2.977287902832031e+02, 2.978146057128906e+02, 2.97900390625e+02, 2.979862060546875e+02, 2.980719909667969e+02, 2.981578063964844e+02, 2.982435913085938e+02, 2.983294067382812e+02, 2.984151916503906e+02, 2.985010070800781e+02, 2.985867919921875e+02, 2.98672607421875e+02, 2.987583923339844e+02, 2.988442077636719e+02, 2.989299926757812e+02] +conWatRetSet.TConWatRet_nominal[1]=[3.031499938964844e+02, 3.031499938964844e+02] +conWatRetSet.TConWatRet_nominal[2]=[3.051499938964844e+02, 3.051499938964844e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Validation_Controller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Validation_Controller.txt new file mode 100644 index 00000000000..d44bd518c6a --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_ReturnWaterTemperature_Validation_Controller.txt @@ -0,0 +1,31 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "4", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +towFanSpe.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +towFanSpe.uChi[2]=[0e+00, 0e+00] +towFanSpe.uWse=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +towFanSpe.uTow[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +towFanSpe.uPla=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00] +towFanSpe.TConWatRet=[3.011499938964844e+02, 3.014006652832031e+02, 3.016473693847656e+02, 3.018862609863281e+02, 3.021134948730469e+02, 3.023255615234375e+02, 3.025191040039062e+02, 3.026910400390625e+02, 3.028386535644531e+02, 3.029596557617188e+02, 3.030521240234375e+02, 3.031145629882812e+02, 3.031460571289062e+02, 3.031460571289062e+02, 3.031145629882812e+02, 3.030521240234375e+02, 3.029596557617188e+02, 3.028386535644531e+02, 3.026910400390625e+02, 3.025191040039062e+02, 3.023255615234375e+02, 3.021134948730469e+02, 3.018862609863281e+02, 3.016473693847656e+02, 3.014006652832031e+02, 3.011499938964844e+02, 3.008993225097656e+02, 3.006526184082031e+02, 3.004137573242188e+02, 3.001864929199219e+02, 2.999744262695312e+02, 2.997809143066406e+02, 2.996089782714844e+02, 2.994613342285156e+02, 2.9934033203125e+02, 2.992478942871094e+02, 2.991854248046875e+02, 2.991539611816406e+02, 2.991539611816406e+02, 2.991854248046875e+02, 2.992478942871094e+02, 2.9934033203125e+02, 2.994713439941406e+02, 2.996489868164062e+02, 2.998508911132812e+02, 3.000744323730469e+02, 3.003164978027344e+02, 3.005737609863281e+02, 3.008426208496094e+02, 3.011193237304688e+02, 3.013999938964844e+02, 3.016806640625e+02, 3.019573669433594e+02, 3.022262573242188e+02, 3.024835205078125e+02, 3.027255554199219e+02, 3.029490966796875e+02, 3.031510314941406e+02, 3.033286437988281e+02, 3.034796447753906e+02, 3.036021118164062e+02, 3.03694580078125e+02, 3.037560424804688e+02, 3.037860412597656e+02, 3.037845764160156e+02, 3.037521057128906e+02, 3.036896667480469e+02, 3.035986633300781e+02, 3.034810180664062e+02, 3.033390808105469e+02, 3.031755676269531e+02, 3.029934997558594e+02, 3.027962341308594e+02, 3.025873718261719e+02, 3.023706665039062e+02, 3.021499938964844e+02, 3.019293212890625e+02, 3.017126159667969e+02, 3.015037536621094e+02, 3.013064880371094e+02, 3.011244201660156e+02, 3.009609069824219e+02, 3.008189697265625e+02, 3.007013549804688e+02, 3.006103515625e+02, 3.005478820800781e+02, 3.005154113769531e+02, 3.005139465332031e+02, 3.005439453125e+02, 3.006054382324219e+02, 3.006978759765625e+02, 3.008203430175781e+02, 3.009713439941406e+02, 3.011489868164062e+02, 3.013508911132812e+02, 3.015744323730469e+02, 3.018164978027344e+02, 3.020737609863281e+02, 3.023426208496094e+02, 3.026193237304688e+02, 3.028999938964844e+02] +towFanSpe.conWatRetSet.TConWatRetSet=[2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.973377990722656e+02, 2.96990966796875e+02, 2.966898803710938e+02, 2.964345703125e+02, 2.962250061035156e+02, 2.962416076660156e+02, 2.963559875488281e+02, 2.964703979492188e+02, 2.965848083496094e+02, 2.966991882324219e+02, 2.968135986328125e+02, 2.969280090332031e+02, 2.970423889160156e+02, 2.971567993164062e+02, 2.972712097167969e+02, 2.973855895996094e+02, 2.975e+02, 2.976144104003906e+02, 2.977287902832031e+02, 2.978432006835938e+02, 2.979576110839844e+02, 2.980719909667969e+02, 2.981864013671875e+02, 2.983008117675781e+02, 2.984151916503906e+02, 2.985296020507812e+02, 2.986440124511719e+02, 2.987583923339844e+02, 2.98872802734375e+02, 2.989872131347656e+02, 2.991015930175781e+02, 2.992160034179688e+02, 2.993304138183594e+02, 2.994447937011719e+02, 2.995592041015625e+02, 2.996736145019531e+02, 2.997879943847656e+02, 2.999024047851562e+02, 3.000168151855469e+02, 3.001311950683594e+02, 3.0024560546875e+02, 3.003599853515625e+02, 3.004743957519531e+02, 3.005888061523438e+02, 3.007031860351562e+02, 3.008175964355469e+02, 3.009320068359375e+02, 3.0104638671875e+02, 3.011607971191406e+02, 3.012752075195312e+02, 3.013895874023438e+02, 3.015039978027344e+02, 3.01618408203125e+02, 3.017327880859375e+02, 3.018471984863281e+02, 3.019616088867188e+02, 3.020759887695312e+02, 3.021903991699219e+02, 3.023048095703125e+02, 3.02419189453125e+02, 3.025335998535156e+02, 3.026480102539062e+02, 3.027623901367188e+02, 3.028768005371094e+02, 3.029912109375e+02, 3.031055908203125e+02, 3.032200012207031e+02] +towFanSpe.couTowSpe.ySpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.223999738693237e-01, 8.271999955177307e-01, 8.320000171661377e-01, 8.367999792098999e-01, 8.416000008583069e-01, 8.464000225067139e-01, 8.511999845504761e-01, 8.560000061988831e-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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +towFanSpe.uTowSpeWSE=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.529999971389771e-01, 1.620000004768372e-01, 1.710000038146973e-01, 1.800000071525574e-01, 1.889999955892563e-01, 1.979999989271164e-01, 2.070000022649765e-01, 2.160000056028366e-01, 2.249999940395355e-01, 2.339999973773956e-01, 2.430000007152558e-01, 2.520000040531159e-01, 2.61000007390976e-01, 2.700000107288361e-01, 2.790000140666962e-01, 2.879999876022339e-01, 2.96999990940094e-01, 3.059999942779541e-01, 3.149999976158142e-01, 3.240000009536743e-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] +towFanSpe.ySpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.529999971389771e-01, 1.620000004768372e-01, 1.710000038146973e-01, 1.800000071525574e-01, 1.889999955892563e-01, 1.979999989271164e-01, 2.070000022649765e-01, 2.160000056028366e-01, 2.249999940395355e-01, 2.339999973773956e-01, 2.430000007152558e-01, 2.520000040531159e-01, 2.61000007390976e-01, 2.700000107288361e-01, 2.790000140666962e-01, 2.879999876022339e-01, 2.96999990940094e-01, 3.059999942779541e-01, 3.149999976158142e-01, 3.240000009536743e-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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +towFanSpe.couTowSpe.CWRTSpd.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +towFanSpe.couTowSpe.uMaxTowSpeSet[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, 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] +towFanSpe.couTowSpe.plrTowMaxSpe=[7.599999904632568e-01, 7.648000121116638e-01, 7.69599974155426e-01, 7.74399995803833e-01, 7.7920001745224e-01, 7.839999794960022e-01, 7.888000011444092e-01, 7.936000227928162e-01, 7.983999848365784e-01, 8.032000064849854e-01, 8.080000281333923e-01, 8.127999901771545e-01, 8.176000118255615e-01, 8.223999738693237e-01, 8.271999955177307e-01, 8.320000171661377e-01, 8.367999792098999e-01, 8.416000008583069e-01, 8.464000225067139e-01, 8.511999845504761e-01, 8.560000061988831e-01, 8.6080002784729e-01, 8.655999898910522e-01, 8.704000115394592e-01, 8.751999735832214e-01, 8.799999952316284e-01, 8.848000168800354e-01, 8.895999789237976e-01, 8.944000005722046e-01, 8.992000222206116e-01, 9.039999842643738e-01, 9.088000059127808e-01, 9.136000275611877e-01, 9.1839998960495e-01, 9.232000112533569e-01, 9.279999732971191e-01, 9.327999949455261e-01, 9.376000165939331e-01, 9.423999786376953e-01, 9.472000002861023e-01, 9.520000219345093e-01, 9.567999839782715e-01, 9.616000056266785e-01, 9.664000272750854e-01, 9.711999893188477e-01, 9.760000109672546e-01, 9.807999730110168e-01, 9.855999946594238e-01, 9.904000163078308e-01, 9.95199978351593e-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] +towFanSpe1.TConWatRet=[3.011499938964844e+02, 3.014006652832031e+02, 3.016473693847656e+02, 3.018862609863281e+02, 3.021134948730469e+02, 3.023255615234375e+02, 3.025191040039062e+02, 3.026910400390625e+02, 3.028386535644531e+02, 3.029596557617188e+02, 3.030521240234375e+02, 3.031145629882812e+02, 3.031460571289062e+02, 3.031460571289062e+02, 3.031145629882812e+02, 3.030521240234375e+02, 3.029596557617188e+02, 3.028386535644531e+02, 3.026910400390625e+02, 3.025191040039062e+02, 3.023255615234375e+02, 3.021134948730469e+02, 3.018862609863281e+02, 3.016473693847656e+02, 3.014006652832031e+02, 3.011499938964844e+02, 3.008993225097656e+02, 3.006526184082031e+02, 3.004137573242188e+02, 3.001864929199219e+02, 2.999744262695312e+02, 2.997809143066406e+02, 2.996089782714844e+02, 2.994613342285156e+02, 2.9934033203125e+02, 2.992478942871094e+02, 2.991854248046875e+02, 2.991539611816406e+02, 2.991539611816406e+02, 2.991854248046875e+02, 2.992478942871094e+02, 2.9934033203125e+02, 2.994713439941406e+02, 2.996489868164062e+02, 2.998508911132812e+02, 3.000744323730469e+02, 3.003164978027344e+02, 3.005737609863281e+02, 3.008426208496094e+02, 3.011193237304688e+02, 3.013999938964844e+02, 3.016806640625e+02, 3.019573669433594e+02, 3.022262573242188e+02, 3.024835205078125e+02, 3.027255554199219e+02, 3.029490966796875e+02, 3.031510314941406e+02, 3.033286437988281e+02, 3.034796447753906e+02, 3.036021118164062e+02, 3.03694580078125e+02, 3.037560424804688e+02, 3.037860412597656e+02, 3.037845764160156e+02, 3.037521057128906e+02, 3.036896667480469e+02, 3.035986633300781e+02, 3.034810180664062e+02, 3.033390808105469e+02, 3.031755676269531e+02, 3.029934997558594e+02, 3.027962341308594e+02, 3.025873718261719e+02, 3.023706665039062e+02, 3.021499938964844e+02, 3.019293212890625e+02, 3.017126159667969e+02, 3.015037536621094e+02, 3.013064880371094e+02, 3.011244201660156e+02, 3.009609069824219e+02, 3.008189697265625e+02, 3.007013549804688e+02, 3.006103515625e+02, 3.005478820800781e+02, 3.005154113769531e+02, 3.005139465332031e+02, 3.005439453125e+02, 3.006054382324219e+02, 3.006978759765625e+02, 3.008203430175781e+02, 3.009713439941406e+02, 3.011489868164062e+02, 3.013508911132812e+02, 3.015744323730469e+02, 3.018164978027344e+02, 3.020737609863281e+02, 3.023426208496094e+02, 3.026193237304688e+02, 3.028999938964844e+02] +towFanSpe1.conWatRetSet.TConWatRetSet=[2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.973377990722656e+02, 2.96990966796875e+02, 2.966898803710938e+02, 2.964345703125e+02, 2.962250061035156e+02, 2.962416076660156e+02, 2.963559875488281e+02, 2.964703979492188e+02, 2.965848083496094e+02, 2.966991882324219e+02, 2.968135986328125e+02, 2.969280090332031e+02, 2.970423889160156e+02, 2.971567993164062e+02, 2.972712097167969e+02, 2.973855895996094e+02, 2.975e+02, 2.976144104003906e+02, 2.977287902832031e+02, 2.978432006835938e+02, 2.979576110839844e+02, 2.980719909667969e+02, 2.981864013671875e+02, 2.983008117675781e+02, 2.984151916503906e+02, 2.985296020507812e+02, 2.986440124511719e+02, 2.987583923339844e+02, 2.98872802734375e+02, 2.989872131347656e+02, 2.991015930175781e+02, 2.992160034179688e+02, 2.993304138183594e+02, 2.994447937011719e+02, 2.995592041015625e+02, 2.996736145019531e+02, 2.997879943847656e+02, 2.999024047851562e+02, 3.000168151855469e+02, 3.001311950683594e+02, 3.0024560546875e+02, 3.003599853515625e+02, 3.004743957519531e+02, 3.005888061523438e+02, 3.007031860351562e+02, 3.008175964355469e+02, 3.009320068359375e+02, 3.0104638671875e+02, 3.011607971191406e+02, 3.012752075195312e+02, 3.013895874023438e+02, 3.015039978027344e+02, 3.01618408203125e+02, 3.017327880859375e+02, 3.018471984863281e+02, 3.019616088867188e+02, 3.020759887695312e+02, 3.021903991699219e+02, 3.023048095703125e+02, 3.02419189453125e+02, 3.025335998535156e+02, 3.026480102539062e+02, 3.027623901367188e+02, 3.028768005371094e+02, 3.029912109375e+02, 3.031055908203125e+02, 3.032200012207031e+02] +towFanSpe1.lesCouTowSpe.ySpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.223999738693237e-01, 8.271999955177307e-01, 8.320000171661377e-01, 8.367999792098999e-01, 8.416000008583069e-01, 8.464000225067139e-01, 8.511999845504761e-01, 8.560000061988831e-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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +towFanSpe1.uTowSpeWSE=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.529999971389771e-01, 1.620000004768372e-01, 1.710000038146973e-01, 1.800000071525574e-01, 1.889999955892563e-01, 1.979999989271164e-01, 2.070000022649765e-01, 2.160000056028366e-01, 2.249999940395355e-01, 2.339999973773956e-01, 2.430000007152558e-01, 2.520000040531159e-01, 2.61000007390976e-01, 2.700000107288361e-01, 2.790000140666962e-01, 2.879999876022339e-01, 2.96999990940094e-01, 3.059999942779541e-01, 3.149999976158142e-01, 3.240000009536743e-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] +towFanSpe1.ySpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.529999971389771e-01, 1.620000004768372e-01, 1.710000038146973e-01, 1.800000071525574e-01, 1.889999955892563e-01, 1.979999989271164e-01, 2.070000022649765e-01, 2.160000056028366e-01, 2.249999940395355e-01, 2.339999973773956e-01, 2.430000007152558e-01, 2.520000040531159e-01, 2.61000007390976e-01, 2.700000107288361e-01, 2.790000140666962e-01, 2.879999876022339e-01, 2.96999990940094e-01, 3.059999942779541e-01, 3.149999976158142e-01, 3.240000009536743e-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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +towFanSpe2.TConWatRet=[3.011499938964844e+02, 3.014006652832031e+02, 3.016473693847656e+02, 3.018862609863281e+02, 3.021134948730469e+02, 3.023255615234375e+02, 3.025191040039062e+02, 3.026910400390625e+02, 3.028386535644531e+02, 3.029596557617188e+02, 3.030521240234375e+02, 3.031145629882812e+02, 3.031460571289062e+02, 3.031460571289062e+02, 3.031145629882812e+02, 3.030521240234375e+02, 3.029596557617188e+02, 3.028386535644531e+02, 3.026910400390625e+02, 3.025191040039062e+02, 3.023255615234375e+02, 3.021134948730469e+02, 3.018862609863281e+02, 3.016473693847656e+02, 3.014006652832031e+02, 3.011499938964844e+02, 3.008993225097656e+02, 3.006526184082031e+02, 3.004137573242188e+02, 3.001864929199219e+02, 2.999744262695312e+02, 2.997809143066406e+02, 2.996089782714844e+02, 2.994613342285156e+02, 2.9934033203125e+02, 2.992478942871094e+02, 2.991854248046875e+02, 2.991539611816406e+02, 2.991539611816406e+02, 2.991854248046875e+02, 2.992478942871094e+02, 2.9934033203125e+02, 2.994713439941406e+02, 2.996489868164062e+02, 2.998508911132812e+02, 3.000744323730469e+02, 3.003164978027344e+02, 3.005737609863281e+02, 3.008426208496094e+02, 3.011193237304688e+02, 3.013999938964844e+02, 3.016806640625e+02, 3.019573669433594e+02, 3.022262573242188e+02, 3.024835205078125e+02, 3.027255554199219e+02, 3.029490966796875e+02, 3.031510314941406e+02, 3.033286437988281e+02, 3.034796447753906e+02, 3.036021118164062e+02, 3.03694580078125e+02, 3.037560424804688e+02, 3.037860412597656e+02, 3.037845764160156e+02, 3.037521057128906e+02, 3.036896667480469e+02, 3.035986633300781e+02, 3.034810180664062e+02, 3.033390808105469e+02, 3.031755676269531e+02, 3.029934997558594e+02, 3.027962341308594e+02, 3.025873718261719e+02, 3.023706665039062e+02, 3.021499938964844e+02, 3.019293212890625e+02, 3.017126159667969e+02, 3.015037536621094e+02, 3.013064880371094e+02, 3.011244201660156e+02, 3.009609069824219e+02, 3.008189697265625e+02, 3.007013549804688e+02, 3.006103515625e+02, 3.005478820800781e+02, 3.005154113769531e+02, 3.005139465332031e+02, 3.005439453125e+02, 3.006054382324219e+02, 3.006978759765625e+02, 3.008203430175781e+02, 3.009713439941406e+02, 3.011489868164062e+02, 3.013508911132812e+02, 3.015744323730469e+02, 3.018164978027344e+02, 3.020737609863281e+02, 3.023426208496094e+02, 3.026193237304688e+02, 3.028999938964844e+02] +towFanSpe2.conWatRetSet.TConWatRetSet=[2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.973377990722656e+02, 2.96990966796875e+02, 2.966898803710938e+02, 2.964345703125e+02, 2.962250061035156e+02, 2.962416076660156e+02, 2.963559875488281e+02, 2.964703979492188e+02, 2.965848083496094e+02, 2.966991882324219e+02, 2.968135986328125e+02, 2.969280090332031e+02, 2.970423889160156e+02, 2.971567993164062e+02, 2.972712097167969e+02, 2.973855895996094e+02, 2.975e+02, 2.976144104003906e+02, 2.977287902832031e+02, 2.978432006835938e+02, 2.979576110839844e+02, 2.980719909667969e+02, 2.981864013671875e+02, 2.983008117675781e+02, 2.984151916503906e+02, 2.985296020507812e+02, 2.986440124511719e+02, 2.987583923339844e+02, 2.98872802734375e+02, 2.989872131347656e+02, 2.991015930175781e+02, 2.992160034179688e+02, 2.993304138183594e+02, 2.994447937011719e+02, 2.995592041015625e+02, 2.996736145019531e+02, 2.997879943847656e+02, 2.999024047851562e+02, 3.000168151855469e+02, 3.001311950683594e+02, 3.0024560546875e+02, 3.003599853515625e+02, 3.004743957519531e+02, 3.005888061523438e+02, 3.007031860351562e+02, 3.008175964355469e+02, 3.009320068359375e+02, 3.0104638671875e+02, 3.011607971191406e+02, 3.012752075195312e+02, 3.013895874023438e+02, 3.015039978027344e+02, 3.01618408203125e+02, 3.017327880859375e+02, 3.018471984863281e+02, 3.019616088867188e+02, 3.020759887695312e+02, 3.021903991699219e+02, 3.023048095703125e+02, 3.02419189453125e+02, 3.025335998535156e+02, 3.026480102539062e+02, 3.027623901367188e+02, 3.028768005371094e+02, 3.029912109375e+02, 3.031055908203125e+02, 3.032200012207031e+02] +towFanSpe2.couTowSpe.ySpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.223999738693237e-01, 8.271999955177307e-01, 8.320000171661377e-01, 8.367999792098999e-01, 8.416000008583069e-01, 8.464000225067139e-01, 8.511999845504761e-01, 8.560000061988831e-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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +towFanSpe2.ySpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_Validation_Controller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_Validation_Controller.txt new file mode 100644 index 00000000000..c7513718361 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_FanSpeed_Validation_Controller.txt @@ -0,0 +1,29 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "8", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +cloCouWitWse.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +cloCouWitWse.uWse=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +cloCouWitWse.uTow[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +cloCouWitWse.uPla=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00] +cloCouWitWse.TConWatRet=[3.011499938964844e+02, 3.014006652832031e+02, 3.016473693847656e+02, 3.018862609863281e+02, 3.021134948730469e+02, 3.023255615234375e+02, 3.025191040039062e+02, 3.026910400390625e+02, 3.028386535644531e+02, 3.029596557617188e+02, 3.030521240234375e+02, 3.031145629882812e+02, 3.031460571289062e+02, 3.031460571289062e+02, 3.031145629882812e+02, 3.030521240234375e+02, 3.029596557617188e+02, 3.028386535644531e+02, 3.026910400390625e+02, 3.025191040039062e+02, 3.023255615234375e+02, 3.021134948730469e+02, 3.018862609863281e+02, 3.016473693847656e+02, 3.014006652832031e+02, 3.011499938964844e+02, 3.008993225097656e+02, 3.006526184082031e+02, 3.004137573242188e+02, 3.001864929199219e+02, 2.999744262695312e+02, 2.997809143066406e+02, 2.996089782714844e+02, 2.994613342285156e+02, 2.9934033203125e+02, 2.992478942871094e+02, 2.991854248046875e+02, 2.991539611816406e+02, 2.991539611816406e+02, 2.991854248046875e+02, 2.992478942871094e+02, 2.9934033203125e+02, 2.994713439941406e+02, 2.996489868164062e+02, 2.998508911132812e+02, 3.000744323730469e+02, 3.003164978027344e+02, 3.005737609863281e+02, 3.008426208496094e+02, 3.011193237304688e+02, 3.013999938964844e+02, 3.016806640625e+02, 3.019573669433594e+02, 3.022262573242188e+02, 3.024835205078125e+02, 3.027255554199219e+02, 3.029490966796875e+02, 3.031510314941406e+02, 3.033286437988281e+02, 3.034796447753906e+02, 3.036021118164062e+02, 3.03694580078125e+02, 3.037560424804688e+02, 3.037860412597656e+02, 3.037845764160156e+02, 3.037521057128906e+02, 3.036896667480469e+02, 3.035986633300781e+02, 3.034810180664062e+02, 3.033390808105469e+02, 3.031755676269531e+02, 3.029934997558594e+02, 3.027962341308594e+02, 3.025873718261719e+02, 3.023706665039062e+02, 3.021499938964844e+02, 3.019293212890625e+02, 3.017126159667969e+02, 3.015037536621094e+02, 3.013064880371094e+02, 3.011244201660156e+02, 3.009609069824219e+02, 3.008189697265625e+02, 3.007013549804688e+02, 3.006103515625e+02, 3.005478820800781e+02, 3.005154113769531e+02, 3.005139465332031e+02, 3.005439453125e+02, 3.006054382324219e+02, 3.006978759765625e+02, 3.008203430175781e+02, 3.009713439941406e+02, 3.011489868164062e+02, 3.013508911132812e+02, 3.015744323730469e+02, 3.018164978027344e+02, 3.020737609863281e+02, 3.023426208496094e+02, 3.026193237304688e+02, 3.028999938964844e+02] +cloCouWitWse.fanSpeRetTem.conWatRetSet.TConWatRetSet=[2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.973377990722656e+02, 2.96990966796875e+02, 2.966898803710938e+02, 2.964345703125e+02, 2.962250061035156e+02, 2.962416076660156e+02, 2.963559875488281e+02, 2.964703979492188e+02, 2.965848083496094e+02, 2.966991882324219e+02, 2.968135986328125e+02, 2.969280090332031e+02, 2.970423889160156e+02, 2.971567993164062e+02, 2.972712097167969e+02, 2.973855895996094e+02, 2.975e+02, 2.976144104003906e+02, 2.977287902832031e+02, 2.978432006835938e+02, 2.979576110839844e+02, 2.980719909667969e+02, 2.981864013671875e+02, 2.983008117675781e+02, 2.984151916503906e+02, 2.985296020507812e+02, 2.986440124511719e+02, 2.987583923339844e+02, 2.98872802734375e+02, 2.989872131347656e+02, 2.991015930175781e+02, 2.992160034179688e+02, 2.993304138183594e+02, 2.994447937011719e+02, 2.995592041015625e+02, 2.996736145019531e+02, 2.997879943847656e+02, 2.999024047851562e+02, 3.000168151855469e+02, 3.001311950683594e+02, 3.0024560546875e+02, 3.003599853515625e+02, 3.004743957519531e+02, 3.005888061523438e+02, 3.007031860351562e+02, 3.008175964355469e+02, 3.009320068359375e+02, 3.0104638671875e+02, 3.011607971191406e+02, 3.012752075195312e+02, 3.013895874023438e+02, 3.015039978027344e+02, 3.01618408203125e+02, 3.017327880859375e+02, 3.018471984863281e+02, 3.019616088867188e+02, 3.020759887695312e+02, 3.021903991699219e+02, 3.023048095703125e+02, 3.02419189453125e+02, 3.025335998535156e+02, 3.026480102539062e+02, 3.027623901367188e+02, 3.028768005371094e+02, 3.029912109375e+02, 3.031055908203125e+02, 3.032200012207031e+02] +cloCouWitWse.fanSpeRetTem.couTowSpe.ySpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.127999901771545e-01, 8.176000118255615e-01, 8.223999738693237e-01, 8.271999955177307e-01, 8.320000171661377e-01, 8.367999792098999e-01, 8.416000008583069e-01, 8.464000225067139e-01, 8.511999845504761e-01, 8.560000061988831e-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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +cloCouWitWse.fanSpeRetTem.uTowSpeWSE=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +cloCouWitWse.ySpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +cloCouWitWse.uConWatPumSpe[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.333333414047956e-03, 8.333333767950535e-03, 1.333333365619183e-02, 1.833333261311054e-02, 2.333333343267441e-02, 2.833333425223828e-02, 3.333333507180214e-02, 3.833333402872086e-02, 4.333333298563957e-02, 4.833333194255829e-02, 5.33333346247673e-02, 5.833333358168602e-02, 6.333333253860474e-02, 6.833333522081375e-02, 7.333333045244217e-02, 7.833333313465118e-02, 8.33333358168602e-02, 8.833333104848862e-02, 9.333333373069765e-02, 9.833333641290666e-02, 1.033333316445351e-01, 1.083333343267441e-01, 1.133333370089531e-01, 1.183333322405815e-01, 1.233333349227905e-01, 1.283333301544189e-01, 1.333333402872086e-01, 1.38333335518837e-01, 1.433333307504654e-01, 1.483333259820938e-01, 1.533333361148834e-01, 1.583333313465118e-01, 1.633333265781403e-01, 1.683333367109299e-01, 1.733333319425583e-01, 1.783333271741867e-01, 1.833333373069763e-01, 1.883333325386047e-01, 1.933333277702332e-01, 1.983333379030228e-01, 2.033333331346512e-01, 2.083333283662796e-01, 2.133333384990692e-01, 2.183333337306976e-01, 2.23333328962326e-01, 2.283333390951157e-01, 2.333333343267441e-01, 2.383333295583725e-01, 2.433333396911621e-01, 2.483333349227905e-01, 2.533333301544189e-01, 2.583333253860474e-01, 2.633333206176758e-01, 2.683333456516266e-01, 2.73333340883255e-01, 2.783333361148834e-01, 2.833333313465118e-01, 2.883333265781403e-01, 2.933333218097687e-01, 2.983333468437195e-01, 3.033333420753479e-01, 3.083333373069763e-01, 3.133333325386047e-01, 3.183333277702332e-01, 3.233333230018616e-01, 3.283333480358124e-01, 3.333333432674408e-01, 3.383333384990692e-01, 3.433333337306976e-01, 3.48333328962326e-01, 3.533333241939545e-01, 3.583333194255829e-01, 3.633333444595337e-01, 3.683333396911621e-01, 3.733333349227905e-01, 3.783333301544189e-01, 3.833333253860474e-01, 3.883333206176758e-01, 3.933333456516266e-01, 3.98333340883255e-01, 4.033333361148834e-01, 4.083333313465118e-01, 4.133333265781403e-01, 4.183333218097687e-01, 4.233333468437195e-01, 4.283333420753479e-01, 4.333333373069763e-01, 4.383333325386047e-01, 4.433333277702332e-01, 4.483333230018616e-01, 4.533333480358124e-01, 4.583333432674408e-01] +cloCouWitWse.uConWatPumSpe[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.333333414047956e-03, 8.333333767950535e-03, 1.333333365619183e-02, 1.833333261311054e-02, 2.333333343267441e-02, 2.833333425223828e-02, 3.333333507180214e-02, 3.833333402872086e-02, 4.333333298563957e-02, 4.833333194255829e-02, 5.33333346247673e-02, 5.833333358168602e-02, 6.333333253860474e-02, 6.833333522081375e-02, 7.333333045244217e-02, 7.833333313465118e-02, 8.33333358168602e-02, 8.833333104848862e-02, 9.333333373069765e-02, 9.833333641290666e-02, 1.033333316445351e-01, 1.083333343267441e-01, 1.133333370089531e-01, 1.183333322405815e-01, 1.233333349227905e-01, 1.283333301544189e-01, 1.333333402872086e-01, 1.38333335518837e-01, 1.433333307504654e-01, 1.483333259820938e-01, 1.533333361148834e-01, 1.583333313465118e-01, 1.633333265781403e-01, 1.683333367109299e-01, 1.733333319425583e-01, 1.783333271741867e-01, 1.833333373069763e-01, 1.883333325386047e-01, 1.933333277702332e-01, 1.983333379030228e-01, 2.033333331346512e-01, 2.083333283662796e-01, 2.133333384990692e-01, 2.183333337306976e-01, 2.23333328962326e-01, 2.283333390951157e-01, 2.333333343267441e-01, 2.383333295583725e-01, 2.433333396911621e-01, 2.483333349227905e-01, 2.533333301544189e-01, 2.583333253860474e-01, 2.633333206176758e-01, 2.683333456516266e-01, 2.73333340883255e-01, 2.783333361148834e-01, 2.833333313465118e-01, 2.883333265781403e-01, 2.933333218097687e-01, 2.983333468437195e-01, 3.033333420753479e-01, 3.083333373069763e-01, 3.133333325386047e-01, 3.183333277702332e-01, 3.233333230018616e-01, 3.283333480358124e-01, 3.333333432674408e-01, 3.383333384990692e-01, 3.433333337306976e-01, 3.48333328962326e-01, 3.533333241939545e-01, 3.583333194255829e-01, 3.633333444595337e-01, 3.683333396911621e-01, 3.733333349227905e-01, 3.783333301544189e-01, 3.833333253860474e-01, 3.883333206176758e-01, 3.933333456516266e-01, 3.98333340883255e-01, 4.033333361148834e-01, 4.083333313465118e-01, 4.133333265781403e-01, 4.183333218097687e-01, 4.233333468437195e-01, 4.283333420753479e-01, 4.333333373069763e-01, 4.383333325386047e-01, 4.433333277702332e-01, 4.483333230018616e-01, 4.533333480358124e-01, 4.583333432674408e-01] +lesCouWitWse.TConWatRet=[3.011499938964844e+02, 3.014006652832031e+02, 3.016473693847656e+02, 3.018862609863281e+02, 3.021134948730469e+02, 3.023255615234375e+02, 3.025191040039062e+02, 3.026910400390625e+02, 3.028386535644531e+02, 3.029596557617188e+02, 3.030521240234375e+02, 3.031145629882812e+02, 3.031460571289062e+02, 3.031460571289062e+02, 3.031145629882812e+02, 3.030521240234375e+02, 3.029596557617188e+02, 3.028386535644531e+02, 3.026910400390625e+02, 3.025191040039062e+02, 3.023255615234375e+02, 3.021134948730469e+02, 3.018862609863281e+02, 3.016473693847656e+02, 3.014006652832031e+02, 3.011499938964844e+02, 3.008993225097656e+02, 3.006526184082031e+02, 3.004137573242188e+02, 3.001864929199219e+02, 2.999744262695312e+02, 2.997809143066406e+02, 2.996089782714844e+02, 2.994613342285156e+02, 2.9934033203125e+02, 2.992478942871094e+02, 2.991854248046875e+02, 2.991539611816406e+02, 2.991539611816406e+02, 2.991854248046875e+02, 2.992478942871094e+02, 2.9934033203125e+02, 2.994713439941406e+02, 2.996489868164062e+02, 2.998508911132812e+02, 3.000744323730469e+02, 3.003164978027344e+02, 3.005737609863281e+02, 3.008426208496094e+02, 3.011193237304688e+02, 3.013999938964844e+02, 3.016806640625e+02, 3.019573669433594e+02, 3.022262573242188e+02, 3.024835205078125e+02, 3.027255554199219e+02, 3.029490966796875e+02, 3.031510314941406e+02, 3.033286437988281e+02, 3.034796447753906e+02, 3.036021118164062e+02, 3.03694580078125e+02, 3.037560424804688e+02, 3.037860412597656e+02, 3.037845764160156e+02, 3.037521057128906e+02, 3.036896667480469e+02, 3.035986633300781e+02, 3.034810180664062e+02, 3.033390808105469e+02, 3.031755676269531e+02, 3.029934997558594e+02, 3.027962341308594e+02, 3.025873718261719e+02, 3.023706665039062e+02, 3.021499938964844e+02, 3.019293212890625e+02, 3.017126159667969e+02, 3.015037536621094e+02, 3.013064880371094e+02, 3.011244201660156e+02, 3.009609069824219e+02, 3.008189697265625e+02, 3.007013549804688e+02, 3.006103515625e+02, 3.005478820800781e+02, 3.005154113769531e+02, 3.005139465332031e+02, 3.005439453125e+02, 3.006054382324219e+02, 3.006978759765625e+02, 3.008203430175781e+02, 3.009713439941406e+02, 3.011489868164062e+02, 3.013508911132812e+02, 3.015744323730469e+02, 3.018164978027344e+02, 3.020737609863281e+02, 3.023426208496094e+02, 3.026193237304688e+02, 3.028999938964844e+02] +lesCouWitWse.fanSpeRetTem.conWatRetSet.TConWatRetSet=[2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.973377990722656e+02, 2.96990966796875e+02, 2.966898803710938e+02, 2.964345703125e+02, 2.962250061035156e+02, 2.962416076660156e+02, 2.963559875488281e+02, 2.964703979492188e+02, 2.965848083496094e+02, 2.966991882324219e+02, 2.968135986328125e+02, 2.969280090332031e+02, 2.970423889160156e+02, 2.971567993164062e+02, 2.972712097167969e+02, 2.973855895996094e+02, 2.975e+02, 2.976144104003906e+02, 2.977287902832031e+02, 2.978432006835938e+02, 2.979576110839844e+02, 2.980719909667969e+02, 2.981864013671875e+02, 2.983008117675781e+02, 2.984151916503906e+02, 2.985296020507812e+02, 2.986440124511719e+02, 2.987583923339844e+02, 2.98872802734375e+02, 2.989872131347656e+02, 2.991015930175781e+02, 2.992160034179688e+02, 2.993304138183594e+02, 2.994447937011719e+02, 2.995592041015625e+02, 2.996736145019531e+02, 2.997879943847656e+02, 2.999024047851562e+02, 3.000168151855469e+02, 3.001311950683594e+02, 3.0024560546875e+02, 3.003599853515625e+02, 3.004743957519531e+02, 3.005888061523438e+02, 3.007031860351562e+02, 3.008175964355469e+02, 3.009320068359375e+02, 3.0104638671875e+02, 3.011607971191406e+02, 3.012752075195312e+02, 3.013895874023438e+02, 3.015039978027344e+02, 3.01618408203125e+02, 3.017327880859375e+02, 3.018471984863281e+02, 3.019616088867188e+02, 3.020759887695312e+02, 3.021903991699219e+02, 3.023048095703125e+02, 3.02419189453125e+02, 3.025335998535156e+02, 3.026480102539062e+02, 3.027623901367188e+02, 3.028768005371094e+02, 3.029912109375e+02, 3.031055908203125e+02, 3.032200012207031e+02] +lesCouWitWse.fanSpeRetTem.lesCouTowSpe.ySpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.127999901771545e-01, 8.176000118255615e-01, 8.223999738693237e-01, 8.271999955177307e-01, 8.320000171661377e-01, 8.367999792098999e-01, 8.416000008583069e-01, 8.464000225067139e-01, 8.511999845504761e-01, 8.560000061988831e-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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +lesCouWitWse.fanSpeRetTem.uTowSpeWSE=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +lesCouWitWse.ySpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +cloCouNoWse.TConWatRet=[3.011499938964844e+02, 3.014006652832031e+02, 3.016473693847656e+02, 3.018862609863281e+02, 3.021134948730469e+02, 3.023255615234375e+02, 3.025191040039062e+02, 3.026910400390625e+02, 3.028386535644531e+02, 3.029596557617188e+02, 3.030521240234375e+02, 3.031145629882812e+02, 3.031460571289062e+02, 3.031460571289062e+02, 3.031145629882812e+02, 3.030521240234375e+02, 3.029596557617188e+02, 3.028386535644531e+02, 3.026910400390625e+02, 3.025191040039062e+02, 3.023255615234375e+02, 3.021134948730469e+02, 3.018862609863281e+02, 3.016473693847656e+02, 3.014006652832031e+02, 3.011499938964844e+02, 3.008993225097656e+02, 3.006526184082031e+02, 3.004137573242188e+02, 3.001864929199219e+02, 2.999744262695312e+02, 2.997809143066406e+02, 2.996089782714844e+02, 2.994613342285156e+02, 2.9934033203125e+02, 2.992478942871094e+02, 2.991854248046875e+02, 2.991539611816406e+02, 2.991539611816406e+02, 2.991854248046875e+02, 2.992478942871094e+02, 2.9934033203125e+02, 2.994713439941406e+02, 2.996489868164062e+02, 2.998508911132812e+02, 3.000744323730469e+02, 3.003164978027344e+02, 3.005737609863281e+02, 3.008426208496094e+02, 3.011193237304688e+02, 3.013999938964844e+02, 3.016806640625e+02, 3.019573669433594e+02, 3.022262573242188e+02, 3.024835205078125e+02, 3.027255554199219e+02, 3.029490966796875e+02, 3.031510314941406e+02, 3.033286437988281e+02, 3.034796447753906e+02, 3.036021118164062e+02, 3.03694580078125e+02, 3.037560424804688e+02, 3.037860412597656e+02, 3.037845764160156e+02, 3.037521057128906e+02, 3.036896667480469e+02, 3.035986633300781e+02, 3.034810180664062e+02, 3.033390808105469e+02, 3.031755676269531e+02, 3.029934997558594e+02, 3.027962341308594e+02, 3.025873718261719e+02, 3.023706665039062e+02, 3.021499938964844e+02, 3.019293212890625e+02, 3.017126159667969e+02, 3.015037536621094e+02, 3.013064880371094e+02, 3.011244201660156e+02, 3.009609069824219e+02, 3.008189697265625e+02, 3.007013549804688e+02, 3.006103515625e+02, 3.005478820800781e+02, 3.005154113769531e+02, 3.005139465332031e+02, 3.005439453125e+02, 3.006054382324219e+02, 3.006978759765625e+02, 3.008203430175781e+02, 3.009713439941406e+02, 3.011489868164062e+02, 3.013508911132812e+02, 3.015744323730469e+02, 3.018164978027344e+02, 3.020737609863281e+02, 3.023426208496094e+02, 3.026193237304688e+02, 3.028999938964844e+02] +cloCouNoWse.fanSpeRetTem.conWatRetSet.TConWatRetSet=[2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.975944519042969e+02, 2.973377990722656e+02, 2.96990966796875e+02, 2.966898803710938e+02, 2.964345703125e+02, 2.962250061035156e+02, 2.962416076660156e+02, 2.963559875488281e+02, 2.964703979492188e+02, 2.965848083496094e+02, 2.966991882324219e+02, 2.968135986328125e+02, 2.969280090332031e+02, 2.970423889160156e+02, 2.971567993164062e+02, 2.972712097167969e+02, 2.973855895996094e+02, 2.975e+02, 2.976144104003906e+02, 2.977287902832031e+02, 2.978432006835938e+02, 2.979576110839844e+02, 2.980719909667969e+02, 2.981864013671875e+02, 2.983008117675781e+02, 2.984151916503906e+02, 2.985296020507812e+02, 2.986440124511719e+02, 2.987583923339844e+02, 2.98872802734375e+02, 2.989872131347656e+02, 2.991015930175781e+02, 2.992160034179688e+02, 2.993304138183594e+02, 2.994447937011719e+02, 2.995592041015625e+02, 2.996736145019531e+02, 2.997879943847656e+02, 2.999024047851562e+02, 3.000168151855469e+02, 3.001311950683594e+02, 3.0024560546875e+02, 3.003599853515625e+02, 3.004743957519531e+02, 3.005888061523438e+02, 3.007031860351562e+02, 3.008175964355469e+02, 3.009320068359375e+02, 3.0104638671875e+02, 3.011607971191406e+02, 3.012752075195312e+02, 3.013895874023438e+02, 3.015039978027344e+02, 3.01618408203125e+02, 3.017327880859375e+02, 3.018471984863281e+02, 3.019616088867188e+02, 3.020759887695312e+02, 3.021903991699219e+02, 3.023048095703125e+02, 3.02419189453125e+02, 3.025335998535156e+02, 3.026480102539062e+02, 3.027623901367188e+02, 3.028768005371094e+02, 3.029912109375e+02, 3.031055908203125e+02, 3.032200012207031e+02] +cloCouNoWse.fanSpeRetTem.couTowSpe.ySpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.127999901771545e-01, 8.176000118255615e-01, 8.223999738693237e-01, 8.271999955177307e-01, 8.320000171661377e-01, 8.367999792098999e-01, 8.416000008583069e-01, 8.464000225067139e-01, 8.511999845504761e-01, 8.560000061988831e-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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +cloCouNoWse.ySpeSet=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Staging_Subsequences_Validation_CellsNumber.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Staging_Subsequences_Validation_CellsNumber.txt new file mode 100644 index 00000000000..6ffaf3b26cb --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Staging_Subsequences_Validation_CellsNumber.txt @@ -0,0 +1,15 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +enaTowCel.uChiSta=[1e+00, 1e+00] +enaTowCel.uChiStaSet=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 2e+00, 2e+00] +enaTowCel.uTowStaCha=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +enaTowCel.uWse=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaTowCel.yNumCel=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+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, 2e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00] +enaTowCel.yLeaCel=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaTowCel.uConWatPumSpe[1]=[5e-01, 5e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Staging_Subsequences_Validation_ChangeCells.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Staging_Subsequences_Validation_ChangeCells.txt new file mode 100644 index 00000000000..bba2a374396 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Staging_Subsequences_Validation_ChangeCells.txt @@ -0,0 +1,21 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +enaTowCel.uCelNum=[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, 2e+00, 2e+00, 2e+00, 2e+00, 2e+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, 3e+00, 3e+00, 3e+00, 3e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaTowCel.uTowSta[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] +enaTowCel.uTowSta[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, 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] +enaTowCel.uTowSta[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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaTowCel.uTowSta[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaTowCel.yChaCel[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] +enaTowCel.yChaCel[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] +enaTowCel.yChaCel[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaTowCel.yChaCel[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaTowCel.yTowSta[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] +enaTowCel.yTowSta[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, 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] +enaTowCel.yTowSta[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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaTowCel.yTowSta[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Staging_Subsequences_Validation_StageProcesses.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Staging_Subsequences_Validation_StageProcesses.txt new file mode 100644 index 00000000000..a2c7b4affc4 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Staging_Subsequences_Validation_StageProcesses.txt @@ -0,0 +1,48 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +enaPro.uChaCel[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] +enaPro.uChaCel[2]=[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] +enaPro.uChaCel[3]=[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] +enaPro.uChaCel[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaPro.uIsoVal[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] +enaPro.uIsoVal[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.111111119389534e-01, 5.555555820465088e-01, 8.888888955116272e-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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaPro.uIsoVal[3]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.111111119389534e-01, 5.555555820465088e-01, 8.888888955116272e-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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaPro.uIsoVal[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaPro.yIsoVal[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] +enaPro.yIsoVal[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.777777820825577e-01, 5.777778029441833e-01, 9.777777791023254e-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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaPro.yIsoVal[3]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.777777820825577e-01, 5.777778029441833e-01, 9.777777791023254e-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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaPro.yIsoVal[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaPro.uTowSta[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] +enaPro.uTowSta[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaPro.uTowSta[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaPro.uTowSta[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +enaPro.yTowSta[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] +enaPro.yTowSta[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaPro.yTowSta[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +enaPro.yTowSta[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPro.uChaCel[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] +disPro.uChaCel[2]=[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] +disPro.uChaCel[3]=[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] +disPro.uChaCel[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPro.uIsoVal[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] +disPro.uIsoVal[2]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPro.uIsoVal[3]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPro.uIsoVal[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPro.yIsoVal[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] +disPro.yIsoVal[2]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPro.yIsoVal[3]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPro.yIsoVal[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPro.uTowSta[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] +disPro.uTowSta[2]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPro.uTowSta[3]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPro.uTowSta[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPro.yTowSta[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] +disPro.yTowSta[2]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPro.yTowSta[3]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +disPro.yTowSta[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Staging_Validation_Controller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Staging_Validation_Controller.txt new file mode 100644 index 00000000000..e048edc5820 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Staging_Validation_Controller.txt @@ -0,0 +1,16 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +towSta.uChiSta=[1e+00, 1e+00] +towSta.uChiStaSet=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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, 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, 2e+00, 2e+00] +towSta.uTowStaCha=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +towSta.uWse=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +towSta.uIsoVal[1]=[0e+00, 3.777777850627899e-01, 7.777777910232544e-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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +towSta.uIsoVal[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.444444447755814e-01, 6.44444465637207e-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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.777777850627899e-01, 7.777777910232544e-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] +towSta.uTowSta[1]=[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, 1e+00, 1e+00] +towSta.uTowSta[2]=[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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Validation_WaterLevel.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Validation_WaterLevel.txt new file mode 100644 index 00000000000..61ee0f39c54 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Validation_WaterLevel.txt @@ -0,0 +1,12 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +makUpWat.watLev=[3.00000011920929e-01, 3.314107656478882e-01, 3.627905249595642e-01, 3.941083252429962e-01, 4.253332316875458e-01, 4.564344584941864e-01, 4.873813092708588e-01, 5.181432366371155e-01, 5.486899018287659e-01, 5.789911150932312e-01, 6.09017014503479e-01, 6.387379169464111e-01, 6.681245565414429e-01, 6.971479058265686e-01, 7.257792949676514e-01, 7.539904713630676e-01, 7.817536592483521e-01, 8.09041440486908e-01, 8.358268141746521e-01, 8.62083375453949e-01, 8.877852559089661e-01, 9.129070639610291e-01, 9.374240040779114e-01, 9.613118767738342e-01, 9.845470786094666e-01, 1.007106781005859e+00, 1.028968572616577e+00, 1.050111055374146e+00, 1.070513248443604e+00, 1.090155005455017e+00, 1.109017014503479e+00, 1.12708055973053e+00, 1.144327878952026e+00, 1.160742044448853e+00, 1.17630672454834e+00, 1.191006541252136e+00, 1.204827070236206e+00, 1.217754602432251e+00, 1.229776501655579e+00, 1.240880727767944e+00, 1.251056551933289e+00, 1.26029372215271e+00, 1.268583178520203e+00, 1.275916814804077e+00, 1.282287240028381e+00, 1.287688374519348e+00, 1.292114734649658e+00, 1.295561909675598e+00, 1.29802668094635e+00, 1.299506545066833e+00, 1.299999952316284e+00, 1.299506545066833e+00, 1.29802668094635e+00, 1.295561909675598e+00, 1.292114734649658e+00, 1.287688374519348e+00, 1.282287240028381e+00, 1.275916814804077e+00, 1.268583178520203e+00, 1.26029372215271e+00, 1.251056551933289e+00, 1.240880727767944e+00, 1.229776501655579e+00, 1.217754602432251e+00, 1.204827070236206e+00, 1.191006541252136e+00, 1.17630672454834e+00, 1.160742044448853e+00, 1.144327878952026e+00, 1.12708055973053e+00, 1.109017014503479e+00, 1.090155005455017e+00, 1.070513248443604e+00, 1.050111055374146e+00, 1.028968572616577e+00, 1.007106781005859e+00, 9.845470786094666e-01, 9.613118767738342e-01, 9.374240040779114e-01, 9.129070639610291e-01, 8.877852559089661e-01, 8.62083375453949e-01, 8.358268141746521e-01, 8.09041440486908e-01, 7.817536592483521e-01, 7.539904713630676e-01, 7.257792949676514e-01, 6.971479058265686e-01, 6.681245565414429e-01, 6.387379169464111e-01, 6.09017014503479e-01, 5.789911150932312e-01, 5.486899018287659e-01, 5.181432366371155e-01, 4.873813092708588e-01, 4.564344584941864e-01, 4.253332316875458e-01, 3.941083252429962e-01, 3.627905249595642e-01, 3.314107656478882e-01, 3.00000011920929e-01] +makUpWat.watLevMin=[6.99999988079071e-01, 6.99999988079071e-01] +makUpWat.watLevMax=[1.200000047683716e+00, 1.200000047683716e+00] +makUpWat.yMakUp=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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, 1e+00, 1e+00, 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_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Validation_WithWSE.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Validation_WithWSE.txt new file mode 100644 index 00000000000..890f621423d --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Validation_WithWSE.txt @@ -0,0 +1,28 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "4", + "numerical Jacobians": "0" +} +time=[0e+00, 3.5e+03] +towCon.uChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +towCon.uWse=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +towCon.yLeaCel=[0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +towCon.TChiWatSup=[2.798500061035156e+02, 2.799109497070312e+02, 2.79970947265625e+02, 2.800291748046875e+02, 2.800847473144531e+02, 2.801367797851562e+02, 2.801845703125e+02, 2.802273559570312e+02, 2.802645263671875e+02, 2.802955017089844e+02, 2.803198547363281e+02, 2.803371887207031e+02, 2.803472595214844e+02, 2.803499145507812e+02, 2.803451232910156e+02, 2.803329772949219e+02, 2.803135986328125e+02, 2.802873229980469e+02, 2.802545166015625e+02, 2.802156677246094e+02, 2.8017138671875e+02, 2.80122314453125e+02, 2.800691833496094e+02, 2.800127868652344e+02, 2.799539489746094e+02, 2.798935852050781e+02, 2.798325500488281e+02, 2.797717895507812e+02, 2.797121887207031e+02, 2.796546325683594e+02, 2.796000061035156e+02, 2.795491027832031e+02, 2.79502685546875e+02, 2.7946142578125e+02, 2.794259643554688e+02, 2.793968505859375e+02, 2.793744812011719e+02, 2.793591918945312e+02, 2.793512268066406e+02, 2.793506774902344e+02, 2.793576049804688e+02, 2.793718566894531e+02, 2.793932189941406e+02, 2.794214172363281e+02, 2.794559936523438e+02, 2.794964599609375e+02, 2.795421752929688e+02, 2.795924682617188e+02, 2.796466369628906e+02, 2.797038269042969e+02, 2.7976318359375e+02, 2.798238220214844e+02, 2.798848876953125e+02, 2.799454040527344e+02, 2.800045166015625e+02, 2.800613098144531e+02, 2.801149597167969e+02, 2.801646728515625e+02, 2.802096557617188e+02, 2.802493286132812e+02, 2.802830200195312e+02, 2.803102416992188e+02, 2.803306274414062e+02, 2.803438415527344e+02, 2.803497009277344e+02, 2.803480834960938e+02, 2.803390808105469e+02, 2.8032275390625e+02, 2.802994079589844e+02, 2.802693481445312e+02, 2.802330322265625e+02, 2.801910095214844e+02, 2.801438903808594e+02, 2.800924072265625e+02, 2.800372924804688e+02, 2.799794006347656e+02, 2.799195861816406e+02, 2.798587341308594e+02, 2.797977294921875e+02, 2.797375183105469e+02, 2.796789855957031e+02, 2.796230163574219e+02, 2.795704040527344e+02, 2.7952197265625e+02, 2.794784240722656e+02, 2.794404296875e+02, 2.794085388183594e+02, 2.793832092285156e+02, 2.793648376464844e+02, 2.793537292480469e+02, 2.793500061035156e+02, 2.793537292480469e+02, 2.793648376464844e+02, 2.793832092285156e+02, 2.794085388183594e+02, 2.794404296875e+02, 2.794784240722656e+02, 2.7952197265625e+02, 2.795704040527344e+02, 2.796230163574219e+02, 2.796789855957031e+02] +towCon.TChiWatSupSet=[2.796499938964844e+02, 2.796499938964844e+02] +towCon.yMakUp=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +towCon.watLev=[5e-01, 5.116666555404663e-01, 5.233333110809326e-01, 5.350000262260437e-01, 5.4666668176651e-01, 5.583333373069763e-01, 5.699999928474426e-01, 5.816666483879089e-01, 5.933333039283752e-01, 6.050000190734863e-01, 6.166666746139526e-01, 6.283333301544189e-01, 6.399999856948853e-01, 6.516666412353516e-01, 6.633333563804626e-01, 6.75000011920929e-01, 6.866666674613953e-01, 6.983333230018616e-01, 7.099999785423279e-01, 7.21666693687439e-01, 7.333333492279053e-01, 7.450000047683716e-01, 7.566666603088379e-01, 7.683333158493042e-01, 7.799999713897705e-01, 7.916666865348816e-01, 8.033333420753479e-01, 8.149999976158142e-01, 8.266666531562805e-01, 8.383333086967468e-01, 8.500000238418579e-01, 8.616666793823242e-01, 8.733333349227905e-01, 8.849999904632568e-01, 8.966666460037231e-01, 9.083333611488342e-01, 9.200000166893005e-01, 9.316666722297668e-01, 9.433333277702332e-01, 9.549999833106995e-01, 9.666666388511658e-01, 9.783333539962769e-01, 9.900000095367432e-01, 1.001666665077209e+00, 1.013333320617676e+00, 1.024999976158142e+00, 1.036666631698608e+00, 1.048333287239075e+00, 1.059999942779541e+00, 1.071666717529297e+00, 1.083333373069763e+00, 1.095000028610229e+00, 1.106666684150696e+00, 1.118333339691162e+00, 1.129999995231628e+00, 1.141666650772095e+00, 1.153333306312561e+00, 1.164999961853027e+00, 1.176666617393494e+00, 1.18833339214325e+00, 1.200000047683716e+00, 1.211666703224182e+00, 1.223333358764648e+00, 1.235000014305115e+00, 1.246666669845581e+00, 1.258333325386047e+00, 1.269999980926514e+00, 1.28166663646698e+00, 1.293333292007446e+00, 1.304999947547913e+00, 1.316666722297668e+00, 1.328333377838135e+00, 1.340000033378601e+00, 1.351666688919067e+00, 1.363333344459534e+00, 1.375e+00, 1.386666655540466e+00, 1.398333311080933e+00, 1.409999966621399e+00, 1.421666622161865e+00, 1.433333277702332e+00, 1.445000052452087e+00, 1.456666707992554e+00, 1.46833336353302e+00, 1.480000019073486e+00, 1.491666674613953e+00, 1.503333330154419e+00, 1.514999985694885e+00, 1.526666641235352e+00, 1.538333296775818e+00, 1.549999952316284e+00, 1.56166660785675e+00, 1.573333382606506e+00, 1.585000038146973e+00, 1.596666693687439e+00, 1.608333349227905e+00, 1.620000004768372e+00, 1.631666660308838e+00, 1.643333315849304e+00, 1.654999971389771e+00, 1.666666626930237e+00] +towCon.watLevMin=[6.99999988079071e-01, 6.99999988079071e-01] +towCon.watLevMax=[1e+00, 1e+00] +towCon.uConWatPumSpe[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.083333441987634e-03, 6.944444496184587e-03, 1.180555578321218e-02, 1.666666753590107e-02, 2.152777835726738e-02, 2.63888891786337e-02, 3.125e-02, 3.611111268401146e-02, 4.097222164273262e-02, 4.583333432674408e-02, 5.069444328546524e-02, 5.55555559694767e-02, 6.041666492819786e-02, 6.527777761220932e-02, 7.013888657093048e-02, 7.500000298023224e-02, 7.98611119389534e-02, 8.472222089767456e-02, 8.958332985639574e-02, 9.444444626569749e-02, 9.930555522441863e-02, 1.041666641831398e-01, 1.090277805924416e-01, 1.138888895511627e-01, 1.187499985098839e-01, 1.23611107468605e-01, 1.284722238779068e-01, 1.333333402872086e-01, 1.381944417953491e-01, 1.430555582046509e-01, 1.479166597127914e-01, 1.527777761220932e-01, 1.57638892531395e-01, 1.624999940395355e-01, 1.673611104488373e-01, 1.72222226858139e-01, 1.770833283662796e-01, 1.819444447755814e-01, 1.868055611848831e-01, 1.916666626930237e-01, 1.965277791023254e-01, 2.013888955116272e-01, 2.062499970197678e-01, 2.111111134290695e-01, 2.159722149372101e-01, 2.208333313465119e-01, 2.256944477558136e-01, 2.305555492639542e-01, 2.354166656732559e-01, 2.402777820825577e-01, 2.451388835906982e-01, 2.5e-01, 2.548611164093018e-01, 2.597222328186035e-01, 2.645833194255829e-01, 2.694444358348846e-01, 2.743055522441864e-01, 2.791666686534882e-01, 2.840277850627899e-01, 2.888889014720917e-01, 2.93749988079071e-01, 2.986111044883728e-01, 3.034722208976746e-01, 3.083333373069763e-01, 3.131944537162781e-01, 3.180555701255798e-01, 3.229166567325592e-01, 3.27777773141861e-01, 3.326388895511627e-01, 3.375000059604645e-01, 3.423611223697662e-01, 3.472222089767456e-01, 3.520833253860474e-01, 3.569444417953491e-01, 3.618055582046509e-01, 3.666666746139526e-01, 3.715277910232544e-01, 3.763888776302338e-01, 3.812499940395355e-01, 3.861111104488373e-01, 3.90972226858139e-01, 3.958333432674408e-01, 4.006944298744202e-01, 4.055555462837219e-01, 4.104166626930237e-01, 4.152777791023254e-01, 4.201388955116272e-01, 4.25000011920929e-01, 4.298610985279083e-01, 4.347222149372101e-01, 4.395833313465118e-01, 4.444444477558136e-01] +towCon.uConWatPumSpe[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.083333441987634e-03, 6.944444496184587e-03, 1.180555578321218e-02, 1.666666753590107e-02, 2.152777835726738e-02, 2.63888891786337e-02, 3.125e-02, 3.611111268401146e-02, 4.097222164273262e-02, 4.583333432674408e-02, 5.069444328546524e-02, 5.55555559694767e-02, 6.041666492819786e-02, 6.527777761220932e-02, 7.013888657093048e-02, 7.500000298023224e-02, 7.98611119389534e-02, 8.472222089767456e-02, 8.958332985639574e-02, 9.444444626569749e-02, 9.930555522441863e-02, 1.041666641831398e-01, 1.090277805924416e-01, 1.138888895511627e-01, 1.187499985098839e-01, 1.23611107468605e-01, 1.284722238779068e-01, 1.333333402872086e-01, 1.381944417953491e-01, 1.430555582046509e-01, 1.479166597127914e-01, 1.527777761220932e-01, 1.57638892531395e-01, 1.624999940395355e-01, 1.673611104488373e-01, 1.72222226858139e-01, 1.770833283662796e-01, 1.819444447755814e-01, 1.868055611848831e-01, 1.916666626930237e-01, 1.965277791023254e-01, 2.013888955116272e-01, 2.062499970197678e-01, 2.111111134290695e-01, 2.159722149372101e-01, 2.208333313465119e-01, 2.256944477558136e-01, 2.305555492639542e-01, 2.354166656732559e-01, 2.402777820825577e-01, 2.451388835906982e-01, 2.5e-01, 2.548611164093018e-01, 2.597222328186035e-01, 2.645833194255829e-01, 2.694444358348846e-01, 2.743055522441864e-01, 2.791666686534882e-01, 2.840277850627899e-01, 2.888889014720917e-01, 2.93749988079071e-01, 2.986111044883728e-01, 3.034722208976746e-01, 3.083333373069763e-01, 3.131944537162781e-01, 3.180555701255798e-01, 3.229166567325592e-01, 3.27777773141861e-01, 3.326388895511627e-01, 3.375000059604645e-01, 3.423611223697662e-01, 3.472222089767456e-01, 3.520833253860474e-01, 3.569444417953491e-01, 3.618055582046509e-01, 3.666666746139526e-01, 3.715277910232544e-01, 3.763888776302338e-01, 3.812499940395355e-01, 3.861111104488373e-01, 3.90972226858139e-01, 3.958333432674408e-01, 4.006944298744202e-01, 4.055555462837219e-01, 4.104166626930237e-01, 4.152777791023254e-01, 4.201388955116272e-01, 4.25000011920929e-01, 4.298610985279083e-01, 4.347222149372101e-01, 4.395833313465118e-01, 4.444444477558136e-01] +towCon.uChiSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +towCon.uChiStaSet=[1e+00, 1e+00] +towCon.uTowSta[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +towCon.uTowSta[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +towCon.ySpeSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.403102397918701e-01, 7.979918122291565e-01, 5.809555649757385e-01, 2.971340119838715e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.518536657094955e-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, 9.858340620994568e-01, 2.300064414739609e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +towCon.ySpeSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.518536657094955e-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, 9.858340620994568e-01, 2.300064414739609e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +towCon.chiLoa[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, 1.19079814453125e+04, 1.22175224609375e+04, 1.24862900390625e+04, 1.27052802734375e+04, 1.28671611328125e+04, 1.2966509765625e+04, 1.3e+04, 1.2966509765625e+04, 1.28671611328125e+04, 1.27052802734375e+04, 1.24862900390625e+04, 1.22175224609375e+04, 1.19079814453125e+04, 1.15680302734375e+04, 1.1209056640625e+04, 1.084308203125e+04, 1.04823623046875e+04, 1.01389775390625e+04, 9.8244296875e+03, 9.5492509765625e+03, 9.3226591796875e+03, 9.1522412109375e+03, 9.043705078125e+03, 9.000685546875e+03, 9.024623046875e+03, 9.114716796875e+03, 9.26794921875e+03, 9.4791884765625e+03, 9.741359375e+03, 1.00456826171875e+04, 1.03819658203125e+04, 1.0738947265625e+04, 1.1104671875e+04, 1.1466890625e+04, 1.18134736328125e+04, 1.21328125e+04, 1.24142138671875e+04, 1.2648251953125e+04, 1.28270908203125e+04, 1.2944740234375e+04, 1.29972587890625e+04, 1.29828896484375e+04, 1.290211328125e+04, 1.27576337890625e+04, 1.25542919921875e+04, 1.2298896484375e+04, 1.2e+04, 1.166761328125e+04, 1.1312869140625e+04, 1.0947646484375e+04, 1.05841767578125e+04, 1.02346328125e+04, 9.9107216796875e+03, 9.623291015625e+03, 9.3819658203125e+03, 9.1948291015625e+03, 9.0681484375e+03, 9.0061650390625e+03, 9.0109560546875e+03] +towCon.chiMinCap[1]=[1e+04, 1e+04] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Validation_WithoutWSE.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Validation_WithoutWSE.txt new file mode 100644 index 00000000000..de808c14850 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Towers_Validation_WithoutWSE.txt @@ -0,0 +1,23 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "2", + "numerical Jacobians": "0" +} +time=[0e+00, 3.5e+03] +towCon.uChi[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] +towCon.yLeaCel=[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] +towCon.yMakUp=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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] +towCon.watLev=[5e-01, 5.116666555404663e-01, 5.233333110809326e-01, 5.350000262260437e-01, 5.4666668176651e-01, 5.583333373069763e-01, 5.699999928474426e-01, 5.816666483879089e-01, 5.933333039283752e-01, 6.050000190734863e-01, 6.166666746139526e-01, 6.283333301544189e-01, 6.399999856948853e-01, 6.516666412353516e-01, 6.633333563804626e-01, 6.75000011920929e-01, 6.866666674613953e-01, 6.983333230018616e-01, 7.099999785423279e-01, 7.21666693687439e-01, 7.333333492279053e-01, 7.450000047683716e-01, 7.566666603088379e-01, 7.683333158493042e-01, 7.799999713897705e-01, 7.916666865348816e-01, 8.033333420753479e-01, 8.149999976158142e-01, 8.266666531562805e-01, 8.383333086967468e-01, 8.500000238418579e-01, 8.616666793823242e-01, 8.733333349227905e-01, 8.849999904632568e-01, 8.966666460037231e-01, 9.083333611488342e-01, 9.200000166893005e-01, 9.316666722297668e-01, 9.433333277702332e-01, 9.549999833106995e-01, 9.666666388511658e-01, 9.783333539962769e-01, 9.900000095367432e-01, 1.001666665077209e+00, 1.013333320617676e+00, 1.024999976158142e+00, 1.036666631698608e+00, 1.048333287239075e+00, 1.059999942779541e+00, 1.071666717529297e+00, 1.083333373069763e+00, 1.095000028610229e+00, 1.106666684150696e+00, 1.118333339691162e+00, 1.129999995231628e+00, 1.141666650772095e+00, 1.153333306312561e+00, 1.164999961853027e+00, 1.176666617393494e+00, 1.18833339214325e+00, 1.200000047683716e+00, 1.211666703224182e+00, 1.223333358764648e+00, 1.235000014305115e+00, 1.246666669845581e+00, 1.258333325386047e+00, 1.269999980926514e+00, 1.28166663646698e+00, 1.293333292007446e+00, 1.304999947547913e+00, 1.316666722297668e+00, 1.328333377838135e+00, 1.340000033378601e+00, 1.351666688919067e+00, 1.363333344459534e+00, 1.375e+00, 1.386666655540466e+00, 1.398333311080933e+00, 1.409999966621399e+00, 1.421666622161865e+00, 1.433333277702332e+00, 1.445000052452087e+00, 1.456666707992554e+00, 1.46833336353302e+00, 1.480000019073486e+00, 1.491666674613953e+00, 1.503333330154419e+00, 1.514999985694885e+00, 1.526666641235352e+00, 1.538333296775818e+00, 1.549999952316284e+00, 1.56166660785675e+00, 1.573333382606506e+00, 1.585000038146973e+00, 1.596666693687439e+00, 1.608333349227905e+00, 1.620000004768372e+00, 1.631666660308838e+00, 1.643333315849304e+00, 1.654999971389771e+00, 1.666666626930237e+00] +towCon.watLevMin=[6.99999988079071e-01, 6.99999988079071e-01] +towCon.watLevMax=[1e+00, 1e+00] +towCon.uConWatPumSpe[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.180555578321218e-02, 1.666666753590107e-02, 2.152777835726738e-02, 2.63888891786337e-02, 3.125e-02, 3.611111268401146e-02, 4.097222164273262e-02, 4.583333432674408e-02, 5.069444328546524e-02, 5.55555559694767e-02, 6.041666492819786e-02, 6.527777761220932e-02, 7.013888657093048e-02, 7.500000298023224e-02, 7.98611119389534e-02, 8.472222089767456e-02, 8.958332985639574e-02, 9.444444626569749e-02, 9.930555522441863e-02, 1.041666641831398e-01, 1.090277805924416e-01, 1.138888895511627e-01, 1.187499985098839e-01, 1.23611107468605e-01, 1.284722238779068e-01, 1.333333402872086e-01, 1.381944417953491e-01, 1.430555582046509e-01, 1.479166597127914e-01, 1.527777761220932e-01, 1.57638892531395e-01, 1.624999940395355e-01, 1.673611104488373e-01, 1.72222226858139e-01, 1.770833283662796e-01, 1.819444447755814e-01, 1.868055611848831e-01, 1.916666626930237e-01, 1.965277791023254e-01, 2.013888955116272e-01, 2.062499970197678e-01, 2.111111134290695e-01, 2.159722149372101e-01, 2.208333313465119e-01, 2.256944477558136e-01, 2.305555492639542e-01, 2.354166656732559e-01, 2.402777820825577e-01, 2.451388835906982e-01, 2.5e-01, 2.548611164093018e-01, 2.597222328186035e-01, 2.645833194255829e-01, 2.694444358348846e-01, 2.743055522441864e-01, 2.791666686534882e-01, 2.840277850627899e-01, 2.888889014720917e-01, 2.93749988079071e-01, 2.986111044883728e-01, 3.034722208976746e-01, 3.083333373069763e-01, 3.131944537162781e-01, 3.180555701255798e-01, 3.229166567325592e-01, 3.27777773141861e-01, 3.326388895511627e-01, 3.375000059604645e-01, 3.423611223697662e-01, 3.472222089767456e-01, 3.520833253860474e-01, 3.569444417953491e-01, 3.618055582046509e-01, 3.666666746139526e-01, 3.715277910232544e-01, 3.763888776302338e-01, 3.812499940395355e-01, 3.861111104488373e-01, 3.90972226858139e-01, 3.958333432674408e-01, 4.006944298744202e-01, 4.055555462837219e-01, 4.104166626930237e-01, 4.152777791023254e-01, 4.201388955116272e-01, 4.25000011920929e-01, 4.298610985279083e-01, 4.347222149372101e-01, 4.395833313465118e-01, 4.444444477558136e-01] +towCon.uConWatPumSpe[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.180555578321218e-02, 1.666666753590107e-02, 2.152777835726738e-02, 2.63888891786337e-02, 3.125e-02, 3.611111268401146e-02, 4.097222164273262e-02, 4.583333432674408e-02, 5.069444328546524e-02, 5.55555559694767e-02, 6.041666492819786e-02, 6.527777761220932e-02, 7.013888657093048e-02, 7.500000298023224e-02, 7.98611119389534e-02, 8.472222089767456e-02, 8.958332985639574e-02, 9.444444626569749e-02, 9.930555522441863e-02, 1.041666641831398e-01, 1.090277805924416e-01, 1.138888895511627e-01, 1.187499985098839e-01, 1.23611107468605e-01, 1.284722238779068e-01, 1.333333402872086e-01, 1.381944417953491e-01, 1.430555582046509e-01, 1.479166597127914e-01, 1.527777761220932e-01, 1.57638892531395e-01, 1.624999940395355e-01, 1.673611104488373e-01, 1.72222226858139e-01, 1.770833283662796e-01, 1.819444447755814e-01, 1.868055611848831e-01, 1.916666626930237e-01, 1.965277791023254e-01, 2.013888955116272e-01, 2.062499970197678e-01, 2.111111134290695e-01, 2.159722149372101e-01, 2.208333313465119e-01, 2.256944477558136e-01, 2.305555492639542e-01, 2.354166656732559e-01, 2.402777820825577e-01, 2.451388835906982e-01, 2.5e-01, 2.548611164093018e-01, 2.597222328186035e-01, 2.645833194255829e-01, 2.694444358348846e-01, 2.743055522441864e-01, 2.791666686534882e-01, 2.840277850627899e-01, 2.888889014720917e-01, 2.93749988079071e-01, 2.986111044883728e-01, 3.034722208976746e-01, 3.083333373069763e-01, 3.131944537162781e-01, 3.180555701255798e-01, 3.229166567325592e-01, 3.27777773141861e-01, 3.326388895511627e-01, 3.375000059604645e-01, 3.423611223697662e-01, 3.472222089767456e-01, 3.520833253860474e-01, 3.569444417953491e-01, 3.618055582046509e-01, 3.666666746139526e-01, 3.715277910232544e-01, 3.763888776302338e-01, 3.812499940395355e-01, 3.861111104488373e-01, 3.90972226858139e-01, 3.958333432674408e-01, 4.006944298744202e-01, 4.055555462837219e-01, 4.104166626930237e-01, 4.152777791023254e-01, 4.201388955116272e-01, 4.25000011920929e-01, 4.298610985279083e-01, 4.347222149372101e-01, 4.395833313465118e-01, 4.444444477558136e-01] +towCon.uChiSta=[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, 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] +towCon.uChiStaSet=[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, 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, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +towCon.uTowSta[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +towCon.uTowSta[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +towCon.ySpeSet[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, 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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +towCon.ySpeSet[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, 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, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Validation_Controller.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Validation_Controller.txt new file mode 100644 index 00000000000..d157bc38f64 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_ChillerPlant_Validation_Controller.txt @@ -0,0 +1,40 @@ +last-generated=2024-12-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "10", + "numerical Jacobians": "0" +} +time=[0e+00, 1.08e+04] +chiPlaCon.wseSta.uPla=[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, 1e+00, 1e+00] +chiPlaCon.wseSta.y=[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, 1e+00, 1e+00] +chiPlaCon.wseSta.yPumOn=[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, 1e+00, 1e+00] +chiPlaCon.wseSta.uIni=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +chiPlaCon.wseSta.uChiSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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] +chiPlaCon.wseSta.yConWatIsoVal=[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, 1e+00, 1e+00] +chiPlaCon.wseSta.yPumSpe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.999999761581421e-01, 8.600000143051147e-01, 8.600000143051147e-01, 8.199999928474426e-01, 7.799999713897705e-01, 7.400000095367432e-01, 6.99999988079071e-01, 6.600000262260437e-01, 6.200000047683716e-01, 5.799999833106995e-01, 5.400000214576721e-01, 5.400000214576721e-01, 5e-01, 4.600000083446503e-01, 4.199999868869781e-01, 3.799999952316284e-01, 3.400000035762787e-01, 3.00000011920929e-01, 2.599999904632568e-01, 2.199999988079071e-01, 1.800000071525574e-01, 1.800000071525574e-01, 1.400000005960464e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01] +chiPlaCon.staSetCon.yUp=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] +chiPlaCon.staSetCon.yChiSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiPlaCon.staSetCon.yChiSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiPlaCon.upProCon.yStaPro=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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] +chiPlaCon.upProCon.yTowStaUp=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiPlaCon.upProCon.yLeaPum=[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, 1e+00, 1e+00] +chiPlaCon.upProCon.yDesConWatPumSpe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 6.000000238418579e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01] +chiPlaCon.upProCon.yConWatPumNum=[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, 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] +chiPlaCon.upProCon.yChiHeaCon[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiPlaCon.upProCon.yChiHeaCon[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiPlaCon.upProCon.yChiWatIsoVal[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, 1.182916667312384e-02, 3.718291521072388e-01, 7.318291664123535e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01] +chiPlaCon.upProCon.yChiWatIsoVal[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, 2.807540893554688e-01, 6.407541036605835e-01, 9.974207282066345e-01, 9.974207282066345e-01, 9.974207282066345e-01, 9.974207282066345e-01, 9.974207282066345e-01, 9.974207282066345e-01, 9.974207282066345e-01, 9.974207282066345e-01, 9.974207282066345e-01, 9.974207282066345e-01, 9.974207282066345e-01, 9.974207282066345e-01, 9.974207282066345e-01, 9.974207282066345e-01] +chiPlaCon.upProCon.yChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiPlaCon.upProCon.yChi[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiPlaCon.chiWatPumCon.yChiWatPum[1]=[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, 1e+00, 1e+00] +chiPlaCon.chiWatPumCon.yChiWatPum[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] +chiPlaCon.chiWatPumCon.yPumSpe=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.910662293434143e-01, 5.679023861885071e-01, 8.330541253089905e-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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiPlaCon.towCon.yLeaCel=[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, 1e+00, 1e+00] +chiPlaCon.towCon.yIsoVal[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.39999994635582e-01, 6.000000238418579e-01, 9.599999785423279e-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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiPlaCon.towCon.yIsoVal[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, 1.451624929904938e-01, 5.051624774932861e-01, 8.651624917984009e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01, 9.851624965667725e-01] +chiPlaCon.towCon.yTowSta[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiPlaCon.towCon.yTowSta[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chiPlaCon.towCon.ySpeSet[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, 7.273831367492796e-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] +chiPlaCon.towCon.ySpeSet[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, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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_Examples_ChillerPlant_BaseClasses_Controls_Examples_BatteryControl.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_BatteryControl.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_BatteryControl.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_BatteryControl.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_ChillerSetPointControl.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_ChillerSetPointControl.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_ChillerSetPointControl.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_ChillerSetPointControl.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_ChillerSwitch.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_ChillerSwitch.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_ChillerSwitch.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_ChillerSwitch.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_KMinusU.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_KMinusU.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_KMinusU.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_KMinusU.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_LinearPiecewiseTwo.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_LinearPiecewiseTwo.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_LinearPiecewiseTwo.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_LinearPiecewiseTwo.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_RequestCounter.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_RequestCounter.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_RequestCounter.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_RequestCounter.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_TrimAndRespond.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_TrimAndRespond.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_TrimAndRespond.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_TrimAndRespond.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_WSEControl.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_WSEControl.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_BaseClasses_Controls_Examples_WSEControl.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_BaseClasses_Controls_Examples_WSEControl.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_DataCenterContinuousTimeControl.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_ContinuousTimeControl.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_DataCenterContinuousTimeControl.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_ContinuousTimeControl.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_DataCenterDiscreteTimeControl.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_DiscreteTimeControl.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_DataCenterDiscreteTimeControl.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_DiscreteTimeControl.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_DataCenterRenewables.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_Renewables.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlant_DataCenterRenewables.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_DataCenter_Renewables.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_Guideline36_ClosedLoop.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_Guideline36_ClosedLoop.txt new file mode 100644 index 00000000000..a5fdceebde6 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_ChillerPlants_Guideline36_ClosedLoop.txt @@ -0,0 +1,36 @@ +last-generated=2024-12-13 +statistics-initialization= +{ + "nonlinear": "1, 0, 1, 1, 1, 3, 0, 0, 4, 0, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0", + "nonlinear": "1, 3, 4, 1", + "number of continuous time states": "50", + "numerical Jacobians": "0" +} +time=[1.56384e+07, 1.58976e+07] +chiPla.chi1.m1_flow=[0e+00, 4.266077518463135e+00, 4.061241626739502e+00, 6.245792388916016e+00, 7.529685020446777e+00, 7.3258376121521e+00, 6.508275985717773e+00, 6.166898250579834e+00, 6.253524780273438e+00, 6.467369556427002e+00, 6.575591564178467e+00, 6.738156318664551e+00, 7.131108283996582e+00, 7.491124153137207e+00, 7.778750419616699e+00, 8.100253105163574e+00, 8.514797210693359e+00, 8.79673957824707e+00, 8.98491096496582e+00, 9.108919143676758e+00, 8.816441535949707e+00, 8.372514724731445e+00, 7.813727855682373e+00, 6.878328323364258e+00, 6.342760562896729e+00, 6.590381145477295e+00, 7.034529685974121e+00, 7.235545635223389e+00, 7.225250244140625e+00, 7.155727863311768e+00, 7.178198337554932e+00, 7.413528919219971e+00, 7.552073001861572e+00, 7.559537887573242e+00, 7.51696252822876e+00, 7.487406730651855e+00, 7.546417713165283e+00, 7.712852954864502e+00, 7.686169147491455e+00, 7.54208517074585e+00, 7.457456588745117e+00, 7.479536056518555e+00, 7.717624187469482e+00, 7.964197158813477e+00, 8.042050361633301e+00, 8.000956535339355e+00, 8.229250907897949e+00, 8.662722587585449e+00, 9.004024505615234e+00, 9.47779655456543e+00, 1.026741218566895e+01, 1.125574493408203e+01, 1.194465351104736e+01, 1.194465351104736e+01, 1.194465351104736e+01, 1.194465351104736e+01, 1.194465351104736e+01, 1.194465351104736e+01, 1.194465351104736e+01, 1.194465351104736e+01, 1.194465351104736e+01, 1.194465351104736e+01, 1.194465351104736e+01, 1.194465351104736e+01, 1.024234580993652e+01, 2.954680442810059e+00, 3.599443197250366e+00, 4.268322944641113e+00, 4.354581356048584e+00, 4.232533931732178e+00, 4.181877136230469e+00, 4.023661136627197e+00, 3.837122440338135e+00, 3.683151960372925e+00, 3.747476816177368e+00, 4.048919200897217e+00, 4.570063591003418e+00, 5.113970756530762e+00, 5.454677581787109e+00, 5.741755962371826e+00, 6.108246326446533e+00, 6.675330638885498e+00, 7.284096240997314e+00, 7.640198230743408e+00, 8.078760147094727e+00, 8.900570869445801e+00, 9.537592887878418e+00, 9.547895431518555e+00, 9.575942993164062e+00, 9.716931343078613e+00, 9.879329681396484e+00, 1.013832664489746e+01, 1.059804821014404e+01, 1.099298191070557e+01, 1.119323539733887e+01, 1.117607593536377e+01, 1.079657554626465e+01, 9.704294204711914e+00, 8.100223541259766e+00, 7.336718082427979e+00, 7.308528900146484e+00] +chiPla.chi1.m2_flow=[0e+00, 4.332999706268311e+00, 4.243892669677734e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00, 4.243735790252686e+00] +chiPla.chi1.on=[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, 1e+00, 1e+00, 1e+00, 1e+00] +chiPla.chi1.TSet=[2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02] +chiPla.chi2.m1_flow=[0e+00, 1.095369952963665e-04, 1.106001291191205e-04, 9.651509753894061e-05, 8.545364835299551e-05, 8.734738366911188e-05, 9.442106238566339e-05, 9.712767496239394e-05, 9.645464160712436e-05, 9.475306433159858e-05, 9.387017780682072e-05, 9.251645678887144e-05, 8.910794713301584e-05, 8.581586007494479e-05, 8.306939707836136e-05, 7.98771798145026e-05, 7.557062053820118e-05, 7.251899660332128e-05, 7.042707147775218e-05, 6.902428867761046e-05, 7.230203482322395e-05, 7.707293843850493e-05, 8.272836566902697e-05, 9.132271225098521e-05, 9.575152944307774e-05, 9.37483855523169e-05, 8.996355609269813e-05, 8.816961053526029e-05, 8.826271368889138e-05, 8.888797310646623e-05, 8.868653821991757e-05, 8.653909753775224e-05, 8.524250006303191e-05, 8.517195237800479e-05, 8.557335240766406e-05, 8.585067553212866e-05, 8.529589104000479e-05, 8.370775321964175e-05, 8.396470366278663e-05, 8.533677464583889e-05, 8.61305816215463e-05, 8.592433732701465e-05, 8.366171823581681e-05, 8.124384476104751e-05, 8.046464790822938e-05, 8.087688183877617e-05, 7.856006413931027e-05, 7.398191519314423e-05, 7.021211786195636e-05, 6.473800021922216e-05, 5.499160033650696e-05, 4.169515159446746e-05, 3.170549462083727e-05, 3.170549462083727e-05, 3.170549462083727e-05, 3.170549462083727e-05, 3.170549462083727e-05, 3.170549462083727e-05, 3.170549462083727e-05, 3.170549462083727e-05, 3.170549462083727e-05, 3.170549462083727e-05, 3.170549462083727e-05, 3.170549462083727e-05, 5.531296847038902e-05, 1.152976328739896e-04, 1.127555224229582e-04, 1.095249972422607e-04, 1.090593577828258e-04, 1.097154599847272e-04, 1.099820728995837e-04, 1.107876014430076e-04, 1.116848434321582e-04, 1.123871625168249e-04, 1.120977394748479e-04, 1.106618583435193e-04, 1.078555578715168e-04, 1.045590834110044e-04, 1.023059448925778e-04, 1.002949211397208e-04, 9.757804946275428e-05, 9.30435344344005e-05, 8.772876026341692e-05, 8.44052920001559e-05, 8.009460725588724e-05, 7.137016655178741e-05, 6.402716826414689e-05, 6.390424823621288e-05, 6.356892845360562e-05, 6.186850077938288e-05, 5.98790829826612e-05, 5.663817501044832e-05, 5.067920938017778e-05, 4.534926847554743e-05, 4.257225737092085e-05, 4.281217843526974e-05, 4.802426701644436e-05, 6.202192889759317e-05, 7.987747812876478e-05, 8.724761573830619e-05, 8.750578854233027e-05] +chiPla.chi2.m2_flow=[0e+00, 1.393448383169016e-05, 1.336726109002484e-05, 1.336627337877871e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05, 1.336627155978931e-05] +chiPla.chi2.on=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiPla.chi2.TSet=[2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02, 2.887059936523438e+02] +chiPla.chiWatSupTem.T=[2.931499938964844e+02, 2.910099487304688e+02, 2.894862365722656e+02, 2.889840698242188e+02, 2.888172912597656e+02, 2.887618103027344e+02, 2.887433776855469e+02, 2.887372436523438e+02, 2.887351989746094e+02, 2.887345275878906e+02, 2.887343139648438e+02, 2.887342224121094e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02, 2.887341918945312e+02] +chiPla.chiWatRet.T=[2.931499938964844e+02, 2.921925964355469e+02, 2.909171142578125e+02, 2.904847106933594e+02, 2.903336791992188e+02, 2.902738342285156e+02, 2.902543640136719e+02, 2.902492065429688e+02, 2.902474975585938e+02, 2.902469177246094e+02, 2.902489929199219e+02, 2.902749633789062e+02, 2.902934265136719e+02, 2.903136901855469e+02, 2.903360900878906e+02, 2.903548583984375e+02, 2.903612365722656e+02, 2.903647766113281e+02, 2.903901062011719e+02, 2.903519592285156e+02, 2.903337097167969e+02, 2.90327392578125e+02, 2.902575378417969e+02, 2.902249145507812e+02, 2.90227294921875e+02, 2.902466430664062e+02, 2.902466430664062e+02, 2.902466430664062e+02, 2.902466430664062e+02, 2.902466430664062e+02, 2.902828369140625e+02, 2.903030700683594e+02, 2.903030700683594e+02, 2.903030700683594e+02, 2.903030700683594e+02, 2.903030700683594e+02, 2.903030700683594e+02, 2.903030700683594e+02, 2.903030700683594e+02, 2.903030700683594e+02, 2.903030700683594e+02, 2.903173828125e+02, 2.90335205078125e+02, 2.903333435058594e+02, 2.903479919433594e+02, 2.903809204101562e+02, 2.904203796386719e+02, 2.904405517578125e+02, 2.904745788574219e+02, 2.905253295898438e+02, 2.905899658203125e+02, 2.906400451660156e+02, 2.90646728515625e+02, 2.90646728515625e+02, 2.90646728515625e+02, 2.906145629882812e+02, 2.905899963378906e+02, 2.905882873535156e+02, 2.905476684570312e+02, 2.905070495605469e+02, 2.904615478515625e+02, 2.903684387207031e+02, 2.903015441894531e+02, 2.902647094726562e+02, 2.902428894042969e+02, 2.90200927734375e+02, 2.901738586425781e+02, 2.90143310546875e+02, 2.900790100097656e+02, 2.900794677734375e+02, 2.900652770996094e+02, 2.900433044433594e+02, 2.900246276855469e+02, 2.900243835449219e+02, 2.900669250488281e+02, 2.901333618164062e+02, 2.902220458984375e+02, 2.902712097167969e+02, 2.903118591308594e+02, 2.903524780273438e+02, 2.904067687988281e+02, 2.904906311035156e+02, 2.905925903320312e+02, 2.90609375e+02, 2.906443176269531e+02, 2.906697692871094e+02, 2.906164245605469e+02, 2.906384582519531e+02, 2.90646728515625e+02, 2.90646728515625e+02, 2.90646728515625e+02, 2.906674194335938e+02, 2.906590881347656e+02, 2.906184692382812e+02, 2.905778198242188e+02, 2.905372009277344e+02, 2.904974060058594e+02, 2.904815673828125e+02, 2.904603576660156e+02, 2.904382019042969e+02, 2.904160461425781e+02] +chiPla.chwIsoVal1.y=[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, 1e+00, 1e+00, 1e+00, 1e+00] +chiPla.chwIsoVal2.y=[0e+00, -2.477454563769048e-20, -2.095884709810146e-20, -2.039166776976718e-20, -2.029365171394104e-20, -1.860857817741969e-20, -1.734728122405404e-20, -1.734724406554996e-20, -1.734724406554996e-20, -1.735725909019296e-20, -1.737459918690103e-20, -1.742251103894375e-20, -1.743001382559355e-20, -1.742571797940453e-20, -1.743126913679658e-20, -1.746170518281199e-20, -1.749034308034737e-20, -1.736557613275824e-20, -1.896262601987659e-20, -1.900398505050424e-20, -1.788304384498265e-20, -1.359602199288746e-20, -1.536505113040868e-20, -1.359260017933788e-20, -1.306701898852706e-20, -1.291944964413017e-20, -1.262386262990675e-20, -1.262386262990675e-20, -1.262386262990675e-20, -1.262386909225528e-20, -1.356985755925407e-20, -1.426478297785238e-20, -1.426478297785238e-20, -1.426478297785238e-20, -1.426479267137518e-20, -1.426479267137518e-20, -1.426479267137518e-20, -1.426479267137518e-20, -1.426479267137518e-20, -1.426476520639391e-20, -1.426476520639391e-20, -1.499294425496913e-20, -1.497460734099945e-20, -1.551120683606341e-20, -1.610096076341958e-20, -1.595940301874791e-20, -1.649987022941041e-20, -1.65704035325019e-20, -1.662961156978479e-20, -1.697910507211125e-20, -1.651899231872716e-20, -1.71982126147969e-20, -1.637723101007662e-20, -1.637723101007662e-20, -1.637723101007662e-20, -1.890193164243051e-20, -1.844977727126798e-20, -1.690196240205501e-20, -1.690194624618367e-20, -1.690194624618367e-20, -1.67874544327661e-20, -1.525233646283839e-20, -1.616917246779966e-20, -1.532036237469808e-20, -1.406338388574133e-20, -1.399624493121815e-20, -1.454307593960106e-20, -1.702090354243932e-20, -1.64213753129231e-20, -1.535334781721076e-20, -1.543532109279734e-20, -1.588810392735496e-20, -1.506200252700737e-20, -1.391135390526776e-20, -1.368134276501547e-20, -1.367680458075636e-20, -1.255977309609879e-20, -1.735571458889296e-20, -1.735571458889296e-20, -1.735595531137591e-20, -1.840371041973217e-20, -2.184206435039355e-20, -1.706227065100264e-20, -1.581378045684736e-20, -1.648008574936876e-20, -1.111639624156918e-20, -1.479315913440483e-20, -1.16629727949785e-20, -1.193727687209359e-20, -1.193725102269945e-20, -1.193725102269945e-20, -1.028313052007634e-20, -7.581317109201637e-21, -7.581317109201637e-21, -7.581317109201637e-21, -7.58131630140807e-21, -6.454432158614455e-21, -7.551368970500669e-21, -7.827861360388621e-21, -7.827861360388621e-21, -7.827861360388621e-21] +chiPla.chiWatPum1.y=[0e+00, 6.174121499061584e-01, 6.047164797782898e-01, 6.04694128036499e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01, 6.046940684318542e-01] +chiPla.chiWatPum2.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiPla.cwIsoVal1.y=[0e+00, 1.920314282178879e-01, 1.819658875465393e-01, 2.996332347393036e-01, 3.839168846607208e-01, 3.694442510604858e-01, 3.156663179397583e-01, 2.949066758155823e-01, 3.000932931900024e-01, 3.131338059902191e-01, 3.19869190454483e-01, 3.301704525947571e-01, 3.560535609722137e-01, 3.811425268650055e-01, 4.022715985774994e-01, 4.271928369998932e-01, 4.616812467575073e-01, 4.869051277637482e-01, 5.046563148498535e-01, 5.167954564094543e-01, 4.88724946975708e-01, 4.495145976543427e-01, 4.049092829227448e-01, 3.392336964607239e-01, 3.054919242858887e-01, 3.207983076572418e-01, 3.495551943778992e-01, 3.631862998008728e-01, 3.62477570772171e-01, 3.577236235141754e-01, 3.592554032802582e-01, 3.75613272190094e-01, 3.855339586734772e-01, 3.860746622085571e-01, 3.829980194568634e-01, 3.808749914169312e-01, 3.851248621940613e-01, 3.973381519317627e-01, 3.953558802604675e-01, 3.848105072975159e-01, 3.78733903169632e-01, 3.803117871284485e-01, 3.976940810680389e-01, 4.164665639400482e-01, 4.225697219371796e-01, 4.193370044231415e-01, 4.37621533870697e-01, 4.74721223115921e-01, 5.065044164657593e-01, 5.552506446838379e-01, 6.526604294776917e-01, 8.217148184776306e-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, 6.491284966468811e-01, 1.296281963586807e-01, 1.59711480140686e-01, 1.921824812889099e-01, 1.964852511882782e-01, 1.904035657644272e-01, 1.878951042890549e-01, 1.80123582482338e-01, 1.710765212774277e-01, 1.636938750743866e-01, 1.667700558900833e-01, 1.813592463731766e-01, 2.073630690574646e-01, 2.356849908828735e-01, 2.541475296020508e-01, 2.701983749866486e-01, 2.914272546768188e-01, 3.261640667915344e-01, 3.665429055690765e-01, 3.919649124145508e-01, 4.254811406135559e-01, 4.966067373752594e-01, 5.618460774421692e-01, 5.629922747612e-01, 5.661348104476929e-01, 5.823142528533936e-01, 6.01804792881012e-01, 6.350119113922119e-01, 7.017595171928406e-01, 7.695068717002869e-01, 8.086791634559631e-01, 8.051709532737732e-01, 7.343963384628296e-01, 5.808279514312744e-01, 4.271838665008545e-01, 3.702064752578735e-01, 3.682394027709961e-01] +chiPla.cwIsoVal2.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiPla.conWatPum1.y=[0e+00, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01] +chiPla.conWatPum2.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiPla.cooTow1.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiPla.cooTow2.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, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chiPla.conWatSupTem.T=[2.931499938964844e+02, 2.970000305175781e+02, 2.983670043945312e+02, 2.979933776855469e+02, 2.977026977539062e+02, 2.974658508300781e+02, 2.974456176757812e+02, 2.9750048828125e+02, 2.975631103515625e+02, 2.975733032226562e+02, 2.9756591796875e+02, 2.976537170410156e+02, 2.976980285644531e+02, 2.977107543945312e+02, 2.977371520996094e+02, 2.977991638183594e+02, 2.978330688476562e+02, 2.978082580566406e+02, 2.978365478515625e+02, 2.977702026367188e+02, 2.976737060546875e+02, 2.976729125976562e+02, 2.975325317382812e+02, 2.974716796875e+02, 2.975639953613281e+02, 2.976881408691406e+02, 2.976893920898438e+02, 2.97660400390625e+02, 2.9764111328125e+02, 2.976389465332031e+02, 2.976709594726562e+02, 2.976880493164062e+02, 2.976716003417969e+02, 2.97657958984375e+02, 2.976548767089844e+02, 2.976610412597656e+02, 2.977145385742188e+02, 2.976934204101562e+02, 2.976482849121094e+02, 2.976428833007812e+02, 2.976533508300781e+02, 2.976875610351562e+02, 2.977361145019531e+02, 2.977276611328125e+02, 2.976780395507812e+02, 2.976963500976562e+02, 2.977919921875e+02, 2.977999267578125e+02, 2.978314514160156e+02, 2.979604797363281e+02, 2.981388854980469e+02, 2.983671875e+02, 2.986926879882812e+02, 2.990654602050781e+02, 2.992704467773438e+02, 2.993946533203125e+02, 2.994327697753906e+02, 2.994733581542969e+02, 2.994751281738281e+02, 2.992870788574219e+02, 2.987843017578125e+02, 2.979310302734375e+02, 2.970888366699219e+02, 2.964390563964844e+02, 2.959638977050781e+02, 2.970892333984375e+02, 2.972963562011719e+02, 2.972610168457031e+02, 2.971197509765625e+02, 2.971229858398438e+02, 2.970882263183594e+02, 2.970281372070312e+02, 2.969583129882812e+02, 2.969296569824219e+02, 2.970095825195312e+02, 2.971363220214844e+02, 2.972826843261719e+02, 2.973135375976562e+02, 2.973294372558594e+02, 2.973811950683594e+02, 2.974549255371094e+02, 2.975355834960938e+02, 2.975072326660156e+02, 2.975688781738281e+02, 2.977070922851562e+02, 2.978719482421875e+02, 2.977201538085938e+02, 2.97696533203125e+02, 2.977528381347656e+02, 2.977667541503906e+02, 2.978078002929688e+02, 2.978936157226562e+02, 2.979620666503906e+02, 2.979179077148438e+02, 2.978440856933594e+02, 2.977269592285156e+02, 2.975308532714844e+02, 2.97373046875e+02, 2.974340209960938e+02, 2.975828857421875e+02, 2.97525390625e+02] +chiPla.conWatRetTem.T=[2.931499938964844e+02, 2.986136474609375e+02, 2.996900634765625e+02, 2.992446899414062e+02, 2.989030456542969e+02, 2.986539916992188e+02, 2.986521301269531e+02, 2.987256774902344e+02, 2.9876025390625e+02, 2.987588500976562e+02, 2.987422485351562e+02, 2.987755737304688e+02, 2.987937622070312e+02, 2.987826843261719e+02, 2.987793579101562e+02, 2.987976684570312e+02, 2.988085021972656e+02, 2.987716064453125e+02, 2.987774963378906e+02, 2.987267150878906e+02, 2.986438598632812e+02, 2.986603393554688e+02, 2.986059265136719e+02, 2.986069030761719e+02, 2.987145385742188e+02, 2.987976684570312e+02, 2.987847290039062e+02, 2.987462768554688e+02, 2.987252807617188e+02, 2.9872509765625e+02, 2.987568969726562e+02, 2.98767578125e+02, 2.987449951171875e+02, 2.987296447753906e+02, 2.987275695800781e+02, 2.987318420410156e+02, 2.987563171386719e+02, 2.987525024414062e+02, 2.987149658203125e+02, 2.987134399414062e+02, 2.987277526855469e+02, 2.987511596679688e+02, 2.987811279296875e+02, 2.987648010253906e+02, 2.98731689453125e+02, 2.987369079589844e+02, 2.988037414550781e+02, 2.988102722167969e+02, 2.988048706054688e+02, 2.988778381347656e+02, 2.990028076171875e+02, 2.991961975097656e+02, 2.995415954589844e+02, 2.999358215332031e+02, 3.001975402832031e+02, 3.003370971679688e+02, 3.003838500976562e+02, 3.004342956542969e+02, 3.00422119140625e+02, 3.00306884765625e+02, 2.998799133300781e+02, 2.991043395996094e+02, 2.98201171875e+02, 2.974708557128906e+02, 2.969830017089844e+02, 2.986540222167969e+02, 2.988161315917969e+02, 2.98782958984375e+02, 2.987177429199219e+02, 2.987297973632812e+02, 2.987228088378906e+02, 2.9871533203125e+02, 2.987144165039062e+02, 2.987264099121094e+02, 2.987528076171875e+02, 2.987752380371094e+02, 2.988009948730469e+02, 2.987843017578125e+02, 2.987678527832031e+02, 2.987716064453125e+02, 2.987904357910156e+02, 2.988250122070312e+02, 2.988019409179688e+02, 2.987861328125e+02, 2.988358459472656e+02, 2.989208068847656e+02, 2.987988586425781e+02, 2.987180480957031e+02, 2.987599487304688e+02, 2.987712707519531e+02, 2.987843627929688e+02, 2.988339538574219e+02, 2.988964233398438e+02, 2.988566284179688e+02, 2.987821655273438e+02, 2.986719665527344e+02, 2.984958190917969e+02, 2.983580322265625e+02, 2.984845886230469e+02, 2.9870263671875e+02, 2.987241821289062e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_ZoneEquipment_Validation_VAVBoxReheat.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_ZoneEquipment_Validation_VAVBoxReheat.txt deleted file mode 100644 index b1f3e9fc32a..00000000000 --- a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_ZoneEquipment_Validation_VAVBoxReheat.txt +++ /dev/null @@ -1,18 +0,0 @@ -last-generated=2024-09-16 -statistics-initialization= -{ - "nonlinear": "1, 0, 1", - "numerical Jacobians": "0" -} -statistics-simulation= -{ - "linear": " ", - "nonlinear": "1, 0", - "number of continuous time states": "7", - "numerical Jacobians": "0" -} -time=[0e+00, 3.6e+03] -VAVBox_1.bus.TAirSup=[2.881499938964844e+02, 2.881499938964844e+02] -VAVBox_1.bus.TAirDis=[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] -VAVBox_1.bus.TZon=[3.031499938964844e+02, 3.031499938964844e+02] -VAVBox_1.damVAV.m_flow=[1.52911439538002e-01, 7.524333894252777e-02, 2.197753265500069e-02, 2.731516025960445e-02, 3.131101280450821e-02, 3.537514060735703e-02, 3.949476033449173e-02, 4.363079369068146e-02, 4.773836582899094e-02, 5.177944526076317e-02, 5.571180209517479e-02, 5.949424207210541e-02, 6.311427056789398e-02, 6.656590104103088e-02, 6.984520703554153e-02, 7.295336574316025e-02, 7.589176297187805e-02, 7.866419106721878e-02, 8.127657324075699e-02, 8.373453468084335e-02, 8.604356646537781e-02, 8.821155875921249e-02, 9.02462974190712e-02, 9.215415269136429e-02, 9.394125640392303e-02, 9.561590105295181e-02, 9.718414396047592e-02, 9.865148365497589e-02, 1.000252515077591e-01, 1.013112291693687e-01, 1.025146245956421e-01, 1.036394685506821e-01, 1.046928837895393e-01, 1.056785881519318e-01, 1.066003069281578e-01, 1.074633300304413e-01, 1.082710549235344e-01, 1.090263798832893e-01, 1.097335889935493e-01, 1.103957742452621e-01, 1.11015647649765e-01, 1.115951165556908e-01, 1.121383756399155e-01, 1.126471534371376e-01, 1.131228432059288e-01, 1.135688051581383e-01, 1.139866262674332e-01, 1.143776103854179e-01, 1.147438585758209e-01, 1.150872781872749e-01, 1.154090985655785e-01, 1.157097145915031e-01, 1.159921810030937e-01, 1.162570863962173e-01, 1.165048480033875e-01, 1.167373955249786e-01, 1.169554069638252e-01, 1.171595752239227e-01, 1.173507124185562e-01, 1.175302341580391e-01, 1.176985874772072e-01, 1.178557202219963e-01, 1.180034279823303e-01, 1.181420534849167e-01, 1.182714030146599e-01, 1.183929368853569e-01, 1.185071095824242e-01, 1.186141595244408e-01, 1.18714265525341e-01, 1.188084557652473e-01, 1.188969686627388e-01, 1.189793720841408e-01, 1.190570145845413e-01, 1.19129940867424e-01, 1.191979721188545e-01, 1.19261845946312e-01, 1.193219944834709e-01, 1.193783730268478e-01, 1.19430810213089e-01, 1.194803789258003e-01, 1.195270046591759e-01, 1.19570255279541e-01, 1.19611032307148e-01, 1.196494996547699e-01, 1.196854487061501e-01, 1.197189092636108e-01, 1.197506561875343e-01, 1.197804436087608e-01, 1.198080703616142e-01, 1.198342517018318e-01, 1.198589280247688e-01, 1.198818236589432e-01, 1.199033111333847e-01, 1.199236884713173e-01, 1.199427247047424e-01, 1.199604198336601e-01, 1.199772357940674e-01, 1.199930235743523e-01, 1.200077086687088e-01, 1.200214847922325e-01, 1.200345754623413e-01] diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/BypassValve.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/BypassValve.mos new file mode 100644 index 00000000000..1f753b1c63f --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/BypassValve.mos @@ -0,0 +1,5 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.BypassValve", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="BypassValve"); +createPlot(id=1, position={15, 15, 1140, 1172}, y={"wseVal.uWSE", "wseVal.uPla"}, range={0.0, 3600.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 1140, 1172}, y={"wseVal.dpChiWat", "wseVal.dpDes"}, range={0.0, 3600.0, 4000.0, 8000.0}, autoscale=false, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"Pa","Pa"}); +createPlot(id=1, position={15, 15, 1140, 1172}, y={"wseVal.yRetVal"}, range={0.0, 3600.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={15, 15, 1140, 1172}, y={"wseVal.yConWatIsoVal"}, range={0.0, 3600.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/HeatExchangerPump.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/HeatExchangerPump.mos new file mode 100644 index 00000000000..f77aa2665c0 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/HeatExchangerPump.mos @@ -0,0 +1,5 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.HeatExchangerPump", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="HeatExchangerPump"); +createPlot(id=1, position={75, 75, 1290, 1130}, y={"wsePum.uWSE", "wsePum.uPum", "wsePum.yPumOn", "wsePum.uPla"}, range={0.0, 3600.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200},{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={75, 75, 1290, 1130}, y={"wsePum.TEntWSE", "wsePum.TEntHex"}, range={0.0, 3600.0, 5.0, 20.0}, autoscale=false, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"degC","degC"}); +createPlot(id=1, position={75, 75, 1290, 1130}, y={"wsePum.yConWatIsoVal", "wsePum.yPumSpe"}, range={0.0, 3600.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1","1"}); +createPlot(id=1, position={75, 75, 1290, 1130}, y={"wsePum.resSpeReq.y"}, range={0.0, 3600.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s"); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/PredictedOutletTemperature.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/PredictedOutletTemperature.mos new file mode 100644 index 00000000000..4cd629cce88 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/PredictedOutletTemperature.mos @@ -0,0 +1,7 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.PredictedOutletTemperature", method="Cvode", stopTime=2100, tolerance=1e-06, resultFile="PredictedOutletTemperature"); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=1, y={"wseTOut.uTunPar"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=2, y={"wseTOut.VChiWat_flow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=3, y={"wseTOut.TOutWet", "wseTOut.y", "wseTOut.TOutWetDes"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + + + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/Tuning_uEcoSta_uTowFanSpeMax.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/Tuning_uEcoSta_uTowFanSpeMax.mos new file mode 100644 index 00000000000..833b5bdb376 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Subsequences/Validation/Tuning_uEcoSta_uTowFanSpeMax.mos @@ -0,0 +1,4 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.Tuning_uEcoSta_uTowFanSpeMax", method="Cvode", stopTime=150000, tolerance=1e-06, resultFile="Tuning_uEcoSta_uTowFanSpeMax"); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=1, y={"wseTun.uTowFanSpeMax", "wseTun1.uTowFanSpeMax", "wseTun2.uTowFanSpeMax", "wseTun3.uTowFanSpeMax", "wseTun4.uTowFanSpeMax"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {0,50,50}, {0,0,127}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=2, y={"wseTun.uWseSta", "wseTun1.uWseSta", "wseTun2.uWseSta", "wseTun3.uWseSta", "wseTun4.uWseSta"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {0,50,50}, {0,0,127}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=3, y={"wseTun.y", "wseTun1.y", "wseTun2.y", "wseTun3.y", "wseTun4.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {0,50,50}, {0,0,127}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Validation/Controller.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Validation/Controller.mos new file mode 100644 index 00000000000..419afc729a2 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Economizers/Validation/Controller.mos @@ -0,0 +1,16 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Validation.Controller", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="Controller1"); +createPlot(id=1, position={15, 15, 1200, 694}, y={"wseSta.TOutWet", "wseSta.TChiWatRet", "wseSta.TChiWatRetDow"}, range={0.0, 3600.0, 0.0, 40.0}, autoscale=false, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC", "degC"}); +createPlot(id=1, position={15, 15, 1200, 694}, y={"wseSta.VChiWat_flow", "wseSta.uTowFanSpeMax"}, range={0.0, 3600.0, -2.0, 2.0}, autoscale=false, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"m3/s", "1"}); +createPlot(id=1, position={15, 15, 1200, 694}, y={"wseSta.y", "wseSta.enaTWet.y", "wseSta.enaTChiWatRet.y"}, range={0.0, 3600.0, -2.0, 2.0}, autoscale=false, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 1200, 694}, y={"wseSta.yConWatIsoVal", "wseSta.yRetVal"}, range={0.0, 3600.0, -5.0, 5.0}, autoscale=false, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=2, position={19, 745, 1200, 712}, y={"wseSta1.TOutWet", "wseSta1.TChiWatRet", "wseSta1.TChiWatRetDow"}, range={0.0, 3600.0, 0.0, 40.0}, autoscale=false, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC", "degC"}); +createPlot(id=2, position={19, 745, 1200, 712}, y={"wseSta1.VChiWat_flow", "wseSta1.uTowFanSpeMax"}, range={0.0, 3600.0, -2.0, 2.0}, autoscale=false, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"m3/s", "1"}); +createPlot(id=2, position={19, 745, 1200, 712}, y={"wseSta1.y", "wseSta1.enaTWet.y", "wseSta1.enaTChiWatRet.y"}, range={0.0, 3600.0, -2.0, 2.0}, autoscale=false, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={19, 745, 1200, 712}, y={"wseSta1.yConWatIsoVal", "wseSta1.yRetVal"}, range={0.0, 3600.0, -5.0, 5.0}, autoscale=false, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=3, position={1233, 21, 1200, 692}, y={"wseSta2.TOutWet", "wseSta2.TChiWatRet", "wseSta2.TChiWatRetDow"}, range={0.0, 3600.0, 0.0, 40.0}, autoscale=false, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC", "degC"}); +createPlot(id=3, position={1233, 21, 1200, 692}, y={"wseSta2.VChiWat_flow", "wseSta2.uTowFanSpeMax"}, range={0.0, 3600.0, -2.0, 2.0}, autoscale=false, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"m3/s", "1"}); +createPlot(id=3, position={1233, 21, 1200, 692}, y={"wseSta2.y", "wseSta2.enaTWet.y", "wseSta2.enaTChiWatRet.y"}, range={0.0, 3600.0, -2.0, 2.0}, autoscale=false, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1233, 21, 1200, 692}, y={"wseSta2.yConWatIsoVal", "wseSta2.yRetVal"}, range={0.0, 3600.0, -5.0, 5.0}, autoscale=false, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=4, position={1241, 749, 1214, 702}, y={"wseSta3.y", "wseSta3.yPumOn"}, range={0.0, 3600.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=4, position={1241, 749, 1214, 702}, y={"wseSta3.uIni", "wseSta3.uChiSta"}, range={0.0, 3600.0, -1.0, 2.0}, autoscale=false, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=4, position={1241, 749, 1214, 702}, y={"wseSta3.yConWatIsoVal", "wseSta3.yPumSpe"}, range={0.0, 3600.0, -1.0, 2.0}, autoscale=false, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/ContinuousLeadSwapTwo_uDevSta.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/ContinuousLeadSwapTwo_uDevSta.mos new file mode 100644 index 00000000000..1e1b599d353 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/ContinuousLeadSwapTwo_uDevSta.mos @@ -0,0 +1,18 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.ContinuousLeadSwapTwo_uDevSta", method="Cvode", stopTime=180, tolerance=1e-06, resultFile="ContinuousLeadSwapTwo_uDevSta"); + +createPlot(id=1, subPlot=1, position={10, 10, 1200, 800}, y={"leaSwa.uDevRolSet[1]","leaSwa.uDevRolSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=2, position={10, 10, 1200, 800}, y={"leaSwa.uDevSta[1]","leaSwa.uDevSta[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=3, position={10, 10, 1200, 800}, y={"leaSwa.yDevStaSet[1]","leaSwa.yDevStaSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); + +createPlot(id=2, subPlot=1, position={10, 10, 1200, 800}, y={"leaSwa1.uDevRolSet[1]","leaSwa1.uDevRolSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=2, subPlot=2, position={10, 10, 1200, 800}, y={"leaSwa1.uDevSta[1]","leaSwa1.uDevSta[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=2, subPlot=3, position={10, 10, 1200, 800}, y={"leaSwa1.yDevStaSet[1]","leaSwa1.yDevStaSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); + +createPlot(id=3, subPlot=1, position={10, 10, 1200, 800}, y={"leaSwa2.uDevRolSet[1]","leaSwa2.uDevRolSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=3, subPlot=2, position={10, 10, 1200, 800}, y={"leaSwa2.uDevSta[1]","leaSwa2.uDevSta[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=3, subPlot=3, position={10, 10, 1200, 800}, y={"leaSwa2.yDevStaSet[1]","leaSwa2.yDevStaSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); + +createPlot(id=4, subPlot=1, position={10, 10, 1200, 800}, y={"leaSwa3.uDevRolSet[1]","leaSwa3.uDevRolSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=4, subPlot=2, position={10, 10, 1200, 800}, y={"leaSwa3.uDevSta[1]","leaSwa3.uDevSta[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=4, subPlot=3, position={10, 10, 1200, 800}, y={"leaSwa3.yDevStaSet[1]","leaSwa3.yDevStaSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/LeastRuntime_uDevRol.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/LeastRuntime_uDevRol.mos new file mode 100644 index 00000000000..45c39f6598a --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/LeastRuntime_uDevRol.mos @@ -0,0 +1,12 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.LeastRuntime_uDevRol", method="Cvode", stopTime=100000, tolerance=1e-06, resultFile="LeastRuntime_uDevRol"); +createPlot(id=1, subPlot=1, position={10, 10, 1200, 800}, y={"rotTwo.yDevRol[1]","rotTwo.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=2, position={10, 10, 1200, 800}, y={"leaRunTim.uDevSta[1]","leaRunTim.uDevSta[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=3, position={10, 10, 1200, 800}, y={"leaRunTim.accTim[1].y","leaRunTim.accTim[2].y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); + +createPlot(id=2, subPlot=1, position={20, 10, 1200, 800}, y={"rotTwo1.yDevRol[1]","rotTwo1.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=2, subPlot=2, position={10, 10, 1200, 800}, y={"leaRunTim1.uDevSta[1]","leaRunTim1.uDevSta[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=2, subPlot=3, position={20, 10, 1200, 800}, y={"leaRunTim1.accTim[1].y","leaRunTim1.accTim[2].y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); + +createPlot(id=3, subPlot=1, position={20, 10, 1200, 800}, y={"rotTwo2.yDevRol[1]","rotTwo2.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=3, subPlot=2, position={10, 10, 1200, 800}, y={"leaRunTim2.uDevSta[1]","leaRunTim2.uDevSta[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=3, subPlot=3, position={20, 10, 1200, 800}, y={"leaRunTim2.accTim[1].y","leaRunTim2.accTim[2].y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/MinimumLeadRuntime_uDevRol.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/MinimumLeadRuntime_uDevRol.mos new file mode 100644 index 00000000000..b4c3ebdcec1 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/MinimumLeadRuntime_uDevRol.mos @@ -0,0 +1,15 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.MinimumLeadRuntime_uDevRol", method="Cvode", stopTime=100000, tolerance=1e-06, resultFile="MinimumLeadRuntime_uDevRol"); +createPlot(id=1, subPlot=1, position={10, 10, 1200, 800}, y={"rotTwo.yDevRol[1]","rotTwo.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=2, position={10, 10, 1200, 800}, y={"minLeaTim.uDevSta[1]","minLeaTim.uDevSta[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=3, position={10, 10, 1200, 800}, y={"minLeaTim.accTim[1].y","minLeaTim.accTim[2].y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=4, position={10, 10, 1200, 800}, y={"minLeaTim.accTim[1].passed","minLeaTim.accTim[2].passed"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); + +createPlot(id=2, subPlot=1, position={20, 10, 1200, 800}, y={"rotTwo1.yDevRol[1]","rotTwo1.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=2, subPlot=2, position={10, 10, 1200, 800}, y={"minLeaTim1.uDevSta[1]","minLeaTim1.uDevSta[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=2, subPlot=3, position={20, 10, 1200, 800}, y={"minLeaTim1.accTim[1].y","minLeaTim1.accTim[2].y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=2, subPlot=4, position={20, 10, 1200, 800}, y={"minLeaTim1.accTim[1].passed","minLeaTim1.accTim[2].passed"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); + +createPlot(id=3, subPlot=1, position={20, 10, 1200, 800}, y={"rotTwo2.yDevRol[1]","rotTwo2.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=3, subPlot=2, position={10, 10, 1200, 800}, y={"minLeaTim2.uDevSta[1]","minLeaTim2.uDevSta[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=3, subPlot=3, position={20, 10, 1200, 800}, y={"minLeaTim2.accTim[1].y","minLeaTim2.accTim[2].y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=3, subPlot=4, position={20, 10, 1200, 800}, y={"minLeaTim2.accTim[1].passed","minLeaTim2.accTim[2].passed"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Scheduler.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Scheduler.mos new file mode 100644 index 00000000000..b4a1c07f618 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Scheduler.mos @@ -0,0 +1,4 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.Scheduler", method="Cvode", stopTime=3000000, tolerance=1e-06, resultFile="Scheduler"); + +createPlot(id=1, subPlot=1, position={10, 10, 1200, 800}, y={"truFalHol.y", "truFalHol1.y", "truFalHol2.y", "truFalHol3.y", "truFalHol4.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72},{238,46,47},{238,46,47},{28,108,200}}); +createPlot(id=1, subPlot=2, position={10, 10, 1200, 800}, y={"rotSch.calTim.weekDay", "rotSch.calTim.hour"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Two_uRot.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Two_uRot.mos new file mode 100644 index 00000000000..ee7537ec8c8 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Subsequences/Validation/Two_uRot.mos @@ -0,0 +1,6 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.Two_uRot", method="Cvode", stopTime=1000000, tolerance=1e-06, resultFile="Two_uRot"); + +createPlot(id=1, subPlot=1, position={10, 10, 1200, 800}, y={"rotTwo.yDevRol[1]","rotTwo.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=2, position={10, 10, 1200, 800}, y={"rotTwo.yPreDevRolSig[1]","rotTwo.yPreDevRolSig[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=3, position={20, 10, 1200, 800}, y={"rotTwo1.yDevRol[1]","rotTwo1.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=4, position={10, 10, 1200, 800}, y={"rotTwo1.yPreDevRolSig[1]","rotTwo1.yPreDevRolSig[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo.mos new file mode 100644 index 00000000000..6b9da6a7a35 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Validation.ControllerTwo", method="Cvode", stopTime=100000, tolerance=1e-06, resultFile="ControllerTwo"); + +createPlot(id=1, subPlot=1, position={10, 10, 1200, 800}, y={"leaLag.uLeaStaSet","leaLag.uLagStaSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=2, position={10, 10, 1200, 800}, y={"leaLag.yDevStaSet[1]","leaLag.yDevStaSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=3, position={10, 10, 1200, 800}, y={"leaLag.yDevRol[1]","leaLag.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); + +createPlot(id=2, subPlot=1, position={10, 10, 1200, 800}, y={"leaLag1.uLeaStaSet","leaLag1.uLagStaSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=2, subPlot=2, position={20, 10, 1200, 800}, y={"leaLag1.yDevStaSet[1]","leaLag1.yDevStaSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=2, subPlot=3, position={20, 10, 1200, 800}, y={"leaLag1.yDevRol[1]","leaLag1.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); + +createPlot(id=3, subPlot=1, position={10, 10, 1200, 800}, y={"leaSta.uLeaStaSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=3, subPlot=2, position={20, 10, 1200, 800}, y={"leaSta.yDevStaSet[1]","leaSta.yDevStaSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=3, subPlot=3, position={20, 10, 1200, 800}, y={"leaSta.yDevRol[1]","leaSta.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); + +createPlot(id=4, subPlot=1, position={20, 10, 1200, 800}, y={"conLeaSimSta.yDevStaSet[1]","conLeaSimSta.yDevStaSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=4, subPlot=2, position={20, 10, 1200, 800}, y={"conLeaSimSta.yDevRol[1]","conLeaSimSta.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); + +createPlot(id=5, subPlot=1, position={20, 10, 1200, 800}, y={"conLeaSch.yDevStaSet[1]","conLeaSch.yDevStaSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=5, subPlot=2, position={20, 10, 1200, 800}, y={"conLeaSch.yDevRol[1]","conLeaSch.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=5, subPlot=3, position={20, 10, 1200, 800}, y={"conLeaSch.rotSch.onCouInt.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo_MinimumLeadRuntime.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo_MinimumLeadRuntime.mos new file mode 100644 index 00000000000..59e35c4444e --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/EquipmentRotation/Validation/ControllerTwo_MinimumLeadRuntime.mos @@ -0,0 +1,19 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Validation.ControllerTwo_MinimumLeadRuntime", method="Cvode", stopTime=100000, tolerance=1e-06, resultFile="ControllerTwo_MinimumLeadRuntime"); + +createPlot(id=1, subPlot=1, position={10, 10, 1200, 800}, y={"leaLag.uLeaStaSet","leaLag.uLagStaSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=2, position={10, 10, 1200, 800}, y={"leaLag.yDevStaSet[1]","leaLag.yDevStaSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, subPlot=3, position={10, 10, 1200, 800}, y={"leaLag.yDevRol[1]","leaLag.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, subPlot=4, position={10, 10, 1200, 800}, y={"leaLag.minLeaTim.accTim[1].y","leaLag.minLeaTim.accTim[2].y", "leaLag.minLeaRuntime"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72},{50, 50, 50}}); +createPlot(id=1, subPlot=5, position={10, 10, 1200, 800}, y={"leaLag.minLeaTim.accTim[1].passed","leaLag.minLeaTim.accTim[2].passed"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); + +createPlot(id=2, subPlot=1, position={20, 10, 1200, 800}, y={"leaLag1.uLeaStaSet","leaLag1.uLagStaSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=2, subPlot=2, position={20, 10, 1200, 800}, y={"leaLag1.yDevStaSet[1]","leaLag1.yDevStaSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=2, subPlot=3, position={20, 10, 1200, 800}, y={"leaLag1.yDevRol[1]","leaLag1.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, subPlot=4, position={20, 10, 1200, 800}, y={"leaLag1.minLeaTim.accTim[1].y","leaLag1.minLeaTim.accTim[2].y","leaLag1.minLeaRuntime"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72},{50, 50, 50}}); +createPlot(id=2, subPlot=5, position={20, 10, 1200, 800}, y={"leaLag1.minLeaTim.accTim[1].passed","leaLag1.minLeaTim.accTim[2].passed"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); + +createPlot(id=3, subPlot=1, position={20, 10, 1200, 800}, y={"leaSta.uLeaStaSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{0,140,72}}); +createPlot(id=3, subPlot=2, position={20, 10, 1200, 800}, y={"leaSta.yDevStaSet[1]","leaSta.yDevStaSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=3, subPlot=3, position={20, 10, 1200, 800}, y={"leaSta.yDevRol[1]","leaSta.yDevRol[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, subPlot=4, position={20, 10, 1200, 800}, y={"leaSta.minLeaTim.accTim[1].y","leaSta.minLeaTim.accTim[2].y","leaSta.minLeaRuntime"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72},{50, 50, 50}}); +createPlot(id=3, subPlot=5, position={20, 10, 1200, 800}, y={"leaSta.minLeaTim.accTim[1].passed","leaSta.minLeaTim.accTim[2].passed"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{0,140,72}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/DisableChillers.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/DisableChillers.mos new file mode 100644 index 00000000000..2073c27275f --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/DisableChillers.mos @@ -0,0 +1,8 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation.DisableChillers", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="DisableChillers"); +createPlot(id=1, position={21, 9, 1238, 1432}, y={"disPlaFroChi.chaPro"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={21, 9, 1238, 1432}, y={"disPlaFroChi.uChi[1]", "disPlaFroChi.uChi[2]", "disPlaFroChi.uChiWatReq[1]", "disPlaFroChi.uChiWatReq[2]", "disPlaFroChi.uConWatReq[1]", "disPlaFroChi.uConWatReq[2]"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={21, 9, 1238, 1432}, y={"disPlaFroChi.uChiWatIsoVal[1]", "disPlaFroChi.uChiWatIsoVal[2]", "disPlaFroChi.uConWatIsoVal[1]", "disPlaFroChi.uConWatIsoVal[2]"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="s", displayUnits={"1", "1", "1", "1"}); +createPlot(id=1, position={21, 9, 1238, 1432}, y={"disPlaFroChi.uChiWatPumSpe[1]", "disPlaFroChi.uChiWatPumSpe[2]", "disPlaFroChi.uConWatPumSpe[1]", "disPlaFroChi.uConWatPumSpe[2]"}, range={0.0, 3600.0, -0.5, 1.0}, grid=true, subPlot=4, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="s"); +createPlot(id=2, position={1263, 9, 1190, 1436}, y={"disPlaFroChi.yChiWatIsoVal[1]", "disPlaFroChi.yChiWatIsoVal[2]", "disPlaFroChi.yConWatIsoVal[1]", "disPlaFroChi.yConWatIsoVal[2]"}, range={0.0, 3600.0, -0.2, 1.2}, grid=true, subPlot=1, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="s", displayUnits={"1", "1", "1", "1"}); +createPlot(id=2, position={1263, 9, 1190, 1436}, y={"disPlaFroChi.yChiWatPumSpe[1]", "disPlaFroChi.yChiWatPumSpe[2]", "disPlaFroChi.yConWatPumSpe[1]", "disPlaFroChi.yConWatPumSpe[2]"}, range={0.0, 3600.0, -0.1, 0.8}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="s", displayUnits={"1", "1", "1", "1"}); +createPlot(id=2, position={1263, 9, 1190, 1436}, y={"disPlaFroChi.yTowCel"}, range={0.0, 3600.0, -0.2, 1.2}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s"); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/Enable.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/Enable.mos new file mode 100644 index 00000000000..cd49d836398 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/Enable.mos @@ -0,0 +1,8 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation.Enable", method="Cvode", stopTime=86400, tolerance=1e-06, resultFile="PlantEnable"); + +createPlot(id=1, position={10, 10, 1200, 1350}, subPlot=1, y={"disPlaReq.ignReq", "disPlaReq.chiPlaReq"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{28,108,200}}); +createPlot(id=1, position={10, 10, 1200, 1350}, subPlot=2, y={"disPlaReq.yPla"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={10, 10, 1200, 1350}, subPlot=3, y={"disPlaOutTem.TOut", "disPlaOutTem.TChiLocOut"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={10, 10, 1200, 1350}, subPlot=4, y={"disPlaOutTem.yPla"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={10, 10, 1200, 1350}, subPlot=5, y={"disPlaSch.enaSch.y[1]"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={10, 10, 1200, 1350}, subPlot=6, y={"disPlaSch.yPla"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/EnableDevices.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/EnableDevices.mos new file mode 100644 index 00000000000..dd9d446e1cb --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/PlantEnable/Validation/EnableDevices.mos @@ -0,0 +1,4 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation.EnableDevices", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="EnableDevices"); +createPlot(id=1, position={35, 35, 1288, 1368}, y={"enaDev.uPla", "enaDev.uChiWatPum[1]", "enaDev.uConWatPum[1]"}, range={0.0, 3600.0, -0.2, 1.2}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={35, 35, 1288, 1368}, y={"enaDev.uIni", "enaDev.uChiSta"}, range={0.0, 3600.0, -0.2, 1.2}, autoscale=false, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={35, 35, 1288, 1368}, y={"enaDev.yEnaPlaPro", "enaDev.yChiWatIsoVal", "enaDev.yConWatIsoVal","enaDev.yLeaPriChiPum", "enaDev.yLeaConPum", "enaDev.yLeaChi"}, range={0.0, 3600.0, -0.2, 1.2}, autoscale=false, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200},{28,108,200}}, timeUnit="s"); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/Validation/IdentifyStage.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/Validation/IdentifyStage.mos new file mode 100644 index 00000000000..3620e714c42 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Generic/Validation/IdentifyStage.mos @@ -0,0 +1,6 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.Validation.IdentifyStage", method="Cvode", stopTime=5, tolerance=1e-06, resultFile="IdentifyStage"); +createPlot(id=1, position={15, 15, 902, 840}, y={"ideSta.uChi[1]", "ideSta.uChi[2]"}, range={0.0, 5.0, -0.2, 1.2}, grid=true, subPlot=1, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 902, 840}, y={"ideSta.ySta"}, range={0.0, 5.0, -1.0, 4.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={927, 11, 804, 844}, y={"ideSta1.uChi[1]", "ideSta1.uChi[2]", "ideSta1.uChi[3]"}, range={0.0, 5.0, -0.2, 1.2}, grid=true, subPlot=1, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={927, 11, 804, 844}, y={"ideSta1.ySta"}, range={0.0, 5.0, -0.5, 3.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/ControlLoop.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/ControlLoop.mos new file mode 100644 index 00000000000..9441e1959d0 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/ControlLoop.mos @@ -0,0 +1,7 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation.ControlLoop", method="Cvode", stopTime=5, tolerance=1e-06, resultFile="ControlLoop"); +createPlot(id=1, position={20, 10, 700, 650}, subPlot=1, y={"chiHeaPreLoo.uHeaPreEna"}, range={0.0, 5.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 700, 650}, subPlot=2, y={"chiHeaPreLoo.TConWatRet", "chiHeaPreLoo.TChiWatSup"}, range={0.0, 5.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{238,46,47}}); + +createPlot(id=2, position={740, 10, 700, 650}, subPlot=1, y={"chiHeaPreLoo.conPID.u_s","chiHeaPreLoo.conPID.u_m"}, range={0.0, 5.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={740, 10, 700, 650}, subPlot=2, y={"chiHeaPreLoo.conPID.y"}, range={0.0, 5.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithWSE.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithWSE.mos new file mode 100644 index 00000000000..3ccb7c26aac --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithWSE.mos @@ -0,0 +1,12 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation.MappingWithWSE", method="Cvode", stopTime=5, tolerance=1e-06, resultFile="MappingWithWSE"); +createPlot(id=1, position={20, 10, 700, 937}, y={"witWSE.uHeaPreCon"}, range={0.0, 5.0, -1.0, 2.0}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={20, 10, 700, 937}, y={"witWSE.yMaxTowSpeSet"}, range={0.0, 5.0, -1.0, 2.0}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={20, 10, 700, 937}, y={"witWSE.yConWatPumSpeSet", "witWSE.desConWatPumSpe"}, range={0.0, 5.0, -1.0, 1.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=1, position={20, 10, 700, 937}, y={"witWSE.yHeaPreConVal"}, range={0.0, 5.0, -1.0, 2.0}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={20, 10, 700, 937}, y={"witWSE.uHeaPreEna"}, range={0.0, 5.0, -1.0, 2.0}, grid=true, subPlot=105, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={740, 10, 700, 935}, y={"noWSE.uHeaPreCon"}, range={0.0, 5.0, -1.0, 2.0}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=2, position={740, 10, 700, 935}, y={"noWSE.yMaxTowSpeSet"}, range={0.0, 5.0, -1.0, 2.0}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=2, position={740, 10, 700, 935}, y={"noWSE.yConWatPumSpeSet", "noWSE.desConWatPumSpe"}, range={0.0, 5.0, -0.5, 1.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=2, position={740, 10, 700, 935}, y={"noWSE.yHeaPreConVal"}, range={0.0, 5.0, -1.0, 2.0}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=2, position={740, 10, 700, 935}, y={"noWSE.uHeaPreEna"}, range={0.0, 5.0, -1.0, 2.0}, grid=true, subPlot=105, colors={{28,108,200}}, timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithoutWSE.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithoutWSE.mos new file mode 100644 index 00000000000..cd5d2e5dbfe --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Subsequences/Validation/MappingWithoutWSE.mos @@ -0,0 +1,8 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation.MappingWithoutWSE", method="Cvode", stopTime=5, tolerance=1e-06, resultFile="MappingWithoutWSE"); +createPlot(id=1, position={20, 10, 700, 844}, y={"fixPumSpe.uHeaPreCon"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={20, 10, 700, 844}, y={"fixPumSpe.yMaxTowSpeSet", "fixPumSpe.yHeaPreConVal"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=1, position={20, 10, 700, 844}, y={"fixPumSpe.uHeaPreEna"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={740, 10, 700, 844}, y={"varPumSpe.uHeaPreCon"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=2, position={740, 10, 700, 844}, y={"varPumSpe.yMaxTowSpeSet", "varPumSpe.yConWatPumSpeSet", "varPumSpe.desConWatPumSpe"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"1", "1", "1"}); +createPlot(id=2, position={740, 10, 700, 844}, y={"varPumSpe.uHeaPreEna"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Validation/Controller.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Validation/Controller.mos new file mode 100644 index 00000000000..ca730a0a43e --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/HeadPressure/Validation/Controller.mos @@ -0,0 +1,10 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Validation.Controller", method="Cvode", stopTime=5, tolerance=1e-06, resultFile="heaPreCon"); +createPlot(id=1, position={20, 10, 700, 994}, y={"enaWSE.TConWatRet", "enaWSE.TChiWatSup"}, range={0.0, 5.0, 0.0, 40.0}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=1, position={20, 10, 700, 994}, y={"enaWSE.chiHeaPreLoo.conPID.u_s", "enaWSE.chiHeaPreLoo.conPID.u_m"}, range={0.0, 5.0, 0.0, 4.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=1, position={20, 10, 700, 994}, y={"enaWSE.chiHeaPreLoo.conPID.y"}, range={0.0, 5.0, -0.2, 0.6}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={20, 10, 700, 994}, y={"enaWSE.uChiHeaCon"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={740, 10, 700, 994}, y={"enaWSE.yMaxTowSpeSet", "enaWSE.yHeaPreConVal", "enaWSE.yConWatPumSpeSet"}, range={0.0, 5.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={740, 10, 700, 994}, y={"disWSE.yMaxTowSpeSet", "disWSE.yHeaPreConVal", "disWSE.yConWatPumSpeSet"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"1", "1", "1"}); +createPlot(id=2, position={740, 10, 700, 994}, y={"conSpePum.yMaxTowSpeSet", "conSpePum.yHeaPreConVal"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=2, position={740, 10, 700, 994}, y={"varSpePum.yMaxTowSpeSet", "varSpePum.yConWatPumSpeSet"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/Controller.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/Controller.mos new file mode 100644 index 00000000000..5aa90ddc3a2 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/Controller.mos @@ -0,0 +1,4 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.Validation.Controller", method="Cvode", stopTime=4, tolerance=1e-06, resultFile="minBypasVal"); +createPlot(id=1, position={20, 10, 1000, 1200}, subPlot=1, y={"minBypValCon.uChiWatPum"}, range={0.0, 4.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1000, 1200}, subPlot=2, y={"minBypValCon.VChiWat_flow", "minBypValCon.VChiWatSet_flow"}, range={0.0, 4.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1000, 1200}, subPlot=3, y={"minBypValCon.yValPos"}, range={0.0, 4.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/FlowSetpoint.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/FlowSetpoint.mos new file mode 100644 index 00000000000..bee3d18b5d4 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/MinimumFlowBypass/Validation/FlowSetpoint.mos @@ -0,0 +1,14 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.Validation.FlowSetpoint", method="Cvode", stopTime=4, tolerance=1e-06, resultFile="minBypasFlo"); +createPlot(id=1, position={20, 10, 700, 1294}, y={"staUp.uStaUp", "staUp.uUpsDevSta", "staUp.uOnOff", "staUp.yChaSet"}, range={0.0, 4.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 700, 1294}, y={"staUp.yChiWatMinFloSet"}, range={0.0, 4.0, 0.0, 0.02}, autoscale=false, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s", displayUnits={"m3/s"}); +createPlot(id=1, position={20, 10, 700, 1294}, y={"staUp.uChi[1]", "staUp.uChi[2]", "staUp.uChi[3]"}, range={0.0, 4.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 700, 1294}, y={"staUp.nexEnaChi", "staUp.uOnOff"}, range={0.0, 4.0, -2.0, 4.0}, autoscale=false, grid=true, subPlot=104, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={740, 10, 700, 1297}, y={"onOffStaUp.uStaUp", "onOffStaUp.uUpsDevSta", "onOffStaUp.uOnOff", "onOffStaUp.uSubCha", "onOffStaUp.yChaSet"}, range={0.0, 4.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={740, 10, 700, 1297}, y={"onOffStaUp.yChiWatMinFloSet"}, range={0.0, 4.0, 0.0, 0.02}, autoscale=false, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s", displayUnits={"m3/s"}); +createPlot(id=2, position={740, 10, 700, 1297}, y={"onOffStaUp.uChi[1]", "onOffStaUp.uChi[2]", "onOffStaUp.uChi[3]"}, range={0.0, 4.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={740, 10, 700, 1297}, y={"onOffStaUp.nexEnaChi", "onOffStaUp.nexDisChi", "onOffStaUp.uOnOff"}, range={0.0, 4.0, -2.0, 4.0}, autoscale=false, grid=true, subPlot=104, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1460, 10, 700, 1295}, y={"staDow.uStaDow", "staDow.uUpsDevSta", "staDow.uOnOff", "staDow.yChaSet"}, range={0.0, 4.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1460, 10, 700, 1295}, y={"staDow.yChiWatMinFloSet"}, range={0.0, 4.0, 0.0, 0.02}, autoscale=false, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s", displayUnits={"m3/s"}); +createPlot(id=3, position={1460, 10, 700, 1295}, y={"staDow.uChi[1]", "staDow.uChi[2]", "staDow.uChi[3]"}, range={0.0, 4.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1460, 10, 700, 1295}, y={"staDow.nexEnaChi", "staDow.nexDisChi", "staDow.uOnOff"}, range={0.0, 4.0, -1.0, 3.0}, autoscale=false, grid=true, subPlot=104, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLag_primary_dP.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLag_primary_dP.mos new file mode 100644 index 00000000000..4c6b348c436 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLag_primary_dP.mos @@ -0,0 +1,10 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.EnableLag_primary_dP", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="enaLagChiPum_primary"); +createPlot(id=1, position={10, 10, 900, 1188}, y={"enaLagChiPum.chiWatFloRat.y"}, range={0.0, 60.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="min", displayUnits={"1"}); +createPlot(id=1, position={10, 10, 900, 1188}, y={"enaLagChiPum.yUp"}, range={0.0, 60.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="min"); +createPlot(id=1, position={10, 10, 900, 1188}, y={"enaLagChiPum.truDel.y"}, range={0.0, 60.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="min"); +createPlot(id=1, position={10, 10, 900, 1188}, y={"enaLagChiPum.enaPum.y"}, range={0.0, 60.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="min"); +createPlot(id=2, position={920, 10, 900, 1188}, y={"enaLagChiPum.chiWatFloRat.y"}, range={0.0, 60.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="min", displayUnits={"1"}); +createPlot(id=2, position={920, 10, 900, 1188}, y={"enaLagChiPum.yDown"}, range={0.0, 60.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="min"); +createPlot(id=2, position={920, 10, 900, 1188}, y={"enaLagChiPum.truDel1.y"}, range={0.0, 60.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="min"); +createPlot(id=2, position={920, 10, 900, 1188}, y={"enaLagChiPum.disPum.y"}, range={0.0, 60.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="min"); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_dedicated.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_dedicated.mos new file mode 100644 index 00000000000..0ea355650a0 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_dedicated.mos @@ -0,0 +1,4 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.EnableLead_dedicated", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="enaLeaChiPum_dedicated"); +createPlot(id=1, position={20, 10, 700, 900}, y={"enaLeaChiPum.uPla", "enaLeaChiPum.uLeaChiEna", "enaLeaChiPum.uLeaChiSta","enaLeaChiPum.uLeaChiWatReq","enaLeaChiPum.yLea"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=2, position={740, 10, 700, 900}, y={"disLeaChiPum.uPla", "disLeaChiPum.uLeaChiEna", "disLeaChiPum.uLeaChiSta","disLeaChiPum.uLeaChiWatReq","disLeaChiPum.yLea"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200},{28,108,200},{28,108,200}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_headered.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_headered.mos new file mode 100644 index 00000000000..17c142403f4 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/EnableLead_headered.mos @@ -0,0 +1,3 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.EnableLead_headered", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="enaLeaChiPum_headered"); +createPlot(id=1, position={20, 10, 700, 900}, y={"enaLeaChiPum.uChiWatIsoVal[1]", "enaLeaChiPum.uChiWatIsoVal[2]","enaLeaChiPum.yLea"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_localDp.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_localDp.mos new file mode 100644 index 00000000000..ee2c9ee1b8b --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_localDp.mos @@ -0,0 +1,9 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.Speed_primary_localDp", method="Cvode", stopTime=10, tolerance=1e-06, resultFile="chiWatPumSpe_primary_localDP"); +createPlot(id=1, position={20, 10, 700, 1000}, subPlot=1, y={"chiPumSpe.dpChiWat_remote[1]","chiPumSpe.dpChiWat_remote[2]","chiPumSpe.dpChiWatSet_remote[1]","chiPumSpe.dpChiWatSet_remote[2]"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{238,46,47},{0,140,72},{85,0,255}}); +createPlot(id=1, position={20, 10, 700, 1000}, subPlot=2, y={"chiPumSpe.maxRemDP.u[1]","chiPumSpe.maxRemDP.u[2]"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 700, 1000}, subPlot=3, y={"chiPumSpe.maxRemDP.y"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 700, 1000}, subPlot=4, y={"chiPumSpe.locDpSet.y","chiPumSpe.locDpSet.f1","chiPumSpe.locDpSet.f2"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{238,46,47},{0,140,72}}); +createPlot(id=2, position={740, 10, 700, 1000}, subPlot=1, y={"chiPumSpe.locDpSet.y","chiPumSpe.dpChiWat_local"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=2, position={740, 10, 700, 1000}, subPlot=2, y={"chiPumSpe.conPID1.u_s","chiPumSpe.conPID1.u_m"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=2, position={740, 10, 700, 1000}, subPlot=3, y={"chiPumSpe.conPID1.y"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={740, 10, 700, 1000}, subPlot=4, y={"chiPumSpe.yChiWatPumSpe","chiPumSpe.pumSpe.f1","chiPumSpe.pumSpe.f2"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{238,46,47},{0,140,72}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_remoteDp.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_remoteDp.mos new file mode 100644 index 00000000000..604885c7764 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Subsequences/Validation/Speed_primary_remoteDp.mos @@ -0,0 +1,7 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.Speed_primary_remoteDp", method="Cvode", stopTime=10, tolerance=1e-06, resultFile="chiWatPumSpe_primary_remoteDP"); +createPlot(id=1, position={20, 10, 900, 1000}, subPlot=1, y={"chiPumSpe.dpChiWat_remote[1]","chiPumSpe.dpChiWat_remote[2]","chiPumSpe.dpChiWatSet_remote[1]","chiPumSpe.dpChiWatSet_remote[2]"}, range={0.0, 10.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{238,46,47},{0,140,72},{85,0,255}}); +createPlot(id=1, position={20, 10, 900, 1000}, subPlot=2, y={"chiPumSpe.maxLoo.u[1]","chiPumSpe.maxLoo.u[2]"}, range={0.0, 10.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 900, 1000}, subPlot=3, y={"chiPumSpe.maxLoo.y"}, range={0.0, 10.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={930, 10, 900, 1000}, subPlot=1, y={"chiPumSpe.pumSpe.y","chiPumSpe.pumSpe.f1","chiPumSpe.pumSpe.f2"}, range={0.0, 10.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{238,46,47},{0,140,72}}); +createPlot(id=2, position={930, 10, 900, 1000}, subPlot=2, y={"chiPumSpe.yChiWatPumSpe"}, range={0.0, 10.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={930, 10, 900, 1000}, subPlot=3, y={"chiPumSpe.uChiWatPum[1]","chiPumSpe.uChiWatPum[2]"}, range={0.0, 10.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Validation/Controller.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Validation/Controller.mos new file mode 100644 index 00000000000..8c19d6b484b --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/ChilledWater/Validation/Controller.mos @@ -0,0 +1,15 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Validation.Controller", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="chiPumCon"); +createPlot(id=1, position={20, 10, 700, 1094}, y={"heaNoLoc.VChiWat_flow", "heaNoLoc.VChiWat_flow_nominal"}, range={0.0, 4000.0, -0.5, 1.0}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"m3/s", "m3/s"}); +createPlot(id=1, position={20, 10, 700, 1094}, y={"heaNoLoc.yChiWatPum[1]", "heaNoLoc.yChiWatPum[2]", "heaNoLoc.yChiWatPum[3]"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 700, 1094}, y={"heaNoLoc.dpChiWat_remote[1]", "heaNoLoc.dpChiWat_remote[2]", "heaNoLoc.dpChiWatSet_remote[1]","heaNoLoc.dpChiWatSet_remote[2]"}, range={0.0, 4000.0, 56000.0, 60000.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}, {0,140,72}, {85,0,255}}, timeUnit="s", displayUnits={"Pa", "Pa", "Pa", "Pa"}); +createPlot(id=1, position={20, 10, 700, 1094}, y={"heaNoLoc.yPumSpe"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={20, 10, 700, 1094}, y={"heaNoLoc.uChiWatIsoVal[1]", "heaNoLoc.uChiWatIsoVal[2]"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=105, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=2, position={730, 10, 700, 1094}, y={"dedNoLoc.uLeaChiEna", "dedNoLoc.uLeaChiSta", "dedNoLoc.uLeaChiWatReq","dedNoLoc.enaDedLeaPum.yLea"}, range={0.0, 4000.0, -0.2, 1.2}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={730, 10, 700, 1094}, y={"dedNoLoc.dpChiWat_remote[1]", "dedNoLoc.dpChiWat_remote[2]", "dedNoLoc.dpChiWatSet_remote[1]","dedNoLoc.dpChiWatSet_remote[2]"}, range={0.0, 4000.0, 56000.0, 60000.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}, {0,140,72}, {85,0,255}}, timeUnit="s", displayUnits={"Pa", "Pa", "Pa", "Pa"}); +createPlot(id=2, position={730, 10, 700, 1094}, y={"dedNoLoc.yPumSpe"}, range={0.0, 4000.0, -0.2, 1.2}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=3, position={1440, 20, 700, 1094}, y={"dedLoc.uLeaChiEna", "dedLoc.uLeaChiSta", "dedLoc.uLeaChiWatReq","dedNoLoc.enaDedLeaPum.yLea"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1440, 20, 700, 1094}, y={"dedLoc.dpChiWat_remote[1]", "dedLoc.dpChiWat_remote[2]"}, range={0.0, 4000.0, 56000.0, 60000.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"Pa", "Pa"}); +createPlot(id=3, position={1440, 20, 700, 1094}, y={"dedLoc.pumSpeLocDp.locDpSet.y", "dedLoc.dpChiWat_local"}, range={0.0, 4000.0, 20000.0, 120000.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"Pa", "Pa"}); +createPlot(id=3, position={1440, 20, 700, 1094}, y={"dedLoc.yPumSpe"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); + + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_dedicated.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_dedicated.mos new file mode 100644 index 00000000000..b08b047c1f0 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_dedicated.mos @@ -0,0 +1,4 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation.EnableLead_dedicated", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="enaLeaConPum_dedicated"); +createPlot(id=1, position={20, 10, 700, 900}, y={"enaLeaConPum.uLeaChiEna", "enaLeaConPum.uLeaChiSta","enaLeaConPum.uLeaConWatReq","enaLeaConPum.yLea"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=2, position={740, 10, 700, 900}, y={"disLeaConPum.uLeaChiEna", "disLeaConPum.uLeaChiSta","disLeaConPum.uLeaConWatReq","disLeaConPum.yLea"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200},{28,108,200}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_headered.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_headered.mos new file mode 100644 index 00000000000..3347316724e --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/EnableLead_headered.mos @@ -0,0 +1,2 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation.EnableLead_headered", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="enaLeaConPum_headered"); +createPlot(id=1, position={20, 10, 700, 900}, y={"enaLeaConPum.uChiConIsoVal[1]", "enaLeaConPum.uWseConIsoVal","enaLeaConPum.yLea"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/Speed.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/Speed.mos new file mode 100644 index 00000000000..abbef064376 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Subsequences/Validation/Speed.mos @@ -0,0 +1,6 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation.Speed", method="Cvode", stopTime=1, tolerance=1e-06, resultFile="conPumSpe"); +createPlot(id=1, position={20, 10, 1223, 1022}, y={"conPumSpe.uWSE"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 1223, 1022}, y={"conPumSpe.uChiSta"}, range={0.0, 1.0, -2.0, 4.0}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 1223, 1022}, y={"conPumSpe.yConWatPumNum"}, range={0.0, 1.0, 0.5, 2.5}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 1223, 1022}, y={"conPumSpe.yDesConWatPumSpe"}, range={0.0, 1.0, 0.4, 1.0}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Validation/Controller.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Validation/Controller.mos new file mode 100644 index 00000000000..e5715f43a95 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Pumps/CondenserWater/Validation/Controller.mos @@ -0,0 +1,21 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Validation.Controller", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="conPumCon"); + +createPlot(id=1, position={20, 10, 700, 1100}, subPlot=1, y={"chiSta.y", "wseSta.y"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 700, 1100}, subPlot=2, y={"chiOn.y"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 700, 1100}, subPlot=3, y={"meaPumSpe.y"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 700, 1100}, subPlot=4, y={"pumSpeSet.y"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); + +createPlot(id=2, position={730, 10, 700, 1100}, subPlot=1, y={"heaHavWse.yLeaPum"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={730, 10, 700, 1100}, subPlot=2, y={"heaHavWse.yDesConWatPumSpe"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={730, 10, 700, 1100}, subPlot=3, y={"heaHavWse.yConWatPumNum"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={730, 10, 700, 1100}, subPlot=4, y={"heaHavWse.yPumSpeChe"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); + +createPlot(id=3, position={1440, 10, 700, 1100}, subPlot=1, y={"dedHavWse.yLeaPum"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=3, position={1440, 10, 700, 1100}, subPlot=2, y={"dedHavWse.yDesConWatPumSpe"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=3, position={1440, 10, 700, 1100}, subPlot=3, y={"dedHavWse.yConWatPumNum"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=3, position={1440, 10, 700, 1100}, subPlot=4, y={"dedHavWse.yPumSpeChe"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); + +createPlot(id=4, position={2150, 10, 700, 1100}, subPlot=1, y={"heaNoWse.yLeaPum"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=4, position={2150, 10, 700, 1100}, subPlot=2, y={"heaNoWse.yDesConWatPumSpe"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=4, position={2150, 10, 700, 1100}, subPlot=3, y={"heaNoWse.yConWatPumNum"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); +createPlot(id=4, position={2150, 10, 700, 1100}, subPlot=4, y={"heaNoWse.yPumSpeChe"}, range={0.0, 1200.0, 0.4, 0.9}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterPlantReset.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterPlantReset.mos new file mode 100644 index 00000000000..0b1e7440331 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterPlantReset.mos @@ -0,0 +1,10 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.Validation.ChilledWaterPlantReset", method="cvode", stopTime=9000, tolerance=1e-06, resultFile="ChilledWaterPlantReset"); +createPlot(id=1, position={10, 10, 800, 1107}, y={"plaRes.triRes.y", "plaRes.yChiWatPlaRes"}, range={0.0, 9000.0, -0.2, 0.4}, grid=true, subPlot=101, colors={{28,108,200}, {0,140,72}}, thicknesses={0.25, 0.5}, timeUnit="s", displayUnits={"", "1"}); +createPlot(id=1, position={10, 10, 800, 1107}, y={"plaRes.chaPro"}, range={0.0, 9000.0, -1.0, 2.0}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 800, 1107}, y={"plaRes.triSam.y"}, range={0.0, 9000.0, -0.2, 0.4}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 800, 1107}, y={"plaRes.truHol.y"}, range={0.0, 9000.0, -1.0, 2.0}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 800, 1107}, y={"plaRes.TChiWatSupResReq"}, range={0.0, 9000.0, -5.0, 10.0}, grid=true, subPlot=105, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={820, 10, 800, 1107}, y={"devRes.triRes.y", "devRes.yChiWatPlaRes"}, range={0.0, 9000.0, -0.05, 0.25}, grid=true, subPlot=101, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"", "1"}); +createPlot(id=2, position={820, 10, 800, 1107}, y={"devRes.TChiWatSupResReq", "devRes.chaPro"}, range={0.0, 9000.0, -2.0, 8.0}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={820, 10, 800, 1107}, y={"devRes.triRes.uDevSta"}, range={0.0, 9000.0, -0.2, 1.2}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterSupply.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterSupply.mos new file mode 100644 index 00000000000..43f5c570bf9 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/SetPoints/Validation/ChilledWaterSupply.mos @@ -0,0 +1,5 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.Validation.ChilledWaterSupply", method="dassl", stopTime=3600, tolerance=1e-06, resultFile="ChilledWaterSupply"); +createPlot(id=1, position={10, 10, 590, 750}, y={"chiWatSupSet.dpChiWatPumSet[1]"}, range={0.0, 3600, 0, 0.5}, grid=true, subPlot=1, colors={{28,108,200}}); +createPlot(id=1, position={10, 10, 590, 750}, y={"chiWatSupSet.uChiWatPlaRes"}, range={0.0, 3600, 0, 4}, grid=true, subPlot=2, colors={{28,108,200}}); +createPlot(id=2, position={610, 10, 590, 750}, y={"chiWatSupSet.TChiWatSupSet"}, range={0.0, 3600, 0, 4}, grid=true, subPlot=1, colors={{28,108,200}}); +createPlot(id=2, position={610, 10, 590, 750}, y={"chiWatSupSet.uChiWatPlaRes"}, range={0.0, 3600, 0, 4}, grid=true, subPlot=2, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/CHWIsoVal.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/CHWIsoVal.mos new file mode 100644 index 00000000000..5e10b013603 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/CHWIsoVal.mos @@ -0,0 +1,12 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.CHWIsoVal", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="CHWIsoVal"); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=1, y={"enaChiIsoVal.uChiWatIsoVal[1]","enaChiIsoVal.uChiWatIsoVal[2]"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=2, y={"enaChiIsoVal.uStaPro","enaChiIsoVal.uUpsDevSta"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=3, y={"enaChiIsoVal.nexChaChi"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=4, y={"enaChiIsoVal.yChiWatIsoVal[1]","enaChiIsoVal.yChiWatIsoVal[2]"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=5, y={"enaChiIsoVal.yEnaChiWatIsoVal"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=1, y={"disChiIsoVal.uChiWatIsoVal[1]","disChiIsoVal.uChiWatIsoVal[2]"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=2, y={"disChiIsoVal.uStaPro","disChiIsoVal.uUpsDevSta"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=3, y={"disChiIsoVal.nexChaChi"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=4, y={"disChiIsoVal.yChiWatIsoVal[1]","disChiIsoVal.yChiWatIsoVal[2]"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=5, y={"disChiIsoVal.yEnaChiWatIsoVal"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DisableChiller.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DisableChiller.mos new file mode 100644 index 00000000000..e6ab8c04bff --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DisableChiller.mos @@ -0,0 +1,12 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.DisableChiller", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="DisableChiller"); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=1, y={"chiOnOff.nexEnaChi","chiOnOff.nexDisChi"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=2, y={"chiOnOff.uStaDow","chiOnOff.uEnaChiWatIsoVal"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=3, y={"chiOnOff.uChi[1]","chiOnOff.uChi[2]", "chiOnOff.uChi[3]"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=4, y={"chiOnOff.yChi[1]","chiOnOff.yChi[2]", "chiOnOff.yChi[3]"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=5, y={"chiOnOff.yRelDemLim"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=1, y={"chiOff.nexEnaChi","chiOff.nexDisChi"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=2, y={"chiOff.uStaDow","chiOff.uEnaChiWatIsoVal"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=3, y={"chiOff.uChi[1]","chiOff.uChi[2]", "chiOff.uChi[3]"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=4, y={"chiOff.yChi[1]","chiOff.yChi[2]", "chiOff.yChi[3]"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=5, y={"chiOff.yRelDemLim"}, range={0.0, 4.0, 0, 0.02}, grid=true, colors={{28,108,200}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithOn.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithOn.mos new file mode 100644 index 00000000000..8486b12c6aa --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithOn.mos @@ -0,0 +1,10 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.DownStartWithOn", method="Cvode", stopTime=1200, tolerance=1e-06, resultFile="staDowStaWtOn"); +createPlot(id=1, position={20, 10, 1200, 1500}, subPlot=1, y={"staStaDow1.uStaDow"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1500}, subPlot=2, y={"staStaDow1.uChiLoa[1]","staStaDow1.uChiLoa[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1500}, subPlot=3, y={"staStaDow1.yChiDem[1]","staStaDow1.yChiDem[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1500}, subPlot=4, y={"staStaDow1.yChiHeaCon[1]","staStaDow1.yChiHeaCon[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1500}, subPlot=5, y={"staStaDow1.yChiWatIsoVal[1]","staStaDow1.yChiWatIsoVal[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1500}, subPlot=6, y={"staStaDow1.yChi[1]","staStaDow1.yChi[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1500}, subPlot=7, y={"demLimRel.y"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1500}, subPlot=8, y={"staStaDow1.yChiWatMinFloSet","staStaDow1.VChiWat_flow"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithoutOn.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithoutOn.mos new file mode 100644 index 00000000000..9ba80d1ba66 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/DownStartWithoutOn.mos @@ -0,0 +1,10 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.DownStartWithoutOn", method="Cvode", stopTime=1200, tolerance=1e-06, resultFile="staDowStaWoOn"); + +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=1, y={"staStaDow.uStaDow"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=2, y={"staStaDow.uChiLoa[1]","staStaDow.uChiLoa[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=3, y={"staStaDow.yChiDem[1]","staStaDow.yChiDem[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=4, y={"staStaDow.yChiHeaCon[1]","staStaDow.yChiHeaCon[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=5, y={"staStaDow.yChiWatIsoVal[1]","staStaDow.yChiWatIsoVal[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=6, y={"staStaDow.yChi[1]","staStaDow.yChi[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=7, y={"staStaDow.yReaDemLim"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableCWPump.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableCWPump.mos new file mode 100644 index 00000000000..c3162f6a1c9 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableCWPump.mos @@ -0,0 +1,7 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.EnableCWPump", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="CWPumSta"); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=1, y={"staUpInd.uUpsDevSta","staUpInd.uStaUp","staUpInd.uStaDow"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=2, y={"staUpInd.uStaSet"}, range={0.0, 3600, 0, 3}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=3, y={"staUpInd.yChiSta"}, range={0.0, 3600, 0, 3}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=1, y={"staDowInd.uUpsDevSta","staDowInd.uStaUp","staDowInd.uStaDow"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=2, y={"staDowInd.uStaSet"}, range={0.0, 3600, 0, 3}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=3, y={"staDowInd.yChiSta"}, range={0.0, 3600, 0, 3}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableChiller.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableChiller.mos new file mode 100644 index 00000000000..2b8f135c764 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/EnableChiller.mos @@ -0,0 +1,11 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.EnableChiller", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="enaNewChi"); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=1, y={"enaDisChi.nexEnaChi","enaDisChi.nexDisChi"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=2, y={"enaDisChi.uStaUp","enaDisChi.uEnaChiWatIsoVal", "enaDisChi.uOnOff"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=3, y={"enaDisChi.uChi[1]","enaDisChi.uChi[2]", "enaDisChi.uChi[3]"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=4, y={"enaDisChi.yChi[1]","enaDisChi.yChi[2]", "enaDisChi.yChi[3]"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=5, y={"enaDisChi.yNewChiEna"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=1, y={"enaOneChi.nexEnaChi","enaOneChi.nexDisChi"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=2, y={"enaOneChi.uStaUp","enaOneChi.uEnaChiWatIsoVal", "enaOneChi.uOnOff"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=3, y={"enaOneChi.uChi[1]","enaOneChi.uChi[2]", "enaOneChi.uChi[3]"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=4, y={"enaOneChi.yChi[1]","enaOneChi.yChi[2]", "enaOneChi.yChi[3]"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=5, y={"enaOneChi.yNewChiEna"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/HeadControl.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/HeadControl.mos new file mode 100644 index 00000000000..5534824c636 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/HeadControl.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.HeadControl", method="Cvode", stopTime=120, tolerance=1e-06, resultFile="enaHeaCon"); + +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=1, y={"enaHeaCon.uStaPro","enaHeaCon.uUpsDevSta","enaHeaCon.uChiHeaCon[1]","enaHeaCon.uChiHeaCon[2]","enaHeaCon.yChiHeaCon[1]","enaHeaCon.yChiHeaCon[2]"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200},{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=2, y={"enaHeaCon.nexChaChi"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=3, y={"enaHeaCon.yEnaHeaCon"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200}}); + +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=1, y={"disHeaCon.uStaPro","disHeaCon.uUpsDevSta","disHeaCon.uChiHeaCon[1]","disHeaCon.uChiHeaCon[2]","disHeaCon.yChiHeaCon[1]","disHeaCon.yChiHeaCon[2]"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200},{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=2, y={"disHeaCon.nexChaChi"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=3, y={"disHeaCon.yEnaHeaCon"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200}}); + +createPlot(id=3, position={60, 50, 800, 1200}, subPlot=1, y={"disHeaCon1.uStaPro","disHeaCon1.uUpsDevSta","disHeaCon1.uChiHeaCon[1]","disHeaCon1.uChiHeaCon[2]","disHeaCon1.yChiHeaCon[1]","disHeaCon1.yChiHeaCon[2]"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200},{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=3, position={60, 50, 800, 1200}, subPlot=2, y={"disHeaCon1.nexChaChi"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=3, position={60, 50, 800, 1200}, subPlot=3, y={"disHeaCon1.yEnaHeaCon"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200}}); + +createPlot(id=4, position={870, 50, 800, 1200}, subPlot=1, y={"enaHeaCon1.uStaPro","enaHeaCon1.uUpsDevSta","enaHeaCon1.uChiHeaCon[1]","enaHeaCon1.uChiHeaCon[2]","enaHeaCon1.yChiHeaCon[1]","enaHeaCon1.yChiHeaCon[2]"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200},{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=4, position={870, 50, 800, 1200}, subPlot=2, y={"enaHeaCon1.nexChaChi"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=4, position={870, 50, 800, 1200}, subPlot=3, y={"enaHeaCon1.yEnaHeaCon"}, range={0.0, 3600, 0, 0.02}, grid=true, colors={{28,108,200}}); + + + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/NextChiller.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/NextChiller.mos new file mode 100644 index 00000000000..9d175bd71c4 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/NextChiller.mos @@ -0,0 +1,28 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.NextChiller", method="Cvode", stopTime=120, tolerance=1e-06, resultFile="nexChi"); + +createPlot(id=1, position={10, 10, 550, 1183}, y={"nexChi.uStaSet"}, range={0.0, 120.0, 0.0, 3.0}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 550, 1183}, y={"nexChi.uChiSet[1]", "nexChi.uChiSet[2]", "nexChi.endPro"}, range={0.0, 120.0, -1.0, 2.0}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 550, 1183}, y={"nexChi.yNexEnaChi", "nexChi.yDisSmaChi"}, range={0.0, 120.0, 0.0, 3.0}, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 550, 1183}, y={"nexChi.yOnOff"}, range={0.0, 120.0, -1.0, 2.0}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 550, 1183}, y={"nexChi.yLasDisChi", "nexChi.yEnaSmaChi"}, range={0.0, 120.0, 0.8, 1.2}, grid=true, subPlot=105, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 550, 1183}, y={"nexChi.yUp", "nexChi.yDow"}, range={0.0, 120.0, -1.0, 2.0}, grid=true, subPlot=106, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={570, 10, 550, 1183}, y={"nexChi1.uStaSet"}, range={0.0, 120.0, 0.0, 3.0}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={570, 10, 550, 1183}, y={"nexChi1.uChiSet[1]", "nexChi1.uChiSet[2]", "nexChi1.endPro"}, range={0.0, 120.0, -1.0, 2.0}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={570, 10, 550, 1183}, y={"nexChi1.yNexEnaChi", "nexChi1.yDisSmaChi"}, range={0.0, 120.0, -2.0, 4.0}, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={570, 10, 550, 1183}, y={"nexChi1.yOnOff"}, range={0.0, 120.0, -2.0, 2.0}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={570, 10, 550, 1183}, y={"nexChi1.yLasDisChi", "nexChi1.yEnaSmaChi"}, range={0.0, 120.0, 0.8, 1.2}, grid=true, subPlot=105, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={570, 10, 550, 1183}, y={"nexChi1.yUp", "nexChi1.yDow"}, range={0.0, 120.0, -1.0, 2.0}, grid=true, subPlot=106, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1130, 10, 550, 1183}, y={"nexChi2.uStaSet"}, range={0.0, 120.0, 0.0, 3.0}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1130, 10, 550, 1183}, y={"nexChi2.uChiSet[1]", "nexChi2.uChiSet[2]", "nexChi2.endPro"}, range={0.0, 120.0, -1.0, 2.0}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1130, 10, 550, 1183}, y={"nexChi2.yNexEnaChi", "nexChi2.yDisSmaChi"}, range={0.0, 120.0, 0.8, 1.2}, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1130, 10, 550, 1183}, y={"nexChi2.yOnOff"}, range={0.0, 120.0, -1.0, 2.0}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1130, 10, 550, 1183}, y={"nexChi2.yLasDisChi", "nexChi2.yEnaSmaChi"}, range={0.0, 120.0, 0.0, 3.0}, grid=true, subPlot=105, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1130, 10, 550, 1183}, y={"nexChi2.yUp", "nexChi2.yDow"}, range={0.0, 120.0, -1.0, 2.0}, grid=true, subPlot=106, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=4, position={1690, 10, 550, 1183}, y={"nexChi3.uStaSet"}, range={0.0, 120.0, 0.0, 3.0}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=4, position={1690, 10, 550, 1183}, y={"nexChi3.uChiSet[1]", "nexChi2.uChiSet[2]", "nexChi2.endPro"}, range={0.0, 120.0, -1.0, 2.0}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=4, position={1690, 10, 550, 1183}, y={"nexChi3.yNexEnaChi", "nexChi2.yDisSmaChi"}, range={0.0, 120.0, 0.8, 1.2}, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=4, position={1690, 10, 550, 1183}, y={"nexChi3.yOnOff"}, range={0.0, 120.0, -2.0, 2.0}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=4, position={1690, 10, 550, 1183}, y={"nexChi3.yLasDisChi", "nexChi3.yEnaSmaChi"}, range={0.0, 120.0, 0.0, 3.0}, grid=true, subPlot=105, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=4, position={1690, 10, 550, 1183}, y={"nexChi3.yUp", "nexChi3.yDow"}, range={0.0, 120.0, -1.0, 2.0}, grid=true, subPlot=106, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); + + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ReduceDemand.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ReduceDemand.mos new file mode 100644 index 00000000000..78e2d69b019 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ReduceDemand.mos @@ -0,0 +1,14 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.ReduceDemand", method="Cvode", stopTime=600, tolerance=1e-06, resultFile="redChiDem"); + +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=1, y={"chiDemRed.uDemLim"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=2, y={"chiDemRed.uChiLoa[1]","chiDemRed.uChiLoa[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=3, y={"chiDemRed.uChi[1]","chiDemRed.uChi[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=4, y={"chiDemRed.yChiDem[1]","chiDemRed.yChiDem[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 800, 1200}, subPlot=5, y={"chiDemRed.yChiDemRed"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200}}); + +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=1, y={"chiDemRed1.uDemLim","chiDemRed1.uStaDow","chiDemRed1.uOnOff"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=2, y={"chiDemRed1.uChiLoa[1]","chiDemRed1.uChiLoa[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=3, y={"chiDemRed1.yOpeParLoaRatMin"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=4, y={"chiDemRed1.uChi[1]","chiDemRed1.uChi[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=5, y={"chiDemRed1.yChiDem[1]","chiDemRed1.yChiDem[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=2, position={830, 10, 800, 1200}, subPlot=6, y={"chiDemRed1.yChiDemRed"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ResetMinBypass.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ResetMinBypass.mos new file mode 100644 index 00000000000..c300a109297 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/ResetMinBypass.mos @@ -0,0 +1,5 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.ResetMinBypass", method="Cvode", stopTime=600, tolerance=1e-06, resultFile="resMinByp"); +createPlot(id=1, position={20, 10, 800, 1183}, y={"minBypRes.uUpsDevSta", "minBypRes.uStaPro", "minBypRes.uSetChaPro"}, range={0.0, 600.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 800, 1183}, y={"minBypRes.VChiWat_flow", "minBypRes.VMinChiWat_setpoint"}, range={0.0, 600.0, 0.8, 1.6}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"m3/s", "m3/s"}); +createPlot(id=1, position={20, 10, 800, 1183}, y={"minBypRes.yMinBypRes"}, range={0.0, 600.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithOff.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithOff.mos new file mode 100644 index 00000000000..3c59d8f4a91 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithOff.mos @@ -0,0 +1,10 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.UpEndWithOff", method="Cvode", stopTime=1200, tolerance=1e-06, resultFile="staUpEndWtOff"); + +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=1, y={"endUp1.uStaUp","endUp1.uEnaChiWatIsoVal","endUp1.uChiHeaCon[1]","endUp1.uChiHeaCon[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=2, y={"endUp1.uChi[1]","endUp1.uChi[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=3, y={"endUp1.uChiWatReq[1]","endUp1.uChiWatReq[2]","endUp1.uConWatReq[1]","endUp1.uConWatReq[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=4, y={"endUp1.yChiWatIsoVal[1]","endUp1.yChiWatIsoVal[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=5, y={"endUp1.yChiHeaCon[1]","endUp1.yChiHeaCon[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=6, y={"endUp1.yChiWatMinSet"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=7, y={"endUp1.yEndSta"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithoutOff.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithoutOff.mos new file mode 100644 index 00000000000..1f56bf0b2c7 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Subsequences/Validation/UpEndWithoutOff.mos @@ -0,0 +1,10 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.UpEndWithoutOff", method="Cvode", stopTime=1200, tolerance=1e-06, resultFile="staUpEndWoOff"); + +createPlot(id=1, position={20, 10, 1200, 1366}, y={"endUp.uStaUp", "endUp.uEnaChiWatIsoVal", "endUp.uChiHeaCon[1]", "endUp.uChiHeaCon[2]"}, range={0.0, 1200.0, -1.0, 2.0}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 1200, 1366}, y={"endUp.uChi[1]", "endUp.uChi[2]"}, range={0.0, 1200.0, -1.0, 2.0}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 1200, 1366}, y={"endUp.yChi[1]", "endUp.yChi[2]"}, range={0.0, 1200.0, -1.0, 2.0}, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 1200, 1366}, y={"endUp.yChiWatMinSet"}, range={0.0, 1200.0, 1.4, 2.0}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s", displayUnits={"m3/s"}); +createPlot(id=1, position={20, 10, 1200, 1366}, y={"endUp.yEndSta"}, range={0.0, 1200.0, -2.0, 2.0}, grid=true, subPlot=105, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 1200, 1366}, y={"triSam.u", "triSam.y"}, range={0.0, 1200.0, -2.0, 2.0}, grid=true, subPlot=106, colors={{28,108,200}, {238,46,47}}, timeUnit="s"); + + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithOnOff.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithOnOff.mos new file mode 100644 index 00000000000..b135d77688a --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithOnOff.mos @@ -0,0 +1,9 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.DownWithOnOff", method="Cvode", stopTime=2400, tolerance=1e-06, resultFile="dowProWOnOff"); + +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=1, y={"dowProCon.uStaSet","dowProCon.uChi[1]","dowProCon.uChi[2]","dowProCon.yStaPro"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=2, y={"dowProCon.uChiLoa[1]","dowProCon.uChiLoa[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=3, y={"dowProCon.yChiWatIsoVal[1]","dowProCon.yChiWatIsoVal[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=4, y={"dowProCon.yChiHeaCon[1]","dowProCon.yChiHeaCon[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=5, y={"dowProCon.yChiWatMinFloSet"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=6, y={"dowProCon.yDesConWatPumSpe","dowProCon.yConWatPumNum"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithoutOnOff.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithoutOnOff.mos new file mode 100644 index 00000000000..fcce81a170e --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/DownWithoutOnOff.mos @@ -0,0 +1,9 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.DownWithoutOnOff", method="Cvode", stopTime=1500, tolerance=1e-06, resultFile="dowProWoOnOff"); + +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=1, y={"dowProCon.uStaSet","dowProCon.uChi[1]","dowProCon.uChi[2]","dowProCon.yStaPro"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=2, y={"dowProCon.uChiLoa[1]","dowProCon.uChiLoa[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=3, y={"dowProCon.yChiWatIsoVal[1]","dowProCon.yChiWatIsoVal[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=4, y={"dowProCon.yChiHeaCon[1]","dowProCon.yChiHeaCon[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=5, y={"dowProCon.yChiWatMinFloSet"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=6, y={"dowProCon.yDesConWatPumSpe","dowProCon.yConWatPumNum"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithOnOff.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithOnOff.mos new file mode 100644 index 00000000000..b33900a4d3a --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithOnOff.mos @@ -0,0 +1,9 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.UpWithOnOff", method="Cvode", stopTime=2000, tolerance=1e-06, resultFile="upProWtOnOff"); + +createPlot(id=1, position={20, 10, 1200, 1366}, y={"upProCon.uStaSet", "upProCon.uChi[1]", "upProCon.uChi[2]", "upProCon.yStaPro"}, range={0.0, 2000.0, -2.0, 4.0}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 1200, 1366}, y={"upProCon.yChiDem[1]", "upProCon.yChiDem[2]"}, range={0.0, 2000.0, -2.0, 4.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"A", "A"}); +createPlot(id=1, position={20, 10, 1200, 1366}, y={"upProCon.yChiWatIsoVal[1]", "upProCon.yChiWatIsoVal[2]"}, range={0.0, 2000.0, -1.0, 2.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=1, position={20, 10, 1200, 1366}, y={"upProCon.yChiHeaCon[1]", "upProCon.yChiHeaCon[2]"}, range={0.0, 2000.0, -1.0, 2.0}, grid=true, subPlot=104, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 1200, 1366}, y={"upProCon.yChiWatMinFloSet", "upProCon.VChiWat_flow"}, range={0.0, 2000.0, -2.0, 2.0}, grid=true, subPlot=105, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"m3/s", "m3/s"}); +createPlot(id=1, position={20, 10, 1200, 1366}, y={"upProCon.yDesConWatPumSpe", "upProCon.yConWatPumNum"}, range={0.0, 2000.0, 0.0, 4.0}, grid=true, subPlot=106, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", ""}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithoutOnOff.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithoutOnOff.mos new file mode 100644 index 00000000000..08508ea2678 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/Processes/Validation/UpWithoutOnOff.mos @@ -0,0 +1,9 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.UpWithoutOnOff", method="Cvode", stopTime=2000, tolerance=1e-06, resultFile="upProWoOnOff"); + +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=1, y={"upProCon.uStaSet","upProCon.uChi[1]","upProCon.uChi[2]","upProCon.yStaPro"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{28,108,200},{28,108,200},{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=2, y={"upProCon.uChiLoa[1]","upProCon.uChiLoa[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=3, y={"upProCon.yChiWatIsoVal[1]","upProCon.yChiWatIsoVal[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=4, y={"upProCon.yChiHeaCon[1]","upProCon.yChiHeaCon[2]"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=5, y={"upProCon.yChiWatMinFloSet"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 1400}, subPlot=6, y={"upProCon.yDesConWatPumSpe","upProCon.yConWatPumNum"}, range={0.0, 120, 0, 0.02}, grid=true, colors={{28,108,200},{238,46,47}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_u.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_u.mos new file mode 100644 index 00000000000..5ba81a52a8a --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_u.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Capacities_u", method="Cvode", stopTime=10, tolerance=1e-06, resultFile="Capacities_u"); + +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=1, y={"staCap0.uDesCap[1]", "staCap0.uDesCap[2]", "staCap0.uDesCap[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=2, y={"staCap0.uMinCap[1]", "staCap0.uMinCap[2]", "staCap0.uMinCap[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=1, y={"staCap0.uLow", "staCap0.uHig"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=2, y={"staCap0.nSta", "staCap0.u", "staCap0.uUp", "staCap0.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=3, y={"staCap0.yDes", "staCap0.yDowDes", "staCap0.yUpDes", "staCap0.yMin", "staCap0.yUpMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}, {255, 0, 43}}); + +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=1, y={"staCap1.uLow", "staCap1.uHig"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=2, y={"staCap1.nSta", "staCap1.u", "staCap1.uUp", "staCap1.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=3, y={"staCap1.yDes", "staCap1.yDowDes", "staCap1.yUpDes", "staCap1.yMin", "staCap1.yUpMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}, {255, 0, 43}}); + +createPlot(id=4, position={20, 10, 1200, 650}, subPlot=1, y={"staCap2.uLow", "staCap2.uHig"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=4, position={20, 10, 1200, 650}, subPlot=2, y={"staCap2.nSta", "staCap2.u", "staCap2.uUp", "staCap2.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=4, position={20, 10, 1200, 650}, subPlot=3, y={"staCap2.yDes", "staCap2.yDowDes", "staCap2.yUpDes", "staCap2.yMin", "staCap2.yUpMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}, {255, 0, 43}}); + +createPlot(id=5, position={20, 10, 1200, 650}, subPlot=1, y={"staCap3.uLow", "staCap3.uHig"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=5, position={20, 10, 1200, 650}, subPlot=2, y={"staCap3.nSta", "staCap3.u", "staCap3.uUp", "staCap3.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=5, position={20, 10, 1200, 650}, subPlot=3, y={"staCap3.yDes", "staCap3.yDowDes", "staCap3.yUpDes", "staCap3.yMin", "staCap3.yUpMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}, {255, 0, 43}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_uLow_uHig.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_uLow_uHig.mos new file mode 100644 index 00000000000..e1f23b363a1 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Capacities_uLow_uHig.mos @@ -0,0 +1,16 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Capacities_uLow_uHig", method="Cvode", stopTime=10, tolerance=1e-06, resultFile="Capacities_uLow_uHig"); + +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=1, y={"staCap0.uDesCap[1]", "staCap0.uDesCap[2]", "staCap0.uDesCap[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=2, y={"staCap0.uMinCap[1]", "staCap0.uMinCap[2]", "staCap0.uMinCap[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=1, y={"staCap0.uLow", "staCap0.uHig"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=2, y={"staCap0.nSta", "staCap0.u", "staCap0.uUp", "staCap0.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=3, y={"staCap0.yDes", "staCap0.yDowDes", "staCap0.yUpDes", "staCap0.yMin", "staCap0.yUpMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}, {255, 0, 43}}); + +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=1, y={"staCap1.uLow", "staCap1.uHig"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=2, y={"staCap1.nSta", "staCap1.u", "staCap1.uUp", "staCap1.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=3, y={"staCap1.yDes", "staCap1.yDowDes", "staCap1.yUpDes", "staCap1.yMin", "staCap1.yUpMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}, {255, 0, 43}}); + +createPlot(id=4, position={20, 10, 1200, 650}, subPlot=1, y={"staCap2.uLow", "staCap2.uHig"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=4, position={20, 10, 1200, 650}, subPlot=2, y={"staCap2.nSta", "staCap2.u", "staCap2.uUp", "staCap2.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=4, position={20, 10, 1200, 650}, subPlot=3, y={"staCap2.yDes", "staCap2.yDowDes", "staCap2.yUpDes", "staCap2.yMin", "staCap2.yUpMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}, {255, 0, 43}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/CapacityRequirement.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/CapacityRequirement.mos new file mode 100644 index 00000000000..c8f63b8a8df --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/CapacityRequirement.mos @@ -0,0 +1,16 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.CapacityRequirement", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="CapacityRequirement"); + +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=1, y={"capReq.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=2, y={"capReq.chaPro"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=3, y={"capReq.VChiWat_flow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=4, y={"capReq.TChiWatRet", "capReq.TChiWatSupSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); + +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=1, y={"capReq1.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=2, y={"capReq1.chaPro"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=3, y={"capReq1.VChiWat_flow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=4, y={"capReq1.TChiWatRet", "capReq1.TChiWatSupSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); + +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=1, y={"capReq2.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=2, y={"capReq2.chaPro"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=3, y={"capReq2.VChiWat_flow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=4, y={"capReq2.TChiWatRet", "capReq2.TChiWatSupSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Change.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Change.mos new file mode 100644 index 00000000000..aed43e00830 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Change.mos @@ -0,0 +1,22 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Change", method="Cvode", stopTime=14000, tolerance=1e-06, resultFile="Change1"); + +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=1, y={"cha.ySta"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=2, y={"cha.uAvaUp", "cha.uAvaDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=3, y={"cha.uUp", "cha.uDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=4, y={"cha.uIni"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=5, y={"truFalHol.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=6, y={"cha.uPla"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); + +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=1, y={"cha1.ySta"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=2, y={"cha1.uAvaUp", "cha1.uAvaDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=3, y={"cha1.uUp", "cha1.uDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=4, y={"cha1.uIni"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=5, y={"truFalHol1.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=6, y={"cha1.uPla"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); + +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=1, y={"cha2.ySta"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=2, y={"cha2.uAvaUp", "cha2.uAvaDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=3, y={"cha2.uUp", "cha2.uDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=4, y={"cha2.uIni"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=5, y={"truFalHol2.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=6, y={"cha2.uPla"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/ChillerIndices_u.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/ChillerIndices_u.mos new file mode 100644 index 00000000000..3bb44187107 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/ChillerIndices_u.mos @@ -0,0 +1,36 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.ChillerIndices_u", method="Cvode", stopTime=10, tolerance=1e-06, resultFile="ChillerIndices_u"); + +createPlot(id=1, position={20, 10, 800, 700}, subPlot=1, y={"chiInd.nSta", "chiInd.nChi", "chiInd.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=1, position={20, 10, 800, 700}, subPlot=2, y={"chiInd.yChi[1]", "chiInd.yChi[2]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); + +createPlot(id=2, position={850, 10, 800, 700}, subPlot=1, y={"chiInd1.nSta", "chiInd1.nChi", "chiInd1.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=2, position={850, 10, 800, 700}, subPlot=2, y={"chiInd1.staMat[1, 1]", "chiInd1.staMat[1, 2]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={850, 10, 800, 700}, subPlot=3, y={"chiInd1.yChi[1]", "chiInd1.yChi[2]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); + +createPlot(id=3, position={30, 20, 800, 700}, subPlot=1, y={"chiInd2.nSta", "chiInd2.nChi", "chiInd2.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=3, position={30, 20, 800, 700}, subPlot=2, y={"chiInd2.staMat[2, 1]", "chiInd2.staMat[2, 2]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, position={30, 20, 800, 700}, subPlot=3, y={"chiInd2.yChi[1]", "chiInd2.yChi[2]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); + +createPlot(id=4, position={860, 20, 800, 700}, subPlot=1, y={"chiInd3.nSta", "chiInd3.nChi", "chiInd3.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=4, position={860, 20, 800, 700}, subPlot=2, y={"chiInd3.staMat[3, 1]", "chiInd3.staMat[3, 2]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=4, position={860, 20, 800, 700}, subPlot=3, y={"chiInd3.yChi[1]", "chiInd3.yChi[2]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); + +createPlot(id=5, position={40, 30, 800, 700}, subPlot=1, y={"chiInd4.nSta", "chiInd4.nChi", "chiInd4.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=5, position={40, 30, 800, 700}, subPlot=2, y={"chiInd4.yChi[1]", "chiInd4.yChi[2]", "chiInd4.yChi[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=6, position={870, 30, 800, 700}, subPlot=1, y={"chiInd5.nSta", "chiInd5.nChi", "chiInd5.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=6, position={870, 30, 800, 700}, subPlot=2, y={"chiInd5.staMat[1, 1]", "chiInd5.staMat[1, 2]", "chiInd4.staMat[1, 3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=6, position={870, 30, 800, 700}, subPlot=3, y={"chiInd5.yChi[1]", "chiInd5.yChi[2]", "chiInd5.yChi[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=7, position={50, 40, 800, 700}, subPlot=1, y={"chiInd6.nSta", "chiInd6.nChi", "chiInd6.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=7, position={50, 40, 800, 700}, subPlot=2, y={"chiInd6.staMat[3, 1]", "chiInd6.staMat[3, 2]", "chiInd5.staMat[3, 3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=7, position={50, 40, 800, 700}, subPlot=3, y={"chiInd6.yChi[1]", "chiInd6.yChi[2]", "chiInd6.yChi[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=8, position={880, 40, 800, 700}, subPlot=1, y={"chiInd7.nSta", "chiInd7.nChi", "chiInd7.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=8, position={880, 40, 800, 700}, subPlot=2, y={"chiInd7.staMat[5, 1]", "chiInd7.staMat[5, 2]", "chiInd7.staMat[5, 3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=8, position={880, 40, 800, 700}, subPlot=3, y={"chiInd7.yChi[1]", "chiInd7.yChi[2]", "chiInd7.yChi[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + + + + + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Configurator_uChiAva.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Configurator_uChiAva.mos new file mode 100644 index 00000000000..138a16c10e8 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Configurator_uChiAva.mos @@ -0,0 +1,67 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Configurator_uChiAva", method="Cvode", stopTime=10, tolerance=1e-06, resultFile="Configurator_uChiAva"); + +createPlot(id=1, position={20, 10, 800, 700}, subPlot=1, y={"conf.nSta", "conf.nChi"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 800, 700}, subPlot=2, y={"conf.uChiAva[1]", "conf.uChiAva[2]", "conf.uChiAva[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=1, position={20, 10, 800, 700}, subPlot=3, y={"conf.chiDesCap[1]", "conf.chiDesCap[2]", "conf.chiDesCap[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=1, position={20, 10, 800, 700}, subPlot=4, y={"conf.chiMinCap[1]", "conf.chiMinCap[2]", "conf.chiMinCap[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=1, position={20, 10, 800, 700}, subPlot=5, y={"conf.chiTyp[1]", "conf.chiTyp[2]", "conf.chiTyp[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=2, position={850, 10, 800, 700}, subPlot=1, y={"conf.yAva[1]", "conf.yAva[2]", "conf.yAva[3]", "conf.yAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=2, position={850, 10, 800, 700}, subPlot=2, y={"conf.yTyp[1]", "conf.yTyp[2]", "conf.yTyp[3]", "conf.yTyp[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=2, position={850, 10, 800, 700}, subPlot=3, y={"conf.yDesCap[1]", "conf.yDesCap[2]", "conf.yDesCap[3]", "conf.yDesCap[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=2, position={850, 10, 800, 700}, subPlot=4, y={"conf.yMinCap[1]", "conf.yMinCap[2]", "conf.yMinCap[3]", "conf.yMinCap[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); + +createPlot(id=3, position={30, 20, 800, 700}, subPlot=1, y={"conf1.nSta", "conf1.nChi"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, position={20, 10, 800, 700}, subPlot=2, y={"conf1.uChiAva[1]", "conf1.uChiAva[2]", "conf1.uChiAva[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=3, position={30, 20, 800, 700}, subPlot=3, y={"conf1.chiDesCap[1]", "conf1.chiDesCap[2]", "conf1.chiDesCap[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=3, position={30, 20, 800, 700}, subPlot=4, y={"conf1.chiMinCap[1]", "conf1.chiMinCap[2]", "conf1.chiMinCap[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=3, position={30, 20, 800, 700}, subPlot=5, y={"conf1.chiTyp[1]", "conf1.chiTyp[2]", "conf1.chiTyp[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=4, position={860, 20, 800, 700}, subPlot=1, y={"conf1.yAva[1]", "conf1.yAva[2]", "conf1.yAva[3]", "conf1.yAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=4, position={860, 20, 800, 700}, subPlot=2, y={"conf1.yTyp[1]", "conf1.yTyp[2]", "conf1.yTyp[3]", "conf1.yTyp[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=4, position={860, 20, 800, 700}, subPlot=3, y={"conf1.yDesCap[1]", "conf1.yDesCap[2]", "conf1.yDesCap[3]", "conf1.yDesCap[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=4, position={860, 20, 800, 700}, subPlot=4, y={"conf1.yMinCap[1]", "conf1.yMinCap[2]", "conf1.yMinCap[3]", "conf1.yMinCap[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); + +createPlot(id=5, position={40, 30, 800, 700}, subPlot=1, y={"conf2.nSta", "conf2.nChi"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=5, position={20, 10, 800, 700}, subPlot=2, y={"conf2.uChiAva[1]", "conf2.uChiAva[2]", "conf2.uChiAva[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=5, position={40, 30, 800, 700}, subPlot=3, y={"conf2.chiDesCap[1]", "conf2.chiDesCap[2]", "conf2.chiDesCap[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=5, position={40, 30, 800, 700}, subPlot=4, y={"conf2.chiMinCap[1]", "conf2.chiMinCap[2]", "conf2.chiMinCap[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=5, position={40, 30, 800, 700}, subPlot=5, y={"conf2.chiTyp[1]", "conf2.chiTyp[2]", "conf2.chiTyp[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=6, position={870, 30, 800, 700}, subPlot=1, y={"conf2.yAva[1]", "conf2.yAva[2]", "conf2.yAva[3]", "conf2.yAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=6, position={870, 30, 800, 700}, subPlot=2, y={"conf2.yTyp[1]", "conf2.yTyp[2]", "conf2.yTyp[3]", "conf2.yTyp[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=6, position={870, 30, 800, 700}, subPlot=3, y={"conf2.yDesCap[1]", "conf2.yDesCap[2]", "conf2.yDesCap[3]", "conf2.yDesCap[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=6, position={870, 30, 800, 700}, subPlot=4, y={"conf2.yMinCap[1]", "conf2.yMinCap[2]", "conf2.yMinCap[3]", "conf2.yMinCap[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); + +createPlot(id=7, position={50, 40, 800, 700}, subPlot=1, y={"conf3.nSta", "conf3.nChi"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=7, position={20, 10, 800, 700}, subPlot=2, y={"conf3.uChiAva[1]", "conf3.uChiAva[2]", "conf3.uChiAva[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=7, position={50, 40, 800, 700}, subPlot=3, y={"conf3.chiDesCap[1]", "conf3.chiDesCap[2]", "conf3.chiDesCap[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=7, position={50, 40, 800, 700}, subPlot=4, y={"conf3.chiMinCap[1]", "conf3.chiMinCap[2]", "conf3.chiMinCap[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=7, position={50, 40, 800, 700}, subPlot=5, y={"conf3.chiTyp[1]", "conf3.chiTyp[2]", "conf3.chiTyp[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=8, position={880, 40, 800, 700}, subPlot=1, y={"conf3.yAva[1]", "conf3.yAva[2]", "conf3.yAva[3]", "conf3.yAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=8, position={880, 40, 800, 700}, subPlot=2, y={"conf3.yTyp[1]", "conf3.yTyp[2]", "conf3.yTyp[3]", "conf3.yTyp[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=8, position={880, 40, 800, 700}, subPlot=3, y={"conf3.yDesCap[1]", "conf3.yDesCap[2]", "conf3.yDesCap[3]", "conf3.yDesCap[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=8, position={880, 40, 800, 700}, subPlot=4, y={"conf3.yMinCap[1]", "conf3.yMinCap[2]", "conf3.yMinCap[3]", "conf3.yMinCap[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); + +createPlot(id=9, position={40, 30, 800, 700}, subPlot=1, y={"conf4.nSta", "conf4.nChi"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=9, position={20, 10, 800, 700}, subPlot=2, y={"conf4.uChiAva[1]", "conf4.uChiAva[2]", "conf4.uChiAva[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=9, position={40, 30, 800, 700}, subPlot=3, y={"conf4.chiDesCap[1]", "conf4.chiDesCap[2]", "conf4.chiDesCap[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=9, position={40, 30, 800, 700}, subPlot=4, y={"conf4.chiMinCap[1]", "conf4.chiMinCap[2]", "conf4.chiMinCap[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=9, position={40, 30, 800, 700}, subPlot=5, y={"conf4.chiTyp[1]", "conf4.chiTyp[2]", "conf4.chiTyp[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=10, position={870, 30, 800, 700}, subPlot=1, y={"conf4.yAva[1]", "conf4.yAva[2]", "conf4.yAva[3]", "conf4.yAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=10, position={870, 30, 800, 700}, subPlot=2, y={"conf4.yTyp[1]", "conf4.yTyp[2]", "conf4.yTyp[3]", "conf4.yTyp[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=10, position={870, 30, 800, 700}, subPlot=3, y={"conf4.yDesCap[1]", "conf4.yDesCap[2]", "conf4.yDesCap[3]", "conf4.yDesCap[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=10, position={870, 30, 800, 700}, subPlot=4, y={"conf4.yMinCap[1]", "conf4.yMinCap[2]", "conf4.yMinCap[3]", "conf4.yMinCap[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); + +createPlot(id=11, position={50, 40, 800, 700}, subPlot=1, y={"conf5.nSta", "conf5.nChi"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=11, position={20, 10, 800, 700}, subPlot=2, y={"conf5.uChiAva[1]", "conf5.uChiAva[2]", "conf5.uChiAva[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=11, position={50, 40, 800, 700}, subPlot=3, y={"conf5.chiDesCap[1]", "conf5.chiDesCap[2]", "conf5.chiDesCap[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=11, position={50, 40, 800, 700}, subPlot=4, y={"conf5.chiMinCap[1]", "conf5.chiMinCap[2]", "conf5.chiMinCap[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=11, position={50, 40, 800, 700}, subPlot=5, y={"conf5.chiTyp[1]", "conf5.chiTyp[2]", "conf5.chiTyp[3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=12, position={880, 40, 800, 700}, subPlot=1, y={"conf5.yAva[1]", "conf5.yAva[2]", "conf5.yAva[3]", "conf5.yAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=12, position={880, 40, 800, 700}, subPlot=2, y={"conf5.yTyp[1]", "conf5.yTyp[2]", "conf5.yTyp[3]", "conf5.yTyp[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=12, position={880, 40, 800, 700}, subPlot=3, y={"conf5.yDesCap[1]", "conf5.yDesCap[2]", "conf5.yDesCap[3]", "conf5.yDesCap[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=12, position={880, 40, 800, 700}, subPlot=4, y={"conf5.yMinCap[1]", "conf5.yMinCap[2]", "conf5.yMinCap[3]", "conf5.yMinCap[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Down.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Down.mos new file mode 100644 index 00000000000..52e028f05d6 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Down.mos @@ -0,0 +1,19 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Down", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="Down"); + +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=1, y={"withWSE.y", "withWSE.u"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=2, y={"withWSE.uOpeDow", "withWSE.uStaDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=3, y={"withWSE.dpChiWatPumSet_local", "withWSE.dpChiWatPum_local"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=4, y={"withWSE.TChiWatSup", "withWSE.TChiWatSupSet", "withWSE.TWsePre"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0, 0, 50}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=5, y={"withWSE.uTowFanSpeMax"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); + +createPlot(id=2, position={30, 20, 1200, 650}, subPlot=1, y={"noWSE.y", "noWSE.u"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={30, 20, 1200, 650}, subPlot=2, y={"noWSE.uOpeDow", "noWSE.uStaDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={30, 20, 1200, 650}, subPlot=3, y={"noWSE.dpChiWatPumSet_local", "noWSE.dpChiWatPum_local"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={30, 20, 1200, 650}, subPlot=4, y={"noWSE.TChiWatSup", "noWSE.TChiWatSupSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); + +createPlot(id=3, position={40, 30, 1200, 650}, subPlot=1, y={"withWSE1.y", "withWSE1.u"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, position={40, 30, 1200, 650}, subPlot=2, y={"withWSE1.TChiWatSupSet", "withWSE1.TWsePre"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, position={40, 30, 1200, 650}, subPlot=3, y={"withWSE1.uWseSta", "withWSE1.uTowFanSpeMax"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, position={40, 30, 1200, 650}, subPlot=4, y={"withWSE1.TChiWatSup", "withWSE1.TChiWatSupSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, position={40, 30, 1200, 650}, subPlot=5, y={"withWSE1.dpChiWatPumSet_local", "withWSE1.dpChiWatPum_local"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/EfficiencyCondition.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/EfficiencyCondition.mos new file mode 100644 index 00000000000..ab1aa7c28b1 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/EfficiencyCondition.mos @@ -0,0 +1,4 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.EfficiencyCondition", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="EfficiencyCondition"); + +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=1, y={"effCon.uOpe", "effCon.uStaUp"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=2, y={"effCon.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/FailsafeCondition.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/FailsafeCondition.mos new file mode 100644 index 00000000000..5a5b56842a2 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/FailsafeCondition.mos @@ -0,0 +1,16 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.FailsafeCondition", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="FailsafeCondition"); + +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=1, y={"faiSafCon0.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=2, y={"faiSafCon0.dpChiWatPumSet_local", "faiSafCon0.dpChiWatPum_local"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=3, y={"faiSafCon0.TChiWatSup", "faiSafCon0.TChiWatSupSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 1200, 650}, subPlot=4, y={"faiSafCon0.hysdpSup.y", "faiSafCon0.hysTSup.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}, {0,140,72}}); + +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=1, y={"faiSafCon1.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=2, y={"faiSafCon1.dpChiWatPumSet_local", "faiSafCon1.dpChiWatPum_local"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=3, y={"faiSafCon1.TChiWatSup", "faiSafCon1.TChiWatSupSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={20, 10, 1200, 650}, subPlot=4, y={"faiSafCon1.hysdpSup.y", "faiSafCon1.hysTSup.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}, {0,140,72}}); + +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=1, y={"faiSafCon2.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=2, y={"faiSafCon2.TChiWatSup", "faiSafCon2.TChiWatSupSet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, position={20, 10, 1200, 650}, subPlot=3, y={"faiSafCon2.hysTSup.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{0,140,72}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_WSE.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_WSE.mos new file mode 100644 index 00000000000..e02669bb361 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_WSE.mos @@ -0,0 +1,11 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Initial_WSE", method="Cvode", stopTime=86400, tolerance=1e-06, resultFile="Initial_WSE"); + +createPlot(id=1, position={10, 10, 1200, 650}, subPlot=1, y={"iniStaCol.yIni", "iniStaCol.uUp"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{28,108,200}}); +createPlot(id=1, position={10, 10, 1200, 650}, subPlot=2, y={"iniStaCol.TChiWatSupSet", "iniStaCol.TOutWet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{28,108,200}}); +createPlot(id=1, position={10, 10, 1200, 650}, subPlot=3, y={"iniStaCol.uTunPar"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=1, position={10, 10, 1200, 650}, subPlot=4, y={"iniStaCol.uPla"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); + +createPlot(id=2, position={10, 10, 1200, 650}, subPlot=1, y={"iniStaHot.yIni", "iniStaHot.uUp"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{28,108,200}}); +createPlot(id=2, position={10, 10, 1200, 650}, subPlot=2, y={"iniStaHot.TChiWatSupSet", "iniStaHot.TOutWet"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200},{28,108,200}}); +createPlot(id=2, position={10, 10, 1200, 650}, subPlot=3, y={"iniStaHot.uTunPar"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=2, position={10, 10, 1200, 650}, subPlot=4, y={"iniStaCol.uPla"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_noWSE.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_noWSE.mos new file mode 100644 index 00000000000..08b78921344 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Initial_noWSE.mos @@ -0,0 +1,11 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Initial_noWSE", method="Cvode", stopTime=100, tolerance=1e-06, resultFile="Initial_noWSE"); + +createPlot(id=1, position={10, 10, 1200, 650}, subPlot=1, y={"iniSta.yIni"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={10, 10, 1200, 650}, subPlot=2, y={"iniSta.uUp"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=1, position={10, 10, 1200, 650}, subPlot=3, y={"iniSta.have_WSE"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=1, position={10, 10, 1200, 650}, subPlot=4, y={"iniSta.uPla"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); + +createPlot(id=2, position={10, 10, 1200, 650}, subPlot=1, y={"iniSta1.yIni"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={10, 10, 1200, 650}, subPlot=2, y={"iniSta1.uUp"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=2, position={10, 10, 1200, 650}, subPlot=3, y={"iniSta1.have_WSE"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=2, position={10, 10, 1200, 650}, subPlot=4, y={"iniSta1.uPla"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/PartLoadRatios_u_uTyp.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/PartLoadRatios_u_uTyp.mos new file mode 100644 index 00000000000..5ccefb3c17f --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/PartLoadRatios_u_uTyp.mos @@ -0,0 +1,45 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.PartLoadRatios_u_uTyp", method="Cvode", stopTime=1200, tolerance=1e-06, resultFile="PartLoadRatios_u_uTyp"); + +createPlot(id=1, position={10, 10, 1200, 650}, subPlot=1, y={"PLRs0.yOpe", "PLRs0.yOpeUp", "PLRs0.yOpeDow", "PLRs0.yOpeMin", "PLRs0.yOpeUpMin", "PLRs0.yStaUp", "PLRs0.yStaDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}, {50,200,0}}); +createPlot(id=1, position={10, 10, 1200, 650}, subPlot=2, y={"PLRs0.uCapReq", "PLRs0.uCapDes", "PLRs0.uUpCapDes", "PLRs0.uDowCapDes", "PLRs0.uCapMin", "PLRs0.uUpCapMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}}); +createPlot(id=1, position={10, 10, 1200, 650}, subPlot=3, y={"PLRs0.nSta", "PLRs0.u", "PLRs0.uUp", "PLRs0.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}}); +createPlot(id=1, position={10, 10, 1200, 650}, subPlot=4, y={"PLRs0.uTyp[1]","PLRs0.uTyp[2]", "PLRs0.uTyp[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=2, position={20, 20, 1200, 650}, subPlot=1, y={"PLRs1.yOpe", "PLRs1.yOpeUp", "PLRs1.yOpeDow", "PLRs1.yOpeMin", "PLRs1.yOpeUpMin", "PLRs1.yStaUp", "PLRs1.yStaDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}, {50,200,0}}); +createPlot(id=2, position={20, 20, 1200, 650}, subPlot=2, y={"PLRs1.uCapReq", "PLRs1.uCapDes", "PLRs1.uUpCapDes", "PLRs1.uDowCapDes", "PLRs1.uCapMin", "PLRs1.uUpCapMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}}); +createPlot(id=2, position={20, 20, 1200, 650}, subPlot=3, y={"PLRs1.nSta", "PLRs1.u", "PLRs1.uUp", "PLRs1.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}}); +createPlot(id=2, position={20, 20, 1200, 650}, subPlot=4, y={"PLRs1.uTyp[1]","PLRs1.uTyp[2]", "PLRs1.uTyp[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=3, position={30, 30, 1200, 650}, subPlot=1, y={"PLRs2.yOpe", "PLRs2.yOpeUp", "PLRs2.yOpeDow", "PLRs2.yOpeMin", "PLRs2.yOpeUpMin", "PLRs2.yStaUp", "PLRs2.yStaDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}, {50,200,0}}); +createPlot(id=3, position={30, 30, 1200, 650}, subPlot=2, y={"PLRs2.uCapReq", "PLRs2.uCapDes", "PLRs2.uUpCapDes", "PLRs2.uDowCapDes", "PLRs2.uCapMin", "PLRs2.uUpCapMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}}); +createPlot(id=3, position={30, 30, 1200, 650}, subPlot=3, y={"PLRs2.nSta", "PLRs2.u", "PLRs2.uUp", "PLRs2.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}}); +createPlot(id=3, position={30, 30, 1200, 650}, subPlot=4, y={"PLRs2.uTyp[1]","PLRs2.uTyp[2]", "PLRs2.uTyp[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=4, position={40, 40, 1200, 650}, subPlot=1, y={"PLRs3.yOpe", "PLRs3.yOpeUp", "PLRs3.yOpeDow", "PLRs3.yOpeMin", "PLRs3.yOpeUpMin", "PLRs3.yStaUp", "PLRs3.yStaDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}, {50,200,0}}); +createPlot(id=4, position={40, 40, 1200, 650}, subPlot=2, y={"PLRs3.uCapReq", "PLRs3.uCapDes", "PLRs3.uUpCapDes", "PLRs3.uDowCapDes", "PLRs3.uCapMin", "PLRs3.uUpCapMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}}); +createPlot(id=4, position={40, 40, 1200, 650}, subPlot=3, y={"PLRs3.nSta", "PLRs3.u", "PLRs3.uUp", "PLRs3.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}}); +createPlot(id=4, position={40, 40, 1200, 650}, subPlot=4, y={"PLRs3.uTyp[1]","PLRs3.uTyp[2]", "PLRs3.uTyp[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=5, position={50, 50, 1200, 650}, subPlot=1, y={"PLRs4.yOpe", "PLRs4.yOpeUp", "PLRs4.yOpeDow", "PLRs4.yOpeMin", "PLRs4.yOpeUpMin", "PLRs4.yStaUp", "PLRs4.yStaDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}, {50,200,0}}); +createPlot(id=5, position={50, 50, 1200, 650}, subPlot=2, y={"PLRs4.uCapReq", "PLRs4.uCapDes", "PLRs4.uUpCapDes", "PLRs4.uDowCapDes", "PLRs4.uCapMin", "PLRs4.uUpCapMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}}); +createPlot(id=5, position={50, 50, 1200, 650}, subPlot=3, y={"PLRs4.nSta", "PLRs4.u", "PLRs4.uUp", "PLRs4.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}}); +createPlot(id=5, position={50, 50, 1200, 650}, subPlot=4, y={"PLRs4.uTyp[1]","PLRs4.uTyp[2]", "PLRs4.uTyp[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=5, position={50, 50, 1200, 650}, subPlot=5, y={"PLRs4.uLif", "PLRs4.uLifMax","PLRs4.uLifMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=6, position={60, 60, 1200, 650}, subPlot=1, y={"PLRs5.yOpe", "PLRs5.yOpeUp", "PLRs5.yOpeDow", "PLRs5.yOpeMin", "PLRs5.yOpeUpMin", "PLRs5.yStaUp", "PLRs5.yStaDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}, {50,200,0}}); +createPlot(id=6, position={60, 60, 1200, 650}, subPlot=2, y={"PLRs5.uCapReq", "PLRs5.uCapDes", "PLRs5.uUpCapDes", "PLRs5.uDowCapDes", "PLRs5.uCapMin", "PLRs5.uUpCapMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}}); +createPlot(id=6, position={60, 60, 1200, 650}, subPlot=3, y={"PLRs5.nSta", "PLRs5.u", "PLRs5.uUp", "PLRs5.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}}); +createPlot(id=6, position={60, 60, 1200, 650}, subPlot=4, y={"PLRs5.uTyp[1]","PLRs5.uTyp[2]", "PLRs5.uTyp[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=6, position={50, 50, 1200, 650}, subPlot=5, y={"PLRs5.uLif", "PLRs5.uLifMax","PLRs5.uLifMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=7, position={70, 70, 1200, 650}, subPlot=1, y={"PLRs6.yOpe", "PLRs6.yOpeUp", "PLRs6.yOpeDow", "PLRs6.yOpeMin", "PLRs6.yOpeUpMin", "PLRs6.yStaUp", "PLRs6.yStaDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}, {50,200,0}}); +createPlot(id=7, position={70, 70, 1200, 650}, subPlot=2, y={"PLRs6.uCapReq", "PLRs6.uCapDes", "PLRs6.uUpCapDes", "PLRs6.uDowCapDes", "PLRs6.uCapMin", "PLRs6.uUpCapMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}}); +createPlot(id=7, position={70, 70, 1200, 650}, subPlot=3, y={"PLRs6.nSta", "PLRs6.u", "PLRs6.uUp", "PLRs6.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}}); +createPlot(id=7, position={70, 70, 1200, 650}, subPlot=4, y={"PLRs6.uTyp[1]","PLRs6.uTyp[2]", "PLRs6.uTyp[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=7, position={50, 50, 1200, 650}, subPlot=5, y={"PLRs6.uLif", "PLRs6.uLifMax","PLRs6.uLifMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); + +createPlot(id=8, position={80, 80, 1200, 650}, subPlot=1, y={"PLRs7.yOpe", "PLRs7.yOpeUp", "PLRs7.yOpeDow", "PLRs7.yOpeMin", "PLRs7.yOpeUpMin", "PLRs7.yStaUp", "PLRs7.yStaDow"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}, {50,200,0}}); +createPlot(id=8, position={80, 80, 1200, 650}, subPlot=2, y={"PLRs7.uCapReq", "PLRs7.uCapDes", "PLRs7.uUpCapDes", "PLRs7.uDowCapDes", "PLRs7.uCapMin", "PLRs7.uUpCapMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}, {255,0,43}, {50,0,0}}); +createPlot(id=8, position={80, 80, 1200, 650}, subPlot=3, y={"PLRs7.nSta", "PLRs7.u", "PLRs7.uUp", "PLRs7.uDown"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77,25,0}}); +createPlot(id=8, position={80, 80, 1200, 650}, subPlot=4, y={"PLRs7.uTyp[1]","PLRs7.uTyp[2]", "PLRs7.uTyp[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=8, position={50, 50, 1200, 650}, subPlot=5, y={"PLRs7.uLif", "PLRs7.uLifMax","PLRs7.uLifMin"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Status_u_uAva.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Status_u_uAva.mos new file mode 100644 index 00000000000..4135cb8ea1e --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Status_u_uAva.mos @@ -0,0 +1,49 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Status_u_uAva", method="Cvode", stopTime=10, tolerance=1e-06, resultFile="Status_u_uAva"); + +createPlot(id=1, position={20, 10, 800, 700}, subPlot=1, y={"sta.nSta", "sta.nChi", "sta.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=1, position={20, 10, 800, 700}, subPlot=2, y={"sta.uAva[1]", "sta.uAva[2]", "sta.uAva[3]", "sta.uAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=1, position={20, 10, 800, 700}, subPlot=3, y={"sta.staMat[3, 1]", "sta.staMat[3, 2]", "sta.staMat[3, 3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=1, position={20, 10, 800, 700}, subPlot=4, y={"sta.yHig", "sta.yLow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 800, 700}, subPlot=5, y={"sta.yAvaUp", "sta.yAvaDow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{238,46,47}, {238,46,47}}); + +createPlot(id=2, position={850, 10, 800, 700}, subPlot=1, y={"sta1.nSta", "sta1.nChi", "sta1.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=2, position={850, 10, 800, 700}, subPlot=2, y={"sta1.uAva[1]", "sta1.uAva[2]", "sta1.uAva[3]", "sta1.uAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=2, position={850, 10, 800, 700}, subPlot=3, y={"sta1.staMat[3, 1]", "sta1.staMat[3, 2]", "sta1.staMat[3, 3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=2, position={850, 10, 800, 700}, subPlot=4, y={"sta1.yHig", "sta1.yLow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={850, 10, 800, 700}, subPlot=5, y={"sta1.yAvaUp", "sta1.yAvaDow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{238,46,47}, {238,46,47}}); + +createPlot(id=3, position={30, 20, 800, 700}, subPlot=1, y={"sta2.nSta", "sta2.nChi", "sta2.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=3, position={30, 20, 800, 700}, subPlot=2, y={"sta2.uAva[1]", "sta2.uAva[2]", "sta2.uAva[3]", "sta2.uAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=3, position={30, 20, 800, 700}, subPlot=3, y={"sta2.staMat[3, 1]", "sta2.staMat[3, 2]", "sta2.staMat[3, 3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=3, position={30, 20, 800, 700}, subPlot=4, y={"sta2.yHig", "sta2.yLow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, position={30, 20, 800, 700}, subPlot=5, y={"sta2.yAvaUp", "sta2.yAvaDow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{238,46,47}, {238,46,47}}); + +createPlot(id=4, position={860, 20, 800, 700}, subPlot=1, y={"sta3.nSta", "sta3.nChi", "sta3.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=4, position={860, 20, 800, 700}, subPlot=2, y={"sta3.uAva[1]", "sta3.uAva[2]", "sta3.uAva[3]", "sta3.uAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=4, position={860, 20, 800, 700}, subPlot=3, y={"sta3.staMat[1, 1]", "sta3.staMat[1, 2]", "sta3.staMat[1, 3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=4, position={860, 20, 800, 700}, subPlot=4, y={"sta3.yHig", "sta3.yLow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=4, position={860, 20, 800, 700}, subPlot=5, y={"sta3.yAvaUp", "sta3.yAvaDow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{238,46,47}, {238,46,47}}); + +createPlot(id=5, position={40, 30, 800, 700}, subPlot=1, y={"sta4.nSta", "sta4.nChi", "sta4.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=5, position={40, 30, 800, 700}, subPlot=2, y={"sta4.uAva[1]", "sta4.uAva[2]", "sta4.uAva[3]", "sta4.uAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=5, position={40, 30, 800, 700}, subPlot=3, y={"sta4.staMat[3, 1]", "sta4.staMat[3, 2]", "sta4.staMat[3, 3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=5, position={40, 30, 800, 700}, subPlot=4, y={"sta4.yHig", "sta4.yLow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=5, position={40, 30, 800, 700}, subPlot=5, y={"sta4.yAvaUp", "sta4.yAvaDow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{238,46,47}, {238,46,47}}); + +createPlot(id=6, position={870, 30, 800, 700}, subPlot=1, y={"sta5.nSta", "sta5.nChi", "sta5.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=6, position={870, 30, 800, 700}, subPlot=2, y={"sta5.uAva[1]", "sta5.uAva[2]", "sta5.uAva[3]", "sta5.uAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=6, position={870, 30, 800, 700}, subPlot=3, y={"sta5.staMat[1, 1]", "sta5.staMat[1, 2]", "sta5.staMat[1, 3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=6, position={870, 30, 800, 700}, subPlot=4, y={"sta5.yHig", "sta5.yLow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=6, position={870, 30, 800, 700}, subPlot=5, y={"sta5.yAvaUp", "sta5.yAvaDow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{238,46,47}, {238,46,47}}); + +createPlot(id=7, position={50, 40, 800, 700}, subPlot=1, y={"sta6.nSta", "sta6.nChi", "sta6.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=7, position={50, 40, 800, 700}, subPlot=2, y={"sta6.uAva[1]", "sta6.uAva[2]", "sta6.uAva[3]", "sta6.uAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=7, position={50, 40, 800, 700}, subPlot=3, y={"sta6.staMat[3, 1]", "sta6.staMat[3, 2]", "sta6.staMat[3, 3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=7, position={50, 40, 800, 700}, subPlot=4, y={"sta6.yHig", "sta6.yLow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=7, position={50, 40, 800, 700}, subPlot=5, y={"sta6.yAvaUp", "sta6.yAvaDow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{238,46,47}, {238,46,47}}); + +createPlot(id=8, position={880, 40, 800, 700}, subPlot=1, y={"sta7.nSta", "sta7.nChi", "sta7.u"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=8, position={880, 40, 800, 700}, subPlot=2, y={"sta7.uAva[1]", "sta7.uAva[2]", "sta7.uAva[3]", "sta7.uAva[4]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {77, 25, 0}}); +createPlot(id=8, position={880, 40, 800, 700}, subPlot=3, y={"sta7.staMat[1, 1]", "sta7.staMat[1, 2]", "sta7.staMat[1, 3]"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=8, position={880, 40, 800, 700}, subPlot=4, y={"sta7.yHig", "sta7.yLow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=8, position={880, 40, 800, 700}, subPlot=5, y={"sta7.yAvaUp", "sta7.yAvaDow"}, range={0.0, 1700.0, -0.2, 0.12}, grid=true, colors={{238,46,47}, {238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Up.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Up.mos new file mode 100644 index 00000000000..88a2ed009a9 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Subsequences/Validation/Up.mos @@ -0,0 +1,9 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Up", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="Up"); +createPlot(id=1, position={20, 10, 1200, 650}, y={"staUp.y", "staUp.uPla"}, range={0.0, 3600.0, -5.0, 5.0}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={20, 10, 1200, 650}, y={"staUp.uOpe", "staUp.uStaUp"}, range={0.0, 3600.0, 0.5, 1.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=1, position={20, 10, 1200, 650}, y={"staUp.dpChiWatPumSet_local", "staUp.dpChiWatPum_local"}, range={0.0, 3600.0, 400000.0, 500000.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"Pa", "Pa"}); +createPlot(id=1, position={20, 10, 1200, 650}, y={"staUp.TChiWatSup", "staUp.TChiWatSupSet"}, range={0.0, 3600.0, 280.0, 300.0}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"K", "K"}); +createPlot(id=2, position={28, 700, 1200, 650}, y={"staUp1.y", "staUp1.uPla"}, range={0.0, 3600.0, -5.0, 5.0}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={28, 700, 1200, 650}, y={"staUp1.uOpe", "staUp1.uStaUp"}, range={0.0, 3600.0, 0.5, 1.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=2, position={28, 700, 1200, 650}, y={"staUp1.dpChiWatPumSet_local", "staUp1.dpChiWatPum_local"}, range={0.0, 3600.0, 400000.0, 500000.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"Pa", "Pa"}); +createPlot(id=2, position={28, 700, 1200, 650}, y={"staUp1.TChiWatSup", "staUp1.TChiWatSupSet"}, range={0.0, 3600.0, 280.0, 300.0}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"K", "K"}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_WSE.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_WSE.mos new file mode 100644 index 00000000000..0ec3bc5d1cc --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_WSE.mos @@ -0,0 +1,13 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Validation.SetpointController_WSE", method="Cvode", stopTime=14000, tolerance=1e-06, resultFile="SetpointController_WSE1"); + +createPlot(id=1, position={20, 10, 1500, 1000}, subPlot=1, y={"staSetCon.ySta"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=1, position={20, 10, 1500, 1000}, subPlot=2, y={"staSetCon.cap.yDes", "staSetCon.capReq.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 1500, 1000}, subPlot=3, y={"staSetCon.staUp.y", "staSetCon.staDow.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 1500, 1000}, subPlot=4, y={"staSetCon.yChiSet[1]", "staSetCon.yChiSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 1500, 1000}, subPlot=5, y={"staSetCon.chaPro"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); + +createPlot(id=2, position={30, 20, 1500, 1000}, subPlot=1, y={"staSetCon1.ySta"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=2, position={30, 20, 1500, 1000}, subPlot=2, y={"staSetCon1.cap.yDes", "staSetCon1.capReq.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={30, 20, 1500, 1000}, subPlot=3, y={"staSetCon1.staUp.y", "staSetCon1.staDow.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={30, 20, 1500, 1000}, subPlot=4, y={"staSetCon1.yChiSet[1]", "staSetCon1.yChiSet[2]", "staSetCon1.yChiSet[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {127,127,127}}); +createPlot(id=2, position={20, 10, 1500, 1000}, subPlot=5, y={"staSetCon1.chaPro"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_noWSE.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_noWSE.mos new file mode 100644 index 00000000000..9266b1c089b --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Staging/SetPoints/Validation/SetpointController_noWSE.mos @@ -0,0 +1,13 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Validation.SetpointController_noWSE", method="Cvode", stopTime=14000, tolerance=1e-06, resultFile="SetpointController_noWSE1"); + +createPlot(id=1, position={20, 10, 1500, 1000}, subPlot=1, y={"staSetCon.ySta"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); +createPlot(id=1, position={20, 10, 1500, 1000}, subPlot=2, y={"staSetCon.cap.yDes", "staSetCon.capReq.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 1500, 1000}, subPlot=3, y={"staSetCon.staUp.y", "staSetCon.staDow.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={20, 10, 1500, 1000}, subPlot=4, y={"staSetCon.yChiSet[1]", "staSetCon.yChiSet[2]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}, {127, 127, 127}}); +createPlot(id=1, position={20, 10, 1500, 1000}, subPlot=5, y={"staSetCon.chaPro"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); + +createPlot(id=2, position={20, 10, 1500, 1000}, subPlot=1, y={"staSetCon1.ySta"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{127, 127, 127}}); +createPlot(id=2, position={20, 10, 1500, 1000}, subPlot=2, y={"staSetCon1.cap.yDes", "staSetCon1.capReq.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={20, 10, 1500, 1000}, subPlot=3, y={"staSetCon1.staUp.y", "staSetCon1.staDow.y"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={20, 10, 1500, 1000}, subPlot=4, y={"staSetCon1.yChiSet[1]", "staSetCon1.yChiSet[2]", "staSetCon1.yChiSet[3]"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{28,108,200}, {238,46,47}, {127, 127, 127}}); +createPlot(id=2, position={20, 10, 1500, 1000}, subPlot=5, y={"staSetCon1.chaPro"}, range={0.0, 1800.0, -0.2, 0.12}, grid=true, colors={{238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/IntegratedOperation.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/IntegratedOperation.mos new file mode 100644 index 00000000000..c7efd1e87e9 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/IntegratedOperation.mos @@ -0,0 +1,9 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.Validation.IntegratedOperation", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="wseTowFanInt"); +createPlot(id=1, position={10, 10, 1206, 1186}, y={"intOpe.uChi[1]", "intOpe.uChi[2]", "intOpe.uWse"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 1206, 1186}, y={"intOpe.chiLoa[1]", "intOpe.chiMinCap[1]"}, range={0.0, 4000.0, -10000.0, 20000.0}, grid=true, subPlot=102, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"W", "W"}); +createPlot(id=1, position={10, 10, 1206, 1186}, y={"intOpe.ySpeSet"}, range={0.0, 4000.0, 0.0, 1.5}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={10, 10, 1206, 1186}, y={"intOpe.fanSpe.u3", "intOpe.fanSpe.u1"}, range={0.0, 4000.0, 0.0, 1.5}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 1206, 1186}, y={"intOpe.fanSpe.u2"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=105, colors={{28,108,200}}, timeUnit="s"); + + + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/WSEOperation.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/WSEOperation.mos new file mode 100644 index 00000000000..473384572d4 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Subsequences/Validation/WSEOperation.mos @@ -0,0 +1,7 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.Validation.WSEOperation", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="wseTowFan"); +createPlot(id=1, position={10, 10, 1238, 1219}, y={"wseOpe.uFanSpe"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={10, 10, 1238, 1219}, y={"wseOpe.TChiWatSup", "wseOpe.TChiWatSupSet"}, range={0.0, 4000.0, 6.0, 9.0}, grid=true, subPlot=102, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=1, position={10, 10, 1238, 1219}, y={"wseOpe.ySpeSet"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={10, 10, 1238, 1219}, y={"wseOpe.fanCycOff.y"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s"); + + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Validation/Controller.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Validation/Controller.mos new file mode 100644 index 00000000000..86157cb6fd2 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/EnabledWSE/Validation/Controller.mos @@ -0,0 +1,8 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Validation.Controller", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="wseTowCon"); +createPlot(id=2, position={10, 10, 800, 900}, y={"wseOpe.chiLoa[1]","wseOpe.chiLoa[2]"}, range={0.0, 3600, 0, 0.5}, grid=true, subPlot=1, colors={{28,108,200},{0,140,72}}); +createPlot(id=2, position={10, 10, 800, 900}, y={"wseOpe.uChi[1]","wseOpe.uChi[2]"}, range={0.0, 3600, 0, 0.5}, grid=true, subPlot=2, colors={{28,108,200},{0,140,72}}); +createPlot(id=2, position={10, 10, 800, 900}, y={"wseOpe.uWse"}, range={0.0, 3600, 0, 0.5}, grid=true, subPlot=3, colors={{28,108,200}}); +createPlot(id=3, position={820, 10, 800, 900}, y={"wseOpe.uFanSpe"}, range={0.0, 3600, 0, 0.5}, grid=true, subPlot=1, colors={{28,108,200}}); +createPlot(id=3, position={820, 10, 800, 900}, y={"wseOpe.TChiWatSup", "wseOpe.TChiWatSupSet"}, range={0.0, 3600, 0, 4}, grid=true, subPlot=2, colors={{28,108,200},{0,140,72}}); +createPlot(id=3, position={820, 10, 800, 900}, y={"wseOpe.ySpeSet"}, range={0.0, 3600, 0, 4}, grid=true, subPlot=3, colors={{28,108,200}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Coupled.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Coupled.mos new file mode 100644 index 00000000000..425a0f7f4f0 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Coupled.mos @@ -0,0 +1,7 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.Coupled", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="towSpeCouPla"); +createPlot(id=1, position={10, 10, 1768, 1528}, y={"couTowSpe.TConWatRetSet", "couTowSpe.TConWatRet"}, range={0.0, 3600.0, 30.0, 34.0}, grid=true, subPlot=101, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=1, position={10, 10, 1768, 1528}, y={"couTowSpe.uConWatPumSpe[1]", "couTowSpe.uConWatPumSpe[2]"}, range={0.0, 3600.0, -0.2, 0.6}, grid=true, subPlot=102, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=1, position={10, 10, 1768, 1528}, y={"couTowSpe.uMaxTowSpeSet[1]", "couTowSpe.uMaxTowSpeSet[2]", "couTowSpe.plrTowMaxSpe", "couTowSpe.CWRTSpd.y"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}, {0,140,72}, {238,46,47}, {217,67,180}}, timeUnit="s", displayUnits={"1", "1", "1", ""}); +createPlot(id=1, position={10, 10, 1768, 1528}, y={"couTowSpe.ySpeSet"}, range={0.0, 3600.0, -0.5, 1.0}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={10, 10, 1768, 1528}, y={"couTowSpe.uChi[1]", "couTowSpe.uChi[2]"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=105, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Enable.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Enable.mos new file mode 100644 index 00000000000..96df6554719 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Enable.mos @@ -0,0 +1,13 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.Enable", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="towFanEna"); +createPlot(id=1, position={10, 10, 724, 1182}, y={"enaTow.uMaxTowSpeSet[1]", "enaTow.uMaxTowSpeSet[2]", "enaTow.fanSpeMin"}, range={0.0, 4000.0, -0.1, 0.3}, grid=true, subPlot=101, colors={{28,108,200}, {0,140,72}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1", "1"}); +createPlot(id=1, position={10, 10, 724, 1182}, y={"enaTow.TTowSet", "enaTow.TTow"}, range={0.0, 4000.0, 31.0, 35.0}, grid=true, subPlot=102, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=1, position={10, 10, 724, 1182}, y={"enaTow.uTow[1]"}, range={0.0, 4000.0, -2.0, 2.0}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 724, 1182}, y={"enaTow.yTow"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={741, 14, 690, 1180}, y={"disTow.uMaxTowSpeSet[1]", "disTow.uMaxTowSpeSet[2]", "disTow.fanSpeMin"}, range={0.0, 4000.0, 0.08, 0.22}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"1", "1", "1"}); +createPlot(id=2, position={741, 14, 690, 1180}, y={"disTow.uTow[1]", "disTow.uTow[4]"}, range={0.0, 4000.0, 0.85, 1.15}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={741, 14, 690, 1180}, y={"disTow.yTow"}, range={0.0, 4000.0, -0.2, 1.2}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1444, 14, 867, 1182}, y={"disTow1.uFanSpe", "disTow1.fanSpeMin"}, range={0.0, 3600.0, 0.085, 0.115}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=3, position={1444, 14, 867, 1182}, y={"disTow1.TTow", "disTow1.TTowSet"}, range={0.0, 3600.0, 30.0, 33.0}, grid=true, subPlot=102, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=3, position={1444, 14, 867, 1182}, y={"disTow1.yTow"}, range={0.0, 3600.0, -0.2, 1.2}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s"); + + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/LessCoupled.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/LessCoupled.mos new file mode 100644 index 00000000000..ee1ae723709 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/LessCoupled.mos @@ -0,0 +1,7 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.LessCoupled", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="towSpeLesCouPla"); +createPlot(id=1, position={10, 10, 1200, 1301}, y={"lesCouTowSpe.TConWatRetSet", "lesCouTowSpe.TConWatRet", "lesCouTowSpe.TConWatSup"}, range={0.0, 3600.0, 25.0, 40.0}, grid=true, subPlot=101, colors={{28,108,200}, {0,140,72}, {238,46,47}}, timeUnit="s", displayUnits={"degC", "degC", "degC"}); +createPlot(id=1, position={10, 10, 1200, 1301}, y={"lesCouTowSpe.uConWatPumSpe[1]", "lesCouTowSpe.uConWatPumSpe[2]"}, range={0.0, 3600.0, -0.2, 0.6}, grid=true, subPlot=102, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=1, position={10, 10, 1200, 1301}, y={"lesCouTowSpe.TConWatSup", "lesCouTowSpe.TConWatSupSet"}, range={0.0, 3600.0, 26.0, 34.0}, grid=true, subPlot=103, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=1, position={10, 10, 1200, 1301}, y={"lesCouTowSpe.uMaxTowSpeSet[1]", "lesCouTowSpe.uMaxTowSpeSet[2]", "lesCouTowSpe.ySpeSet", "lesCouTowSpe.plrTowMaxSpe"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}, {0,140,72}, {238,46,47}, {217,67,180}}, timeUnit="s", displayUnits={"1", "1", "1", "1"}); +createPlot(id=1, position={10, 10, 1200, 1301}, y={"lesCouTowSpe.uChi[1]", "lesCouTowSpe.uChi[2]"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=105, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Setpoint.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Setpoint.mos new file mode 100644 index 00000000000..da8ba99d98f --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Subsequences/Validation/Setpoint.mos @@ -0,0 +1,6 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.Setpoint", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="conWatRetSet"); +createPlot(id=1, position={10, 10, 1200, 1194}, y={"conWatRetSet.uChi[1]", "conWatRetSet.uChi[2]", "conWatRetSet.uPla"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 1200, 1194}, y={"conWatRetSet.uOpeParLoaRat"}, range={0.0, 3600.0, -0.2, 0.8}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={10, 10, 1200, 1194}, y={"conWatRetSet.TChiWatSupSet"}, range={0.0, 3600.0, 5.5, 7.5}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s", displayUnits={"degC"}); +createPlot(id=1, position={10, 10, 1200, 1194}, y={"conWatRetSet.TConWatRetSet", "conWatRetSet.conWatRet.y", "conWatRetSet.TConWatRet_nominal[1]", "conWatRetSet.TConWatRet_nominal[2]"}, range={0.0, 3600.0, 0.0, 40.0}, grid=true, subPlot=104, colors={{28,108,200}, {0,140,72}, {238,46,47}, {217,67,180}}, timeUnit="s", displayUnits={"degC", "degC", "degC", "degC"}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Validation/Controller.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Validation/Controller.mos new file mode 100644 index 00000000000..0d0063a853e --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/ReturnWaterTemperature/Validation/Controller.mos @@ -0,0 +1,11 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Validation.Controller", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="towSpeConRet"); +createPlot(id=1, position={10, 10, 1000, 1270}, y={"towFanSpe.uChi[1]", "towFanSpe.uChi[2]", "towFanSpe.uWse", "towFanSpe.uTow[1]", "towFanSpe.uPla"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 1000, 1270}, y={"towFanSpe.TConWatRet", "towFanSpe.conWatRetSet.TConWatRetSet"}, range={0.0, 3600.0, 22.0, 32.0}, grid=true, subPlot=102, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=1, position={10, 10, 1000, 1270}, y={"towFanSpe.couTowSpe.ySpeSet", "towFanSpe.uTowSpeWSE", "towFanSpe.ySpeSet"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}, {0,140,72}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1", "1"}); +createPlot(id=1, position={10, 10, 1000, 1270}, y={"towFanSpe.couTowSpe.CWRTSpd.y", "towFanSpe.couTowSpe.uMaxTowSpeSet[1]", "towFanSpe.couTowSpe.plrTowMaxSpe"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"1", "1", "1"}); +createPlot(id=2, position={1020, 10, 1000, 1270}, y={"towFanSpe1.TConWatRet", "towFanSpe1.conWatRetSet.TConWatRetSet"}, range={0.0, 3600.0, 22.0, 32.0}, grid=true, subPlot=101, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=2, position={1020, 10, 1000, 1270}, y={"towFanSpe1.lesCouTowSpe.ySpeSet", "towFanSpe1.uTowSpeWSE", "towFanSpe1.ySpeSet"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {0,140,72}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1", "1"}); +createPlot(id=2, position={1020, 10, 1000, 1270}, y={"towFanSpe2.TConWatRet", "towFanSpe2.conWatRetSet.TConWatRetSet"}, range={0.0, 3600.0, 22.0, 32.0}, grid=true, subPlot=103, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=2, position={1020, 10, 1000, 1270}, y={"towFanSpe2.couTowSpe.ySpeSet", "towFanSpe2.ySpeSet"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); + + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Validation/Controller.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Validation/Controller.mos new file mode 100644 index 00000000000..cf53955aa39 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/FanSpeed/Validation/Controller.mos @@ -0,0 +1,10 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.Validation.Controller", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="towSpeCon"); +createPlot(id=1, position={10, 10, 968, 1194}, y={"cloCouWitWse.uChi[1]", "cloCouWitWse.uWse", "cloCouWitWse.uTow[1]","cloCouWitWse.uPla"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 968, 1194}, y={"cloCouWitWse.TConWatRet", "cloCouWitWse.fanSpeRetTem.conWatRetSet.TConWatRetSet"}, range={0.0, 3600.0, 22.0, 32.0}, grid=true, subPlot=102, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=1, position={10, 10, 968, 1194}, y={"cloCouWitWse.fanSpeRetTem.couTowSpe.ySpeSet", "cloCouWitWse.fanSpeRetTem.uTowSpeWSE","cloCouWitWse.ySpeSet"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}, {0,140,72}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1", "1"}); +createPlot(id=1, position={10, 10, 968, 1194}, y={"cloCouWitWse.uConWatPumSpe[1]", "cloCouWitWse.uConWatPumSpe[2]"}, range={0.0, 3600.0, -0.2, 0.6}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=2, position={995, 10, 948, 1194}, y={"lesCouWitWse.TConWatRet", "lesCouWitWse.fanSpeRetTem.conWatRetSet.TConWatRetSet"}, range={0.0, 3600.0, 22.0, 32.0}, grid=true, subPlot=101, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=2, position={995, 10, 948, 1194}, y={"lesCouWitWse.fanSpeRetTem.lesCouTowSpe.ySpeSet", "lesCouWitWse.fanSpeRetTem.uTowSpeWSE","lesCouWitWse.ySpeSet"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {0,140,72}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1", "1"}); +createPlot(id=2, position={995, 10, 948, 1194}, y={"cloCouNoWse.TConWatRet", "cloCouNoWse.fanSpeRetTem.conWatRetSet.TConWatRetSet"}, range={0.0, 3600.0, 22.0, 32.0}, grid=true, subPlot=103, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=2, position={995, 10, 948, 1194}, y={"cloCouNoWse.fanSpeRetTem.couTowSpe.ySpeSet", "cloCouNoWse.ySpeSet"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/CellsNumber.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/CellsNumber.mos new file mode 100644 index 00000000000..e3fbf7d2cee --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/CellsNumber.mos @@ -0,0 +1,7 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation.CellsNumber", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="enaTowCel"); +createPlot(id=1, position={10, 10, 1000, 1200}, y={"enaTowCel.uChiSta", "enaTowCel.uChiStaSet"}, range={0.0, 3600, 0, 0.5}, grid=true, subPlot=1, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, position={10, 10, 1000, 1200}, y={"enaTowCel.uTowStaCha", "enaTowCel.uWse"}, range={0.0, 3600, 0, 0.5}, grid=true, subPlot=2, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, position={10, 10, 1000, 1200}, y={"enaTowCel.yNumCel"}, range={0.0, 3600, 0, 0.5}, grid=true, subPlot=3, colors={{28,108,200}}); +createPlot(id=1, position={10, 10, 1000, 1200}, y={"enaTowCel.yLeaCel"}, range={0.0, 3600, 0, 0.5}, grid=true, subPlot=4, colors={{28,108,200}}); +createPlot(id=1, position={10, 10, 1000, 1200}, y={"enaTowCel.uConWatPumSpe[1]"}, range={0.0, 3600, 0, 0.5}, grid=true, subPlot=5, colors={{28,108,200}}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/ChangeCells.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/ChangeCells.mos new file mode 100644 index 00000000000..b41a5872230 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/ChangeCells.mos @@ -0,0 +1,5 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation.ChangeCells", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="ChangeCells"); +createPlot(id=1, position={1, 9, 1488, 1200}, y={"enaTowCel.uCelNum"}, range={0.0, 3600.0, 0.0, 4.0}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={1, 9, 1488, 1200}, y={"enaTowCel.uTowSta[1]", "enaTowCel.uTowSta[2]", "enaTowCel.uTowSta[3]", "enaTowCel.uTowSta[4]"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={1, 9, 1488, 1200}, y={"enaTowCel.yChaCel[1]", "enaTowCel.yChaCel[2]", "enaTowCel.yChaCel[3]", "enaTowCel.yChaCel[4]"}, range={0.0, 3600.0, -2.0, 2.0}, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={1, 9, 1488, 1200}, y={"enaTowCel.yTowSta[1]", "enaTowCel.yTowSta[2]", "enaTowCel.yTowSta[3]", "enaTowCel.yTowSta[4]"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/StageProcesses.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/StageProcesses.mos new file mode 100644 index 00000000000..033350da4a5 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Subsequences/Validation/StageProcesses.mos @@ -0,0 +1,11 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation.StageProcesses", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="enaTowCelPro"); +createPlot(id=1, position={10, 10, 1000, 1200}, y={"enaPro.uChaCel[1]", "enaPro.uChaCel[2]", "enaPro.uChaCel[3]", "enaPro.uChaCel[4]"}, range={0.0, 4000.0, -2.0, 2.0}, grid=true, subPlot=1, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); +createPlot(id=1, position={10, 10, 1000, 1200}, y={"enaPro.uIsoVal[1]", "enaPro.uIsoVal[2]", "enaPro.uIsoVal[3]", "enaPro.uIsoVal[4]"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}); +createPlot(id=1, position={10, 10, 1000, 1200}, y={"enaPro.yIsoVal[1]", "enaPro.yIsoVal[2]", "enaPro.yIsoVal[3]", "enaPro.yIsoVal[4]"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=3, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}); +createPlot(id=1, position={10, 10, 1000, 1200}, y={"enaPro.uTowSta[1]", "enaPro.uTowSta[2]", "enaPro.uTowSta[3]", "enaPro.uTowSta[4]"}, range={0.0, 4000.0, -2.0, 2.0}, grid=true, subPlot=4, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); +createPlot(id=1, position={10, 10, 1000, 1200}, y={"enaPro.yTowSta[1]", "enaPro.yTowSta[2]", "enaPro.yTowSta[3]", "enaPro.yTowSta[4]"}, range={0.0, 4000.0, -2.0, 2.0}, grid=true, subPlot=5, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); +createPlot(id=2, position={1020, 10, 1000, 1200}, y={"disPro.uChaCel[1]", "disPro.uChaCel[2]", "disPro.uChaCel[3]", "disPro.uChaCel[4]"}, range={0.0, 4000.0, -2.0, 2.0}, grid=true, subPlot=1, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); +createPlot(id=2, position={1020, 10, 1000, 1200}, y={"disPro.uIsoVal[1]", "disPro.uIsoVal[2]", "disPro.uIsoVal[3]", "disPro.uIsoVal[4]"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}); +createPlot(id=2, position={1020, 10, 1000, 1200}, y={"disPro.yIsoVal[1]", "disPro.yIsoVal[2]", "disPro.yIsoVal[3]", "disPro.yIsoVal[4]"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=3, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}); +createPlot(id=2, position={1020, 10, 1000, 1200}, y={"disPro.uTowSta[1]", "disPro.uTowSta[2]", "disPro.uTowSta[3]", "disPro.uTowSta[4]"}, range={0.0, 4000.0, -2.0, 2.0}, grid=true, subPlot=4, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); +createPlot(id=2, position={1020, 10, 1000, 1200}, y={"disPro.yTowSta[1]", "disPro.yTowSta[2]", "disPro.yTowSta[3]", "disPro.yTowSta[4]"}, range={0.0, 4000.0, -2.0, 2.0}, grid=true, subPlot=5, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Validation/Controller.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Validation/Controller.mos new file mode 100644 index 00000000000..28eb1df1771 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Staging/Validation/Controller.mos @@ -0,0 +1,5 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Validation.Controller", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="towStaCon"); +createPlot(id=1, position={10, 10, 900, 900}, y={"towSta.uChiSta", "towSta.uChiStaSet"}, range={0.0, 4000.0, -0.5, 2.5}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={10, 10, 900, 900}, y={"towSta.uTowStaCha", "towSta.uWse"}, range={0.0, 4000.0, -0.5, 2.5}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={920, 10, 900, 900}, y={"towSta.uIsoVal[1]", "towSta.uIsoVal[2]"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={920, 10, 900, 900}, y={"towSta.uTowSta[1]", "towSta.uTowSta[2]"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WaterLevel.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WaterLevel.mos new file mode 100644 index 00000000000..8afdf3afc08 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WaterLevel.mos @@ -0,0 +1,5 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation.WaterLevel", method="Cvode", stopTime=3600, tolerance=1e-06, resultFile="towWatLev"); +createPlot(id=1, position={10, 10, 1000, 1200}, y={"makUpWat.watLev","makUpWat.watLevMin", "makUpWat.watLevMax"}, range={0.0, 3600, 0, 0.5}, grid=true, subPlot=1, colors={{0,140,72},{0,140,72},{28,108,200}}); +createPlot(id=1, position={10, 10, 1000, 1200}, y={"makUpWat.yMakUp"}, range={0.0, 3600, 0, 0.5}, grid=true, subPlot=2, colors={{28,108,200}}); + + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithWSE.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithWSE.mos new file mode 100644 index 00000000000..41c2c827a96 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithWSE.mos @@ -0,0 +1,11 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation.WithWSE", method="Cvode", stopTime=3500, tolerance=1e-06, resultFile="towCon"); +createPlot(id=1, position={10, 10, 1000, 1183}, y={"towCon.uChi[1]", "towCon.uWse", "towCon.yLeaCel"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 1000, 1183}, y={"towCon.TChiWatSup", "towCon.TChiWatSupSet"}, range={0.0, 4000.0, 6.0, 9.0}, grid=true, subPlot=102, colors={{0,140,72}, {28,108,200}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=1, position={10, 10, 1000, 1183}, y={"towCon.yMakUp"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 1000, 1183}, y={"towCon.watLev", "towCon.watLevMin", "towCon.watLevMax"}, range={0.0, 4000.0, 0.0, 2.0}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 1000, 1183}, y={"towCon.uConWatPumSpe[1]", "towCon.uConWatPumSpe[2]"}, range={0.0, 4000.0, -0.5, 1.0}, grid=true, subPlot=105, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=2, position={1020, 10, 1000, 1183}, y={"towCon.uChiSta", "towCon.uChiStaSet"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={1020, 10, 1000, 1183}, y={"towCon.uTowSta[1]", "towCon.uTowSta[2]"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={1020, 10, 1000, 1183}, y={"towCon.ySpeSet[1]", "towCon.ySpeSet[2]"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=2, position={1020, 10, 1000, 1183}, y={"towCon.chiLoa[1]", "towCon.chiMinCap[1]"}, range={0.0, 4000.0, -5000.0, 15000.0}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"W", "W"}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithoutWSE.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithoutWSE.mos new file mode 100644 index 00000000000..14858c86dcd --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Towers/Validation/WithoutWSE.mos @@ -0,0 +1,9 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation.WithoutWSE", method="Cvode", stopTime=3500, tolerance=1e-06, resultFile="towCon"); +createPlot(id=1, position={10, 10, 1000, 1183}, y={"towCon.uChi[1]", "towCon.yLeaCel"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 1000, 1183}, y={"towCon.yMakUp"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 1000, 1183}, y={"towCon.watLev", "towCon.watLevMin", "towCon.watLevMax"}, range={0.0, 4000.0, 0.0, 2.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 1000, 1183}, y={"towCon.uConWatPumSpe[1]", "towCon.uConWatPumSpe[2]"}, range={0.0, 4000.0, -0.5, 1.0}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=2, position={1020, 10, 1000, 1183}, y={"towCon.uChiSta", "towCon.uChiStaSet"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={1020, 10, 1000, 1183}, y={"towCon.uTowSta[1]", "towCon.uTowSta[2]"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={1020, 10, 1000, 1183}, y={"towCon.ySpeSet[1]", "towCon.ySpeSet[2]"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}, {0,140,72}}, timeUnit="s", displayUnits={"1", "1"}); + diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Validation/Controller.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Validation/Controller.mos new file mode 100644 index 00000000000..be8e23ac03b --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/ChillerPlant/Validation/Controller.mos @@ -0,0 +1,18 @@ +simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Validation.Controller", method="Cvode", stopTime=10800, tolerance=1e-06, resultFile="plaCon"); +createPlot(id=1, position={3, 7, 774, 1368}, y={"chiPlaCon.wseSta.uPla", "chiPlaCon.wseSta.y", "chiPlaCon.wseSta.yPumOn"}, range={0.0, 180.0, -0.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="min"); +createPlot(id=1, position={3, 7, 774, 1368}, y={"chiPlaCon.wseSta.uIni", "chiPlaCon.wseSta.uChiSta"}, range={0.0, 180.0, -1.0, 3.0}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="min"); +createPlot(id=1, position={3, 7, 774, 1368}, y={"chiPlaCon.wseSta.yConWatIsoVal", "chiPlaCon.wseSta.yPumSpe"}, range={0.0, 180.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="min", displayUnits={"1", "1"}); +createPlot(id=1, position={3, 7, 774, 1368}, y={"chiPlaCon.staSetCon.yUp"}, range={0.0, 180.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}}, timeUnit="min"); +createPlot(id=1, position={3, 7, 774, 1368}, y={"chiPlaCon.staSetCon.yChiSet[1]", "chiPlaCon.staSetCon.yChiSet[2]"}, range={0.0, 180.0, -0.5, 1.5}, grid=true, subPlot=105, colors={{28,108,200}, {28,108,200}}, timeUnit="min"); +createPlot(id=2, position={793, 9, 780, 1366}, y={"chiPlaCon.upProCon.yStaPro", "chiPlaCon.upProCon.yTowStaUp", "chiPlaCon.upProCon.yLeaPum"}, range={0.0, 180.0, -1.0, 2.0}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="min"); +createPlot(id=2, position={793, 9, 780, 1366}, y={"chiPlaCon.upProCon.yDesConWatPumSpe"}, range={0.0, 180.0, -0.5, 1.0}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="min", displayUnits={"1"}); +createPlot(id=2, position={793, 9, 780, 1366}, y={"chiPlaCon.upProCon.yConWatPumNum"}, range={0.0, 180.0, -2.0, 4.0}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="min"); +createPlot(id=2, position={793, 9, 780, 1366}, y={"chiPlaCon.upProCon.yChiHeaCon[1]", "chiPlaCon.upProCon.yChiHeaCon[2]"}, range={0.0, 180.0, -1.0, 2.0}, grid=true, subPlot=104, colors={{28,108,200}, {28,108,200}}, timeUnit="min"); +createPlot(id=2, position={793, 9, 780, 1366}, y={"chiPlaCon.upProCon.yChiWatIsoVal[1]", "chiPlaCon.upProCon.yChiWatIsoVal[2]"}, range={0.0, 180.0, -1.0, 2.0}, grid=true, subPlot=105, colors={{28,108,200}, {238,46,47}}, timeUnit="min", displayUnits={"1", "1"}); +createPlot(id=2, position={793, 9, 780, 1366}, y={"chiPlaCon.upProCon.yChi[1]", "chiPlaCon.upProCon.yChi[2]"}, range={0.0, 180.0, -1.0, 2.0}, grid=true, subPlot=106, colors={{28,108,200}, {28,108,200}}, timeUnit="min"); +createPlot(id=3, position={1581, 7, 838, 1370}, y={"chiPlaCon.chiWatPumCon.yChiWatPum[1]", "chiPlaCon.chiWatPumCon.yChiWatPum[2]"}, range={0.0, 180.0, -1.0, 2.0}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}}, timeUnit="min"); +createPlot(id=3, position={1581, 7, 838, 1370}, y={"chiPlaCon.chiWatPumCon.yPumSpe"}, range={0.0, 180.0, -1.0, 2.0}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="min", displayUnits={"1"}); +createPlot(id=3, position={1581, 7, 838, 1370}, y={"chiPlaCon.towCon.yLeaCel"}, range={0.0, 180.0, -1.0, 2.0}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="min"); +createPlot(id=3, position={1581, 7, 838, 1370}, y={"chiPlaCon.towCon.yIsoVal[1]", "chiPlaCon.towCon.yIsoVal[2]"}, range={0.0, 180.0, -1.0, 2.0}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="min", displayUnits={"1", "1"}); +createPlot(id=3, position={1581, 7, 838, 1370}, y={"chiPlaCon.towCon.yTowSta[1]", "chiPlaCon.towCon.yTowSta[2]"}, range={0.0, 180.0, -1.0, 2.0}, grid=true, subPlot=105, colors={{28,108,200}, {28,108,200}}, timeUnit="min"); +createPlot(id=3, position={1581, 7, 838, 1370}, y={"chiPlaCon.towCon.ySpeSet[1]", "chiPlaCon.towCon.ySpeSet[2]"}, range={0.0, 180.0, -1.0, 2.0}, grid=true, subPlot=106, colors={{28,108,200}, {238,46,47}}, timeUnit="min", displayUnits={"1", "1"}); diff --git a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/BatteryControl.mos b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/BatteryControl.mos similarity index 75% rename from Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/BatteryControl.mos rename to Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/BatteryControl.mos index 8001f5ee716..2964abf53a7 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/BatteryControl.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/BatteryControl.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.BatteryControl", stopTime=604800, method="CVode", tolerance=1e-6, resultFile="BatteryControl"); +simulateModel("Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.BatteryControl", stopTime=604800, method="CVode", tolerance=1e-6, resultFile="BatteryControl"); createPlot(id=1, position={95, 13, 482, 529}, y={"con.SOC"}, range={0.0, 650000.0, -0.5, 1.5}, grid=true, filename="BatteryControl.mat", leftTitleType=1, bottomTitleType=1, colors={{0,0,255}}); diff --git a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSetPointControl.mos b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSetPointControl.mos similarity index 59% rename from Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSetPointControl.mos rename to Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSetPointControl.mos index cba9e7df0f9..bf74572f8bd 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSetPointControl.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSetPointControl.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.ChillerSetPointControl", stopTime=86400, method="CVode", tolerance=1e-6, resultFile="ChillerSetPointControl"); +simulateModel("Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.ChillerSetPointControl", stopTime=86400, method="CVode", tolerance=1e-6, resultFile="ChillerSetPointControl"); createPlot(id = 1, position = {10, 30, 719, 536}, y = {"chi.TSet", "TSup.T", "TRet.T"}, diff --git a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSwitch.mos b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSwitch.mos similarity index 74% rename from Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSwitch.mos rename to Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSwitch.mos index bd9778f0c1e..7fa114f0514 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/ChillerSwitch.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/ChillerSwitch.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.ChillerSwitch", stopTime=86400, method="CVode", tolerance=1e-6, resultFile="ChillerSwitch"); +simulateModel("Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.ChillerSwitch", stopTime=86400, method="CVode", tolerance=1e-6, resultFile="ChillerSwitch"); createPlot(id = 1, position = {10, 30, 719, 536}, y = {"chiSwi.TSet", "chiSwi.chiCHWST"}, diff --git a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/KMinusU.mos b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/KMinusU.mos similarity index 61% rename from Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/KMinusU.mos rename to Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/KMinusU.mos index 64a24d00192..f8da42e3ca2 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/KMinusU.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/KMinusU.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.KMinusU", stopTime=3600, method="CVode", tolerance=1e-6, resultFile="KMinusU"); +simulateModel("Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.KMinusU", stopTime=3600, method="CVode", tolerance=1e-6, resultFile="KMinusU"); createPlot(id = 1, position = {10, 30, 719, 536}, y = {"kMinU.u", "kMinU.y"}, diff --git a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mos b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mos similarity index 73% rename from Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mos rename to Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mos index 9763284eddd..63744ff8991 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/LinearPiecewiseTwo.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.LinearPiecewiseTwo", stopTime=86400, method="CVode", tolerance=1e-6, resultFile="LinearPiecewiseTwo"); +simulateModel("Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.LinearPiecewiseTwo", stopTime=86400, method="CVode", tolerance=1e-6, resultFile="LinearPiecewiseTwo"); createPlot(id = 1, position = {10, 30, 719, 536}, y = {"linPieTwo.u"}, diff --git a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/RequestCounter.mos b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/RequestCounter.mos similarity index 74% rename from Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/RequestCounter.mos rename to Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/RequestCounter.mos index 17a7ffc90f4..d47841e0bf6 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/RequestCounter.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/RequestCounter.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.RequestCounter", stopTime=600, method="CVode", tolerance=1e-6, resultFile="RequestCounter"); +simulateModel("Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.RequestCounter", stopTime=600, method="CVode", tolerance=1e-6, resultFile="RequestCounter"); createPlot(id = 1, position = {10, 30, 719, 536}, y = {"act1.y", "act2.y", "act3.y"}, diff --git a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/TrimAndRespond.mos b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/TrimAndRespond.mos similarity index 75% rename from Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/TrimAndRespond.mos rename to Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/TrimAndRespond.mos index cd51fcb7625..24b65d3974c 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/TrimAndRespond.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/TrimAndRespond.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.TrimAndRespond", stopTime=3600, method="CVode", tolerance=1e-6, resultFile="TrimAndRespond"); +simulateModel("Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.TrimAndRespond", stopTime=3600, method="CVode", tolerance=1e-6, resultFile="TrimAndRespond"); createPlot(id = 1, position = {10, 30, 719, 536}, y = {"act1.y", "act2.y", "act3.y"}, diff --git a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/WSEControl.mos b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/WSEControl.mos similarity index 76% rename from Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/WSEControl.mos rename to Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/WSEControl.mos index 9a775ee6395..1b29babc167 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/BaseClasses/Controls/Examples/WSEControl.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/BaseClasses/Controls/Examples/WSEControl.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.WSEControl", stopTime=3600, method="CVode", tolerance=1e-6, resultFile="WSEControl"); +simulateModel("Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.WSEControl", stopTime=3600, method="CVode", tolerance=1e-6, resultFile="WSEControl"); createPlot(id = 1, position = {10, 30, 719, 536}, y = {"wseCon.wseCWST", "wseCon.wseCHWST", "wseCon.TWetBul"}, diff --git a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/DataCenterContinuousTimeControl.mos b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/ContinuousTimeControl.mos similarity index 77% rename from Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/DataCenterContinuousTimeControl.mos rename to Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/ContinuousTimeControl.mos index d7cd23923eb..2c33f2d43b3 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/DataCenterContinuousTimeControl.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/ContinuousTimeControl.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Examples.ChillerPlant.DataCenterContinuousTimeControl", startTime=13046400, stopTime=13651200, method="Cvode", tolerance=1e-6, resultFile="DataCenterContinuousTimeControl"); +simulateModel("Buildings.Examples.ChillerPlants.DataCenter.ContinuousTimeControl", startTime=13046400, stopTime=13651200, method="Cvode", tolerance=1e-6, resultFile="DataCenterContinuousTimeControl"); createPlot(id=1, position={15, 15, 780, 797}, y={"TAirSup.T", "wseCon.TWetBul", "TCHWEntChi.T", "TCWLeaTow.T"}, range={13000000.0, 13700000.0, 0.0, 50.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={15, 15, 780, 797}, y={"wseCon.y1", "chiCon.y"}, range={13000000.0, 13700000.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s"); createPlot(id=1, position={15, 15, 780, 797}, y={"EHVAC.y"}, range={13000000.0, 13700000.0, -20000000000.0, 60000000000.0}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s"); diff --git a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/DataCenterDiscreteTimeControl.mos b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/DiscreteTimeControl.mos similarity index 77% rename from Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/DataCenterDiscreteTimeControl.mos rename to Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/DiscreteTimeControl.mos index d7474d44523..2bbfd2b8da1 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/DataCenterDiscreteTimeControl.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/DiscreteTimeControl.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Examples.ChillerPlant.DataCenterDiscreteTimeControl", startTime=13046400, stopTime=13651200, method="Cvode", tolerance=1e-6, resultFile="DataCenterDiscreteTimeControl"); +simulateModel("Buildings.Examples.ChillerPlants.DataCenter.DiscreteTimeControl", startTime=13046400, stopTime=13651200, method="Cvode", tolerance=1e-6, resultFile="DataCenterDiscreteTimeControl"); createPlot(id=1, position={15, 15, 780, 797}, y={"TAirSup.T", "wseCon.TWetBul", "TCHWEntChi.T", "TCWLeaTow.T"}, range={13000000.0, 13700000.0, 0.0, 50.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={15, 15, 780, 797}, y={"wseCon.y1", "chiCon.y"}, range={13000000.0, 13700000.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s"); createPlot(id=1, position={15, 15, 780, 797}, y={"EHVAC.y"}, range={13000000.0, 13700000.0, -20000000000.0, 60000000000.0}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s"); diff --git a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/DataCenterRenewables.mos b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/Renewables.mos similarity index 91% rename from Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/DataCenterRenewables.mos rename to Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/Renewables.mos index 0bb1adf97c8..0e52edbd1fe 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlant/DataCenterRenewables.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/DataCenter/Renewables.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Examples.ChillerPlant.DataCenterRenewables", stopTime=604800, method="Cvode", tolerance=1e-6, resultFile="DataCenterRenewables"); +simulateModel("Buildings.Examples.ChillerPlants.DataCenter.Renewables", stopTime=604800, method="Cvode", tolerance=1e-6, resultFile="DataCenterRenewables"); createPlot(id = 14, position = {17, 1, 407, 281}, y = {"winTur.vWin"}, diff --git a/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/Guideline36/ClosedLoop.mos b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/Guideline36/ClosedLoop.mos new file mode 100644 index 00000000000..b455eb78f93 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Examples/ChillerPlants/Guideline36/ClosedLoop.mos @@ -0,0 +1,15 @@ +simulateModel("Buildings.Examples.ChillerPlants.Guideline36.ClosedLoop", startTime=15638400, stopTime=15897600, method="Cvode", tolerance=1e-6, resultFile="chiPlaClo"); +createPlot(id=1, position={15, 11, 1088, 1313}, y={"chiPla.chi1.m1_flow", "chiPla.chi1.m2_flow"}, range={15620000.0, 15900000.0, -20.0, 20.0}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"kg/s", "kg/s"}); +createPlot(id=1, position={15, 11, 1088, 1313}, y={"chiPla.chi1.on"}, range={15620000.0, 15900000.0, -1.0, 2.0}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 11, 1088, 1313}, y={"chiPla.chi1.TSet"}, range={15620000.0, 15900000.0, 10.0, 20.0}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s", displayUnits={"degC"}); +createPlot(id=1, position={15, 11, 1088, 1313}, y={"chiPla.chi2.m1_flow", "chiPla.chi2.m2_flow"}, range={15620000.0, 15900000.0, -0.0002, 0.0004000000000000001}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"kg/s", "kg/s"}); +createPlot(id=1, position={15, 11, 1088, 1313}, y={"chiPla.chi2.on"}, range={15620000.0, 15900000.0, -2.0, 2.0}, grid=true, subPlot=105, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 11, 1088, 1313}, y={"chiPla.chi2.TSet"}, range={15620000.0, 15900000.0, 10.0, 20.0}, grid=true, subPlot=106, colors={{28,108,200}}, timeUnit="s", displayUnits={"degC"}); +createPlot(id=1, position={15, 11, 1088, 1313}, y={"chiPla.chiWatSupTem.T", "chiPla.chiWatRet.T"}, range={15620000.0, 15900000.0, 15.0, 25.0}, grid=true, subPlot=107, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"degC", "degC"}); +createPlot(id=2, position={1105, 13, 1130, 1299}, y={"chiPla.chwIsoVal1.y", "chiPla.chwIsoVal2.y"}, range={15620000.0, 15900000.0, -1.0, 2.0}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}}, timeUnit="s"); +createPlot(id=2, position={1105, 13, 1130, 1299}, y={"chiPla.chiWatPum1.y", "chiPla.chiWatPum2.y"}, range={15620000.0, 15900000.0, -0.5, 1.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=2, position={1105, 13, 1130, 1299}, y={"chiPla.cwIsoVal1.y", "chiPla.cwIsoVal2.y"}, range={15620000.0, 15900000.0, -1.0, 2.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="s"); +createPlot(id=2, position={1105, 13, 1130, 1299}, y={"chiPla.conWatPum1.y", "chiPla.conWatPum2.y"}, range={15620000.0, 15900000.0, -1.0, 1.0}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=2, position={1105, 13, 1130, 1299}, y={"chiPla.cooTow1.y", "chiPla.cooTow2.y"}, range={15620000.0, 15900000.0, -2.0, 2.0}, grid=true, subPlot=105, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=2, position={1105, 13, 1130, 1299}, y={"chiPla.conWatSupTem.T", "chiPla.conWatRetTem.T"}, range={15620000.0, 15900000.0, 10.0, 30.0}, grid=true, subPlot=106, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"degC", "degC"}); + diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Components/Chillers/Validation/Compression.mos b/Buildings/Resources/Scripts/Dymola/Templates/Components/Chillers/Validation/Compression.mos index d5bcf92197d..028bab48855 100644 --- a/Buildings/Resources/Scripts/Dymola/Templates/Components/Chillers/Validation/Compression.mos +++ b/Buildings/Resources/Scripts/Dymola/Templates/Components/Chillers/Validation/Compression.mos @@ -14,7 +14,7 @@ createPlot( createPlot( id=1, subPlot=2, - y={"chiAirCoo.bus.reqChiWat", "chiWatCoo.bus.reqChiWat", "chiWatCoo.bus.reqConWat"}, + y={"chiAirCoo.bus.y1ReqFloChiWat", "chiWatCoo.bus.y1ReqFloChiWat", "chiWatCoo.bus.y1ReqFloConWat"}, autoscale=true, grid=true ); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/BoilerHotWater.mos b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/BoilerHotWater.mos new file mode 100644 index 00000000000..a1410ac1175 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/BoilerHotWater.mos @@ -0,0 +1,21 @@ +simulateModel("Buildings.Templates.Components.Validation.BoilerHotWater", + method="cvode", + tolerance=1e-6, + stopTime=2000.0, + resultFile="BoilerHotWater"); +createPlot(id=1, + position={19, 10, 474, 390}, + y={"THeaWatRet.y", "THeaWatSupSet.y", "boiTab.bus.THeaWatSup", "boiPol.bus.THeaWatSup"}, + subPlot=1, + autoscale=true, + grid=true); +createPlot(id=1, + y={"boiTab.boi.Q_flow_nominal", "boiPol.boi.Q_flow_nominal", "boiTab.boi.QWat_flow", "boiPol.boi.QWat_flow"}, + subPlot=2, + autoscale=true, + grid=true); +createPlot(id=1, + y={"boiTab.boi.m_flow_nominal", "boiPol.boi.m_flow_nominal", "boiTab.boi.m_flow", "boiPol.boi.m_flow"}, + subPlot=3, + autoscale=true, + grid=true); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/BoilerHotWaterRecord.mos b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/BoilerHotWaterRecord.mos new file mode 100644 index 00000000000..a573c2f23b1 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/BoilerHotWaterRecord.mos @@ -0,0 +1,16 @@ +simulateModel("Buildings.Templates.Components.Validation.BoilerHotWaterRecord", + method="cvode", + tolerance=1e-6, + stopTime=1.0, + resultFile="BoilerHotWaterRecord"); +createPlot(id=1, + position={19, 10, 474, 390}, + y={"per.Q_flow_nominal", "datBoiTab.per.Q_flow_nominal", "datBoiTabRed.per.Q_flow_nominal", "datBoiTabLoc.per.Q_flow_nominal"}, + subPlot=1, + autoscale=true, + grid=true); +createPlot(id=1, + y={"per.effCur[4, 11]", "datBoiTab.per.effCur[4, 11]", "datBoiTabRed.per.effCur[4, 11]", "datBoiTabLoc.per.effCur[4, 11]"}, + subPlot=2, + autoscale=true, + grid=true); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupPolynomial.mos b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupPolynomial.mos new file mode 100644 index 00000000000..9cd9ca35493 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupPolynomial.mos @@ -0,0 +1,21 @@ +simulateModel("Buildings.Templates.Plants.Boilers.HotWater.Components.Validation.BoilerGroupPolynomial", + method="cvode", + tolerance=1e-6, + stopTime=2000.0, + resultFile="BoilerGroupPolynomial"); +createPlot(id=1, + position={19, 10, 508, 564}, + y={"THeaWatRet.T", "THeaWatSup.T", "ctl.THeaWatConSupSet.y"}, + subPlot=101, + autoscale=true, + grid=true); +createPlot(id=1, + y={"busPla.boiCon[1].y1", "busPla.boiCon[1].y_actual"}, + subPlot=102, + autoscale=true, + grid=true); +createPlot(id=1, + y={"mHeaWat_flow_nominal", "mHeaWat_flow.m_flow"}, + subPlot=103, + autoscale=true, + grid=true); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupTable.mos b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupTable.mos new file mode 100644 index 00000000000..879fdcddac2 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupTable.mos @@ -0,0 +1,21 @@ +simulateModel("Buildings.Templates.Plants.Boilers.HotWater.Components.Validation.BoilerGroupTable", + method="cvode", + tolerance=1e-6, + stopTime=2000.0, + resultFile="BoilerGroupTable"); +createPlot(id=1, + position={19, 10, 508, 564}, + y={"THeaWatRet.T", "THeaWatSup.T", "ctl.THeaWatConSupSet.y"}, + subPlot=101, + autoscale=true, + grid=true); +createPlot(id=1, + y={"busPla.boiCon[1].y1", "busPla.boiCon[1].y_actual"}, + subPlot=102, + autoscale=true, + grid=true); +createPlot(id=1, + y={"mHeaWat_flow_nominal", "mHeaWat_flow.m_flow"}, + subPlot=103, + autoscale=true, + grid=true); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillerGroupAirCooled.mos b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillerGroupAirCooled.mos new file mode 100644 index 00000000000..462ee719049 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillerGroupAirCooled.mos @@ -0,0 +1,22 @@ + +simulateModel("Buildings.Templates.Plants.Chillers.Components.Validation.ChillerGroupAirCooled", + method="cvode", + tolerance=1e-6, + stopTime=2000.0, + resultFile="ChillerGroupAirCooled"); +createPlot(id=1, + position={5, 5, 400, 600}, + y={"TChiWatPriRet.T", "TChiWatPriSup.T", "ctl.bus.chi[1].TSupSet"}, + subPlot=101, + autoscale=true, + grid=true); +createPlot(id=1, + y={"ctl.bus.chi[1].y1","ctl.bus.chi[2].y1","ctl.bus.chi[3].y1"}, + subPlot=102, + autoscale=true, + grid=true); +createPlot(id=1, + y={"chi.chi[1].chi.PLR2", "chi.chi[2].chi.PLR2", "chi.chi[3].chi.PLR2"}, + subPlot=103, + autoscale=true, + grid=true); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillerGroupWaterCooled.mos b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillerGroupWaterCooled.mos new file mode 100644 index 00000000000..2b7d5544e76 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillerGroupWaterCooled.mos @@ -0,0 +1,22 @@ + +simulateModel("Buildings.Templates.Plants.Chillers.Components.Validation.ChillerGroupWaterCooled", + method="cvode", + tolerance=1e-6, + stopTime=2000.0, + resultFile="ChillerGroupWaterCooled"); +createPlot(id=1, + position={5, 5, 400, 600}, + y={"TChiWatPriRet.T", "TChiWatPriSup.T", "ctl.bus.chi[1].TSupSet"}, + subPlot=101, + autoscale=true, + grid=true); +createPlot(id=1, + y={"ctl.bus.chi[1].y1","ctl.bus.chi[2].y1","ctl.bus.chi[3].y1"}, + subPlot=102, + autoscale=true, + grid=true); +createPlot(id=1, + y={"chi.chi[1].chi.PLR2", "chi.chi[2].chi.PLR2", "chi.chi[3].chi.PLR2"}, + subPlot=103, + autoscale=true, + grid=true); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsParallel.mos b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsParallel.mos new file mode 100644 index 00000000000..e6ec077d053 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsParallel.mos @@ -0,0 +1,33 @@ + +simulateModel("Buildings.Templates.Plants.Chillers.Components.Validation.ChillersToPrimaryPumpsParallel", + method="cvode", + tolerance=1e-6, + stopTime=2000.0, + resultFile="ChillersToPrimaryPumpsParallel"); +createPlot(id=1, + position={5, 5, 400, 400}, + y={"mChiWatPri_flow.m_flow", "mChiWatChi_flow[1].m_flow", "mChiWatChi_flow[2].m_flow", "mChiWatChi_flow[3].m_flow"}, + subPlot=1, + autoscale=true, + grid=true); +createPlot(id=1, + y={"TChiWatChiEnt[1].T", "TChiWatChiEnt[2].T", "TChiWatChiEnt[3].T"}, + subPlot=2, + autoscale=true, + grid=true); +createPlot(id=2, + position={415, 5, 400, 600}, + y={"mChiWatPri_flow.m_flow", "mChiWatEco_flow.m_flow", "mChiWatChi_flow1[1].m_flow", "mChiWatChi_flow1[2].m_flow", "mChiWatChi_flow1[3].m_flow"}, + subPlot=1, + autoscale=true, + grid=true); +createPlot(id=2, + y={"TChiWatEcoEnt.T", "TChiWatChiEnt1[1].T", "TChiWatChiEnt1[2].T", "TChiWatChiEnt1[3].T"}, + subPlot=2, + autoscale=true, + grid=true); +createPlot(id=2, + y={"busPla.valChiWatChiByp.y1_actual"}, + subPlot=3, + autoscale=true, + grid=true); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsSeries.mos b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsSeries.mos new file mode 100644 index 00000000000..2cad093db88 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsSeries.mos @@ -0,0 +1,49 @@ + +simulateModel("Buildings.Templates.Plants.Chillers.Components.Validation.ChillersToPrimaryPumpsSeries", + method="cvode", + tolerance=1e-6, + stopTime=2000.0, + resultFile="ChillersToPrimaryPumpsSeries"); +createPlot(id=1, + position={5, 5, 400, 400}, + y={"mChiWatPri_flow1.m_flow", "mChiWatChi_flow1[1].m_flow", "mChiWatChi_flow1[2].m_flow", "mChiWatChi_flow1[3].m_flow"}, + subPlot=1, + autoscale=true, + grid=true); +createPlot(id=1, + y={"TChiWatChiEnt1[1].T", "TChiWatChiEnt1[2].T", "TChiWatChiEnt1[3].T"}, + subPlot=2, + autoscale=true, + grid=true); +createPlot(id=2, + position={415, 5, 400, 600}, + y={"mChiWatPri_flow2.m_flow", "mChiWatEco_flow.m_flow", "mChiWatChi_flow2[1].m_flow", "mChiWatChi_flow2[2].m_flow", "mChiWatChi_flow2[3].m_flow"}, + subPlot=1, + autoscale=true, + grid=true); +createPlot(id=2, + y={"rou2.bus.TChiWatEcoBef", "rou2.bus.TChiWatEcoAft", "TChiWatChiEnt2[1].T", "TChiWatChiEnt2[2].T", "TChiWatChiEnt2[3].T"}, + subPlot=2, + autoscale=true, + grid=true); +createPlot(id=2, + y={"valChiWatEcoByp1.bus.y_actual"}, + subPlot=3, + autoscale=true, + grid=true); +createPlot(id=3, + position={825, 5, 400, 600}, + y={"mChiWatPri_flow3.m_flow", "mChiWatEco_flow1.m_flow", "mChiWatChi_flow3[1].m_flow", "mChiWatChi_flow3[2].m_flow", "mChiWatChi_flow3[3].m_flow"}, + subPlot=1, + autoscale=true, + grid=true); +createPlot(id=3, + y={"rou3.bus.TChiWatEcoBef", "rou3.bus.TChiWatEcoAft", "TChiWatChiEnt3[1].T", "TChiWatChiEnt3[2].T", "TChiWatChiEnt3[3].T"}, + subPlot=2, + autoscale=true, + grid=true); +createPlot(id=3, + y={"pumEco.pum.y_actual"}, + subPlot=3, + autoscale=true, + grid=true); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/CoolerGroupCoolingTowerOpen.mos b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/CoolerGroupCoolingTowerOpen.mos new file mode 100644 index 00000000000..23f4a6e43ff --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/CoolerGroupCoolingTowerOpen.mos @@ -0,0 +1,16 @@ + +simulateModel("Buildings.Templates.Plants.Chillers.Components.Validation.CoolerGroupCoolingTowerOpen", + method="cvode", + tolerance=1e-6, + stopTime=2000.0, + resultFile="CoolerGroupCoolingTowerOpen"); +createPlot(id=1, + position={5, 5, 400, 300}, + y={"coo.coo[2].sta_a.T", "coo.coo[2].sta_b.T", "coo.coo[1].sta_a.T", "coo.coo[1].sta_b.T"}, + autoscale=true, + grid=true); +createPlot(id=2, + position={415, 5, 400, 300}, + y={"coo1.coo[2].sta_a.T", "coo1.coo[2].sta_b.T", "coo1.coo[1].sta_a.T", "coo1.coo[1].sta_b.T"}, + autoscale=true, + grid=true); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Validation/AirCooledOpenLoop.mos b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Validation/AirCooledOpenLoop.mos new file mode 100644 index 00000000000..40e99300f93 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Validation/AirCooledOpenLoop.mos @@ -0,0 +1,29 @@ + +simulateModel("Buildings.Templates.Plants.Chillers.Validation.AirCooledOpenLoop", + method="cvode", + tolerance=1e-6, + startTime=19612800, + stopTime=19615000, + resultFile="AirCooledOpenLoop"); +createPlot(id=1, + position={21, 14, 865, 898}, + y={"TChiWatRet.T", "CHI.bus.TChiWatPlaRet", "CHI.bus.TChiWatPriSup", "CHI.bus.TChiWatSupSet", "CHI.bus.TChiWatChiRet[1]", "CHI.bus.TChiWatChiSup[1]"}, + subPlot=101, + autoscale=true, + grid=true); +createPlot(id=1, + y={"CHI.bus.y1Chi[1]"}, + subPlot=102, + autoscale=true, + grid=true); +createPlot(id=1, + y={"CHI.chi.chi[1].chi.PLR1"}, + subPlot=103, + autoscale=true, + grid=true); +createPlot(id=2, + position={939, 56, 865, 898}, + y={"CHI.bus.VChiWatPri_flow", "VChiWat_flow.V_flow"}, + subPlot=101, + autoscale=true, + grid=true); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Validation/WaterCooled.mos b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Validation/WaterCooled.mos new file mode 100644 index 00000000000..85a339521e3 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Validation/WaterCooled.mos @@ -0,0 +1,112 @@ +simulateModel("Buildings.Templates.Plants.Chillers.Validation.WaterCooled", + method="cvode", + tolerance=1e-6, + startTime=0.0, + stopTime=86400.0, + resultFile="WaterCooledChillerPlant"); +createPlot( + id=1, + position={5, 5, 300, 500}, + y={"pla.ctl.ctl.staSetCon.capReq.y", "pla.cap_nominal"}, + autoscale=true, + grid=true, + timeUnit="h" +); +createPlot( + id=1, + subPlot=2, + y={"pla.ctl.ctl.TOut", "pla.ctl.dat.TOutChiWatLck"}, + autoscale=true, + grid=true, + timeUnit="h" +); +createPlot( + id=2, + position={310, 5, 300, 500}, + y={"pla.ctl.reqPlaChiWat.y", "pla.ctl.ctl.plaEna.yPla"}, + autoscale=true, + grid=true, + timeUnit="h" +); +createPlot( + id=2, + subPlot=2, + y={"pla.ctl.ctl.staSetCon.ySta"}, + autoscale=true, + grid=true, + timeUnit="h" +); +createPlot( + id=3, + position={615, 5, 300, 500}, + subPlot=1, + y={"pla.bus.chi[1].y1", "pla.bus.chi[2].y1"}, + autoscale=true, + grid=true, + timeUnit="h" +); +createPlot( + id=4, + position={920, 5, 300, 600}, + subPlot=1, + y={"pla.bus.pumChiWatPri.y1[1]", "pla.bus.pumChiWatPri.y1[2]"}, + autoscale=true, + grid=true, + timeUnit="h" +); +createPlot( + id=4, + subPlot=2, + y={"pla.bus.pumChiWatPri.y"}, + autoscale=true, + grid=true, + timeUnit="h" +); +createPlot( + id=5, + position={1225, 5, 300, 600}, + subPlot=1, + y={"pla.ctl.reqResChiWat.y"}, + autoscale=true, + grid=true, + timeUnit="h" +); +createPlot( + id=5, + subPlot=2, + y={"pla.bus.dpChiWatRem[1]", "pla.ctl.ctl.chiWatPumCon.dpChiWatSet_remote[1]"}, + autoscale=true, + grid=true, + timeUnit="h" +); +createPlot( + id=5, + subPlot=3, + y={"pla.ctl.ctl.chiWatPumCon.dpChiWat_local", "pla.ctl.ctl.chiWatPumCon.dpChiWatPumSet_local"}, + autoscale=true, + grid=true, + timeUnit="h" +); +createPlot( + id=6, + position={40, 40, 300, 600}, + y={"pla.bus.VChiWatPri_flow", "datAll.pla.ctl.VChiWatPri_flow_nominal"}, + autoscale=true, + grid=true, + timeUnit="h" +); +createPlot( + id=6, + subPlot=2, + y={"pla.chi.chi[1].chi.PLR2", "pla.chi.chi[2].chi.PLR2"}, + autoscale=true, + grid=true, + timeUnit="h" +); +createPlot( + id=7, + y={"pla.bus.TChiWatSupSet", "pla.bus.TChiWatPriSup", "pla.bus.TChiWatPlaRet"}, + autoscale=true, + grid=true, + timeUnit="h" +); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Validation/WaterCooledOpenLoop.mos b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Validation/WaterCooledOpenLoop.mos new file mode 100644 index 00000000000..00d129173a0 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Validation/WaterCooledOpenLoop.mos @@ -0,0 +1,29 @@ + +simulateModel("Buildings.Templates.Plants.Chillers.Validation.WaterCooledOpenLoop", + method="cvode", + tolerance=1e-6, + startTime=19612800, + stopTime=19615000, + resultFile="WaterCooledOpenLoop"); +createPlot(id=1, + position={21, 14, 865, 898}, + y={"TChiWatRet.T", "CHI.bus.TChiWatPlaRet", "CHI.bus.TChiWatPriSup", "CHI.bus.TChiWatSupSet", "CHI.bus.TChiWatChiRet[1]", "CHI.bus.TChiWatChiSup[1]"}, + subPlot=101, + autoscale=true, + grid=true); +createPlot(id=1, + y={"CHI.bus.y1Chi[1]"}, + subPlot=102, + autoscale=true, + grid=true); +createPlot(id=1, + y={"CHI.chi.chi[1].chi.PLR1"}, + subPlot=103, + autoscale=true, + grid=true); +createPlot(id=2, + position={939, 56, 865, 898}, + y={"CHI.bus.VChiWatPri_flow", "VChiWat_flow.V_flow"}, + subPlot=101, + autoscale=true, + grid=true); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxReheat.mos b/Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxReheat.mos deleted file mode 100644 index ab1ee7c1991..00000000000 --- a/Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxReheat.mos +++ /dev/null @@ -1,20 +0,0 @@ -simulateModel("Buildings.Templates.ZoneEquipment.Validation.VAVBoxReheat", - method="cvode", - tolerance=1e-6, - stopTime=3600, - resultFile="VAVBoxReheat"); -createPlot( - id=1, - subPlot=1, - position={20, 20, 500, 500}, - y={"VAVBox_1.bus.TAirSup", "VAVBox_1.bus.TAirDis", "VAVBox_1.bus.TZon"}, - autoscale=true, - grid=true -); -createPlot( - id=1, - subPlot=2, - y={"VAVBox_1.damVAV.m_flow"}, - autoscale=true, - grid=true -); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.BypassValve.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.BypassValve.mos new file mode 100644 index 00000000000..4e9d5502c31 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.BypassValve.mos @@ -0,0 +1,9 @@ +compareVars := + { + "wseVal.uWSE", + "wseVal.uPla", + "wseVal.dpChiWat", + "wseVal.dpDes", + "wseVal.yRetVal", + "wseVal.yConWatIsoVal" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.HeatExchangerPump.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.HeatExchangerPump.mos new file mode 100644 index 00000000000..ce110a8cfd5 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.HeatExchangerPump.mos @@ -0,0 +1,12 @@ +compareVars := + { + "wsePum.uWSE", + "wsePum.uPum", + "wsePum.yPumOn", + "wsePum.uPla", + "wsePum.TEntWSE", + "wsePum.TEntHex", + "wsePum.yConWatIsoVal", + "wsePum.yPumSpe", + "wsePum.resSpeReq.y" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.PredictedOutletTemperature.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.PredictedOutletTemperature.mos new file mode 100644 index 00000000000..9590431423a --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.PredictedOutletTemperature.mos @@ -0,0 +1,8 @@ +compareVars := + { + "wseTOut.uTunPar", + "wseTOut.VChiWat_flow", + "wseTOut.TOutWet", + "wseTOut.y", + "wseTOut.TOutWetDes" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.Tuning_uEcoSta_uTowFanSpeMax.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.Tuning_uEcoSta_uTowFanSpeMax.mos new file mode 100644 index 00000000000..7fe0b838d1e --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Subsequences.Validation.Tuning_uEcoSta_uTowFanSpeMax.mos @@ -0,0 +1,18 @@ +compareVars := + { + "wseTun.uTowFanSpeMax", + "wseTun1.uTowFanSpeMax", + "wseTun2.uTowFanSpeMax", + "wseTun3.uTowFanSpeMax", + "wseTun4.uTowFanSpeMax", + "wseTun.uWseSta", + "wseTun1.uWseSta", + "wseTun2.uWseSta", + "wseTun3.uWseSta", + "wseTun4.uWseSta", + "wseTun.y", + "wseTun1.y", + "wseTun2.y", + "wseTun3.y", + "wseTun4.y" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Validation.Controller.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Validation.Controller.mos new file mode 100644 index 00000000000..1ccef4fb59a --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Economizers.Validation.Controller.mos @@ -0,0 +1,39 @@ +compareVars := + { + "wseSta.TOutWet", + "wseSta.TChiWatRet", + "wseSta.TChiWatRetDow", + "wseSta.VChiWat_flow", + "wseSta.uTowFanSpeMax", + "wseSta.y", + "wseSta.enaTWet.y", + "wseSta.enaTChiWatRet.y", + "wseSta.yConWatIsoVal", + "wseSta.yRetVal", + "wseSta1.TOutWet", + "wseSta1.TChiWatRet", + "wseSta1.TChiWatRetDow", + "wseSta1.VChiWat_flow", + "wseSta1.uTowFanSpeMax", + "wseSta1.y", + "wseSta1.enaTWet.y", + "wseSta1.enaTChiWatRet.y", + "wseSta1.yConWatIsoVal", + "wseSta1.yRetVal", + "wseSta2.TOutWet", + "wseSta2.TChiWatRet", + "wseSta2.TChiWatRetDow", + "wseSta2.VChiWat_flow", + "wseSta2.uTowFanSpeMax", + "wseSta2.y", + "wseSta2.enaTWet.y", + "wseSta2.enaTChiWatRet.y", + "wseSta2.yConWatIsoVal", + "wseSta2.yRetVal", + "wseSta3.y", + "wseSta3.yPumOn", + "wseSta3.uIni", + "wseSta3.uChiSta", + "wseSta3.yConWatIsoVal", + "wseSta3.yPumSpe" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.ContinuousLeadSwapTwo_uDevSta.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.ContinuousLeadSwapTwo_uDevSta.mos new file mode 100644 index 00000000000..167b8b9c6e8 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.ContinuousLeadSwapTwo_uDevSta.mos @@ -0,0 +1,27 @@ +compareVars := + { + "leaSwa.uDevRolSet[1]", + "leaSwa.uDevRolSet[2]", + "leaSwa.uDevSta[1]", + "leaSwa.uDevSta[2]", + "leaSwa.yDevStaSet[1]", + "leaSwa.yDevStaSet[2]", + "leaSwa1.uDevRolSet[1]", + "leaSwa1.uDevRolSet[2]", + "leaSwa1.uDevSta[1]", + "leaSwa1.uDevSta[2]", + "leaSwa1.yDevStaSet[1]", + "leaSwa1.yDevStaSet[2]", + "leaSwa2.uDevRolSet[1]", + "leaSwa2.uDevRolSet[2]", + "leaSwa2.uDevSta[1]", + "leaSwa2.uDevSta[2]", + "leaSwa2.yDevStaSet[1]", + "leaSwa2.yDevStaSet[2]", + "leaSwa3.uDevRolSet[1]", + "leaSwa3.uDevRolSet[2]", + "leaSwa3.uDevSta[1]", + "leaSwa3.uDevSta[2]", + "leaSwa3.yDevStaSet[1]", + "leaSwa3.yDevStaSet[2]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.LeastRuntime_uDevRol.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.LeastRuntime_uDevRol.mos new file mode 100644 index 00000000000..5aad5b741ad --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.LeastRuntime_uDevRol.mos @@ -0,0 +1,21 @@ +compareVars := + { + "rotTwo.yDevRol[1]", + "rotTwo.yDevRol[2]", + "leaRunTim.uDevSta[1]", + "leaRunTim.uDevSta[2]", + "leaRunTim.accTim[1].y", + "leaRunTim.accTim[2].y", + "rotTwo1.yDevRol[1]", + "rotTwo1.yDevRol[2]", + "leaRunTim1.uDevSta[1]", + "leaRunTim1.uDevSta[2]", + "leaRunTim1.accTim[1].y", + "leaRunTim1.accTim[2].y", + "rotTwo2.yDevRol[1]", + "rotTwo2.yDevRol[2]", + "leaRunTim2.uDevSta[1]", + "leaRunTim2.uDevSta[2]", + "leaRunTim2.accTim[1].y", + "leaRunTim2.accTim[2].y" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.MinimumLeadRuntime_uDevRol.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.MinimumLeadRuntime_uDevRol.mos new file mode 100644 index 00000000000..578fe0fe49c --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.MinimumLeadRuntime_uDevRol.mos @@ -0,0 +1,27 @@ +compareVars := + { + "rotTwo.yDevRol[1]", + "rotTwo.yDevRol[2]", + "minLeaTim.uDevSta[1]", + "minLeaTim.uDevSta[2]", + "minLeaTim.accTim[1].y", + "minLeaTim.accTim[2].y", + "minLeaTim.accTim[1].passed", + "minLeaTim.accTim[2].passed", + "rotTwo1.yDevRol[1]", + "rotTwo1.yDevRol[2]", + "minLeaTim1.uDevSta[1]", + "minLeaTim1.uDevSta[2]", + "minLeaTim1.accTim[1].y", + "minLeaTim1.accTim[2].y", + "minLeaTim1.accTim[1].passed", + "minLeaTim1.accTim[2].passed", + "rotTwo2.yDevRol[1]", + "rotTwo2.yDevRol[2]", + "minLeaTim2.uDevSta[1]", + "minLeaTim2.uDevSta[2]", + "minLeaTim2.accTim[1].y", + "minLeaTim2.accTim[2].y", + "minLeaTim2.accTim[1].passed", + "minLeaTim2.accTim[2].passed" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.Scheduler.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.Scheduler.mos new file mode 100644 index 00000000000..9a33c3e0d8d --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.Scheduler.mos @@ -0,0 +1,10 @@ +compareVars := + { + "truFalHol.y", + "truFalHol1.y", + "truFalHol2.y", + "truFalHol3.y", + "truFalHol4.y", + "rotSch.calTim.weekDay", + "rotSch.calTim.hour" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.Two_uRot.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.Two_uRot.mos new file mode 100644 index 00000000000..518524040fc --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Subsequences.Validation.Two_uRot.mos @@ -0,0 +1,11 @@ +compareVars := + { + "rotTwo.yDevRol[1]", + "rotTwo.yDevRol[2]", + "rotTwo.yPreDevRolSig[1]", + "rotTwo.yPreDevRolSig[2]", + "rotTwo1.yDevRol[1]", + "rotTwo1.yDevRol[2]", + "rotTwo1.yPreDevRolSig[1]", + "rotTwo1.yPreDevRolSig[2]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Validation.ControllerTwo.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Validation.ControllerTwo.mos new file mode 100644 index 00000000000..4fc3249f7b4 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Validation.ControllerTwo.mos @@ -0,0 +1,29 @@ +compareVars := + { + "leaLag.uLeaStaSet", + "leaLag.uLagStaSet", + "leaLag.yDevStaSet[1]", + "leaLag.yDevStaSet[2]", + "leaLag.yDevRol[1]", + "leaLag.yDevRol[2]", + "leaLag1.uLeaStaSet", + "leaLag1.uLagStaSet", + "leaLag1.yDevStaSet[1]", + "leaLag1.yDevStaSet[2]", + "leaLag1.yDevRol[1]", + "leaLag1.yDevRol[2]", + "leaSta.uLeaStaSet", + "leaSta.yDevStaSet[1]", + "leaSta.yDevStaSet[2]", + "leaSta.yDevRol[1]", + "leaSta.yDevRol[2]", + "conLeaSimSta.yDevStaSet[1]", + "conLeaSimSta.yDevStaSet[2]", + "conLeaSimSta.yDevRol[1]", + "conLeaSimSta.yDevRol[2]", + "conLeaSch.yDevStaSet[1]", + "conLeaSch.yDevStaSet[2]", + "conLeaSch.yDevRol[1]", + "conLeaSch.yDevRol[2]", + "conLeaSch.rotSch.onCouInt.y" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Validation.ControllerTwo_MinimumLeadRuntime.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Validation.ControllerTwo_MinimumLeadRuntime.mos new file mode 100644 index 00000000000..5e4eb5e7907 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.EquipmentRotation.Validation.ControllerTwo_MinimumLeadRuntime.mos @@ -0,0 +1,35 @@ +compareVars := + { + "leaLag.uLeaStaSet", + "leaLag.uLagStaSet", + "leaLag.yDevStaSet[1]", + "leaLag.yDevStaSet[2]", + "leaLag.yDevRol[1]", + "leaLag.yDevRol[2]", + "leaLag.minLeaTim.accTim[1].y", + "leaLag.minLeaTim.accTim[2].y", + "leaLag.minLeaRuntime", + "leaLag.minLeaTim.accTim[1].passed", + "leaLag.minLeaTim.accTim[2].passed", + "leaLag1.uLeaStaSet", + "leaLag1.uLagStaSet", + "leaLag1.yDevStaSet[1]", + "leaLag1.yDevStaSet[2]", + "leaLag1.yDevRol[1]", + "leaLag1.yDevRol[2]", + "leaLag1.minLeaTim.accTim[1].y", + "leaLag1.minLeaTim.accTim[2].y", + "leaLag1.minLeaRuntime", + "leaLag1.minLeaTim.accTim[1].passed", + "leaLag1.minLeaTim.accTim[2].passed", + "leaSta.uLeaStaSet", + "leaSta.yDevStaSet[1]", + "leaSta.yDevStaSet[2]", + "leaSta.yDevRol[1]", + "leaSta.yDevRol[2]", + "leaSta.minLeaTim.accTim[1].y", + "leaSta.minLeaTim.accTim[2].y", + "leaSta.minLeaRuntime", + "leaSta.minLeaTim.accTim[1].passed", + "leaSta.minLeaTim.accTim[2].passed" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation.DisableChillers.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation.DisableChillers.mos new file mode 100644 index 00000000000..6c7fc671104 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation.DisableChillers.mos @@ -0,0 +1,27 @@ +compareVars := + { + "disPlaFroChi.chaPro", + "disPlaFroChi.uChi[1]", + "disPlaFroChi.uChi[2]", + "disPlaFroChi.uChiWatReq[1]", + "disPlaFroChi.uChiWatReq[2]", + "disPlaFroChi.uConWatReq[1]", + "disPlaFroChi.uConWatReq[2]", + "disPlaFroChi.uChiWatIsoVal[1]", + "disPlaFroChi.uChiWatIsoVal[2]", + "disPlaFroChi.uConWatIsoVal[1]", + "disPlaFroChi.uConWatIsoVal[2]", + "disPlaFroChi.uChiWatPumSpe[1]", + "disPlaFroChi.uChiWatPumSpe[2]", + "disPlaFroChi.uConWatPumSpe[1]", + "disPlaFroChi.uConWatPumSpe[2]", + "disPlaFroChi.yChiWatIsoVal[1]", + "disPlaFroChi.yChiWatIsoVal[2]", + "disPlaFroChi.yConWatIsoVal[1]", + "disPlaFroChi.yConWatIsoVal[2]", + "disPlaFroChi.yChiWatPumSpe[1]", + "disPlaFroChi.yChiWatPumSpe[2]", + "disPlaFroChi.yConWatPumSpe[1]", + "disPlaFroChi.yConWatPumSpe[2]", + "disPlaFroChi.yTowCel" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation.Enable.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation.Enable.mos new file mode 100644 index 00000000000..fdea71bae50 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation.Enable.mos @@ -0,0 +1,11 @@ +compareVars := + { + "disPlaReq.ignReq", + "disPlaReq.chiPlaReq", + "disPlaReq.yPla", + "disPlaOutTem.TOut", + "disPlaOutTem.TChiLocOut", + "disPlaOutTem.yPla", + "disPlaSch.enaSch.y[1]", + "disPlaSch.yPla" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation.EnableDevices.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation.EnableDevices.mos new file mode 100644 index 00000000000..ce01cd5b86d --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.PlantEnable.Validation.EnableDevices.mos @@ -0,0 +1,14 @@ +compareVars := + { + "enaDev.uPla", + "enaDev.uChiWatPum[1]", + "enaDev.uConWatPum[1]", + "enaDev.uIni", + "enaDev.uChiSta", + "enaDev.yEnaPlaPro", + "enaDev.yChiWatIsoVal", + "enaDev.yConWatIsoVal", + "enaDev.yLeaPriChiPum", + "enaDev.yLeaConPum", + "enaDev.yLeaChi" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.Validation.IdentifyStage.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.Validation.IdentifyStage.mos new file mode 100644 index 00000000000..8d234fc8140 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Generic.Validation.IdentifyStage.mos @@ -0,0 +1,10 @@ +compareVars := + { + "ideSta.uChi[1]", + "ideSta.uChi[2]", + "ideSta.ySta", + "ideSta1.uChi[1]", + "ideSta1.uChi[2]", + "ideSta1.uChi[3]", + "ideSta1.ySta" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation.ControlLoop.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation.ControlLoop.mos new file mode 100644 index 00000000000..e4cb01f3efe --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation.ControlLoop.mos @@ -0,0 +1,9 @@ +compareVars := + { + "chiHeaPreLoo.uHeaPreEna", + "chiHeaPreLoo.TConWatRet", + "chiHeaPreLoo.TChiWatSup", + "chiHeaPreLoo.conPID.u_s", + "chiHeaPreLoo.conPID.u_m", + "chiHeaPreLoo.conPID.y" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation.MappingWithWSE.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation.MappingWithWSE.mos new file mode 100644 index 00000000000..a603d472ac6 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation.MappingWithWSE.mos @@ -0,0 +1,15 @@ +compareVars := + { + "witWSE.uHeaPreCon", + "witWSE.yMaxTowSpeSet", + "witWSE.yConWatPumSpeSet", + "witWSE.desConWatPumSpe", + "witWSE.yHeaPreConVal", + "witWSE.uHeaPreEna", + "noWSE.uHeaPreCon", + "noWSE.yMaxTowSpeSet", + "noWSE.yConWatPumSpeSet", + "noWSE.desConWatPumSpe", + "noWSE.yHeaPreConVal", + "noWSE.uHeaPreEna" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation.MappingWithoutWSE.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation.MappingWithoutWSE.mos new file mode 100644 index 00000000000..48ac58a5f73 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Subsequences.Validation.MappingWithoutWSE.mos @@ -0,0 +1,12 @@ +compareVars := + { + "fixPumSpe.uHeaPreCon", + "fixPumSpe.yMaxTowSpeSet", + "fixPumSpe.yHeaPreConVal", + "fixPumSpe.uHeaPreEna", + "varPumSpe.uHeaPreCon", + "varPumSpe.yMaxTowSpeSet", + "varPumSpe.yConWatPumSpeSet", + "varPumSpe.desConWatPumSpe", + "varPumSpe.uHeaPreEna" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Validation.Controller.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Validation.Controller.mos new file mode 100644 index 00000000000..cf87a1aa95a --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.HeadPressure.Validation.Controller.mos @@ -0,0 +1,19 @@ +compareVars := + { + "enaWSE.TConWatRet", + "enaWSE.TChiWatSup", + "enaWSE.chiHeaPreLoo.conPID.u_s", + "enaWSE.chiHeaPreLoo.conPID.u_m", + "enaWSE.chiHeaPreLoo.conPID.y", + "enaWSE.uChiHeaCon", + "enaWSE.yMaxTowSpeSet", + "enaWSE.yHeaPreConVal", + "enaWSE.yConWatPumSpeSet", + "disWSE.yMaxTowSpeSet", + "disWSE.yHeaPreConVal", + "disWSE.yConWatPumSpeSet", + "conSpePum.yMaxTowSpeSet", + "conSpePum.yHeaPreConVal", + "varSpePum.yMaxTowSpeSet", + "varSpePum.yConWatPumSpeSet" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.Validation.Controller.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.Validation.Controller.mos new file mode 100644 index 00000000000..d24e915bd1d --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.Validation.Controller.mos @@ -0,0 +1,7 @@ +compareVars := + { + "minBypValCon.uChiWatPum", + "minBypValCon.VChiWat_flow", + "minBypValCon.VChiWatSet_flow", + "minBypValCon.yValPos" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.Validation.FlowSetpoint.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.Validation.FlowSetpoint.mos new file mode 100644 index 00000000000..b8426b92a7a --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.MinimumFlowBypass.Validation.FlowSetpoint.mos @@ -0,0 +1,36 @@ +compareVars := + { + "staUp.uStaUp", + "staUp.uUpsDevSta", + "staUp.uOnOff", + "staUp.yChaSet", + "staUp.yChiWatMinFloSet", + "staUp.uChi[1]", + "staUp.uChi[2]", + "staUp.uChi[3]", + "staUp.nexEnaChi", + "staUp.uOnOff", + "onOffStaUp.uStaUp", + "onOffStaUp.uUpsDevSta", + "onOffStaUp.uOnOff", + "onOffStaUp.uSubCha", + "onOffStaUp.yChaSet", + "onOffStaUp.yChiWatMinFloSet", + "onOffStaUp.uChi[1]", + "onOffStaUp.uChi[2]", + "onOffStaUp.uChi[3]", + "onOffStaUp.nexEnaChi", + "onOffStaUp.nexDisChi", + "onOffStaUp.uOnOff", + "staDow.uStaDow", + "staDow.uUpsDevSta", + "staDow.uOnOff", + "staDow.yChaSet", + "staDow.yChiWatMinFloSet", + "staDow.uChi[1]", + "staDow.uChi[2]", + "staDow.uChi[3]", + "staDow.nexEnaChi", + "staDow.nexDisChi", + "staDow.uOnOff" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.EnableLag_primary_dP.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.EnableLag_primary_dP.mos new file mode 100644 index 00000000000..54572d94708 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.EnableLag_primary_dP.mos @@ -0,0 +1,10 @@ +compareVars := + { + "enaLagChiPum.chiWatFloRat.y", + "enaLagChiPum.yUp", + "enaLagChiPum.truDel.y", + "enaLagChiPum.enaPum.y", + "enaLagChiPum.yDown", + "enaLagChiPum.truDel1.y", + "enaLagChiPum.disPum.y" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.EnableLead_dedicated.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.EnableLead_dedicated.mos new file mode 100644 index 00000000000..fb24268e34e --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.EnableLead_dedicated.mos @@ -0,0 +1,13 @@ +compareVars := + { + "enaLeaChiPum.uPla", + "enaLeaChiPum.uLeaChiEna", + "enaLeaChiPum.uLeaChiSta", + "enaLeaChiPum.uLeaChiWatReq", + "enaLeaChiPum.yLea", + "disLeaChiPum.uPla", + "disLeaChiPum.uLeaChiEna", + "disLeaChiPum.uLeaChiSta", + "disLeaChiPum.uLeaChiWatReq", + "disLeaChiPum.yLea" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.EnableLead_headered.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.EnableLead_headered.mos new file mode 100644 index 00000000000..fc8c9041cce --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.EnableLead_headered.mos @@ -0,0 +1,6 @@ +compareVars := + { + "enaLeaChiPum.uChiWatIsoVal[1]", + "enaLeaChiPum.uChiWatIsoVal[2]", + "enaLeaChiPum.yLea" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.Speed_primary_localDp.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.Speed_primary_localDp.mos new file mode 100644 index 00000000000..74848cf7791 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.Speed_primary_localDp.mos @@ -0,0 +1,21 @@ +compareVars := + { + "chiPumSpe.dpChiWat_remote[1]", + "chiPumSpe.dpChiWat_remote[2]", + "chiPumSpe.dpChiWatSet_remote[1]", + "chiPumSpe.dpChiWatSet_remote[2]", + "chiPumSpe.maxRemDP.u[1]", + "chiPumSpe.maxRemDP.u[2]", + "chiPumSpe.maxRemDP.y", + "chiPumSpe.locDpSet.y", + "chiPumSpe.locDpSet.f1", + "chiPumSpe.locDpSet.f2", + "chiPumSpe.locDpSet.y", + "chiPumSpe.dpChiWat_local", + "chiPumSpe.conPID1.u_s", + "chiPumSpe.conPID1.u_m", + "chiPumSpe.conPID1.y", + "chiPumSpe.yChiWatPumSpe", + "chiPumSpe.pumSpe.f1", + "chiPumSpe.pumSpe.f2" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.Speed_primary_remoteDp.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.Speed_primary_remoteDp.mos new file mode 100644 index 00000000000..006414ffbe1 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Subsequences.Validation.Speed_primary_remoteDp.mos @@ -0,0 +1,16 @@ +compareVars := + { + "chiPumSpe.dpChiWat_remote[1]", + "chiPumSpe.dpChiWat_remote[2]", + "chiPumSpe.dpChiWatSet_remote[1]", + "chiPumSpe.dpChiWatSet_remote[2]", + "chiPumSpe.maxLoo.u[1]", + "chiPumSpe.maxLoo.u[2]", + "chiPumSpe.maxLoo.y", + "chiPumSpe.pumSpe.y", + "chiPumSpe.pumSpe.f1", + "chiPumSpe.pumSpe.f2", + "chiPumSpe.yChiWatPumSpe", + "chiPumSpe.uChiWatPum[1]", + "chiPumSpe.uChiWatPum[2]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Validation.Controller.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Validation.Controller.mos new file mode 100644 index 00000000000..fe067a87124 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.ChilledWater.Validation.Controller.mos @@ -0,0 +1,33 @@ +compareVars := + { + "heaNoLoc.VChiWat_flow", + "heaNoLoc.VChiWat_flow_nominal", + "heaNoLoc.yChiWatPum[1]", + "heaNoLoc.yChiWatPum[2]", + "heaNoLoc.yChiWatPum[3]", + "heaNoLoc.dpChiWat_remote[1]", + "heaNoLoc.dpChiWat_remote[2]", + "heaNoLoc.dpChiWatSet_remote[1]", + "heaNoLoc.dpChiWatSet_remote[2]", + "heaNoLoc.yPumSpe", + "heaNoLoc.uChiWatIsoVal[1]", + "heaNoLoc.uChiWatIsoVal[2]", + "dedNoLoc.uLeaChiEna", + "dedNoLoc.uLeaChiSta", + "dedNoLoc.uLeaChiWatReq", + "dedNoLoc.enaDedLeaPum.yLea", + "dedNoLoc.dpChiWat_remote[1]", + "dedNoLoc.dpChiWat_remote[2]", + "dedNoLoc.dpChiWatSet_remote[1]", + "dedNoLoc.dpChiWatSet_remote[2]", + "dedNoLoc.yPumSpe", + "dedLoc.uLeaChiEna", + "dedLoc.uLeaChiSta", + "dedLoc.uLeaChiWatReq", + "dedNoLoc.enaDedLeaPum.yLea", + "dedLoc.dpChiWat_remote[1]", + "dedLoc.dpChiWat_remote[2]", + "dedLoc.pumSpeLocDp.locDpSet.y", + "dedLoc.dpChiWat_local", + "dedLoc.yPumSpe" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation.EnableLead_dedicated.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation.EnableLead_dedicated.mos new file mode 100644 index 00000000000..6f3caf37f3e --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation.EnableLead_dedicated.mos @@ -0,0 +1,11 @@ +compareVars := + { + "enaLeaConPum.uLeaChiEna", + "enaLeaConPum.uLeaChiSta", + "enaLeaConPum.uLeaConWatReq", + "enaLeaConPum.yLea", + "disLeaConPum.uLeaChiEna", + "disLeaConPum.uLeaChiSta", + "disLeaConPum.uLeaConWatReq", + "disLeaConPum.yLea" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation.EnableLead_headered.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation.EnableLead_headered.mos new file mode 100644 index 00000000000..4e2b827d0d4 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation.EnableLead_headered.mos @@ -0,0 +1,6 @@ +compareVars := + { + "enaLeaConPum.uChiConIsoVal[1]", + "enaLeaConPum.uWseConIsoVal", + "enaLeaConPum.yLea" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation.Speed.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation.Speed.mos new file mode 100644 index 00000000000..7d120d199ff --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Subsequences.Validation.Speed.mos @@ -0,0 +1,7 @@ +compareVars := + { + "conPumSpe.uWSE", + "conPumSpe.uChiSta", + "conPumSpe.yConWatPumNum", + "conPumSpe.yDesConWatPumSpe" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Validation.Controller.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Validation.Controller.mos new file mode 100644 index 00000000000..77566fef085 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Pumps.CondenserWater.Validation.Controller.mos @@ -0,0 +1,20 @@ +compareVars := + { + "chiSta.y", + "wseSta.y", + "chiOn.y", + "meaPumSpe.y", + "pumSpeSet.y", + "heaHavWse.yLeaPum", + "heaHavWse.yDesConWatPumSpe", + "heaHavWse.yConWatPumNum", + "heaHavWse.yPumSpeChe", + "dedHavWse.yLeaPum", + "dedHavWse.yDesConWatPumSpe", + "dedHavWse.yConWatPumNum", + "dedHavWse.yPumSpeChe", + "heaNoWse.yLeaPum", + "heaNoWse.yDesConWatPumSpe", + "heaNoWse.yConWatPumNum", + "heaNoWse.yPumSpeChe" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.Validation.ChilledWaterPlantReset.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.Validation.ChilledWaterPlantReset.mos new file mode 100644 index 00000000000..41e57b56519 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.Validation.ChilledWaterPlantReset.mos @@ -0,0 +1,14 @@ +compareVars := + { + "plaRes.triRes.y", + "plaRes.yChiWatPlaRes", + "plaRes.chaPro", + "plaRes.triSam.y", + "plaRes.truHol.y", + "plaRes.TChiWatSupResReq", + "devRes.triRes.y", + "devRes.yChiWatPlaRes", + "devRes.TChiWatSupResReq", + "devRes.chaPro", + "devRes.triRes.uDevSta" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.Validation.ChilledWaterSupply.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.Validation.ChilledWaterSupply.mos new file mode 100644 index 00000000000..71bb586dc6c --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.SetPoints.Validation.ChilledWaterSupply.mos @@ -0,0 +1,6 @@ +compareVars := + { + "chiWatSupSet.dpChiWatPumSet[1]", + "chiWatSupSet.uChiWatPlaRes", + "chiWatSupSet.TChiWatSupSet" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.CHWIsoVal.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.CHWIsoVal.mos new file mode 100644 index 00000000000..fb1e1a83ff3 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.CHWIsoVal.mos @@ -0,0 +1,19 @@ +compareVars := + { + "enaChiIsoVal.uChiWatIsoVal[1]", + "enaChiIsoVal.uChiWatIsoVal[2]", + "enaChiIsoVal.uStaPro", + "enaChiIsoVal.uUpsDevSta", + "enaChiIsoVal.nexChaChi", + "enaChiIsoVal.yChiWatIsoVal[1]", + "enaChiIsoVal.yChiWatIsoVal[2]", + "enaChiIsoVal.yEnaChiWatIsoVal", + "disChiIsoVal.uChiWatIsoVal[1]", + "disChiIsoVal.uChiWatIsoVal[2]", + "disChiIsoVal.uStaPro", + "disChiIsoVal.uUpsDevSta", + "disChiIsoVal.nexChaChi", + "disChiIsoVal.yChiWatIsoVal[1]", + "disChiIsoVal.yChiWatIsoVal[2]", + "disChiIsoVal.yEnaChiWatIsoVal" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.DisableChiller.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.DisableChiller.mos new file mode 100644 index 00000000000..11d77dad0e1 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.DisableChiller.mos @@ -0,0 +1,25 @@ +compareVars := + { + "chiOnOff.nexEnaChi", + "chiOnOff.nexDisChi", + "chiOnOff.uStaDow", + "chiOnOff.uEnaChiWatIsoVal", + "chiOnOff.uChi[1]", + "chiOnOff.uChi[2]", + "chiOnOff.uChi[3]", + "chiOnOff.yChi[1]", + "chiOnOff.yChi[2]", + "chiOnOff.yChi[3]", + "chiOnOff.yRelDemLim", + "chiOff.nexEnaChi", + "chiOff.nexDisChi", + "chiOff.uStaDow", + "chiOff.uEnaChiWatIsoVal", + "chiOff.uChi[1]", + "chiOff.uChi[2]", + "chiOff.uChi[3]", + "chiOff.yChi[1]", + "chiOff.yChi[2]", + "chiOff.yChi[3]", + "chiOff.yRelDemLim" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.DownStartWithOn.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.DownStartWithOn.mos new file mode 100644 index 00000000000..36f1ce8b880 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.DownStartWithOn.mos @@ -0,0 +1,17 @@ +compareVars := + { + "staStaDow1.uStaDow", + "staStaDow1.uChiLoa[1]", + "staStaDow1.uChiLoa[2]", + "staStaDow1.yChiDem[1]", + "staStaDow1.yChiDem[2]", + "staStaDow1.yChiHeaCon[1]", + "staStaDow1.yChiHeaCon[2]", + "staStaDow1.yChiWatIsoVal[1]", + "staStaDow1.yChiWatIsoVal[2]", + "staStaDow1.yChi[1]", + "staStaDow1.yChi[2]", + "demLimRel.y", + "staStaDow1.yChiWatMinFloSet", + "staStaDow1.VChiWat_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.DownStartWithoutOn.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.DownStartWithoutOn.mos new file mode 100644 index 00000000000..43767019292 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.DownStartWithoutOn.mos @@ -0,0 +1,15 @@ +compareVars := + { + "staStaDow.uStaDow", + "staStaDow.uChiLoa[1]", + "staStaDow.uChiLoa[2]", + "staStaDow.yChiDem[1]", + "staStaDow.yChiDem[2]", + "staStaDow.yChiHeaCon[1]", + "staStaDow.yChiHeaCon[2]", + "staStaDow.yChiWatIsoVal[1]", + "staStaDow.yChiWatIsoVal[2]", + "staStaDow.yChi[1]", + "staStaDow.yChi[2]", + "staStaDow.yReaDemLim" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.EnableCWPump.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.EnableCWPump.mos new file mode 100644 index 00000000000..46905e05fe1 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.EnableCWPump.mos @@ -0,0 +1,13 @@ +compareVars := + { + "staUpInd.uUpsDevSta", + "staUpInd.uStaUp", + "staUpInd.uStaDow", + "staUpInd.uStaSet", + "staUpInd.yChiSta", + "staDowInd.uUpsDevSta", + "staDowInd.uStaUp", + "staDowInd.uStaDow", + "staDowInd.uStaSet", + "staDowInd.yChiSta" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.EnableChiller.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.EnableChiller.mos new file mode 100644 index 00000000000..8e998204566 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.EnableChiller.mos @@ -0,0 +1,27 @@ +compareVars := + { + "enaDisChi.nexEnaChi", + "enaDisChi.nexDisChi", + "enaDisChi.uStaUp", + "enaDisChi.uEnaChiWatIsoVal", + "enaDisChi.uOnOff", + "enaDisChi.uChi[1]", + "enaDisChi.uChi[2]", + "enaDisChi.uChi[3]", + "enaDisChi.yChi[1]", + "enaDisChi.yChi[2]", + "enaDisChi.yChi[3]", + "enaDisChi.yNewChiEna", + "enaOneChi.nexEnaChi", + "enaOneChi.nexDisChi", + "enaOneChi.uStaUp", + "enaOneChi.uEnaChiWatIsoVal", + "enaOneChi.uOnOff", + "enaOneChi.uChi[1]", + "enaOneChi.uChi[2]", + "enaOneChi.uChi[3]", + "enaOneChi.yChi[1]", + "enaOneChi.yChi[2]", + "enaOneChi.yChi[3]", + "enaOneChi.yNewChiEna" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.HeadControl.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.HeadControl.mos new file mode 100644 index 00000000000..271d8999204 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.HeadControl.mos @@ -0,0 +1,35 @@ +compareVars := + { + "enaHeaCon.uStaPro", + "enaHeaCon.uUpsDevSta", + "enaHeaCon.uChiHeaCon[1]", + "enaHeaCon.uChiHeaCon[2]", + "enaHeaCon.yChiHeaCon[1]", + "enaHeaCon.yChiHeaCon[2]", + "enaHeaCon.nexChaChi", + "enaHeaCon.yEnaHeaCon", + "disHeaCon.uStaPro", + "disHeaCon.uUpsDevSta", + "disHeaCon.uChiHeaCon[1]", + "disHeaCon.uChiHeaCon[2]", + "disHeaCon.yChiHeaCon[1]", + "disHeaCon.yChiHeaCon[2]", + "disHeaCon.nexChaChi", + "disHeaCon.yEnaHeaCon", + "disHeaCon1.uStaPro", + "disHeaCon1.uUpsDevSta", + "disHeaCon1.uChiHeaCon[1]", + "disHeaCon1.uChiHeaCon[2]", + "disHeaCon1.yChiHeaCon[1]", + "disHeaCon1.yChiHeaCon[2]", + "disHeaCon1.nexChaChi", + "disHeaCon1.yEnaHeaCon", + "enaHeaCon1.uStaPro", + "enaHeaCon1.uUpsDevSta", + "enaHeaCon1.uChiHeaCon[1]", + "enaHeaCon1.uChiHeaCon[2]", + "enaHeaCon1.yChiHeaCon[1]", + "enaHeaCon1.yChiHeaCon[2]", + "enaHeaCon1.nexChaChi", + "enaHeaCon1.yEnaHeaCon" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.NextChiller.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.NextChiller.mos new file mode 100644 index 00000000000..8087177cfa6 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.NextChiller.mos @@ -0,0 +1,47 @@ +compareVars := + { + "nexChi.uStaSet", + "nexChi.uChiSet[1]", + "nexChi.uChiSet[2]", + "nexChi.endPro", + "nexChi.yNexEnaChi", + "nexChi.yDisSmaChi", + "nexChi.yOnOff", + "nexChi.yLasDisChi", + "nexChi.yEnaSmaChi", + "nexChi.yUp", + "nexChi.yDow", + "nexChi1.uStaSet", + "nexChi1.uChiSet[1]", + "nexChi1.uChiSet[2]", + "nexChi1.endPro", + "nexChi1.yNexEnaChi", + "nexChi1.yDisSmaChi", + "nexChi1.yOnOff", + "nexChi1.yLasDisChi", + "nexChi1.yEnaSmaChi", + "nexChi1.yUp", + "nexChi1.yDow", + "nexChi2.uStaSet", + "nexChi2.uChiSet[1]", + "nexChi2.uChiSet[2]", + "nexChi2.endPro", + "nexChi2.yNexEnaChi", + "nexChi2.yDisSmaChi", + "nexChi2.yOnOff", + "nexChi2.yLasDisChi", + "nexChi2.yEnaSmaChi", + "nexChi2.yUp", + "nexChi2.yDow", + "nexChi3.uStaSet", + "nexChi3.uChiSet[1]", + "nexChi2.uChiSet[2]", + "nexChi2.endPro", + "nexChi3.yNexEnaChi", + "nexChi2.yDisSmaChi", + "nexChi3.yOnOff", + "nexChi3.yLasDisChi", + "nexChi3.yEnaSmaChi", + "nexChi3.yUp", + "nexChi3.yDow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.ReduceDemand.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.ReduceDemand.mos new file mode 100644 index 00000000000..37960973165 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.ReduceDemand.mos @@ -0,0 +1,22 @@ +compareVars := + { + "chiDemRed.uDemLim", + "chiDemRed.uChiLoa[1]", + "chiDemRed.uChiLoa[2]", + "chiDemRed.uChi[1]", + "chiDemRed.uChi[2]", + "chiDemRed.yChiDem[1]", + "chiDemRed.yChiDem[2]", + "chiDemRed.yChiDemRed", + "chiDemRed1.uDemLim", + "chiDemRed1.uStaDow", + "chiDemRed1.uOnOff", + "chiDemRed1.uChiLoa[1]", + "chiDemRed1.uChiLoa[2]", + "chiDemRed1.yOpeParLoaRatMin", + "chiDemRed1.uChi[1]", + "chiDemRed1.uChi[2]", + "chiDemRed1.yChiDem[1]", + "chiDemRed1.yChiDem[2]", + "chiDemRed1.yChiDemRed" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.ResetMinBypass.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.ResetMinBypass.mos new file mode 100644 index 00000000000..6455dc2ff90 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.ResetMinBypass.mos @@ -0,0 +1,9 @@ +compareVars := + { + "minBypRes.uUpsDevSta", + "minBypRes.uStaPro", + "minBypRes.uSetChaPro", + "minBypRes.VChiWat_flow", + "minBypRes.VMinChiWat_setpoint", + "minBypRes.yMinBypRes" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.UpEndWithOff.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.UpEndWithOff.mos new file mode 100644 index 00000000000..fac1fbfc7b3 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.UpEndWithOff.mos @@ -0,0 +1,19 @@ +compareVars := + { + "endUp1.uStaUp", + "endUp1.uEnaChiWatIsoVal", + "endUp1.uChiHeaCon[1]", + "endUp1.uChiHeaCon[2]", + "endUp1.uChi[1]", + "endUp1.uChi[2]", + "endUp1.uChiWatReq[1]", + "endUp1.uChiWatReq[2]", + "endUp1.uConWatReq[1]", + "endUp1.uConWatReq[2]", + "endUp1.yChiWatIsoVal[1]", + "endUp1.yChiWatIsoVal[2]", + "endUp1.yChiHeaCon[1]", + "endUp1.yChiHeaCon[2]", + "endUp1.yChiWatMinSet", + "endUp1.yEndSta" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.UpEndWithoutOff.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.UpEndWithoutOff.mos new file mode 100644 index 00000000000..90bbb34c7ce --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Subsequences.Validation.UpEndWithoutOff.mos @@ -0,0 +1,15 @@ +compareVars := + { + "endUp.uStaUp", + "endUp.uEnaChiWatIsoVal", + "endUp.uChiHeaCon[1]", + "endUp.uChiHeaCon[2]", + "endUp.uChi[1]", + "endUp.uChi[2]", + "endUp.yChi[1]", + "endUp.yChi[2]", + "endUp.yChiWatMinSet", + "endUp.yEndSta", + "triSam.u", + "triSam.y" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.DownWithOnOff.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.DownWithOnOff.mos new file mode 100644 index 00000000000..21de886ed29 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.DownWithOnOff.mos @@ -0,0 +1,16 @@ +compareVars := + { + "dowProCon.uStaSet", + "dowProCon.uChi[1]", + "dowProCon.uChi[2]", + "dowProCon.yStaPro", + "dowProCon.uChiLoa[1]", + "dowProCon.uChiLoa[2]", + "dowProCon.yChiWatIsoVal[1]", + "dowProCon.yChiWatIsoVal[2]", + "dowProCon.yChiHeaCon[1]", + "dowProCon.yChiHeaCon[2]", + "dowProCon.yChiWatMinFloSet", + "dowProCon.yDesConWatPumSpe", + "dowProCon.yConWatPumNum" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.DownWithoutOnOff.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.DownWithoutOnOff.mos new file mode 100644 index 00000000000..21de886ed29 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.DownWithoutOnOff.mos @@ -0,0 +1,16 @@ +compareVars := + { + "dowProCon.uStaSet", + "dowProCon.uChi[1]", + "dowProCon.uChi[2]", + "dowProCon.yStaPro", + "dowProCon.uChiLoa[1]", + "dowProCon.uChiLoa[2]", + "dowProCon.yChiWatIsoVal[1]", + "dowProCon.yChiWatIsoVal[2]", + "dowProCon.yChiHeaCon[1]", + "dowProCon.yChiHeaCon[2]", + "dowProCon.yChiWatMinFloSet", + "dowProCon.yDesConWatPumSpe", + "dowProCon.yConWatPumNum" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.UpWithOnOff.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.UpWithOnOff.mos new file mode 100644 index 00000000000..b99972ce591 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.UpWithOnOff.mos @@ -0,0 +1,17 @@ +compareVars := + { + "upProCon.uStaSet", + "upProCon.uChi[1]", + "upProCon.uChi[2]", + "upProCon.yStaPro", + "upProCon.yChiDem[1]", + "upProCon.yChiDem[2]", + "upProCon.yChiWatIsoVal[1]", + "upProCon.yChiWatIsoVal[2]", + "upProCon.yChiHeaCon[1]", + "upProCon.yChiHeaCon[2]", + "upProCon.yChiWatMinFloSet", + "upProCon.VChiWat_flow", + "upProCon.yDesConWatPumSpe", + "upProCon.yConWatPumNum" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.UpWithoutOnOff.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.UpWithoutOnOff.mos new file mode 100644 index 00000000000..cdf33570036 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.Processes.Validation.UpWithoutOnOff.mos @@ -0,0 +1,16 @@ +compareVars := + { + "upProCon.uStaSet", + "upProCon.uChi[1]", + "upProCon.uChi[2]", + "upProCon.yStaPro", + "upProCon.uChiLoa[1]", + "upProCon.uChiLoa[2]", + "upProCon.yChiWatIsoVal[1]", + "upProCon.yChiWatIsoVal[2]", + "upProCon.yChiHeaCon[1]", + "upProCon.yChiHeaCon[2]", + "upProCon.yChiWatMinFloSet", + "upProCon.yDesConWatPumSpe", + "upProCon.yConWatPumNum" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Capacities_u.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Capacities_u.mos new file mode 100644 index 00000000000..a40eb46ddef --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Capacities_u.mos @@ -0,0 +1,53 @@ +compareVars := + { + "staCap0.uDesCap[1]", + "staCap0.uDesCap[2]", + "staCap0.uDesCap[3]", + "staCap0.uMinCap[1]", + "staCap0.uMinCap[2]", + "staCap0.uMinCap[3]", + "staCap0.uLow", + "staCap0.uHig", + "staCap0.nSta", + "staCap0.u", + "staCap0.uUp", + "staCap0.uDown", + "staCap0.yDes", + "staCap0.yDowDes", + "staCap0.yUpDes", + "staCap0.yMin", + "staCap0.yUpMin", + "staCap1.uLow", + "staCap1.uHig", + "staCap1.nSta", + "staCap1.u", + "staCap1.uUp", + "staCap1.uDown", + "staCap1.yDes", + "staCap1.yDowDes", + "staCap1.yUpDes", + "staCap1.yMin", + "staCap1.yUpMin", + "staCap2.uLow", + "staCap2.uHig", + "staCap2.nSta", + "staCap2.u", + "staCap2.uUp", + "staCap2.uDown", + "staCap2.yDes", + "staCap2.yDowDes", + "staCap2.yUpDes", + "staCap2.yMin", + "staCap2.yUpMin", + "staCap3.uLow", + "staCap3.uHig", + "staCap3.nSta", + "staCap3.u", + "staCap3.uUp", + "staCap3.uDown", + "staCap3.yDes", + "staCap3.yDowDes", + "staCap3.yUpDes", + "staCap3.yMin", + "staCap3.yUpMin" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Capacities_uLow_uHig.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Capacities_uLow_uHig.mos new file mode 100644 index 00000000000..3ac6202d12f --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Capacities_uLow_uHig.mos @@ -0,0 +1,42 @@ +compareVars := + { + "staCap0.uDesCap[1]", + "staCap0.uDesCap[2]", + "staCap0.uDesCap[3]", + "staCap0.uMinCap[1]", + "staCap0.uMinCap[2]", + "staCap0.uMinCap[3]", + "staCap0.uLow", + "staCap0.uHig", + "staCap0.nSta", + "staCap0.u", + "staCap0.uUp", + "staCap0.uDown", + "staCap0.yDes", + "staCap0.yDowDes", + "staCap0.yUpDes", + "staCap0.yMin", + "staCap0.yUpMin", + "staCap1.uLow", + "staCap1.uHig", + "staCap1.nSta", + "staCap1.u", + "staCap1.uUp", + "staCap1.uDown", + "staCap1.yDes", + "staCap1.yDowDes", + "staCap1.yUpDes", + "staCap1.yMin", + "staCap1.yUpMin", + "staCap2.uLow", + "staCap2.uHig", + "staCap2.nSta", + "staCap2.u", + "staCap2.uUp", + "staCap2.uDown", + "staCap2.yDes", + "staCap2.yDowDes", + "staCap2.yUpDes", + "staCap2.yMin", + "staCap2.yUpMin" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.CapacityRequirement.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.CapacityRequirement.mos new file mode 100644 index 00000000000..2061f41effe --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.CapacityRequirement.mos @@ -0,0 +1,18 @@ +compareVars := + { + "capReq.y", + "capReq.chaPro", + "capReq.VChiWat_flow", + "capReq.TChiWatRet", + "capReq.TChiWatSupSet", + "capReq1.y", + "capReq1.chaPro", + "capReq1.VChiWat_flow", + "capReq1.TChiWatRet", + "capReq1.TChiWatSupSet", + "capReq2.y", + "capReq2.chaPro", + "capReq2.VChiWat_flow", + "capReq2.TChiWatRet", + "capReq2.TChiWatSupSet" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Change.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Change.mos new file mode 100644 index 00000000000..cced5687f0d --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Change.mos @@ -0,0 +1,27 @@ +compareVars := + { + "cha.ySta", + "cha.uAvaUp", + "cha.uAvaDow", + "cha.uUp", + "cha.uDow", + "cha.uIni", + "truFalHol.y", + "cha.uPla", + "cha1.ySta", + "cha1.uAvaUp", + "cha1.uAvaDow", + "cha1.uUp", + "cha1.uDow", + "cha1.uIni", + "truFalHol1.y", + "cha1.uPla", + "cha2.ySta", + "cha2.uAvaUp", + "cha2.uAvaDow", + "cha2.uUp", + "cha2.uDow", + "cha2.uIni", + "truFalHol2.y", + "cha2.uPla" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.ChillerIndices_u.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.ChillerIndices_u.mos new file mode 100644 index 00000000000..8b038a126f8 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.ChillerIndices_u.mos @@ -0,0 +1,62 @@ +compareVars := + { + "chiInd.nSta", + "chiInd.nChi", + "chiInd.u", + "chiInd.yChi[1]", + "chiInd.yChi[2]", + "chiInd1.nSta", + "chiInd1.nChi", + "chiInd1.u", + "chiInd1.staMat[1, 1]", + "chiInd1.staMat[1, 2]", + "chiInd1.yChi[1]", + "chiInd1.yChi[2]", + "chiInd2.nSta", + "chiInd2.nChi", + "chiInd2.u", + "chiInd2.staMat[2, 1]", + "chiInd2.staMat[2, 2]", + "chiInd2.yChi[1]", + "chiInd2.yChi[2]", + "chiInd3.nSta", + "chiInd3.nChi", + "chiInd3.u", + "chiInd3.staMat[3, 1]", + "chiInd3.staMat[3, 2]", + "chiInd3.yChi[1]", + "chiInd3.yChi[2]", + "chiInd4.nSta", + "chiInd4.nChi", + "chiInd4.u", + "chiInd4.yChi[1]", + "chiInd4.yChi[2]", + "chiInd4.yChi[3]", + "chiInd5.nSta", + "chiInd5.nChi", + "chiInd5.u", + "chiInd5.staMat[1, 1]", + "chiInd5.staMat[1, 2]", + "chiInd4.staMat[1, 3]", + "chiInd5.yChi[1]", + "chiInd5.yChi[2]", + "chiInd5.yChi[3]", + "chiInd6.nSta", + "chiInd6.nChi", + "chiInd6.u", + "chiInd6.staMat[3, 1]", + "chiInd6.staMat[3, 2]", + "chiInd5.staMat[3, 3]", + "chiInd6.yChi[1]", + "chiInd6.yChi[2]", + "chiInd6.yChi[3]", + "chiInd7.nSta", + "chiInd7.nChi", + "chiInd7.u", + "chiInd7.staMat[5, 1]", + "chiInd7.staMat[5, 2]", + "chiInd7.staMat[5, 3]", + "chiInd7.yChi[1]", + "chiInd7.yChi[2]", + "chiInd7.yChi[3]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Configurator_uChiAva.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Configurator_uChiAva.mos new file mode 100644 index 00000000000..b46b6bca4da --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Configurator_uChiAva.mos @@ -0,0 +1,183 @@ +compareVars := + { + "conf.nSta", + "conf.nChi", + "conf.uChiAva[1]", + "conf.uChiAva[2]", + "conf.uChiAva[3]", + "conf.chiDesCap[1]", + "conf.chiDesCap[2]", + "conf.chiDesCap[3]", + "conf.chiMinCap[1]", + "conf.chiMinCap[2]", + "conf.chiMinCap[3]", + "conf.chiTyp[1]", + "conf.chiTyp[2]", + "conf.chiTyp[3]", + "conf.yAva[1]", + "conf.yAva[2]", + "conf.yAva[3]", + "conf.yAva[4]", + "conf.yTyp[1]", + "conf.yTyp[2]", + "conf.yTyp[3]", + "conf.yTyp[4]", + "conf.yDesCap[1]", + "conf.yDesCap[2]", + "conf.yDesCap[3]", + "conf.yDesCap[4]", + "conf.yMinCap[1]", + "conf.yMinCap[2]", + "conf.yMinCap[3]", + "conf.yMinCap[4]", + "conf1.nSta", + "conf1.nChi", + "conf1.uChiAva[1]", + "conf1.uChiAva[2]", + "conf1.uChiAva[3]", + "conf1.chiDesCap[1]", + "conf1.chiDesCap[2]", + "conf1.chiDesCap[3]", + "conf1.chiMinCap[1]", + "conf1.chiMinCap[2]", + "conf1.chiMinCap[3]", + "conf1.chiTyp[1]", + "conf1.chiTyp[2]", + "conf1.chiTyp[3]", + "conf1.yAva[1]", + "conf1.yAva[2]", + "conf1.yAva[3]", + "conf1.yAva[4]", + "conf1.yTyp[1]", + "conf1.yTyp[2]", + "conf1.yTyp[3]", + "conf1.yTyp[4]", + "conf1.yDesCap[1]", + "conf1.yDesCap[2]", + "conf1.yDesCap[3]", + "conf1.yDesCap[4]", + "conf1.yMinCap[1]", + "conf1.yMinCap[2]", + "conf1.yMinCap[3]", + "conf1.yMinCap[4]", + "conf2.nSta", + "conf2.nChi", + "conf2.uChiAva[1]", + "conf2.uChiAva[2]", + "conf2.uChiAva[3]", + "conf2.chiDesCap[1]", + "conf2.chiDesCap[2]", + "conf2.chiDesCap[3]", + "conf2.chiMinCap[1]", + "conf2.chiMinCap[2]", + "conf2.chiMinCap[3]", + "conf2.chiTyp[1]", + "conf2.chiTyp[2]", + "conf2.chiTyp[3]", + "conf2.yAva[1]", + "conf2.yAva[2]", + "conf2.yAva[3]", + "conf2.yAva[4]", + "conf2.yTyp[1]", + "conf2.yTyp[2]", + "conf2.yTyp[3]", + "conf2.yTyp[4]", + "conf2.yDesCap[1]", + "conf2.yDesCap[2]", + "conf2.yDesCap[3]", + "conf2.yDesCap[4]", + "conf2.yMinCap[1]", + "conf2.yMinCap[2]", + "conf2.yMinCap[3]", + "conf2.yMinCap[4]", + "conf3.nSta", + "conf3.nChi", + "conf3.uChiAva[1]", + "conf3.uChiAva[2]", + "conf3.uChiAva[3]", + "conf3.chiDesCap[1]", + "conf3.chiDesCap[2]", + "conf3.chiDesCap[3]", + "conf3.chiMinCap[1]", + "conf3.chiMinCap[2]", + "conf3.chiMinCap[3]", + "conf3.chiTyp[1]", + "conf3.chiTyp[2]", + "conf3.chiTyp[3]", + "conf3.yAva[1]", + "conf3.yAva[2]", + "conf3.yAva[3]", + "conf3.yAva[4]", + "conf3.yTyp[1]", + "conf3.yTyp[2]", + "conf3.yTyp[3]", + "conf3.yTyp[4]", + "conf3.yDesCap[1]", + "conf3.yDesCap[2]", + "conf3.yDesCap[3]", + "conf3.yDesCap[4]", + "conf3.yMinCap[1]", + "conf3.yMinCap[2]", + "conf3.yMinCap[3]", + "conf3.yMinCap[4]", + "conf4.nSta", + "conf4.nChi", + "conf4.uChiAva[1]", + "conf4.uChiAva[2]", + "conf4.uChiAva[3]", + "conf4.chiDesCap[1]", + "conf4.chiDesCap[2]", + "conf4.chiDesCap[3]", + "conf4.chiMinCap[1]", + "conf4.chiMinCap[2]", + "conf4.chiMinCap[3]", + "conf4.chiTyp[1]", + "conf4.chiTyp[2]", + "conf4.chiTyp[3]", + "conf4.yAva[1]", + "conf4.yAva[2]", + "conf4.yAva[3]", + "conf4.yAva[4]", + "conf4.yTyp[1]", + "conf4.yTyp[2]", + "conf4.yTyp[3]", + "conf4.yTyp[4]", + "conf4.yDesCap[1]", + "conf4.yDesCap[2]", + "conf4.yDesCap[3]", + "conf4.yDesCap[4]", + "conf4.yMinCap[1]", + "conf4.yMinCap[2]", + "conf4.yMinCap[3]", + "conf4.yMinCap[4]", + "conf5.nSta", + "conf5.nChi", + "conf5.uChiAva[1]", + "conf5.uChiAva[2]", + "conf5.uChiAva[3]", + "conf5.chiDesCap[1]", + "conf5.chiDesCap[2]", + "conf5.chiDesCap[3]", + "conf5.chiMinCap[1]", + "conf5.chiMinCap[2]", + "conf5.chiMinCap[3]", + "conf5.chiTyp[1]", + "conf5.chiTyp[2]", + "conf5.chiTyp[3]", + "conf5.yAva[1]", + "conf5.yAva[2]", + "conf5.yAva[3]", + "conf5.yAva[4]", + "conf5.yTyp[1]", + "conf5.yTyp[2]", + "conf5.yTyp[3]", + "conf5.yTyp[4]", + "conf5.yDesCap[1]", + "conf5.yDesCap[2]", + "conf5.yDesCap[3]", + "conf5.yDesCap[4]", + "conf5.yMinCap[1]", + "conf5.yMinCap[2]", + "conf5.yMinCap[3]", + "conf5.yMinCap[4]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Down.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Down.mos new file mode 100644 index 00000000000..2bafef28453 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Down.mos @@ -0,0 +1,31 @@ +compareVars := + { + "withWSE.y", + "withWSE.u", + "withWSE.uOpeDow", + "withWSE.uStaDow", + "withWSE.dpChiWatPumSet_local", + "withWSE.dpChiWatPum_local", + "withWSE.TChiWatSup", + "withWSE.TChiWatSupSet", + "withWSE.TWsePre", + "withWSE.uTowFanSpeMax", + "noWSE.y", + "noWSE.u", + "noWSE.uOpeDow", + "noWSE.uStaDow", + "noWSE.dpChiWatPumSet_local", + "noWSE.dpChiWatPum_local", + "noWSE.TChiWatSup", + "noWSE.TChiWatSupSet", + "withWSE1.y", + "withWSE1.u", + "withWSE1.TChiWatSupSet", + "withWSE1.TWsePre", + "withWSE1.uWseSta", + "withWSE1.uTowFanSpeMax", + "withWSE1.TChiWatSup", + "withWSE1.TChiWatSupSet", + "withWSE1.dpChiWatPumSet_local", + "withWSE1.dpChiWatPum_local" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.EfficiencyCondition.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.EfficiencyCondition.mos new file mode 100644 index 00000000000..a6eeb9b4d73 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.EfficiencyCondition.mos @@ -0,0 +1,6 @@ +compareVars := + { + "effCon.uOpe", + "effCon.uStaUp", + "effCon.y" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.FailsafeCondition.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.FailsafeCondition.mos new file mode 100644 index 00000000000..599681d8e88 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.FailsafeCondition.mos @@ -0,0 +1,21 @@ +compareVars := + { + "faiSafCon0.y", + "faiSafCon0.dpChiWatPumSet_local", + "faiSafCon0.dpChiWatPum_local", + "faiSafCon0.TChiWatSup", + "faiSafCon0.TChiWatSupSet", + "faiSafCon0.hysdpSup.y", + "faiSafCon0.hysTSup.y", + "faiSafCon1.y", + "faiSafCon1.dpChiWatPumSet_local", + "faiSafCon1.dpChiWatPum_local", + "faiSafCon1.TChiWatSup", + "faiSafCon1.TChiWatSupSet", + "faiSafCon1.hysdpSup.y", + "faiSafCon1.hysTSup.y", + "faiSafCon2.y", + "faiSafCon2.TChiWatSup", + "faiSafCon2.TChiWatSupSet", + "faiSafCon2.hysTSup.y" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Initial_WSE.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Initial_WSE.mos new file mode 100644 index 00000000000..eb6d3292e33 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Initial_WSE.mos @@ -0,0 +1,14 @@ +compareVars := + { + "iniStaCol.yIni", + "iniStaCol.uUp", + "iniStaCol.TChiWatSupSet", + "iniStaCol.TOutWet", + "iniStaCol.uTunPar", + "iniStaCol.uPla", + "iniStaHot.yIni", + "iniStaHot.uUp", + "iniStaHot.TChiWatSupSet", + "iniStaHot.TOutWet", + "iniStaHot.uTunPar" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Initial_noWSE.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Initial_noWSE.mos new file mode 100644 index 00000000000..3e52da0b10c --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Initial_noWSE.mos @@ -0,0 +1,11 @@ +compareVars := + { + "iniSta.yIni", + "iniSta.uUp", + "iniSta.have_WSE", + "iniSta.uPla", + "iniSta1.yIni", + "iniSta1.uUp", + "iniSta1.have_WSE", + "iniSta1.uPla" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.PartLoadRatios_u_uTyp.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.PartLoadRatios_u_uTyp.mos new file mode 100644 index 00000000000..99f179794ab --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.PartLoadRatios_u_uTyp.mos @@ -0,0 +1,175 @@ +compareVars := + { + "PLRs0.yOpe", + "PLRs0.yOpeUp", + "PLRs0.yOpeDow", + "PLRs0.yOpeMin", + "PLRs0.yOpeUpMin", + "PLRs0.yStaUp", + "PLRs0.yStaDow", + "PLRs0.uCapReq", + "PLRs0.uCapDes", + "PLRs0.uUpCapDes", + "PLRs0.uDowCapDes", + "PLRs0.uCapMin", + "PLRs0.uUpCapMin", + "PLRs0.nSta", + "PLRs0.u", + "PLRs0.uUp", + "PLRs0.uDown", + "PLRs0.uTyp[1]", + "PLRs0.uTyp[2]", + "PLRs0.uTyp[3]", + "PLRs1.yOpe", + "PLRs1.yOpeUp", + "PLRs1.yOpeDow", + "PLRs1.yOpeMin", + "PLRs1.yOpeUpMin", + "PLRs1.yStaUp", + "PLRs1.yStaDow", + "PLRs1.uCapReq", + "PLRs1.uCapDes", + "PLRs1.uUpCapDes", + "PLRs1.uDowCapDes", + "PLRs1.uCapMin", + "PLRs1.uUpCapMin", + "PLRs1.nSta", + "PLRs1.u", + "PLRs1.uUp", + "PLRs1.uDown", + "PLRs1.uTyp[1]", + "PLRs1.uTyp[2]", + "PLRs1.uTyp[3]", + "PLRs2.yOpe", + "PLRs2.yOpeUp", + "PLRs2.yOpeDow", + "PLRs2.yOpeMin", + "PLRs2.yOpeUpMin", + "PLRs2.yStaUp", + "PLRs2.yStaDow", + "PLRs2.uCapReq", + "PLRs2.uCapDes", + "PLRs2.uUpCapDes", + "PLRs2.uDowCapDes", + "PLRs2.uCapMin", + "PLRs2.uUpCapMin", + "PLRs2.nSta", + "PLRs2.u", + "PLRs2.uUp", + "PLRs2.uDown", + "PLRs2.uTyp[1]", + "PLRs2.uTyp[2]", + "PLRs2.uTyp[3]", + "PLRs3.yOpe", + "PLRs3.yOpeUp", + "PLRs3.yOpeDow", + "PLRs3.yOpeMin", + "PLRs3.yOpeUpMin", + "PLRs3.yStaUp", + "PLRs3.yStaDow", + "PLRs3.uCapReq", + "PLRs3.uCapDes", + "PLRs3.uUpCapDes", + "PLRs3.uDowCapDes", + "PLRs3.uCapMin", + "PLRs3.uUpCapMin", + "PLRs3.nSta", + "PLRs3.u", + "PLRs3.uUp", + "PLRs3.uDown", + "PLRs3.uTyp[1]", + "PLRs3.uTyp[2]", + "PLRs3.uTyp[3]", + "PLRs4.yOpe", + "PLRs4.yOpeUp", + "PLRs4.yOpeDow", + "PLRs4.yOpeMin", + "PLRs4.yOpeUpMin", + "PLRs4.yStaUp", + "PLRs4.yStaDow", + "PLRs4.uCapReq", + "PLRs4.uCapDes", + "PLRs4.uUpCapDes", + "PLRs4.uDowCapDes", + "PLRs4.uCapMin", + "PLRs4.uUpCapMin", + "PLRs4.nSta", + "PLRs4.u", + "PLRs4.uUp", + "PLRs4.uDown", + "PLRs4.uTyp[1]", + "PLRs4.uTyp[2]", + "PLRs4.uTyp[3]", + "PLRs4.uLif", + "PLRs4.uLifMax", + "PLRs4.uLifMin", + "PLRs5.yOpe", + "PLRs5.yOpeUp", + "PLRs5.yOpeDow", + "PLRs5.yOpeMin", + "PLRs5.yOpeUpMin", + "PLRs5.yStaUp", + "PLRs5.yStaDow", + "PLRs5.uCapReq", + "PLRs5.uCapDes", + "PLRs5.uUpCapDes", + "PLRs5.uDowCapDes", + "PLRs5.uCapMin", + "PLRs5.uUpCapMin", + "PLRs5.nSta", + "PLRs5.u", + "PLRs5.uUp", + "PLRs5.uDown", + "PLRs5.uTyp[1]", + "PLRs5.uTyp[2]", + "PLRs5.uTyp[3]", + "PLRs5.uLif", + "PLRs5.uLifMax", + "PLRs5.uLifMin", + "PLRs6.yOpe", + "PLRs6.yOpeUp", + "PLRs6.yOpeDow", + "PLRs6.yOpeMin", + "PLRs6.yOpeUpMin", + "PLRs6.yStaUp", + "PLRs6.yStaDow", + "PLRs6.uCapReq", + "PLRs6.uCapDes", + "PLRs6.uUpCapDes", + "PLRs6.uDowCapDes", + "PLRs6.uCapMin", + "PLRs6.uUpCapMin", + "PLRs6.nSta", + "PLRs6.u", + "PLRs6.uUp", + "PLRs6.uDown", + "PLRs6.uTyp[1]", + "PLRs6.uTyp[2]", + "PLRs6.uTyp[3]", + "PLRs6.uLif", + "PLRs6.uLifMax", + "PLRs6.uLifMin", + "PLRs7.yOpe", + "PLRs7.yOpeUp", + "PLRs7.yOpeDow", + "PLRs7.yOpeMin", + "PLRs7.yOpeUpMin", + "PLRs7.yStaUp", + "PLRs7.yStaDow", + "PLRs7.uCapReq", + "PLRs7.uCapDes", + "PLRs7.uUpCapDes", + "PLRs7.uDowCapDes", + "PLRs7.uCapMin", + "PLRs7.uUpCapMin", + "PLRs7.nSta", + "PLRs7.u", + "PLRs7.uUp", + "PLRs7.uDown", + "PLRs7.uTyp[1]", + "PLRs7.uTyp[2]", + "PLRs7.uTyp[3]", + "PLRs7.uLif", + "PLRs7.uLifMax", + "PLRs7.uLifMin" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Status_u_uAva.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Status_u_uAva.mos new file mode 100644 index 00000000000..e9b4ce70794 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Status_u_uAva.mos @@ -0,0 +1,115 @@ +compareVars := + { + "sta.nSta", + "sta.nChi", + "sta.u", + "sta.uAva[1]", + "sta.uAva[2]", + "sta.uAva[3]", + "sta.uAva[4]", + "sta.staMat[3, 1]", + "sta.staMat[3, 2]", + "sta.staMat[3, 3]", + "sta.yHig", + "sta.yLow", + "sta.yAvaUp", + "sta.yAvaDow", + "sta1.nSta", + "sta1.nChi", + "sta1.u", + "sta1.uAva[1]", + "sta1.uAva[2]", + "sta1.uAva[3]", + "sta1.uAva[4]", + "sta1.staMat[3, 1]", + "sta1.staMat[3, 2]", + "sta1.staMat[3, 3]", + "sta1.yHig", + "sta1.yLow", + "sta1.yAvaUp", + "sta1.yAvaDow", + "sta2.nSta", + "sta2.nChi", + "sta2.u", + "sta2.uAva[1]", + "sta2.uAva[2]", + "sta2.uAva[3]", + "sta2.uAva[4]", + "sta2.staMat[3, 1]", + "sta2.staMat[3, 2]", + "sta2.staMat[3, 3]", + "sta2.yHig", + "sta2.yLow", + "sta2.yAvaUp", + "sta2.yAvaDow", + "sta3.nSta", + "sta3.nChi", + "sta3.u", + "sta3.uAva[1]", + "sta3.uAva[2]", + "sta3.uAva[3]", + "sta3.uAva[4]", + "sta3.staMat[1, 1]", + "sta3.staMat[1, 2]", + "sta3.staMat[1, 3]", + "sta3.yHig", + "sta3.yLow", + "sta3.yAvaUp", + "sta3.yAvaDow", + "sta4.nSta", + "sta4.nChi", + "sta4.u", + "sta4.uAva[1]", + "sta4.uAva[2]", + "sta4.uAva[3]", + "sta4.uAva[4]", + "sta4.staMat[3, 1]", + "sta4.staMat[3, 2]", + "sta4.staMat[3, 3]", + "sta4.yHig", + "sta4.yLow", + "sta4.yAvaUp", + "sta4.yAvaDow", + "sta5.nSta", + "sta5.nChi", + "sta5.u", + "sta5.uAva[1]", + "sta5.uAva[2]", + "sta5.uAva[3]", + "sta5.uAva[4]", + "sta5.staMat[1, 1]", + "sta5.staMat[1, 2]", + "sta5.staMat[1, 3]", + "sta5.yHig", + "sta5.yLow", + "sta5.yAvaUp", + "sta5.yAvaDow", + "sta6.nSta", + "sta6.nChi", + "sta6.u", + "sta6.uAva[1]", + "sta6.uAva[2]", + "sta6.uAva[3]", + "sta6.uAva[4]", + "sta6.staMat[3, 1]", + "sta6.staMat[3, 2]", + "sta6.staMat[3, 3]", + "sta6.yHig", + "sta6.yLow", + "sta6.yAvaUp", + "sta6.yAvaDow", + "sta7.nSta", + "sta7.nChi", + "sta7.u", + "sta7.uAva[1]", + "sta7.uAva[2]", + "sta7.uAva[3]", + "sta7.uAva[4]", + "sta7.staMat[1, 1]", + "sta7.staMat[1, 2]", + "sta7.staMat[1, 3]", + "sta7.yHig", + "sta7.yLow", + "sta7.yAvaUp", + "sta7.yAvaDow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Up.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Up.mos new file mode 100644 index 00000000000..19810dd6077 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Subsequences.Validation.Up.mos @@ -0,0 +1,19 @@ +compareVars := + { + "staUp.y", + "staUp.uPla", + "staUp.uOpe", + "staUp.uStaUp", + "staUp.dpChiWatPumSet_local", + "staUp.dpChiWatPum_local", + "staUp.TChiWatSup", + "staUp.TChiWatSupSet", + "staUp1.y", + "staUp1.uPla", + "staUp1.uOpe", + "staUp1.uStaUp", + "staUp1.dpChiWatPumSet_local", + "staUp1.dpChiWatPum_local", + "staUp1.TChiWatSup", + "staUp1.TChiWatSupSet" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Validation.SetpointController_WSE.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Validation.SetpointController_WSE.mos new file mode 100644 index 00000000000..8a8c2cad837 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Validation.SetpointController_WSE.mos @@ -0,0 +1,20 @@ +compareVars := + { + "staSetCon.ySta", + "staSetCon.cap.yDes", + "staSetCon.capReq.y", + "staSetCon.staUp.y", + "staSetCon.staDow.y", + "staSetCon.yChiSet[1]", + "staSetCon.yChiSet[2]", + "staSetCon.chaPro", + "staSetCon1.ySta", + "staSetCon1.cap.yDes", + "staSetCon1.capReq.y", + "staSetCon1.staUp.y", + "staSetCon1.staDow.y", + "staSetCon1.yChiSet[1]", + "staSetCon1.yChiSet[2]", + "staSetCon1.yChiSet[3]", + "staSetCon1.chaPro" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Validation.SetpointController_noWSE.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Validation.SetpointController_noWSE.mos new file mode 100644 index 00000000000..8a8c2cad837 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Staging.SetPoints.Validation.SetpointController_noWSE.mos @@ -0,0 +1,20 @@ +compareVars := + { + "staSetCon.ySta", + "staSetCon.cap.yDes", + "staSetCon.capReq.y", + "staSetCon.staUp.y", + "staSetCon.staDow.y", + "staSetCon.yChiSet[1]", + "staSetCon.yChiSet[2]", + "staSetCon.chaPro", + "staSetCon1.ySta", + "staSetCon1.cap.yDes", + "staSetCon1.capReq.y", + "staSetCon1.staUp.y", + "staSetCon1.staDow.y", + "staSetCon1.yChiSet[1]", + "staSetCon1.yChiSet[2]", + "staSetCon1.yChiSet[3]", + "staSetCon1.chaPro" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.Validation.IntegratedOperation.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.Validation.IntegratedOperation.mos new file mode 100644 index 00000000000..a13e44eb324 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.Validation.IntegratedOperation.mos @@ -0,0 +1,12 @@ +compareVars := + { + "intOpe.uChi[1]", + "intOpe.uChi[2]", + "intOpe.uWse", + "intOpe.chiLoa[1]", + "intOpe.chiMinCap[1]", + "intOpe.ySpeSet", + "intOpe.fanSpe.u3", + "intOpe.fanSpe.u1", + "intOpe.fanSpe.u2" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.Validation.WSEOperation.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.Validation.WSEOperation.mos new file mode 100644 index 00000000000..caa7f29a340 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Subsequences.Validation.WSEOperation.mos @@ -0,0 +1,8 @@ +compareVars := + { + "wseOpe.uFanSpe", + "wseOpe.TChiWatSup", + "wseOpe.TChiWatSupSet", + "wseOpe.ySpeSet", + "wseOpe.fanCycOff.y" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Validation.Controller.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Validation.Controller.mos new file mode 100644 index 00000000000..9f5daefa005 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.EnabledWSE.Validation.Controller.mos @@ -0,0 +1,12 @@ +compareVars := + { + "wseOpe.chiLoa[1]", + "wseOpe.chiLoa[2]", + "wseOpe.uChi[1]", + "wseOpe.uChi[2]", + "wseOpe.uWse", + "wseOpe.uFanSpe", + "wseOpe.TChiWatSup", + "wseOpe.TChiWatSupSet", + "wseOpe.ySpeSet" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.Coupled.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.Coupled.mos new file mode 100644 index 00000000000..1aa1b95f6d6 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.Coupled.mos @@ -0,0 +1,14 @@ +compareVars := + { + "couTowSpe.TConWatRetSet", + "couTowSpe.TConWatRet", + "couTowSpe.uConWatPumSpe[1]", + "couTowSpe.uConWatPumSpe[2]", + "couTowSpe.uMaxTowSpeSet[1]", + "couTowSpe.uMaxTowSpeSet[2]", + "couTowSpe.plrTowMaxSpe", + "couTowSpe.CWRTSpd.y", + "couTowSpe.ySpeSet", + "couTowSpe.uChi[1]", + "couTowSpe.uChi[2]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.Enable.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.Enable.mos new file mode 100644 index 00000000000..780cd4f4ae7 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.Enable.mos @@ -0,0 +1,21 @@ +compareVars := + { + "enaTow.uMaxTowSpeSet[1]", + "enaTow.uMaxTowSpeSet[2]", + "enaTow.fanSpeMin", + "enaTow.TTowSet", + "enaTow.TTow", + "enaTow.uTow[1]", + "enaTow.yTow", + "disTow.uMaxTowSpeSet[1]", + "disTow.uMaxTowSpeSet[2]", + "disTow.fanSpeMin", + "disTow.uTow[1]", + "disTow.uTow[4]", + "disTow.yTow", + "disTow1.uFanSpe", + "disTow1.fanSpeMin", + "disTow1.TTow", + "disTow1.TTowSet", + "disTow1.yTow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.LessCoupled.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.LessCoupled.mos new file mode 100644 index 00000000000..58b044b705b --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.LessCoupled.mos @@ -0,0 +1,16 @@ +compareVars := + { + "lesCouTowSpe.TConWatRetSet", + "lesCouTowSpe.TConWatRet", + "lesCouTowSpe.TConWatSup", + "lesCouTowSpe.uConWatPumSpe[1]", + "lesCouTowSpe.uConWatPumSpe[2]", + "lesCouTowSpe.TConWatSup", + "lesCouTowSpe.TConWatSupSet", + "lesCouTowSpe.uMaxTowSpeSet[1]", + "lesCouTowSpe.uMaxTowSpeSet[2]", + "lesCouTowSpe.ySpeSet", + "lesCouTowSpe.plrTowMaxSpe", + "lesCouTowSpe.uChi[1]", + "lesCouTowSpe.uChi[2]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.Setpoint.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.Setpoint.mos new file mode 100644 index 00000000000..1fbc38c2def --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Subsequences.Validation.Setpoint.mos @@ -0,0 +1,12 @@ +compareVars := + { + "conWatRetSet.uChi[1]", + "conWatRetSet.uChi[2]", + "conWatRetSet.uPla", + "conWatRetSet.uOpeParLoaRat", + "conWatRetSet.TChiWatSupSet", + "conWatRetSet.TConWatRetSet", + "conWatRetSet.conWatRet.y", + "conWatRetSet.TConWatRet_nominal[1]", + "conWatRetSet.TConWatRet_nominal[2]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Validation.Controller.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Validation.Controller.mos new file mode 100644 index 00000000000..379d983b324 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.ReturnWaterTemperature.Validation.Controller.mos @@ -0,0 +1,25 @@ +compareVars := + { + "towFanSpe.uChi[1]", + "towFanSpe.uChi[2]", + "towFanSpe.uWse", + "towFanSpe.uTow[1]", + "towFanSpe.uPla", + "towFanSpe.TConWatRet", + "towFanSpe.conWatRetSet.TConWatRetSet", + "towFanSpe.couTowSpe.ySpeSet", + "towFanSpe.uTowSpeWSE", + "towFanSpe.ySpeSet", + "towFanSpe.couTowSpe.CWRTSpd.y", + "towFanSpe.couTowSpe.uMaxTowSpeSet[1]", + "towFanSpe.couTowSpe.plrTowMaxSpe", + "towFanSpe1.TConWatRet", + "towFanSpe1.conWatRetSet.TConWatRetSet", + "towFanSpe1.lesCouTowSpe.ySpeSet", + "towFanSpe1.uTowSpeWSE", + "towFanSpe1.ySpeSet", + "towFanSpe2.TConWatRet", + "towFanSpe2.conWatRetSet.TConWatRetSet", + "towFanSpe2.couTowSpe.ySpeSet", + "towFanSpe2.ySpeSet" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.Validation.Controller.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.Validation.Controller.mos new file mode 100644 index 00000000000..ab6f7af8afe --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.FanSpeed.Validation.Controller.mos @@ -0,0 +1,23 @@ +compareVars := + { + "cloCouWitWse.uChi[1]", + "cloCouWitWse.uWse", + "cloCouWitWse.uTow[1]", + "cloCouWitWse.uPla", + "cloCouWitWse.TConWatRet", + "cloCouWitWse.fanSpeRetTem.conWatRetSet.TConWatRetSet", + "cloCouWitWse.fanSpeRetTem.couTowSpe.ySpeSet", + "cloCouWitWse.fanSpeRetTem.uTowSpeWSE", + "cloCouWitWse.ySpeSet", + "cloCouWitWse.uConWatPumSpe[1]", + "cloCouWitWse.uConWatPumSpe[2]", + "lesCouWitWse.TConWatRet", + "lesCouWitWse.fanSpeRetTem.conWatRetSet.TConWatRetSet", + "lesCouWitWse.fanSpeRetTem.lesCouTowSpe.ySpeSet", + "lesCouWitWse.fanSpeRetTem.uTowSpeWSE", + "lesCouWitWse.ySpeSet", + "cloCouNoWse.TConWatRet", + "cloCouNoWse.fanSpeRetTem.conWatRetSet.TConWatRetSet", + "cloCouNoWse.fanSpeRetTem.couTowSpe.ySpeSet", + "cloCouNoWse.ySpeSet" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation.CellsNumber.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation.CellsNumber.mos new file mode 100644 index 00000000000..2ecd6a0b71f --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation.CellsNumber.mos @@ -0,0 +1,10 @@ +compareVars := + { + "enaTowCel.uChiSta", + "enaTowCel.uChiStaSet", + "enaTowCel.uTowStaCha", + "enaTowCel.uWse", + "enaTowCel.yNumCel", + "enaTowCel.yLeaCel", + "enaTowCel.uConWatPumSpe[1]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation.ChangeCells.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation.ChangeCells.mos new file mode 100644 index 00000000000..136e2539be6 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation.ChangeCells.mos @@ -0,0 +1,16 @@ +compareVars := + { + "enaTowCel.uCelNum", + "enaTowCel.uTowSta[1]", + "enaTowCel.uTowSta[2]", + "enaTowCel.uTowSta[3]", + "enaTowCel.uTowSta[4]", + "enaTowCel.yChaCel[1]", + "enaTowCel.yChaCel[2]", + "enaTowCel.yChaCel[3]", + "enaTowCel.yChaCel[4]", + "enaTowCel.yTowSta[1]", + "enaTowCel.yTowSta[2]", + "enaTowCel.yTowSta[3]", + "enaTowCel.yTowSta[4]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation.StageProcesses.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation.StageProcesses.mos new file mode 100644 index 00000000000..5138d9286b4 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Subsequences.Validation.StageProcesses.mos @@ -0,0 +1,43 @@ +compareVars := + { + "enaPro.uChaCel[1]", + "enaPro.uChaCel[2]", + "enaPro.uChaCel[3]", + "enaPro.uChaCel[4]", + "enaPro.uIsoVal[1]", + "enaPro.uIsoVal[2]", + "enaPro.uIsoVal[3]", + "enaPro.uIsoVal[4]", + "enaPro.yIsoVal[1]", + "enaPro.yIsoVal[2]", + "enaPro.yIsoVal[3]", + "enaPro.yIsoVal[4]", + "enaPro.uTowSta[1]", + "enaPro.uTowSta[2]", + "enaPro.uTowSta[3]", + "enaPro.uTowSta[4]", + "enaPro.yTowSta[1]", + "enaPro.yTowSta[2]", + "enaPro.yTowSta[3]", + "enaPro.yTowSta[4]", + "disPro.uChaCel[1]", + "disPro.uChaCel[2]", + "disPro.uChaCel[3]", + "disPro.uChaCel[4]", + "disPro.uIsoVal[1]", + "disPro.uIsoVal[2]", + "disPro.uIsoVal[3]", + "disPro.uIsoVal[4]", + "disPro.yIsoVal[1]", + "disPro.yIsoVal[2]", + "disPro.yIsoVal[3]", + "disPro.yIsoVal[4]", + "disPro.uTowSta[1]", + "disPro.uTowSta[2]", + "disPro.uTowSta[3]", + "disPro.uTowSta[4]", + "disPro.yTowSta[1]", + "disPro.yTowSta[2]", + "disPro.yTowSta[3]", + "disPro.yTowSta[4]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Validation.Controller.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Validation.Controller.mos new file mode 100644 index 00000000000..f6574a6008b --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Staging.Validation.Controller.mos @@ -0,0 +1,11 @@ +compareVars := + { + "towSta.uChiSta", + "towSta.uChiStaSet", + "towSta.uTowStaCha", + "towSta.uWse", + "towSta.uIsoVal[1]", + "towSta.uIsoVal[2]", + "towSta.uTowSta[1]", + "towSta.uTowSta[2]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation.WaterLevel.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation.WaterLevel.mos new file mode 100644 index 00000000000..ec48bae5301 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation.WaterLevel.mos @@ -0,0 +1,7 @@ +compareVars := + { + "makUpWat.watLev", + "makUpWat.watLevMin", + "makUpWat.watLevMax", + "makUpWat.yMakUp" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation.WithWSE.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation.WithWSE.mos new file mode 100644 index 00000000000..c2f95808a2e --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation.WithWSE.mos @@ -0,0 +1,22 @@ +compareVars := + { + "towCon.uChi[1]", + "towCon.uWse", + "towCon.yLeaCel", + "towCon.TChiWatSup", + "towCon.TChiWatSupSet", + "towCon.yMakUp", + "towCon.watLev", + "towCon.watLevMin", + "towCon.watLevMax", + "towCon.uConWatPumSpe[1]", + "towCon.uConWatPumSpe[2]", + "towCon.uChiSta", + "towCon.uChiStaSet", + "towCon.uTowSta[1]", + "towCon.uTowSta[2]", + "towCon.ySpeSet[1]", + "towCon.ySpeSet[2]", + "towCon.chiLoa[1]", + "towCon.chiMinCap[1]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation.WithoutWSE.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation.WithoutWSE.mos new file mode 100644 index 00000000000..ca327e74453 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Towers.Validation.WithoutWSE.mos @@ -0,0 +1,17 @@ +compareVars := + { + "towCon.uChi[1]", + "towCon.yLeaCel", + "towCon.yMakUp", + "towCon.watLev", + "towCon.watLevMin", + "towCon.watLevMax", + "towCon.uConWatPumSpe[1]", + "towCon.uConWatPumSpe[2]", + "towCon.uChiSta", + "towCon.uChiStaSet", + "towCon.uTowSta[1]", + "towCon.uTowSta[2]", + "towCon.ySpeSet[1]", + "towCon.ySpeSet[2]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Validation.Controller.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Validation.Controller.mos new file mode 100644 index 00000000000..7ba1240cb91 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Validation.Controller.mos @@ -0,0 +1,34 @@ +compareVars := + { + "chiPlaCon.wseSta.uPla", + "chiPlaCon.wseSta.y", + "chiPlaCon.wseSta.yPumOn", + "chiPlaCon.wseSta.uIni", + "chiPlaCon.wseSta.uChiSta", + "chiPlaCon.wseSta.yConWatIsoVal", + "chiPlaCon.wseSta.yPumSpe", + "chiPlaCon.staSetCon.yUp", + "chiPlaCon.staSetCon.yChiSet[1]", + "chiPlaCon.staSetCon.yChiSet[2]", + "chiPlaCon.upProCon.yStaPro", + "chiPlaCon.upProCon.yTowStaUp", + "chiPlaCon.upProCon.yLeaPum", + "chiPlaCon.upProCon.yDesConWatPumSpe", + "chiPlaCon.upProCon.yConWatPumNum", + "chiPlaCon.upProCon.yChiHeaCon[1]", + "chiPlaCon.upProCon.yChiHeaCon[2]", + "chiPlaCon.upProCon.yChiWatIsoVal[1]", + "chiPlaCon.upProCon.yChiWatIsoVal[2]", + "chiPlaCon.upProCon.yChi[1]", + "chiPlaCon.upProCon.yChi[2]", + "chiPlaCon.chiWatPumCon.yChiWatPum[1]", + "chiPlaCon.chiWatPumCon.yChiWatPum[2]", + "chiPlaCon.chiWatPumCon.yPumSpe", + "chiPlaCon.towCon.yLeaCel", + "chiPlaCon.towCon.yIsoVal[1]", + "chiPlaCon.towCon.yIsoVal[2]", + "chiPlaCon.towCon.yTowSta[1]", + "chiPlaCon.towCon.yTowSta[2]", + "chiPlaCon.towCon.ySpeSet[1]", + "chiPlaCon.towCon.ySpeSet[2]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.BatteryControl.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.BatteryControl.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.BatteryControl.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.BatteryControl.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.ChillerSetPointControl.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.ChillerSetPointControl.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.ChillerSetPointControl.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.ChillerSetPointControl.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.ChillerSwitch.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.ChillerSwitch.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.ChillerSwitch.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.ChillerSwitch.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.KMinusU.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.KMinusU.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.KMinusU.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.KMinusU.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.LinearPiecewiseTwo.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.LinearPiecewiseTwo.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.LinearPiecewiseTwo.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.LinearPiecewiseTwo.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.RequestCounter.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.RequestCounter.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.RequestCounter.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.RequestCounter.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.TrimAndRespond.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.TrimAndRespond.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.TrimAndRespond.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.TrimAndRespond.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.WSEControl.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.WSEControl.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.WSEControl.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.BaseClasses.Controls.Examples.WSEControl.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.DataCenterContinuousTimeControl.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.ContinuousTimeControl.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.DataCenterContinuousTimeControl.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.ContinuousTimeControl.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.DataCenterDiscreteTimeControl.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.DiscreteTimeControl.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.DataCenterDiscreteTimeControl.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.DiscreteTimeControl.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.DataCenterRenewables.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.Renewables.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlant.DataCenterRenewables.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.DataCenter.Renewables.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.Guideline36.ClosedLoop.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.Guideline36.ClosedLoop.mos new file mode 100644 index 00000000000..ad8c260da23 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.ChillerPlants.Guideline36.ClosedLoop.mos @@ -0,0 +1,25 @@ +compareVars := + { + "chiPla.chi1.m1_flow", + "chiPla.chi1.m2_flow", + "chiPla.chi1.on", + "chiPla.chi1.TSet", + "chiPla.chi2.m1_flow", + "chiPla.chi2.m2_flow", + "chiPla.chi2.on", + "chiPla.chi2.TSet", + "chiPla.chiWatSupTem.T", + "chiPla.chiWatRet.T", + "chiPla.chwIsoVal1.y", + "chiPla.chwIsoVal2.y", + "chiPla.chiWatPum1.y", + "chiPla.chiWatPum2.y", + "chiPla.cwIsoVal1.y", + "chiPla.cwIsoVal2.y", + "chiPla.conWatPum1.y", + "chiPla.conWatPum2.y", + "chiPla.cooTow1.y", + "chiPla.cooTow2.y", + "chiPla.conWatSupTem.T", + "chiPla.conWatRetTem.T" + }; diff --git a/Buildings/Resources/Scripts/travis/templates/BoilerPlant.py b/Buildings/Resources/Scripts/travis/templates/BoilerPlant.py new file mode 100755 index 00000000000..c50385de3ea --- /dev/null +++ b/Buildings/Resources/Scripts/travis/templates/BoilerPlant.py @@ -0,0 +1,274 @@ +#!/usr/bin/env python +# coding: utf-8 + +# Requires Python >= 3.9 + +# This script shall be run from the directory `modelica-buildings/Buildings`, +# i.e., where the top-level `package.mo` file can be found. +# The script takes as an optional positional argument the Modelica tool to use +# (Dymola or Optimica, defaulting to Dymola). +# The script performs the following tasks. +# - Generate all possible combinations of class modifications based on a set of +# parameter bindings and redeclare statements provided in `MODIF_GRID`. +# - Exclude the combinations based on a match with the patterns provided in `EXCLUDE`. +# - This allows excluding unsupported configurations. +# - Exclude the class modifications based on a match with the patterns provided in `REMOVE_MODIF`, +# and prune the resulting duplicated combinations. +# - This allows reducing the number of simulations by excluding class modifications that +# yield the same model, i.e., modifications to parameters that are not used (disabled) in +# the given configuration. +# - For the remaining combinations: run the corresponding simulations for the models in `MODELS`. +# The script returns +# - 0 if all simulations succeed, +# - 1 otherwise. + +from core import * + +try: + SIMULATOR = sys.argv[1] +except IndexError: + SIMULATOR = 'Dymola' + +MODELS: list[str] = [ + 'Buildings.Templates.HeatingPlants.HotWater.Validation.BoilerPlant', +] + +MODIF_GRID: dict[str, dict[str, list[str]]] = { + 'Buildings.Templates.HeatingPlants.HotWater.Validation.BoilerPlant': dict( + BOI__typ=[ + 'Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.Condensing', + 'Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.NonCondensing', + 'Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.Hybrid', + ], + BOI__nBoiCon_select=[ + '2', + ], + BOI__nBoiNon_select=[ + '2', + ], + BOI__typPumHeaWatPriCon=[ + 'Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.Variable', + 'Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.Constant', + 'Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.FactoryVariable', + 'Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.FactoryConstant', + ], + BOI__typPumHeaWatPriNon=[ + 'Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.Variable', + 'Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.Constant', + 'Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.FactoryVariable', + 'Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.FactoryConstant', + ], + BOI__typArrPumHeaWatPriCon_select=[ + 'Buildings.Templates.Components.Types.PumpArrangement.Dedicated', + 'Buildings.Templates.Components.Types.PumpArrangement.Headered', + ], + BOI__typArrPumHeaWatPriNon_select=[ + 'Buildings.Templates.Components.Types.PumpArrangement.Dedicated', + 'Buildings.Templates.Components.Types.PumpArrangement.Headered', + ], + BOI__typPumHeaWatSec1_select=[ + 'Buildings.Templates.HeatingPlants.HotWater.Types.PumpsSecondary.Centralized', + 'Buildings.Templates.HeatingPlants.HotWater.Types.PumpsSecondary.None', + ], + BOI__typPumHeaWatSec2_select=[ + 'Buildings.Templates.HeatingPlants.HotWater.Types.PumpsSecondary.Centralized', + ], + BOI__ctl__typMeaCtlHeaWatPri=[ + 'Buildings.Templates.HeatingPlants.HotWater.Types.PrimaryOverflowMeasurement.FlowDecoupler', + 'Buildings.Templates.HeatingPlants.HotWater.Types.PrimaryOverflowMeasurement.FlowDifference', + 'Buildings.Templates.HeatingPlants.HotWater.Types.PrimaryOverflowMeasurement.TemperatureSupplySensor', + 'Buildings.Templates.HeatingPlants.HotWater.Types.PrimaryOverflowMeasurement.TemperatureBoilerSensor', + ], + BOI__ctl__have_senDpHeaWatLoc=[ + 'true', + 'false', + ], + BOI__ctl__locSenVHeaWatPri=[ + 'Buildings.Templates.HeatingPlants.HotWater.Types.SensorLocation.Supply', + 'Buildings.Templates.HeatingPlants.HotWater.Types.SensorLocation.Return', + ], + BOI__ctl__locSenVHeaWatSec=[ + 'Buildings.Templates.HeatingPlants.HotWater.Types.SensorLocation.Supply', + 'Buildings.Templates.HeatingPlants.HotWater.Types.SensorLocation.Return', + ], + ), +} + +# A case is excluded if the "exclusion test" returns true for any of the item value from EXCLUDE. +# Exclusion test: +# - concatenate all class modifications, +# - return true if all strings from the item value of EXCLUDE are found in the concatenation product. +# - (re patterns are supported: for instance negative lookahead assertion using (?!pattern).) +EXCLUDE: dict[str, list[list[str]]] = { + 'Buildings.Templates.HeatingPlants.HotWater.Validation.BoilerPlant': [ + [ + 'Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.Hybrid', + 'Buildings.Templates.HeatingPlants.HotWater.Types.PumpsSecondary.None', + ], + ], +} + +# Class modifications are removed for each model to be simulated according to the following rules. +# For each item (2-tuple) of the list provided (as value) for each model (key) in REMOVE_MODIF (dict): +# - if all patterns of item[0] are found in the original class modifications, and +# - if a class modification contains any item within item[1], then it is removed. +# - (re patterns are supported: for instance negative lookahead assertion using (?!pattern).) +# Removing the class modifications this way yields many duplicate sets of class modifications. +# Those are pruned afterwards. +REMOVE_MODIF: dict[str, list[tuple[list[str], list[str]]]] = { + 'Buildings.Templates.HeatingPlants.HotWater.Validation.BoilerPlant': [ + ( + [ + 'typ=Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.Hybrid', + ], + [ + 'typPumHeaWatSec1_select', + ], + ), + ( + [ + 'typ=Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.(?!Hybrid)', + ], + [ + 'typPumHeaWatSec2_select', + ], + ), + ( + [ + 'typ=Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.(?!Hybrid)', + 'typPumHeaWatSec1_select=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsSecondary.None', + ], + [ + 'typMeaCtlHeaWatPri', + 'locSenVHeaWatSec', + ], + ), + ( + [ + 'typPumHeaWatSec(1|2)_select=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsSecondary.(?!None)', + 'typMeaCtlHeaWatPri=Buildings.Templates.HeatingPlants.HotWater.Types.PrimaryOverflowMeasurement.(?!FlowDifference)', + ], + [ + 'locSenVHeaWatSec', + ], + ), + ( + [ + 'typ=Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.Condensing', + 'typPumHeaWatSec1_select=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsSecondary.(?!None)', + 'typPumHeaWatPriCon=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.(Factory)?Constant', + ], + [ + 'typMeaCtlHeaWatPri', + 'locSenVHeaWatPri', + ], + ), + ( + [ + 'typ=Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.NonCondensing', + 'typPumHeaWatSec1_select=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsSecondary.(?!None)', + 'typPumHeaWatPriNon=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.(Factory)?Constant', + ], + [ + 'typMeaCtlHeaWatPri', + 'locSenVHeaWatPri', + ], + ), + ( + [ + 'typ=Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.Condensing', + 'typPumHeaWatSec1_select=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsSecondary.(?!None)', + 'typPumHeaWatPriCon=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.(Factory)?Variable', + 'typMeaCtlHeaWatPri=Buildings.Templates.HeatingPlants.HotWater.Types.PrimaryOverflowMeasurement.(?!FlowDifference)', + ], + [ + 'locSenVHeaWatPri', + ], + ), + ( + [ + 'typ=Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.NonCondensing', + 'typPumHeaWatSec1_select=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsSecondary.(?!None)', + 'typPumHeaWatPriNon=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.(Factory)?Variable', + 'typMeaCtlHeaWatPri=Buildings.Templates.HeatingPlants.HotWater.Types.PrimaryOverflowMeasurement.(?!FlowDifference)', + ], + [ + 'locSenVHeaWatPri', + ], + ), + ( + [ + 'typ=Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.Hybrid', + 'typPumHeaWatSec2_select=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsSecondary.(?!None)', + 'typPumHeaWatPri(Con|Non)=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.(Factory)?Variable', + 'typMeaCtlHeaWatPri=Buildings.Templates.HeatingPlants.HotWater.Types.PrimaryOverflowMeasurement.(?!FlowDifference)', + ], + [ + 'locSenVHeaWatPri', + ], + ), + ( + [ + 'typ=Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.Condensing', + ], + [ + 'typArrPumHeaWatPriNon_select', + 'nBoiNon_select', + 'typPumHeaWatPriNon', + ], + ), + ( + [ + 'typ=Buildings.Templates.HeatingPlants.HotWater.Types.Boiler.NonCondensing', + ], + [ + 'typArrPumHeaWatPriCon_select', + 'nBoiCon_select', + 'typPumHeaWatPriCon', + ], + ), + ( + [ + 'typPumHeaWatPriCon=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.Factory' + ], + [ + 'typArrPumHeaWatPriCon_select', + ], + ), + ( + [ + 'typPumHeaWatPriNon=Buildings.Templates.HeatingPlants.HotWater.Types.PumpsPrimary.Factory' + ], + [ + 'typArrPumHeaWatPriNon_select', + ], + ), + ], +} + + +if __name__ == '__main__': + # Generate combinations. + combinations: list[tuple[str, list[str], str]] = generate_combinations(models=MODELS, modif_grid=MODIF_GRID) + + # Prune class modifications. + prune_modifications(combinations=combinations, remove_modif=REMOVE_MODIF, exclude=EXCLUDE) + + # FIXME(AntoineGautier PR#3364): Temporarily limit the number of simulations to be run (for testing purposes only). + combinations = combinations[:2] + + # Simulate cases. + results = simulate_cases(combinations, simulator=SIMULATOR, asy=False) + + # Report and clean. + df = report_clean(combinations, results) + + # Log and exit. + if df.errorcode.abs().sum() != 0: + print( + CRED + 'Some simulations failed: ' + CEND + 'see the file `unitTestsTemplates.log`.\n' + ) + sys.exit(1) + else: + print(CGREEN + 'All simulations succeeded.\n' + CEND) + sys.exit(0) diff --git a/Buildings/Resources/Scripts/travis/templates/ChilledWaterPlants.py b/Buildings/Resources/Scripts/travis/templates/ChilledWaterPlants.py new file mode 100755 index 00000000000..2cae65e85b9 --- /dev/null +++ b/Buildings/Resources/Scripts/travis/templates/ChilledWaterPlants.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python +# coding: utf-8 + +# This script shall be run from the directory `modelica-buildings/Buildings`, +# i.e., where the top-level `package.mo` file can be found. +# The script takes as an optional positional argument the Modelica tool to use +# (Dymola or Optimica, defaulting to Dymola). +# The script performs the following tasks. +# - Generate all possible combinations of class modifications based on a set of +# parameter bindings and redeclare statements provided in `MODIF_GRID`. +# - Exclude the combinations based on a match with the patterns provided in `EXCLUDE`. +# - This allows excluding unsupported configurations. +# - Exclude the class modifications based on a match with the patterns provided in `REMOVE_MODIF`, +# and prune the resulting duplicated combinations. +# - This allows reducing the number of simulations by excluding class modifications that +# yield the same model, i.e., modifications to parameters that are not used (disabled) in +# the given configuration. +# - For the remaining combinations: run the corresponding simulations for the models in `MODELS`. +# The script returns +# - 0 if all simulations succeed, +# - 1 otherwise. + +from core import * + +try: + SIMULATOR = sys.argv[1] +except IndexError: + SIMULATOR = 'Dymola' + +MODELS = [ + 'Buildings.Templates.ChilledWaterPlants.Validation.AirCooledOpenLoop', + 'Buildings.Templates.ChilledWaterPlants.Validation.WaterCooledOpenLoop', + # 'Buildings.Templates.ChilledWaterPlants.Validation.WaterCooledG36', +] + +CRED = '\033[91m' +CGREEN = '\033[92m' +CEND = '\033[0m' + +MODIF_GRID: dict[str, dict[str, list[str]]] = { + 'Buildings.Templates.ChilledWaterPlants.Validation.AirCooledOpenLoop': dict( + CHI__typArrChi_select=[ + 'Buildings.Templates.ChilledWaterPlants.Types.ChillerArrangement.Parallel', + 'Buildings.Templates.ChilledWaterPlants.Types.ChillerArrangement.Series', + ], + CHI__typDisChiWat=[ + 'Buildings.Templates.ChilledWaterPlants.Types.Distribution.Constant1Only', + 'Buildings.Templates.ChilledWaterPlants.Types.Distribution.Variable1Only', + 'Buildings.Templates.ChilledWaterPlants.Types.Distribution.Constant1Variable2', + 'Buildings.Templates.ChilledWaterPlants.Types.Distribution.Variable1And2', + # 'Buildings.Templates.ChilledWaterPlants.Types.Distribution.Variable1And2Distributed', + ], + CHI__typArrPumChiWatPri_select=[ + 'Buildings.Templates.Components.Types.PumpArrangement.Dedicated', + 'Buildings.Templates.Components.Types.PumpArrangement.Headered', + ], + CHI__have_varPumChiWatPri_select=[ + 'true', + 'false', + ], + CHI__chi__typValChiWatChiIso_select=[ + 'Buildings.Templates.Components.Types.Valve.TwoWayModulating', + 'Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition', + ], + ), +} + +MODIF_GRID['Buildings.Templates.ChilledWaterPlants.Validation.WaterCooledOpenLoop'] = { + **MODIF_GRID['Buildings.Templates.ChilledWaterPlants.Validation.AirCooledOpenLoop'], + **dict( + CHI__ctl__typCtlHea=[ + 'Buildings.Templates.ChilledWaterPlants.Types.ChillerLiftControl.None', + 'Buildings.Templates.ChilledWaterPlants.Types.ChillerLiftControl.BuiltIn', + 'Buildings.Templates.ChilledWaterPlants.Types.ChillerLiftControl.External', + ], + CHI__typArrPumConWat_select=[ + 'Buildings.Templates.Components.Types.PumpArrangement.Dedicated', + 'Buildings.Templates.Components.Types.PumpArrangement.Headered', + ], + CHI__have_varPumConWat_select=[ + 'true', + 'false', + ], + CHI__chi__typValConWatChiIso_select=[ + 'Buildings.Templates.Components.Types.Valve.TwoWayModulating', + 'Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition', + ], + CHI__redeclare__coo=[ + 'Buildings.Templates.ChilledWaterPlants.Components.CoolerGroups.CoolingTowerOpen', + ], + CHI__coo__redeclare__valCooOutIso=[ + 'Buildings.Templates.Components.Valves.TwoWayTwoPosition', + 'Buildings.Templates.Components.Valves.None', + ], + CHI__redeclare__eco=[ + 'Buildings.Templates.ChilledWaterPlants.Components.Economizers.HeatExchangerWithPump', + 'Buildings.Templates.ChilledWaterPlants.Components.Economizers.HeatExchangerWithValve', + 'Buildings.Templates.ChilledWaterPlants.Components.Economizers.None', + ], + ), +} + + +# See docstring of `prune_modifications` function for the structure of EXCLUDE. +EXCLUDE = { + 'Buildings.Templates.ChilledWaterPlants.Validation.AirCooledOpenLoop': [ + [ + 'ChillerArrangement.Series', + 'typArrPumChiWatPri_select=Buildings.Templates.Components.Types.PumpArrangement.Dedicated', + ], + [ + 'Buildings.Templates.ChilledWaterPlants.Types.Economizer.(?!None)', + ], + ], +} +EXCLUDE['Buildings.Templates.ChilledWaterPlants.Validation.WaterCooledOpenLoop'] = [ + *EXCLUDE['Buildings.Templates.ChilledWaterPlants.Validation.AirCooledOpenLoop'], + *[ + [ + 'Economizers.HeatExchanger', + 'have_varPumConWat_select=false', + ], + [ + 'typCtlHea=Buildings.Templates.ChilledWaterPlants.Types.ChillerLiftControl.BuiltIn', + 'have_varPumConWat_select=false', + 'typValConWatChiIso_select=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition', + ], + [ + 'typCtlHea=Buildings.Templates.ChilledWaterPlants.Types.ChillerLiftControl.External', + 'have_varPumConWat_select=false', + 'typValConWatChiIso_select=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition', + ], + ], +] + +# See docstring of `prune_modifications` function for the structure of REMOVE_MODIF. +REMOVE_MODIF: dict[str, list[tuple[list[str], list[str]]]] = { + 'Buildings.Templates.ChilledWaterPlants.Validation.AirCooledOpenLoop': [ + ( + [ + 'typDisChiWat=Buildings.Templates.ChilledWaterPlants.Types.Distribution.Variable', + ], + [ + 'have_varPumChiWatPri_select', + ], + ), + ( + [ + 'typArrPumChiWatPri_select=Buildings.Templates.Components.Types.PumpArrangement.Dedicated', + ], + [ + 'typValChiWatChiIso_select', + ], + ), + ] +} +REMOVE_MODIF['Buildings.Templates.ChilledWaterPlants.Validation.WaterCooledOpenLoop'] = [ + *REMOVE_MODIF['Buildings.Templates.ChilledWaterPlants.Validation.AirCooledOpenLoop'], + *[ + ( + [ + 'typArrPumConWat_select=Buildings.Templates.Components.Types.PumpArrangement.Dedicated', + ], + [ + 'typValConWatChiIso_select', + ], + ), + ( + [ + 'Buildings.Templates.ChilledWaterPlants.Types.ChillerLiftControl.(?!None)', + ], + [ + 'typValConWatChiIso_select', + ], + ), + ( + [ + 'have_varPumConWat_select=true', + 'Buildings.Templates.ChilledWaterPlants.Components.Economizers.(?!None)', + ], + [ + 'typValConWatChiIso_select', + ], + ), + ( + [ + 'Buildings.Templates.ChilledWaterPlants.Components.Economizers.(?!None)', + ], + [ + 'typArrPumChiWatPri_select', + 'typArrPumConWat_select', + 'have_varPumConWat_select', + ], + ), + ], +] + +if __name__ == '__main__': + # Generate combinations. + combinations: list[tuple[str, list[str], str]] = generate_combinations( + models=MODELS, modif_grid=MODIF_GRID + ) + + # Prune class modifications. + prune_modifications(combinations=combinations, remove_modif=REMOVE_MODIF, exclude=EXCLUDE) + + print(f'Number of cases to be simulated: {len(combinations)}.\n') + + # FIXME(AntoineGautier PR#3167): Temporarily limit the number of simulations to be run (for testing purposes only). + combinations = combinations[:2] + + # Simulate cases. + results = simulate_cases(combinations, simulator=SIMULATOR, asy=False) + + # Report and clean. + df = report_clean(combinations, results) + + # Log and exit. + if df.errorcode.abs().sum() != 0: + print( + CRED + 'Some simulations failed: ' + CEND + 'see the file `unitTestsTemplates.log`.\n' + ) + sys.exit(1) + else: + print(CGREEN + 'All simulations succeeded.\n' + CEND) + sys.exit(0) diff --git a/Buildings/Resources/Scripts/travis/templates/HeatingPlants.HotWater.checksum b/Buildings/Resources/Scripts/travis/templates/HeatingPlants.HotWater.checksum new file mode 100644 index 00000000000..0d0f3a62684 --- /dev/null +++ b/Buildings/Resources/Scripts/travis/templates/HeatingPlants.HotWater.checksum @@ -0,0 +1 @@ +678b2b19507a5ffddd9efd9878ceb268 diff --git a/Buildings/Resources/Scripts/travis/templates/checksum b/Buildings/Resources/Scripts/travis/templates/checksum new file mode 100644 index 00000000000..9f2fc155f2f --- /dev/null +++ b/Buildings/Resources/Scripts/travis/templates/checksum @@ -0,0 +1 @@ +855edbdbd4d5ee312fe91471e31eed55 diff --git a/Buildings/Templates/AirHandlersFans/Components/Controls/G36VAVMultiZone.mo b/Buildings/Templates/AirHandlersFans/Components/Controls/G36VAVMultiZone.mo index aa7c065dedf..7e25508b71e 100644 --- a/Buildings/Templates/AirHandlersFans/Components/Controls/G36VAVMultiZone.mo +++ b/Buildings/Templates/AirHandlersFans/Components/Controls/G36VAVMultiZone.mo @@ -343,10 +343,10 @@ equation connect(ctl.yAla, bus.ala); - connect(ctl.yChiWatResReq, bus.reqChiWatRes); - connect(ctl.yChiPlaReq, bus.reqChiWatPla); - connect(ctl.yHotWatResReq, bus.reqHeaWatRes); - connect(ctl.yHotWatPlaReq, bus.reqHeaWatPla); + connect(ctl.yChiPlaReq, bus.reqPlaChiWat); + connect(ctl.yChiWatResReq, bus.reqResChiWat); + connect(ctl.yHotWatPlaReq, bus.reqPlaHeaWat); + connect(ctl.yHotWatResReq, bus.reqResHeaWat); // Outputs to terminal unit bus connect(TAirSupSet.y, busTer.TAirSupSet); diff --git a/Buildings/Templates/AirHandlersFans/Data/VAVMultiZone.mo b/Buildings/Templates/AirHandlersFans/Data/VAVMultiZone.mo index b8c6ebd10dc..94bf743e8e6 100644 --- a/Buildings/Templates/AirHandlersFans/Data/VAVMultiZone.mo +++ b/Buildings/Templates/AirHandlersFans/Data/VAVMultiZone.mo @@ -81,7 +81,7 @@ This record provides the set of sizing and operating parameters for the class Buildings.Templates.AirHandlersFans.VAVMultiZone.

                    -The tab Advanced contains some optional parameters that can be used +The tab Advanced contains some optional parameters that can be used for workflow automation, but are not used for simulation.

                    ")); diff --git a/Buildings/Templates/AirHandlersFans/Validation/VAVMultiZone.mo b/Buildings/Templates/AirHandlersFans/Validation/VAVMultiZone.mo deleted file mode 100644 index 884ed757061..00000000000 --- a/Buildings/Templates/AirHandlersFans/Validation/VAVMultiZone.mo +++ /dev/null @@ -1,179 +0,0 @@ -within Buildings.Templates.AirHandlersFans.Validation; -model VAVMultiZone "Validation model for multiple-zone VAV" - extends Modelica.Icons.Example; - replaceable package MediumAir=Buildings.Media.Air - constrainedby Modelica.Media.Interfaces.PartialMedium - "Air medium"; - replaceable package MediumChiWat=Buildings.Media.Water - constrainedby Modelica.Media.Interfaces.PartialMedium - "Cooling medium (such as CHW)"; - replaceable package MediumHeaWat=Buildings.Media.Water - constrainedby Modelica.Media.Interfaces.PartialMedium - "Heating medium (such as HHW)"; - - inner parameter UserProject.Data.AllSystems datAll( - final VAV_1(cfg=VAV_1.cfg)) - "Design and operating parameters" - annotation (Placement(transformation(extent={{90,92},{110,112}}))); - - 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.Templates.AirHandlersFans.VAVMultiZone VAV_1( - nZon=2, - ctl( - idZon={"Box_1","Box_1"}, - namGro={"Floor_1"}, - namGroZon={"Floor_1","Floor_1"}), - final dat=datAll.VAV_1, - redeclare final package MediumAir = MediumAir, - redeclare final package MediumChiWat = MediumChiWat, - final energyDynamics=energyDynamics) - "Air handling unit" - annotation (Placement(transformation(extent={{-20,-50},{20,-10}}))); - Buildings.Fluid.Sources.Boundary_pT bouOut( - redeclare final package Medium =MediumAir, - nPorts=2) - "Boundary conditions for outdoor environment" - annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); - Buildings.Fluid.Sources.Boundary_pT bouBui( - redeclare final package Medium =MediumAir, - nPorts=3) - "Boundary conditions for indoor environment" - annotation (Placement(transformation(extent={{90,-40},{70,-20}}))); - Fluid.FixedResistances.PressureDrop res( - redeclare final package Medium=MediumAir, - m_flow_nominal=1, dp_nominal=100) - annotation (Placement(transformation(extent={{-50,-50},{-30,-30}}))); - Fluid.FixedResistances.PressureDrop res1( - redeclare final package Medium = MediumAir, - m_flow_nominal=1, - dp_nominal=100) - annotation (Placement(transformation(extent={{30,-50},{50,-30}}))); - Fluid.Sensors.Pressure pBui(redeclare final package Medium = MediumAir) - "Building absolute pressure in representative space" - annotation (Placement(transformation(extent={{80,0},{60,20}}))); - BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= - Modelica.Utilities.Files.loadResource( - "modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) - annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); - Fluid.FixedResistances.PressureDrop res2( - redeclare final package Medium = MediumAir, - m_flow_nominal=1, - dp_nominal=100) - annotation (Placement(transformation(extent={{-30,-30},{-50,-10}}))); - Fluid.FixedResistances.PressureDrop res3( - redeclare final package Medium = MediumAir, - m_flow_nominal=1, - dp_nominal=100) - annotation (Placement(transformation(extent={{50,-30},{30,-10}}))); - Fluid.Sources.Boundary_pT bouHeaWat( - redeclare final package Medium = MediumHeaWat, - nPorts=2) if VAV_1.have_souHeaWat - "Boundary conditions for HHW distribution system" - annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); - Fluid.Sources.Boundary_pT bouChiWat( - redeclare final package Medium = MediumChiWat, - nPorts=2) if VAV_1.have_souChiWat - "Boundary conditions for CHW distribution system" - annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); - UserProject.VAVBoxControlPoints sigVAVBox[VAV_1.nZon](each final stdVen= - datAll.stdVen) if VAV_1.ctl.typ == Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone - "Control signals from VAV box" - annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); - ZoneEquipment.Validation.UserProject.BASControlPoints sigBAS( - final nZon=VAV_1.nZon) - "BAS control points" - annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); - ZoneEquipment.Validation.UserProject.ZoneControlPoints sigZon[VAV_1.nZon] - "Zone control points" - annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); -protected - Interfaces.Bus busAHU - "Gateway bus" - annotation ( - Placement( - transformation(extent={{-40,-10},{0,30}}),iconTransformation( - extent={{-258,-26},{-238,-6}}))); - -equation - connect(bouHeaWat.ports[1], VAV_1.port_aHeaWat) - annotation (Line(points={{-80,-71},{-5,-71},{-5,-50}}, color={0,127,255})); - connect(bouChiWat.ports[2], VAV_1.port_bChiWat) - annotation (Line(points={{-80,-99},{5,-99},{5,-50}}, color={0,127,255})); - connect(VAV_1.port_bHeaWat, bouHeaWat.ports[2]) annotation (Line(points={{-13,-50}, - {-13,-68},{-80,-68},{-80,-69}}, color={0,127,255})); - connect(VAV_1.port_aChiWat, bouChiWat.ports[1]) annotation (Line(points={{13,-50}, - {13,-102},{-80,-102},{-80,-101}}, - color={0,127,255})); - connect(bouOut.ports[1], res.port_a) annotation (Line(points={{-80,-31},{-60, - -31},{-60,-40},{-50,-40}}, - color={0,127,255})); - connect(res.port_b, VAV_1.port_Out) - annotation (Line(points={{-30,-40},{-20,-40}}, color={0,127,255})); - connect(VAV_1.port_Sup, res1.port_a) - annotation (Line(points={{20,-40},{30,-40}}, color={0,127,255})); - connect(res1.port_b, bouBui.ports[1]) annotation (Line(points={{50,-40},{60, - -40},{60,-31.3333},{70,-31.3333}}, - color={0,127,255})); - connect(bouBui.ports[2], pBui.port) - annotation (Line(points={{70,-30},{70,0}}, color={0,127,255})); - connect(weaDat.weaBus, VAV_1.busWea) annotation (Line( - points={{-80,0},{0,0},{0,-10}}, - color={255,204,51}, - thickness=0.5)); - connect(busAHU, VAV_1.bus) annotation (Line( - points={{-20,10},{-20,-14},{-19.9,-14}}, - color={255,204,51}, - thickness=0.5)); - connect(VAV_1.port_Rel, res2.port_a) - annotation (Line(points={{-20,-20},{-30,-20}}, - color={0,127,255})); - connect(res2.port_b, bouOut.ports[2]) annotation (Line(points={{-50,-20},{-60, - -20},{-60,-29},{-80,-29}}, - color={0,127,255})); - connect(VAV_1.port_Ret, res3.port_b) - annotation (Line(points={{20,-20},{30,-20}}, - color={0,127,255})); - connect(res3.port_a, bouBui.ports[3]) annotation (Line(points={{50,-20},{60, - -20},{60,-28.6667},{70,-28.6667}}, - color={0,127,255})); - connect(pBui.p, busAHU.pBui) annotation (Line(points={{59,10},{-20,10}}, - color={0,0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(sigVAVBox.bus, VAV_1.busTer) annotation (Line( - points={{-80,30},{19.8,30},{19.8,-14}}, - color={255,204,51}, - thickness=0.5)); - - connect(sigBAS.busTer, VAV_1.busTer) annotation (Line( - points={{-80,90},{19.8,90},{19.8,-14}}, - color={255,204,51}, - thickness=0.5)); - connect(sigZon.bus, VAV_1.busTer) annotation (Line( - points={{-80,60},{19.8,60},{19.8,-14}}, - color={255,204,51}, - thickness=0.5)); - annotation ( - __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMultiZone.mos" - "Simulate and plot"), - experiment(Tolerance=1e-6, StopTime=10000), Documentation(info=" -

                    -This is a validation model for the template - -Buildings.Templates.AirHandlersFans.VAVMultiZone. -

                    -

                    -All supported system configurations can be generated by the Python script -Buildings/Resources/Scripts/travis/templates/VAVMultiZone.py. -

                    -"), - Diagram(coordinateSystem(extent={{-120,-120},{120,120}}))); -end VAVMultiZone; diff --git a/Buildings/Templates/AirHandlersFans/Validation/package.order b/Buildings/Templates/AirHandlersFans/Validation/package.order index 5ea601f5bec..4549b7665c0 100644 --- a/Buildings/Templates/AirHandlersFans/Validation/package.order +++ b/Buildings/Templates/AirHandlersFans/Validation/package.order @@ -1,2 +1 @@ -VAVMultiZone UserProject diff --git a/Buildings/Templates/Components/Boilers/HotWaterPolynomial.mo b/Buildings/Templates/Components/Boilers/HotWaterPolynomial.mo new file mode 100644 index 00000000000..acf553fcfd4 --- /dev/null +++ b/Buildings/Templates/Components/Boilers/HotWaterPolynomial.mo @@ -0,0 +1,42 @@ +within Buildings.Templates.Components.Boilers; +model HotWaterPolynomial "Hot water boiler with efficiency described by a polynomial" + extends Buildings.Templates.Components.Interfaces.PartialBoilerHotWater( + final typMod=Buildings.Templates.Components.Types.BoilerHotWaterModel.Polynomial, + redeclare Buildings.Fluid.Boilers.BoilerPolynomial boi( + final Q_flow_nominal = dat.cap_nominal, + final m_flow_nominal=dat.mHeaWat_flow_nominal, + final dp_nominal=dat.dpHeaWat_nominal, + final fue=dat.fue)); + + annotation ( + defaultComponentName="boi", + Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

                    +This is a model for a hot water boiler where the efficiency is computed +based on a polynomial of the firing rate and optionally of the hot water +temperature. +This model is based on + +Buildings.Fluid.Boilers.BoilerPolynomial. +The user may refer to the documentation of + +Buildings.Fluid.Boilers.UsersGuide +for the modeling assumptions. +

                    +

                    Control points

                    +

                    +See the documentation of + +Buildings.Templates.Components.Interfaces.BoilerHotWater. +

                    +", revisions=" +
                      +
                    • +April 28, 2023, by Antoine Gautier:
                      +First implementation. +
                    • +
                    +")); +end HotWaterPolynomial; diff --git a/Buildings/Templates/Components/Boilers/HotWaterTable.mo b/Buildings/Templates/Components/Boilers/HotWaterTable.mo new file mode 100644 index 00000000000..a7f5065b7ed --- /dev/null +++ b/Buildings/Templates/Components/Boilers/HotWaterTable.mo @@ -0,0 +1,45 @@ +within Buildings.Templates.Components.Boilers; +model HotWaterTable "Hot water boiler with efficiency described by a table" + extends Buildings.Templates.Components.Interfaces.PartialBoilerHotWater( + final typMod=Buildings.Templates.Components.Types.BoilerHotWaterModel.Table, + redeclare Buildings.Fluid.Boilers.BoilerTable boi(final per=dat.per)); + + annotation ( + defaultComponentName="boi", + Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

                    +This is a model for a hot water boiler where the efficiency is computed +based on a lookup table indexed by the firing rate and the inlet temperature. +This model is based on + +Buildings.Fluid.Boilers.BoilerTable. +The user may refer to the documentation of + +Buildings.Fluid.Boilers.UsersGuide +for the modeling assumptions. +

                    +

                    Control points

                    +

                    +See the documentation of + +Buildings.Templates.Components.Interfaces.BoilerHotWater. +

                    +

                    Model parameters

                    +

                    +The design parameters and the efficiency table are specified with an instance of + +Buildings.Templates.Components.Data.BoilerHotWater. +The documentation of this record class provides further details on how to +properly parameterize the model. +

                    +", revisions=" +
                      +
                    • +April 28, 2023, by Antoine Gautier:
                      +First implementation. +
                    • +
                    +")); +end HotWaterTable; diff --git a/Buildings/Templates/Components/Boilers/package.mo b/Buildings/Templates/Components/Boilers/package.mo new file mode 100644 index 00000000000..a945707be75 --- /dev/null +++ b/Buildings/Templates/Components/Boilers/package.mo @@ -0,0 +1,11 @@ +within Buildings.Templates.Components; +package Boilers "Boiler models" + extends Modelica.Icons.VariantsPackage; + + + annotation (Documentation(info=" +

                    +This package contains models for boilers. +

                    +")); +end Boilers; diff --git a/Buildings/Templates/Components/Boilers/package.order b/Buildings/Templates/Components/Boilers/package.order new file mode 100644 index 00000000000..287d73af491 --- /dev/null +++ b/Buildings/Templates/Components/Boilers/package.order @@ -0,0 +1,2 @@ +HotWaterPolynomial +HotWaterTable diff --git a/Buildings/Templates/Components/Chillers/Compression.mo b/Buildings/Templates/Components/Chillers/Compression.mo index c81395a95cb..47530c47a62 100644 --- a/Buildings/Templates/Components/Chillers/Compression.mo +++ b/Buildings/Templates/Components/Chillers/Compression.mo @@ -25,14 +25,15 @@ model Compression "Compute chiller status" annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=90, origin={60,0}))); - Buildings.Controls.OBC.CDL.Routing.BooleanExtractSignal reqConWat( + Buildings.Controls.OBC.CDL.Routing.BooleanExtractSignal reqFloConWat( final nin=1, final nout=1, final extract={1}) if typ == Buildings.Templates.Components.Types.Chiller.WaterCooled - "Compute CW request" - annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=90, - origin={-60,80}))); + "Compute CW flow request" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-60,80}))); Buildings.Controls.OBC.CDL.Logical.Not off "Return true if status is off" annotation (Placement(transformation(extent={{40,10},{20,30}}))); @@ -65,18 +66,18 @@ equation annotation (Line(points={{0,100},{0,-20},{60,-20},{60,-12}},color={255,204,51},thickness=0.5)); connect(y1_actual.y1_actual, bus.y1_actual) annotation (Line(points={{60,12},{60,94},{0,94},{0,100}},color={255,0,255})); - connect(reqConWat.y[1], bus.reqConWat) - annotation (Line(points={{-60,92},{-60,96},{0,96},{0,100}},color={255,0,255})); + connect(reqFloConWat.y[1], bus.y1ReqFloConWat) annotation (Line(points={{-60, + 92},{-60,96},{0,96},{0,100}}, color={255,0,255})); connect(y1_actual.y1_actual, off.u) annotation (Line(points={{60,12},{60,20},{42,20}},color={255,0,255})); connect(off.y, delOff.u) annotation (Line(points={{18,20},{-8,20}},color={255,0,255})); connect(delOff.y, reqFlo.u) annotation (Line(points={{-32,20},{-40,20},{-40,38}},color={255,0,255})); - connect(reqFlo.y, bus.reqChiWat) + connect(reqFlo.y, bus.y1ReqFloChiWat) annotation (Line(points={{-40,62},{-40,94},{0,94},{0,100}},color={255,0,255})); - connect(reqFlo.y, reqConWat.u[1]) - annotation (Line(points={{-40,62},{-40,64},{-60,64},{-60,68}},color={255,0,255})); + connect(reqFlo.y, reqFloConWat.u[1]) annotation (Line(points={{-40,62},{-40, + 64},{-60,64},{-60,68}}, color={255,0,255})); annotation ( defaultComponentName="chi", Documentation( @@ -92,11 +93,11 @@ The following input and output points are available.

                    • -On/off command y1: +On/off command y1: DO signal
                    • -(Only if have_switchover=true) Operating mode command y1Coo: +(Only if have_switchover=true) Operating mode command y1Coo: DO signal, true for cooling, false for heating
                    • @@ -104,7 +105,7 @@ Supply temperature setpoint TSupSet: AO signal corresponding to
                      • CHW supply temperature setpoint if -have_switchover=false or if +have_switchover=false or if have_switchover=true and y1Coo=true, or
                      • HW supply temperature setpoint if @@ -116,11 +117,11 @@ AO signal corresponding to Chiller status y1_actual: DI signal
                      • -CHW request reqChiWat: DI signal +CHW flow request y1ReqFloChiWat: DI signal
                      • -(Only if typ=Buildings.Templates.Components.Types.Chiller.WaterCooled) -CW request reqConWat: DI signal +(Only if typ=Buildings.Templates.Components.Types.Chiller.WaterCooled) +CW flow request y1ReqFloConWat: DI signal

                      Model parameters

                      @@ -128,7 +129,7 @@ CW request reqConWat: DI signal The design parameters and the chiller performance data are specified with an instance of Buildings.Templates.Components.Data.Chiller. -The documentation of this record class provides further details on how to +The documentation of this record class provides further details on how to properly parameterize the model.

                      ", diff --git a/Buildings/Templates/Components/Chillers/Validation/Compression.mo b/Buildings/Templates/Components/Chillers/Validation/Compression.mo index 29cf049ea89..673a7507c3b 100644 --- a/Buildings/Templates/Components/Chillers/Validation/Compression.mo +++ b/Buildings/Templates/Components/Chillers/Validation/Compression.mo @@ -14,7 +14,6 @@ model Compression Dialog(tab="Dynamics",group="Conservation equations")); parameter Data.Chiller datChiAirCoo( final typ=chiAirCoo.typ, - final use_datDes=true, mChiWat_flow_nominal=datChiAirCoo.cap_nominal / abs(datChiAirCoo.TChiWatSup_nominal - Buildings.Templates.Data.Defaults.TChiWatRet) / datChiAirCoo.cpChiWat_default, cap_nominal=750E3, @@ -32,15 +31,21 @@ model Compression 1.535993E+00, - 4.944902E-02, 0.000000E+00, 1.396972E+00, 0.000000E+00, 0.000000E+00}, PLRMax=1.15, etaMotor=1.0)) - "Air-cooled chiller parameters – Parameterization based on design conditions and direct assignment of performance curves" + "Air-cooled chiller parameters – Parameterization by direct assignment of performance curves" annotation (Placement(transformation(extent={{40,80},{60,100}}))); parameter Buildings.Templates.Components.Data.Chiller datChiWatCoo( final typ=chiWatCoo.typ, - final use_datDes=false, + mChiWat_flow_nominal=datChiWatCoo.cap_nominal / abs(datChiWatCoo.TChiWatSup_nominal - + Buildings.Templates.Data.Defaults.TChiWatRet) / datChiWatCoo.cpChiWat_default, + mCon_flow_nominal=datChiWatCoo.mChiWat_flow_nominal, + cap_nominal=750E3, + COP_nominal=Buildings.Templates.Data.Defaults.COPChiWatCoo, + TChiWatSup_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, + TConEnt_nominal=Buildings.Templates.Data.Defaults.TConWatSup, dpChiWat_nominal=Buildings.Templates.Data.Defaults.dpChiWatChi, dpCon_nominal=Buildings.Templates.Data.Defaults.dpConWatChi, redeclare Buildings.Fluid.Chillers.Data.ElectricReformulatedEIR.ReformEIRChiller_Trane_CVHE_1442kW_6_61COP_VSD per) - "Water-cooled chiller parameters – Parameterization based on rating conditions specified in the sub-record per" + "Water-cooled chiller parameters – Parameterization by redeclaring sub-record per" annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet( k=datChiAirCoo.TChiWatSup_nominal, @@ -78,8 +83,8 @@ model Compression "Boundary condition at distribution system supply" annotation (Placement(transformation(extent={{130,10},{110,30}}))); Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatRet( - amplitude=(datChiAirCoo.TChiWatRet_nominal - datChiAirCoo.TChiWatSup_nominal) / - 2, + amplitude=(datChiAirCoo.TChiWatRet_nominal - datChiAirCoo.TChiWatSup_nominal) + /2, freqHz=2 / 3000, y(final unit="K", displayUnit="degC"), @@ -193,7 +198,8 @@ protected annotation (Placement(transformation(extent={{-20,-60},{20,-20}}), iconTransformation(extent={{-276,6},{-236,46}}))); initial equation - Modelica.Utilities.Streams.print("Coef at rating conditions = " + String(Buildings.Utilities.Math.Functions.biquadratic( + Modelica.Utilities.Streams.print( + "Coef at rating conditions = " + String(Buildings.Utilities.Math.Functions.biquadratic( a=datChiWatCoo.per.capFunT, x1=Modelica.Units.Conversions.to_degC(datChiWatCoo.per.TEvaLvg_nominal), x2=Modelica.Units.Conversions.to_degC(datChiWatCoo.per.TConLvg_nominal)))); @@ -262,27 +268,14 @@ This model validates the model Buildings.Templates.Components.Chillers.Compression in a configuration in which the chiller is exposed -to a constant differential pressure and a varying -return temperature. +to the design CHW differential pressure and a varying +CHW return temperature.

                      The chiller model is configured to represent either an air-cooled chiller (component chiAirCoo) or a water-cooled chiller (component chiWatCoo).

                      -

                      -Regarding the parameterization logic described in the documentation of - -Buildings.Templates.Components.Chillers.Compression: -The air-cooled chiller component is parameterized using the -specified design conditions (datChiAirCoo.use_datDes=true) -and a direct assignment of the performance curves -per.capFunT, per.EIRFunT and per.EIRFunPLR. -The water-cooled chiller component is parameterized using the -rating conditions specified in the redeclared performance record -(datChiWatCoo.use_datDes=false) and no direct assignment -of the design parameters. -

                      ", revisions="
                        diff --git a/Buildings/Templates/Components/Coolers/CoolingTower.mo b/Buildings/Templates/Components/Coolers/CoolingTower.mo new file mode 100644 index 00000000000..9131442d493 --- /dev/null +++ b/Buildings/Templates/Components/Coolers/CoolingTower.mo @@ -0,0 +1,107 @@ +within Buildings.Templates.Components.Coolers; +model CoolingTower "Cooling tower model using Merkel method" + extends Buildings.Templates.Components.Interfaces.PartialCooler; + + Buildings.Fluid.HeatExchangers.CoolingTowers.Merkel tow( + redeclare final package Medium = MediumConWat, + final m_flow_nominal=mConWat_flow_nominal, + final ratWatAir_nominal=mConWat_flow_nominal/mAir_flow_nominal, + final TAirInWB_nominal=dat.TWetBulEnt_nominal, + final TWatIn_nominal=dat.TConWatRet_nominal, + final TWatOut_nominal=dat.TConWatSup_nominal, + final PFan_nominal=dat.PFan_nominal, + final dp_nominal=dpConWatFri_nominal, + final fraPFan_nominal=dat.PFan_nominal/mConWat_flow_nominal, + final show_T=show_T, + final allowFlowReversal=allowFlowReversal, + final m_flow_small=m_flow_small, + final energyDynamics=energyDynamics, + final tau=tau) + "Cooling tower (single cell)" + annotation (Placement(transformation(extent={{-10,-70},{10,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Multiply yCom "Commanded speed" annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-20,-20}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal y1Rea + "Convert start/stop signal into real" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-40,20}))); + Controls.StatusEmulator y1_actual "Compute cooling tower status" + annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=90, + origin={40,70}))); +equation + connect(tow.port_b, port_b) + annotation (Line(points={{10,-60},{80,-60},{80,0},{100,0}}, + color={0,127,255})); + connect(yCom.u2, y1Rea.y) annotation (Line(points={{-26,-8},{-26,0},{-40,0},{ + -40,8}}, color={0,0,127})); + connect(bus.y1, y1Rea.u) annotation (Line( + points={{0,100},{0,60},{-40,60},{-40,32}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(yCom.y, tow.y) + annotation (Line(points={{-20,-32},{-20,-52},{-12,-52}}, color={0,0,127})); + connect(busWea.TWetBul, tow.TAir) annotation (Line( + points={{-59.9,100.1},{-59.9,-56},{-12,-56}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(bus.y, yCom.u1) annotation (Line( + points={{0,100},{0,0},{-14,0},{-14,-8}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(port_a, tow.port_a) + annotation (Line(points={{-100,0},{-80,0},{-80,-60},{-10,-60}}, + color={0,127,255})); + connect(y1Rea.u, y1_actual.y1) annotation (Line(points={{-40,32},{-40,40},{40, + 40},{40,58}}, color={255,0,255})); + connect(y1_actual.y1_actual, bus.y1_actual) annotation (Line(points={{40,82}, + {40,96},{6,96},{6,100},{0,100}}, color={255,0,255})); + annotation ( + defaultComponentName="coo", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-40,-60},{40,-100}}, + lineColor={28,108,200}, + pattern=LinePattern.None, + fillColor={239,239,239}, + fillPattern=FillPattern.Solid), + Text( extent={{-60,-60},{60,-100}}, + textColor={0,0,0}, + textString="CT"), + Rectangle( + extent={{40,60},{-40,-100}}, + lineColor={0,0,0}, + lineThickness=1), + Bitmap(extent={{-20,60},{20,100}}, fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg"), + Bitmap( + extent={{-33,-30},{33,30}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Fans/Propeller.svg", + origin={0,41}, + rotation=-90)}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" +
                          +
                        • +November 18, 2022, by Antoine Gautier:
                          +First implementation. +
                        • +
                        +")); +end CoolingTower; diff --git a/Buildings/Templates/Components/Coolers/package.mo b/Buildings/Templates/Components/Coolers/package.mo new file mode 100644 index 00000000000..36d058061bb --- /dev/null +++ b/Buildings/Templates/Components/Coolers/package.mo @@ -0,0 +1,12 @@ +within Buildings.Templates.Components; +package Coolers "Condenser water cooling equipment models" + extends Modelica.Icons.VariantsPackage; + + +annotation (Documentation(info=" +

                        +This package contains models for cooler units such as +cooling towers and dry coolers. +

                        +")); +end Coolers; diff --git a/Buildings/Templates/Components/Coolers/package.order b/Buildings/Templates/Components/Coolers/package.order new file mode 100644 index 00000000000..b1d8465c906 --- /dev/null +++ b/Buildings/Templates/Components/Coolers/package.order @@ -0,0 +1 @@ +CoolingTower diff --git a/Buildings/Templates/Components/Data/BoilerHotWater.mo b/Buildings/Templates/Components/Data/BoilerHotWater.mo new file mode 100644 index 00000000000..228aed3520d --- /dev/null +++ b/Buildings/Templates/Components/Data/BoilerHotWater.mo @@ -0,0 +1,98 @@ +within Buildings.Templates.Components.Data; +record BoilerHotWater "Data for hot water boilers" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.Components.Types.BoilerHotWaterModel typMod + "Type of boiler model" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Buildings.Fluid.Data.Fuels.Generic fue + "Fuel type" + annotation (choicesAllMatching = true); + + parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal( + final min=0) + "HW mass flow rate" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.HeatFlowRate cap_nominal + "Heating capacity" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpHeaWat_nominal( + final min=0, + start=Buildings.Templates.Data.Defaults.dpHeaWatBoi) + "HW pressure drop" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature THeaWatSup_nominal( + final min=260) + "HW supply temperature" + annotation(Dialog(group="Nominal condition")); + + replaceable parameter Buildings.Fluid.Boilers.Data.Generic per(fue=fue) + constrainedby Buildings.Fluid.Boilers.Data.Generic( + Q_flow_nominal=abs(cap_nominal), + TIn_nominal=THeaWatSup_nominal - + abs(cap_nominal)/ + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/ + mHeaWat_flow_nominal, + m_flow_nominal=mHeaWat_flow_nominal, + dp_nominal=dpHeaWat_nominal) + "Boiler performance data" + annotation ( + Dialog(enable=typMod==Buildings.Templates.Components.Types.BoilerHotWaterModel.Table), + choicesAllMatching=true); + + parameter Buildings.Fluid.Types.EfficiencyCurves effCur= + Buildings.Fluid.Types.EfficiencyCurves.Constant + "Curve used to compute the efficiency" + annotation (Dialog(enable= + typMod==Buildings.Templates.Components.Types.BoilerHotWaterModel.Polynomial)); + parameter Real a[:] = {0.9} + "Coefficients for efficiency curve" + annotation (Dialog(enable= + typMod==Buildings.Templates.Components.Types.BoilerHotWaterModel.Polynomial)); + parameter Modelica.Units.SI.Temperature T_nominal=THeaWatSup_nominal + "Temperature used to compute nominal efficiency (only used if efficiency curve depends on temperature)" + annotation (Dialog(enable= + typMod==Buildings.Templates.Components.Types.BoilerHotWaterModel.Polynomial and + (effCur==Buildings.Fluid.Types.EfficiencyCurves.QuadraticLinear))); + +annotation ( + defaultComponentName="datBoi", Documentation(info=" +

                        +This record provides the set of sizing and operating parameters for +the classes within + +Buildings.Templates.Components.Boilers. +

                        +

                        +When using the boiler model where the efficiency is based on a lookup table +(typMod=Buildings.Templates.Components.Types.BoilerHotWaterModel.Table), +the design values declared at the top-level are propagated by default to the +performance data record per under the assumption that the nominal +conditions from the performance data match the design conditions. +Redeclaring the parameter per allows assigning a value to the efficiency curve +without overwriting the default bindings to the design values for the other parameters. +This is the recommended approach. +Alternatively, assigning the parameter per to a local instance of a +compatible record allows completely overwriting all the parameters inside per. +In this case, the consistency between the design parameters and the values from the +subrecord per is checked and a warning is issued if the design capacity or +HW flow rate (resp. pressure drop) is higher (resp. lower) than the value from the +performance data record. +This check is performed within + +Buildings.Templates.Components.Interfaces.PartialBoilerHotWater. +The validation model + +Buildings.Templates.Components.Validation.BoilerHotWater +illustrates the different use cases of this record. +

                        +", revisions=" +
                          +
                        • +April 28, 2023, by Antoine Gautier:
                          +First implementation. +
                        • +
                        +")); +end BoilerHotWater; diff --git a/Buildings/Templates/Components/Data/Chiller.mo b/Buildings/Templates/Components/Data/Chiller.mo index b90430f553e..8fca2b09304 100644 --- a/Buildings/Templates/Components/Data/Chiller.mo +++ b/Buildings/Templates/Components/Data/Chiller.mo @@ -2,175 +2,140 @@ within Buildings.Templates.Components.Data; record Chiller "Record for chiller model" extends Modelica.Icons.Record; - parameter Boolean use_datDes=true - "Set to true to use specified design conditions, false to use data from performance record" - annotation (Evaluate=true, - __ctrlFlow(enable=false)); parameter Buildings.Templates.Components.Types.Chiller typ "Type of chiller" annotation (Evaluate=true, - Dialog(group="Configuration", - enable=false)); - parameter Modelica.Units.SI.SpecificHeatCapacity cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq + Dialog(group="Configuration", enable=false)); + parameter Modelica.Units.SI.SpecificHeatCapacity cpChiWat_default= + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq "CHW default specific heat capacity" - annotation (Dialog(group="Configuration", - enable=false)); + annotation (Dialog(group="Configuration")); parameter Modelica.Units.SI.SpecificHeatCapacity cpCon_default=if typ == - Buildings.Templates.Components.Types.Chiller.AirCooled then Buildings.Utilities.Psychrometrics.Constants.cpAir + Buildings.Templates.Components.Types.Chiller.AirCooled then + Buildings.Utilities.Psychrometrics.Constants.cpAir else Buildings.Utilities.Psychrometrics.Constants.cpWatLiq "Condenser cooling fluid default specific heat capacity" - annotation (Dialog(group="Configuration", - enable=false)); + annotation (Dialog(group="Configuration")); parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal( - start=if not use_datDes then per.mEva_flow_nominal else 1E-3, final min=0) "CHW mass flow rate" - annotation (Dialog(group="Nominal condition", - enable=typ<>Buildings.Templates.Components.Types.Chiller.None and use_datDes)); + annotation (Dialog(group="Nominal condition")); parameter Modelica.Units.SI.MassFlowRate mCon_flow_nominal( - start=if not use_datDes then per.mCon_flow_nominal elseif typ == Buildings.Templates.Components.Types.Chiller.AirCooled - then Buildings.Templates.Data.Defaults.mAirFloByCapChi * abs(cap_nominal) - else 1E-3, + start=if typ == Buildings.Templates.Components.Types.Chiller.WaterCooled + then mChiWat_flow_nominal elseif typ == Buildings.Templates.Components.Types.Chiller.AirCooled + then Buildings.Templates.Data.Defaults.ratMFloAirByCapChi * abs(cap_nominal) + else 0, final min=0) "Condenser cooling fluid (e.g. CW) mass flow rate" annotation (Dialog(group="Nominal condition", - enable=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and use_datDes)); - parameter Modelica.Units.SI.HeatFlowRate cap_nominal( - start=if not use_datDes then abs(per.QEva_flow_nominal) else 1E-3) + enable=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled)); + parameter Modelica.Units.SI.HeatFlowRate cap_nominal "Cooling capacity" - annotation (Dialog(group="Nominal condition", - enable=typ<>Buildings.Templates.Components.Types.Chiller.None and use_datDes)); + annotation (Dialog(group="Nominal condition")); final parameter Modelica.Units.SI.HeatFlowRate QCon_flow_nominal( final min=0)=abs(cap_nominal) *(1 / COP_nominal + 1) "Condenser heat flow rate" annotation (Dialog(group="Nominal condition")); parameter Real COP_nominal( - start=if not use_datDes then per.COP_nominal else Buildings.Templates.Data.Defaults.COPChiAirCoo, final min=1, final unit="1") "Cooling COP" - annotation (Dialog(group="Nominal condition", - enable=typ<>Buildings.Templates.Components.Types.Chiller.None and use_datDes)); + annotation (Dialog(group="Nominal condition")); parameter Modelica.Units.SI.PressureDifference dpChiWat_nominal( final min=0, - start=if typ == Buildings.Templates.Components.Types.Chiller.None then 0 - else Buildings.Templates.Data.Defaults.dpChiWatChi) + start=Buildings.Templates.Data.Defaults.dpChiWatChi) "CHW pressure drop" - annotation (Dialog(group="Nominal condition", - enable=typ<>Buildings.Templates.Components.Types.Chiller.None)); + annotation (Dialog(group="Nominal condition")); parameter Modelica.Units.SI.PressureDifference dpCon_nominal( final min=0, start=if typ == Buildings.Templates.Components.Types.Chiller.WaterCooled - then Buildings.Templates.Data.Defaults.dpConWatChi elseif typ == Buildings.Templates.Components.Types.Chiller.AirCooled + then Buildings.Templates.Data.Defaults.dpConWatChi + elseif typ == Buildings.Templates.Components.Types.Chiller.AirCooled then Buildings.Templates.Data.Defaults.dpAirChi else 0) "Condenser cooling fluid pressure drop" annotation (Dialog(group="Nominal condition", enable=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled)); parameter Modelica.Units.SI.Temperature TChiWatSup_nominal( - start=if not use_datDes then per.TEvaLvg_nominal else Buildings.Templates.Data.Defaults.TChiWatSup, final min=260) "CHW supply temperature" - annotation (Dialog(group="Nominal condition", - enable=typ<>Buildings.Templates.Components.Types.Chiller.None and use_datDes)); + annotation (Dialog(group="Nominal condition")); final parameter Modelica.Units.SI.Temperature TChiWatRet_nominal( - final min=260)=if typ == Buildings.Templates.Components.Types.Chiller.None - then TChiWatSup_nominal else TChiWatSup_nominal + abs(cap_nominal) / + final min=260)=TChiWatSup_nominal + abs(cap_nominal) / cpChiWat_default / mChiWat_flow_nominal "CHW return temperature" annotation (Dialog(group="Nominal condition")); - parameter Modelica.Units.SI.Temperature TChiWatSup_min( - start=if not use_datDes then per.TEvaLvgMin else Buildings.Templates.Data.Defaults.TChiWatSup_min)= - Buildings.Templates.Data.Defaults.TChiWatSup_min + parameter Modelica.Units.SI.Temperature TChiWatSup_min=TChiWatSup_nominal "Minimum CHW supply temperature" - annotation (Dialog(group="Operating limits", - enable=typ<>Buildings.Templates.Components.Types.Chiller.None and use_datDes)); - parameter Modelica.Units.SI.Temperature TChiWatSup_max( - start=if not use_datDes then per.TEvaLvgMax else Buildings.Templates.Data.Defaults.TChiWatSup_max)= + annotation (Dialog(group="Operating limits")); + parameter Modelica.Units.SI.Temperature TChiWatSup_max= Buildings.Templates.Data.Defaults.TChiWatSup_max "Maximum CHW supply temperature" - annotation (Dialog(group="Operating limits", - enable=typ<>Buildings.Templates.Components.Types.Chiller.None and use_datDes)); + annotation (Dialog(group="Operating limits")); parameter Modelica.Units.SI.Temperature TConEnt_nominal( - final min=273.15, - start=if not use_datDes then per.TConLvg_nominal - QCon_flow_nominal / - mCon_flow_nominal / cpCon_default else Buildings.Templates.Data.Defaults.TConEnt_max) + final min=273.15) "Condenser entering fluid temperature (CW or air)" annotation (Dialog(group="Nominal condition", - enable=typ<>Buildings.Templates.Components.Types.Chiller.None and use_datDes)); + enable=typ<>Buildings.Templates.Components.Types.Chiller.None)); // The following parameter is not declared as final to allow parameterization - // based on leaving CHW temperature. - parameter Modelica.Units.SI.Temperature TConLvg_nominal=if not use_datDes then per.TConLvg_nominal - else TConEnt_nominal + QCon_flow_nominal / mCon_flow_nominal / cpCon_default + // based on leaving CHW temperature. In this case, the user shall compute + // TConEnt_nominal from TConLvg_nominal. + parameter Modelica.Units.SI.Temperature TConLvg_nominal= + TConEnt_nominal + QCon_flow_nominal / mCon_flow_nominal / cpCon_default "Condenser leaving fluid temperature (CW or air)" - annotation (Dialog(group="Nominal condition", - enable=typ<>Buildings.Templates.Components.Types.Chiller.None and use_datDes)); + annotation (Dialog(group="Nominal condition")); parameter Modelica.Units.SI.Temperature TConLvg_min( - start=if not use_datDes then per.TConLvgMin else Buildings.Templates.Data.Defaults.TConLvg_min, final min=273.15)=Buildings.Templates.Data.Defaults.TConLvg_min "Minimum condenser leaving fluid temperature (CW or air)" - annotation (Dialog(group="Operating limits", - enable=typ<>Buildings.Templates.Components.Types.Chiller.None and use_datDes)); + annotation (Dialog(group="Operating limits")); parameter Modelica.Units.SI.Temperature TConLvg_max( - start=if not use_datDes then per.TConLvgMax else Buildings.Templates.Data.Defaults.TConLvg_max, final min=273.15)=Buildings.Templates.Data.Defaults.TConLvg_max "Maximum condenser leaving fluid temperature (CW or air)" - annotation (Dialog(group="Operating limits", - enable=typ<>Buildings.Templates.Components.Types.Chiller.None and use_datDes)); + annotation (Dialog(group="Operating limits")); parameter Real PLRUnl_min( - start=if not use_datDes then per.PLRMinUnl else 0, + start=0, final min=PLR_min, final max=1)=PLR_min - "Minimum unloading ratio (before engaging hot gas bypass, if any)" - annotation (Dialog(enable=typ<>Buildings.Templates.Components.Types.Chiller.None - and use_datDes)); + "Minimum unloading ratio (before engaging hot gas bypass, if any)"; parameter Real PLR_min( - start=if not use_datDes then per.PLRMin else 0, + start=0, final min=0, final max=1)=0.15 - "Minimum part load ratio before cycling" - annotation (Dialog(enable=typ<>Buildings.Templates.Components.Types.Chiller.None - and use_datDes)); + "Minimum part load ratio before cycling"; replaceable parameter Buildings.Fluid.Chillers.Data.ElectricReformulatedEIR.Generic per( - TConLvg_nominal=if use_datDes then TConLvg_nominal else 273.15, - TConLvgMin=if use_datDes then TConLvg_min else 273.15, - TConLvgMax=if use_datDes then TConLvg_max else 273.15, - COP_nominal=if use_datDes then COP_nominal else 1.1, - QEva_flow_nominal=if use_datDes then - abs(cap_nominal) else 1E-3, - TEvaLvg_nominal=if use_datDes then TChiWatSup_nominal else 273.15, - TEvaLvgMin=if use_datDes then TChiWatSup_nominal else 273.15, - TEvaLvgMax=if use_datDes then TChiWatSup_max else 273.15, - PLRMin=if use_datDes then PLR_min else 0, - PLRMinUnl=if use_datDes then PLRUnl_min else 0, + COP_nominal=COP_nominal, + QEva_flow_nominal=- abs(cap_nominal), + TConLvg_nominal=TConLvg_nominal, + TConLvgMin=TConLvg_min, + TConLvgMax=TConLvg_max, + TEvaLvg_nominal=TChiWatSup_nominal, + TEvaLvgMin=TChiWatSup_nominal, + TEvaLvgMax=TChiWatSup_max, + PLRMin=PLR_min, + PLRMinUnl=PLRUnl_min, PLRMax=1.0, etaMotor=1.0, - mEva_flow_nominal=if use_datDes then mChiWat_flow_nominal else 1E-3, - mCon_flow_nominal=if use_datDes then mCon_flow_nominal else 1E-3, - capFunT={1, 0, 0, 0, 0, 0}, - EIRFunT={1, 0, 0, 0, 0, 0}, - EIRFunPLR={1, 0, 0, 0, 0, 0, 0, 0, 0, 0}) - constrainedby Buildings.Fluid.Chillers.Data.ElectricReformulatedEIR.Generic + mEva_flow_nominal=mChiWat_flow_nominal, + mCon_flow_nominal=mCon_flow_nominal) "Chiller performance data" - annotation (choicesAllMatching=true, - Dialog(enable=typ<>Buildings.Templates.Components.Types.Chiller.None and use_datDes)); + annotation (choicesAllMatching=true); final parameter Real COPPer_nominal( final min=0, - final unit="1")=if typ == Buildings.Templates.Components.Types.Chiller.None - then per.COP_nominal else per.COP_nominal / Buildings.Utilities.Math.Functions.biquadratic( - a=per.EIRFunT, - x1=Modelica.Units.Conversions.to_degC(TChiWatSup_nominal), - x2=Modelica.Units.Conversions.to_degC(TConLvg_nominal)) / Buildings.Utilities.Math.Functions.bicubic( - a=per.EIRFunPLR, - x1=Modelica.Units.Conversions.to_degC(TConLvg_nominal), - x2=1) - "Cooling COP computed from performance record" + final unit="1")=per.COP_nominal / + Buildings.Utilities.Math.Functions.biquadratic( + a=per.EIRFunT, + x1=Modelica.Units.Conversions.to_degC(TChiWatSup_nominal), + x2=Modelica.Units.Conversions.to_degC(TConLvg_nominal)) / Buildings.Utilities.Math.Functions.bicubic( + a=per.EIRFunPLR, + x1=Modelica.Units.Conversions.to_degC(TConLvg_nominal), + x2=1) + "Cooling COP computed at design conditions from performance record" annotation (Dialog(group="Nominal condition")); - final parameter Modelica.Units.SI.HeatFlowRate capPer_flow_nominal=if typ == - Buildings.Templates.Components.Types.Chiller.None then abs(per.QEva_flow_nominal) - else abs(per.QEva_flow_nominal) * Buildings.Utilities.Math.Functions.biquadratic( - a=per.capFunT, - x1=Modelica.Units.Conversions.to_degC(TChiWatSup_nominal), - x2=Modelica.Units.Conversions.to_degC(TConLvg_nominal)) - "Cooling capacity computed from performance record" + final parameter Modelica.Units.SI.HeatFlowRate capPer_flow_nominal=abs(per.QEva_flow_nominal) * + Buildings.Utilities.Math.Functions.biquadratic( + a=per.capFunT, + x1=Modelica.Units.Conversions.to_degC(TChiWatSup_nominal), + x2=Modelica.Units.Conversions.to_degC(TConLvg_nominal)) + "Cooling capacity computed at design conditions from performance record" annotation (Dialog(group="Nominal condition")); final parameter Buildings.Fluid.Chillers.Data.ElectricReformulatedEIR.Generic perSca( final COP_nominal=per.COP_nominal * COP_nominal / COPPer_nominal, @@ -205,21 +170,12 @@ the classes within Buildings.Templates.Components.Chillers. It is composed of a set of parameters corresponding to the design (selection) conditions and a sub-record per corresponding -to the rating conditions at which the performance curves are calculated. +to the rating conditions at which the performance curves per.capFunT, +per.EIRFunT and per.EIRFunPLR are calculated.

                        -The record allows two different parameterization logics, depending -on the value of the parameter use_datDes. -(The user can refer to the valiation model - -Buildings.Templates.Components.Chillers.Validation.Compression -for an illustration of these two logics.) -

                        -
                          -
                        • -If use_datDes=true – default setting that should be -used in most cases: The performance data specified in the sub-record -per are \"translated\" so that the capacity and COP +The performance data specified in the sub-record +per are \"translated\" so that the capacity and cooling COP calculated at design conditions match the design values cap_nominal and COP_nominal. The performance data that result from this translation are stored in @@ -230,44 +186,10 @@ Note that the performance data can be specified either by redeclaring the sub-record per, or by simply assigning the performance curves per.capFunT, per.EIRFunT and per.EIRFunPLR in case these curves were calculated based on the design conditions. -To support the latter, the design conditions are propagated \"down\" to +To support the former, the design conditions are propagated \"down\" to the sub-record per but these bindings do not persist after redeclaration so that a record at different rating conditions can also be used. -
                        • -
                        • -If use_datDes=false – non-default setting that should only be -used if the rating conditions match the design conditions: -The rating conditions specified in the sub-record -per are propagated \"up\" (via the start attribute) -and used as design conditions. -The sub-record perSca which is ultimately used by the chiller models within - -Buildings.Templates.Components.Chillers -is then identical to the sub-record per. -When using this logic, no assignment shall be made for the design -parameters, except for the design pressure drops dp*_nominal. -
                        • -
                        -

                        -note that placeholders values are assigned to the performance curves, -the reference source temperature and the input power in -cooling mode to avoid assigning these parameters in case of non-reversible -heat pumps. -These values are unrealistic and must be overwritten for reversible heat pumps, which -is always the case when redeclaring or -reassigning the performance record per. -Models that use this record will issue a warning if these placeholders values -are not overwritten in case of reversible heat pumps. -

                        -

                        -Note that placeholders values are assigned to the chiller performance curves -(per.capFunT , per.EIRFunT and per.EIRFunPLR) -to avoid assigning these parameters if -typ=Buildings.Templates.Components.Types.Chiller.None. -If the chiller type is not None these values are unrealistic -and must be overwritten, which is always the case when redeclaring or -reassigning the performance record per.

                        ")); end Chiller; diff --git a/Buildings/Templates/Components/Data/Cooler.mo b/Buildings/Templates/Components/Data/Cooler.mo new file mode 100644 index 00000000000..1ab8bd96669 --- /dev/null +++ b/Buildings/Templates/Components/Data/Cooler.mo @@ -0,0 +1,59 @@ +within Buildings.Templates.Components.Data; +record Cooler "Record for condenser water cooling equipment" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.Components.Types.Cooler typ + "Type of equipment" + annotation(Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Modelica.Units.SI.MassFlowRate mConWat_flow_nominal( + final min=0) + "CW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpConWatFri_nominal( + final min=0, + start=if typ==Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen then + Buildings.Templates.Data.Defaults.dpConWatFriTow else + Buildings.Templates.Data.Defaults.dpConWatTowClo) + "CW flow-friction losses through tower and piping only (without elevation head or valve)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpConWatSta_nominal( + final min=0, + start=if typ==Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen then + Buildings.Templates.Data.Defaults.dpConWatStaTow else + 0) + "CW elevation head" + annotation (Dialog(group="Nominal condition", + enable=typ==Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen)); + parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal( + final min=0, + start=mConWat_flow_nominal / Buildings.Templates.Data.Defaults.ratMFloConWatByMFloAirTow) + "Air mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature TAirEnt_nominal( + final min=273.15, + start=Buildings.Templates.Data.Defaults.TOutDryCoo) + "Entering air drybulb temperature" + annotation (Dialog(group="Nominal condition", enable= + typ==Buildings.Templates.Components.Types.Cooler.DryCooler)); + parameter Modelica.Units.SI.Temperature TWetBulEnt_nominal(final min=273.15, + start=Buildings.Templates.Data.Defaults.TWetBulTowEnt) + "Entering air wetbulb temperature" annotation (Dialog(group= + "Nominal condition", enable=typ == Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen + or typ == Buildings.Templates.Components.Types.Cooler.CoolingTowerClosed)); + parameter Modelica.Units.SI.Temperature TConWatRet_nominal( + final min=273.15, + start=Buildings.Templates.Data.Defaults.TConWatRet) + "CW return temperature (cooler entering)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature TConWatSup_nominal( + final min=273.15, + start=Buildings.Templates.Data.Defaults.TConWatSup) + "CW supply temperature (cooler leaving)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Power PFan_nominal( + final min=0, + start=Buildings.Templates.Data.Defaults.ratPFanByMFloConWatTow * mConWat_flow_nominal) + "Fan power" + annotation (Dialog(group="Nominal condition")); +end Cooler; diff --git a/Buildings/Templates/Components/Data/HeatPump.mo b/Buildings/Templates/Components/Data/HeatPump.mo index 9a80ba95c88..35d8f6ae4f0 100644 --- a/Buildings/Templates/Components/Data/HeatPump.mo +++ b/Buildings/Templates/Components/Data/HeatPump.mo @@ -98,7 +98,7 @@ record HeatPump "Record for heat pump model" final parameter Modelica.Units.SI.MassFlowRate mSouHea_flow_nominal= if typ==Buildings.Templates.Components.Types.HeatPump.WaterToWater then mSouWwHea_flow_nominal else - Buildings.Templates.Data.Defaults.mAirFloByCapChi * abs(capHea_nominal) + Buildings.Templates.Data.Defaults.ratMFloAirByCapChi * abs(capHea_nominal) "Source fluid mass flow rate in heating mode"; final parameter Modelica.Units.SI.PressureDifference dpSouHea_nominal= if typ==Buildings.Templates.Components.Types.HeatPump.WaterToWater then @@ -120,7 +120,7 @@ record HeatPump "Record for heat pump model" final parameter Modelica.Units.SI.MassFlowRate mSouCoo_flow_nominal= if typ==Buildings.Templates.Components.Types.HeatPump.WaterToWater then mSouWwCoo_flow_nominal else - Buildings.Templates.Data.Defaults.mAirFloByCapChi * abs(capCoo_nominal) + Buildings.Templates.Data.Defaults.ratMFloAirByCapChi * abs(capCoo_nominal) "Source fluid mass flow rate in cooling mode"; final parameter Modelica.Units.SI.PressureDifference dpSouCoo_nominal= dpSouHea_nominal * (mSouCoo_flow_nominal/mSouHea_flow_nominal)^2 diff --git a/Buildings/Templates/Components/Data/PumpMultiple.mo b/Buildings/Templates/Components/Data/PumpMultiple.mo index 97bbdb3f141..efd64ecf1e9 100644 --- a/Buildings/Templates/Components/Data/PumpMultiple.mo +++ b/Buildings/Templates/Components/Data/PumpMultiple.mo @@ -35,8 +35,7 @@ record PumpMultiple "Record for multiple-pump models" "Performance data - Each pump" annotation(Dialog(enable=typ<>Buildings.Templates.Components.Types.Pump.None)); - parameter Modelica.Units.SI.Density rho_default= - Modelica.Media.Water.ConstantPropertyLiquidWater.d_const + parameter Modelica.Units.SI.Density rho_default=Buildings.Media.Water.d_const "Default medium density" annotation(Dialog(enable=false)); @@ -44,7 +43,7 @@ record PumpMultiple "Record for multiple-pump models" defaultComponentPrefixes = "parameter", defaultComponentName="datPum", Documentation(info="

                        -This record provides the set of sizing and operating parameters for +This record provides the set of sizing and operating parameters for the multiple-pump model Buildings.Templates.Components.Pumps.Multiple. @@ -57,14 +56,14 @@ This default characteristic is based on a least squares polynomial fit of the characteristics from Buildings.Fluid.Movers.Data.Pumps.Wilo. -The user may refer to the documentation of +The user may refer to the documentation of Buildings.Fluid.HydronicConfigurations.UsersGuide.ModelParameters for further details. -Note that a default medium density is used to parameterize +Note that a default medium density is used to parameterize the pump characteristic. So models that use this record should overwrite this default value with the density of the medium -in use, especially in the case of a water/glycol mix. +in use, especially in the case of a water/glycol mix.

                        In order to modify the default characteristic, one may use either @@ -74,12 +73,12 @@ of the following methods.

                      • Assign the whole subrecord per or only its component per.pressure. In this case the elements per[i] may differ one from another. -This is the recommended approach for unequally sized units +This is the recommended approach for unequally sized units such as dedicated pumps.
                      • Redeclare the component per. In this case the elements per[i] are all equal to the redeclared record instance. -This is the recommended approach for equally sized units +This is the recommended approach for equally sized units such as headered pumps.

                      diff --git a/Buildings/Templates/Components/Data/PumpSingle.mo b/Buildings/Templates/Components/Data/PumpSingle.mo index bec7711352c..c798014d75b 100644 --- a/Buildings/Templates/Components/Data/PumpSingle.mo +++ b/Buildings/Templates/Components/Data/PumpSingle.mo @@ -28,8 +28,7 @@ record PumpSingle "Record for single pump model" "Performance data" annotation(Dialog(enable=typ<>Buildings.Templates.Components.Types.Pump.None)); - parameter Modelica.Units.SI.Density rho_default= - Modelica.Media.Water.ConstantPropertyLiquidWater.d_const + parameter Modelica.Units.SI.Density rho_default=Buildings.Media.Water.d_const "Default medium density" annotation(Dialog(enable=false)); @@ -37,14 +36,14 @@ record PumpSingle "Record for single pump model" defaultComponentPrefixes = "parameter", defaultComponentName="datPum", Documentation(info="

                      -This record provides the set of sizing and operating parameters for +This record provides the set of sizing and operating parameters for the single pump model Buildings.Templates.Components.Pumps.Single.

                      A default flow characteristic is provided and can be overwritten as -described in the documentation of +described in the documentation of Buildings.Templates.Components.Data.PumpMultiple in the more generic case of multiple units. diff --git a/Buildings/Templates/Components/Data/package.order b/Buildings/Templates/Components/Data/package.order index 8eee7a71d44..2fb8639f65a 100644 --- a/Buildings/Templates/Components/Data/package.order +++ b/Buildings/Templates/Components/Data/package.order @@ -1,5 +1,7 @@ +BoilerHotWater Chiller Coil +Cooler Damper Fan HeatPump diff --git a/Buildings/Templates/Components/Interfaces/PartialBoilerHotWater.mo b/Buildings/Templates/Components/Interfaces/PartialBoilerHotWater.mo new file mode 100644 index 00000000000..fd11a8baa83 --- /dev/null +++ b/Buildings/Templates/Components/Interfaces/PartialBoilerHotWater.mo @@ -0,0 +1,177 @@ +within Buildings.Templates.Components.Interfaces; +partial model PartialBoilerHotWater "Interface class for hot water boiler models" + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + final m_flow_nominal=mHeaWat_flow_nominal); + + parameter Buildings.Templates.Components.Types.BoilerHotWaterModel typMod + "Type of boiler model" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Buildings.Templates.Components.Data.BoilerHotWater dat( + final typMod=typMod) + "Design and operating parameters"; + + parameter Boolean is_con + "Set to true for condensing boiler, false for non-condensing boiler" + annotation (Evaluate=true, Dialog(group="Configuration")); + + final parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal= + dat.mHeaWat_flow_nominal + "HW mass flow rate"; + final parameter Modelica.Units.SI.HeatFlowRate cap_nominal= + dat.cap_nominal + "Heating capacity"; + final parameter Modelica.Units.SI.PressureDifference dpHeaWat_nominal= + dat.dpHeaWat_nominal + "HW pressure drop"; + final parameter Modelica.Units.SI.Temperature THeaWatSup_nominal= + dat.THeaWatSup_nominal + "HW supply temperature"; + + 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")); + + Buildings.Templates.Components.Interfaces.Bus bus + "Control bus" + annotation (Placement(transformation(extent={{-20,80},{20,120}}), + iconTransformation(extent={{-20,80},{20, 120}}))); + + replaceable Buildings.Fluid.Boilers.BaseClasses.PartialBoiler boi( + redeclare final package Medium=Medium, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + final show_T=show_T, + final m_flow_small=m_flow_small) + "Boiler" + annotation (Placement(transformation(extent={{-10,-70},{10,-50}}))); + + Buildings.Controls.OBC.CDL.Reals.PIDWithReset ctl( + Ti=60, + final yMax=1, + final yMin=0, + final reverseActing=true) + "HW supply temperature controller" + annotation (Placement(transformation(extent={{-50,30},{-30,50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swiSet + "Switch setpoint to measured value when disabled" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + Buildings.Controls.OBC.CDL.Reals.Switch swiSig + "Switch control signal to zero when disabled" + annotation (Placement(transformation(extent={{0,30},{20,50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant valDis(final k=0) + "Value when disabled" + annotation (Placement(transformation(extent={{-50,-10},{-30,10}}))); + +initial equation + if typMod==Buildings.Templates.Components.Types.BoilerHotWaterModel.Table then + assert(mHeaWat_flow_nominal <= dat.per.m_flow_nominal, + "In "+ getInstanceName() + ": " + + "The design HW flow rate of the boiler model (" + + String(mHeaWat_flow_nominal) + " kg/s) should be lower than the value from " + + "the performance data record (" + String(dat.per.m_flow_nominal) + " kg/s)", + level=AssertionLevel.warning); + assert(dpHeaWat_nominal >= dat.per.dp_nominal, + "In "+ getInstanceName() + ": " + + "The design HW pressure drop of the boiler model (" + + String(dpHeaWat_nominal) + " Pa) should be higher than the value from " + + "the performance data record (" + String(dat.per.dp_nominal) + " Pa)", + level=AssertionLevel.warning); + assert(cap_nominal <= dat.per.Q_flow_nominal, + "In "+ getInstanceName() + ": " + + "The design capacity of the boiler model (" + + String(cap_nominal) + " W) should be lower than the value from " + + "the performance data record (" + String(dat.per.Q_flow_nominal) + " W)", + level=AssertionLevel.warning); + end if; + +equation + connect(port_a, boi.port_a) + annotation (Line(points={{-100,0},{-80,0},{-80,-60},{-10,-60}}, + color={0,127,255})); + connect(boi.port_b, port_b) + annotation (Line(points={{10,-60},{80,-60},{80,0},{100,0}}, + color={0,127,255})); + connect(boi.T, ctl.u_m) annotation (Line(points={{11,-52},{20,-52},{20,20},{ + -40,20},{-40,28}}, + color={0,0,127})); + connect(swiSet.y, ctl.u_s) + annotation (Line(points={{-58,40},{-52,40}}, color={0,0,127})); + connect(boi.T, swiSet.u3) annotation (Line(points={{11,-52},{20,-52},{20,20}, + {-90,20},{-90,32},{-82,32}}, color={0,0,127})); + connect(bus.THeaWatSupSet, swiSet.u1) annotation (Line( + points={{0,100},{0,80},{-90,80},{-90,48},{-82,48}}, + color={255,204,51}, + thickness=0.5)); + connect(bus.y1, swiSet.u2) annotation (Line( + points={{0,100},{0,80},{-90,80},{-90,40},{-82,40}}, + color={255,204,51}, + thickness=0.5)); + connect(swiSet.u2, ctl.trigger) annotation (Line(points={{-82,40},{-86,40},{ + -86,24},{-46,24},{-46,28}}, color={255,0,255})); + connect(ctl.y, swiSig.u1) annotation (Line(points={{-28,40},{-20,40},{-20,48}, + {-2,48}}, color={0,0,127})); + connect(valDis.y, swiSig.u3) annotation (Line(points={{-28,0},{-4,0},{-4,32}, + {-2,32}}, color={0,0,127})); + connect(swiSet.u2, swiSig.u2) annotation (Line(points={{-82,40},{-86.1538,40}, + {-86.1538,24},{-10,24},{-10,40},{-2,40}}, color={255,0,255})); + connect(swiSig.y, bus.y_actual) annotation (Line(points={{22,40},{40,40},{40, + 96},{0,96},{0,100}}, + color={0,0,127})); + connect(swiSig.y, boi.y) annotation (Line(points={{22,40},{40,40},{40,-40},{ + -20,-40},{-20,-52},{-12,-52}}, color={0,0,127})); + connect(boi.T, bus.THeaWatSup) annotation (Line(points={{11,-52},{60,-52},{60, + 98},{0,98},{0,100}}, color={0,0,127})); + + + annotation (Documentation(info=" +

                      +This partial class provides a standard interface for hot water boiler models. +It includes a replaceable instance of + +Buildings.Fluid.Boilers.BaseClasses.PartialBoiler. +This model is used to construct the hot water boiler models within + +Buildings.Templates.Components.Boilers. +

                      +

                      Control points

                      +

                      +The following input and output points are available. +

                      +
                        +
                      • +Boiler Enable signal y1 : +DO signal, with a dimensionality of zero +
                      • +
                      • +Boiler HW supply temperature setpoint THeaWatSupSet: +AO signal, with a dimensionality of zero +
                      • +
                      • +Boiler firing rate y_actual: +AI signal, with a dimensionality of zero +
                      • +
                      • +Boiler HW supply temperature THeaWatSup: +AI signal, with a dimensionality of zero +
                      • +
                      +", revisions=" +
                        +
                      • +April 28, 2023, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +"), Icon(graphics={ + Rectangle( + extent={{100,60},{-100,-60}}, + lineColor={0,0,0}, + lineThickness=1), + Text( extent={{-60,20},{60,-20}}, + textColor={0,0,0}, + textString="BOI"), + Bitmap(extent={{-20,60},{20,100}}, fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Boilers/ControllerOnboard.svg")})); +end PartialBoilerHotWater; diff --git a/Buildings/Templates/Components/Interfaces/PartialChiller.mo b/Buildings/Templates/Components/Interfaces/PartialChiller.mo index 4de7eeb6af4..be9cfd57c0f 100644 --- a/Buildings/Templates/Components/Interfaces/PartialChiller.mo +++ b/Buildings/Templates/Components/Interfaces/PartialChiller.mo @@ -32,23 +32,25 @@ partial model PartialChiller annotation (Placement(transformation(extent={{70,80},{90,100}})), __ctrlFlow(enable=false)); final parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal=dat.mChiWat_flow_nominal - "CHW mass flow rate"; + "Design CHW mass flow rate"; final parameter Modelica.Units.SI.MassFlowRate mCon_flow_nominal=dat.mCon_flow_nominal - "Condenser cooling fluid mass flow rate"; + "Design condenser cooling fluid mass flow rate"; final parameter Modelica.Units.SI.HeatFlowRate cap_nominal=dat.cap_nominal - "Cooling capacity"; + "Design cooling capacity"; + final parameter Modelica.Units.SI.HeatFlowRate QChiWat_flow_nominal=-abs(cap_nominal) + "Design cooling heat flow rate"; final parameter Modelica.Units.SI.PressureDifference dpChiWat_nominal=dat.dpChiWat_nominal - "CHW pressure drop"; + "Design CHW pressure drop"; final parameter Modelica.Units.SI.PressureDifference dpCon_nominal=dat.dpCon_nominal - "Condenser cooling fluid pressure drop"; + "Design condenser cooling fluid pressure drop"; final parameter Modelica.Units.SI.Temperature TChiWatSup_nominal=dat.TChiWatSup_nominal - "CHW supply temperature"; + "Design CHW supply temperature"; final parameter Modelica.Units.SI.Temperature TChiWatRet_nominal=dat.TChiWatRet_nominal - "CHW return temperature"; + "Design CHW return temperature"; final parameter Modelica.Units.SI.Temperature TConEnt_nominal=dat.TConEnt_nominal - "Condenser entering fluid temperature"; + "Design condenser entering fluid temperature"; final parameter Modelica.Units.SI.Temperature TConLvg_nominal=dat.TConLvg_nominal - "Condenser leaving fluid temperature"; + "Design condenser leaving fluid temperature"; parameter Boolean have_dpChiWat=true "Set to true for CHW pressure drop computed by this model, false for external computation" annotation (Evaluate=true, diff --git a/Buildings/Templates/Components/Interfaces/PartialCoil.mo b/Buildings/Templates/Components/Interfaces/PartialCoil.mo index 76207e86a1f..8f3234e0000 100644 --- a/Buildings/Templates/Components/Interfaces/PartialCoil.mo +++ b/Buildings/Templates/Components/Interfaces/PartialCoil.mo @@ -122,7 +122,6 @@ partial model PartialCoil "Interface class for coil" extent={{-10,-10},{10,10}}, rotation=0, origin={0,100}))); - protected parameter Buildings.Templates.Components.Data.Valve datVal( final typ=typVal, diff --git a/Buildings/Templates/Components/Interfaces/PartialCooler.mo b/Buildings/Templates/Components/Interfaces/PartialCooler.mo new file mode 100644 index 00000000000..24889816f8b --- /dev/null +++ b/Buildings/Templates/Components/Interfaces/PartialCooler.mo @@ -0,0 +1,72 @@ +within Buildings.Templates.Components.Interfaces; +partial model PartialCooler + "Interface class for models of condenser water cooling equipment" + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + redeclare final package Medium=MediumConWat, + final m_flow_nominal=mConWat_flow_nominal); + + replaceable package MediumConWat=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CW medium model" + annotation(__Linkage(enable=false)); + + parameter Buildings.Templates.Components.Types.Cooler typ + "Type of equipment" + annotation(Evaluate=true, Dialog(group="Configuration")); + + parameter Buildings.Templates.Components.Data.Cooler dat( + final typ=typ) + "Design and operating parameters"; + + final parameter Modelica.Units.SI.MassFlowRate mConWat_flow_nominal= + dat.mConWat_flow_nominal + "CW mass flow rate"; + final parameter Modelica.Units.SI.PressureDifference dpConWatFri_nominal( + final min=0)= + dat.dpConWatFri_nominal + "CW flow-friction losses through equipment and piping only (without elevation head or valve)"; + // RFE: Elevation head currently not modeled in Buildings.Fluid.HeatExchangers.CoolingTowers + final parameter Modelica.Units.SI.PressureDifference dpConWatSta_nominal( + final min=0)= + dat.dpConWatSta_nominal + "CW elevation head"; + final parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal= + dat.mAir_flow_nominal + "Air mass flow rate"; + + parameter Modelica.Units.SI.Time tau=30 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + 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")); + + Buildings.Templates.Components.Interfaces.Bus bus + "Control bus" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={0,100}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,100}))); + BoundaryConditions.WeatherData.Bus busWea + "Weather bus" + annotation (Placement(transformation(extent={{-80,80},{-40,120}}), + iconTransformation(extent={{-70,90},{-50,110}}))); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

                      +This partial class provides a standard interface for cooler models. +

                      +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end PartialCooler; diff --git a/Buildings/Templates/Components/Interfaces/PartialPumpSingle.mo b/Buildings/Templates/Components/Interfaces/PartialPumpSingle.mo index 6b210d8825a..dc205de1f87 100644 --- a/Buildings/Templates/Components/Interfaces/PartialPumpSingle.mo +++ b/Buildings/Templates/Components/Interfaces/PartialPumpSingle.mo @@ -34,7 +34,7 @@ partial model PartialPumpSingle "Interface class for single pump" Icon(coordinateSystem(preserveAspectRatio=false)), Documentation(info="

                      -This partial class provides a standard interface for +This partial class provides a standard interface for single pump models.

                      ", revisions=" diff --git a/Buildings/Templates/Components/Interfaces/package.order b/Buildings/Templates/Components/Interfaces/package.order index 9c616040c18..8e455d9e41b 100644 --- a/Buildings/Templates/Components/Interfaces/package.order +++ b/Buildings/Templates/Components/Interfaces/package.order @@ -1,6 +1,8 @@ Bus +PartialBoilerHotWater PartialChiller PartialCoil +PartialCooler PartialFan PartialHeatPump PartialHeatPumpEquationFit diff --git a/Buildings/Templates/Components/Routing/MultipleToMultiple.mo b/Buildings/Templates/Components/Routing/MultipleToMultiple.mo index 317d6b33198..cfe9b5f497c 100644 --- a/Buildings/Templates/Components/Routing/MultipleToMultiple.mo +++ b/Buildings/Templates/Components/Routing/MultipleToMultiple.mo @@ -42,13 +42,13 @@ model MultipleToMultiple annotation ( Dialog(tab="Advanced", group="Diagnostics"), HideResult=true); - constant Integer icon_xinl = -100 + parameter Integer icon_xinl = -100 "Minimum x-coordinate of inlet connection lines"; - constant Integer icon_xout = 100 + parameter Integer icon_xout = 100 "Maximum x-coordinate of outlet connection lines"; - constant Integer icon_offset = 0 + parameter Integer icon_offset = 0 "Offset in y-direction between inlet and outlet in icon layer"; - constant Integer icon_dy = 100 + parameter Integer icon_dy = 100 "Distance in y-direction between each branch in icon layer"; constant Buildings.Templates.Components.Types.IntegrationPoint icon_pipe= Buildings.Templates.Components.Types.IntegrationPoint.Supply diff --git a/Buildings/Templates/Components/Routing/MultipleToSingle.mo b/Buildings/Templates/Components/Routing/MultipleToSingle.mo index 55bbe95ec67..9f9650be1e9 100644 --- a/Buildings/Templates/Components/Routing/MultipleToSingle.mo +++ b/Buildings/Templates/Components/Routing/MultipleToSingle.mo @@ -35,9 +35,9 @@ model MultipleToSingle "Multiple inlet port, single outlet ports" Dialog(tab="Advanced", group="Diagnostics"), HideResult=true); - constant Integer icon_offset = 0 + parameter Integer icon_offset = 0 "Offset in y-direction between inlet and outlet in icon layer"; - constant Integer icon_dy = 100 + parameter Integer icon_dy = 100 "Distance in y-direction between each branch in icon layer"; constant Buildings.Templates.Components.Types.IntegrationPoint icon_pipe= Buildings.Templates.Components.Types.IntegrationPoint.None "Pipe symbol"; diff --git a/Buildings/Templates/Components/Routing/SingleToMultiple.mo b/Buildings/Templates/Components/Routing/SingleToMultiple.mo index a711d582408..ccd1bc4eef1 100644 --- a/Buildings/Templates/Components/Routing/SingleToMultiple.mo +++ b/Buildings/Templates/Components/Routing/SingleToMultiple.mo @@ -35,9 +35,9 @@ model SingleToMultiple "Single inlet port, multiple outlet ports" Dialog(tab="Advanced", group="Diagnostics"), HideResult=true); - constant Integer icon_offset = 0 + parameter Integer icon_offset = 0 "Offset in y-direction between inlet and outlet in icon layer"; - constant Integer icon_dy = 100 + parameter Integer icon_dy = 100 "Distance in y-direction between each branch in icon layer"; constant Buildings.Templates.Components.Types.IntegrationPoint icon_pipe= Buildings.Templates.Components.Types.IntegrationPoint.None "Pipe symbol"; diff --git a/Buildings/Templates/Components/Types.mo b/Buildings/Templates/Components/Types.mo index 457fcc8ff6a..842a7e2d479 100644 --- a/Buildings/Templates/Components/Types.mo +++ b/Buildings/Templates/Components/Types.mo @@ -1,11 +1,15 @@ within Buildings.Templates.Components; package Types "Package with type definitions" extends Modelica.Icons.TypesPackage; + type BoilerHotWaterModel = enumeration( + Polynomial + "Efficiency described by a polynomial", + Table + "Efficiency described by a table") + "Enumeration to specify the type of hot water boiler model"; type Chiller = enumeration( AirCooled "Air-cooled compression chiller", - None - "No chiller", WaterCooled "Water-cooled compression chiller") "Enumeration to specify the type of chiller"; diff --git a/Buildings/Templates/Components/Validation/BoilerHotWater.mo b/Buildings/Templates/Components/Validation/BoilerHotWater.mo new file mode 100644 index 00000000000..9313d822145 --- /dev/null +++ b/Buildings/Templates/Components/Validation/BoilerHotWater.mo @@ -0,0 +1,166 @@ +within Buildings.Templates.Components.Validation; +model BoilerHotWater "Test model for the hot water boiler model" + extends Buildings.Templates.Components.Validation.BoilerHotWaterRecord; + + replaceable package Medium=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "HW medium"; + + 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")); + + parameter Buildings.Templates.Components.Data.BoilerHotWater datBoiPol( + final typMod=Buildings.Templates.Components.Types.BoilerHotWaterModel.Polynomial, + fue=Buildings.Fluid.Data.Fuels.NaturalGasLowerHeatingValue(), + mHeaWat_flow_nominal=datBoiTab.cap_nominal/15/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, + cap_nominal=1000E3, + dpHeaWat_nominal(displayUnit="Pa") = 5000, + THeaWatSup_nominal=333.15) + "Design and operating parameters for the boiler model using a polynomial" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + + Buildings.Templates.Components.Boilers.HotWaterTable boiTab( + redeclare final package Medium = Medium, + final energyDynamics=energyDynamics, + final dat=datBoiTabRed, + is_con=false) + "Boiler model with efficiency described by a table" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Fluid.Sources.Boundary_pT retHeaWat( + redeclare final package Medium = Medium, + p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + boiTab.dpHeaWat_nominal, + use_T_in=true, + T=datBoiTab.THeaWatSup_nominal - 15, + nPorts=2) "Boundary conditions for HW distribution system" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + + Fluid.Sources.Boundary_pT supHeaWat(redeclare final package Medium =Medium, + p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal, + nPorts=2) + "Boundary conditions for HW distribution system" + annotation (Placement(transformation(extent={{90,-30},{70,-10}}))); + Fluid.Sensors.TemperatureTwoPort THeaWatSup(redeclare final package Medium = + Medium, final m_flow_nominal=datBoiTab.mHeaWat_flow_nominal) + "HW supply temperature" + annotation (Placement(transformation(extent={{30,-10},{50,10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp THeaWatRet( + y(final unit="K", displayUnit="degC"), + height=35, + duration=500, + offset=datBoiTab.THeaWatSup_nominal - 25, + startTime=100) "HW return temperature value" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1Boi( + table=[0,1; 1,1], + timeScale=3600, + period=3600) "Boiler Enable signal" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Buildings.Templates.HeatingPlants.HotWater.Interfaces.Bus bus + "Boiler control bus" + annotation ( + Placement(transformation(extent={{-20,20},{20,60}}), iconTransformation( + extent={{-296,-74},{-256,-34}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupSet( + k=Buildings.Templates.Data.Defaults.THeaWatSup, + y(final unit="K", displayUnit="degC")) + "HW supply temperature setpoint" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + Boilers.HotWaterPolynomial boiPol( + redeclare final package Medium = Medium, + final energyDynamics=energyDynamics, + final dat=datBoiPol, + is_con=false) + "Boiler model with efficiency described by a polynomial" + annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); + Fluid.Sensors.TemperatureTwoPort THeaWatSup1( + redeclare final package Medium =Medium, + final m_flow_nominal=datBoiTab.mHeaWat_flow_nominal) + "HW supply temperature" + annotation (Placement(transformation(extent={{30,-90},{50,-70}}))); + HeatingPlants.HotWater.Interfaces.Bus bus1 + "Boiler control bus" + annotation ( + Placement(transformation(extent={{-20,-60},{20,-20}}), + iconTransformation(extent={{-296,-74},{-256,-34}}))); +equation + connect(retHeaWat.ports[1], boiTab.port_a) annotation (Line(points={{-20,-21}, + {-20,0},{-10,0}}, color={0,127,255})); + connect(boiTab.port_b, THeaWatSup.port_a) + annotation (Line(points={{10,0},{30,0}}, color={0,127,255})); + connect(THeaWatSup.port_b, supHeaWat.ports[1]) + annotation (Line(points={{50,0},{60,0},{60,-21},{70,-21}}, + color={0,127,255})); + connect(THeaWatRet.y, retHeaWat.T_in) annotation (Line(points={{-58,0},{-50,0}, + {-50,-16},{-42,-16}}, + color={0,0,127})); + connect(boiTab.bus, bus) annotation (Line( + points={{0,10},{0,10},{0,40}}, + color={255,204,51}, + thickness=0.5), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(y1Boi.y[1], bus.y1) annotation (Line(points={{-58,80},{0,80},{0,40}}, + color={255,0,255}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(THeaWatSupSet.y, bus.THeaWatSupSet) + annotation (Line(points={{-58,40},{0,40}}, color={0,0,127})); + connect(retHeaWat.ports[2], boiPol.port_a) + annotation (Line(points={{-20,-19},{-20,-80},{-10,-80}}, + color={0,127,255})); + connect(THeaWatSup1.port_b, supHeaWat.ports[2]) annotation (Line(points={{50,-80}, + {60,-80},{60,-19},{70,-19}}, + color={0,127,255})); + connect(boiPol.port_b, THeaWatSup1.port_a) + annotation (Line(points={{10,-80},{30,-80}}, color={0,127,255})); + connect(bus1, boiPol.bus) annotation (Line( + points={{0,-40},{0,-70}}, + color={255,204,51}, + thickness=0.5)); + connect(THeaWatSupSet.y, bus1.THeaWatSupSet) annotation (Line(points={{-58,40}, + {-50,40},{-50,-38},{0,-38},{0,-40}}, + color={0,0,127})); + connect(y1Boi.y[1], bus1.y1) annotation (Line(points={{-58,80},{-52,80},{-52,-40}, + {0,-40}}, color={255,0,255})); + annotation ( + experiment( + StopTime=2000, + Tolerance=1e-06), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/BoilerHotWater.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This model validates the parameter propagation within the record class + +Buildings.Templates.ChilledWaterPlants.Components.Data.ChillerGroup. +It illustrates +

                      +
                        +
                      • +the manual propagation of the nominal value of the condenser cooling +fluid temperature TConEnt_nominal +when redeclaring the performance data record per, +
                      • +
                      • +how the original bindings for other design parameters such as the +CHW and CW flow rates persist when redeclaring the performance data record, +
                      • +
                      • +how to overwrite such persistent bindings if the nominal conditions +used to assess the performance data differ from the design conditions: +see the parameter binding for QEva_flow_nominal, +
                      • +
                      • +how different performance curves may be assigned to each chiller +inside the same group. +
                      • +
                      +")); +end BoilerHotWater; diff --git a/Buildings/Templates/Components/Validation/BoilerHotWaterRecord.mo b/Buildings/Templates/Components/Validation/BoilerHotWaterRecord.mo new file mode 100644 index 00000000000..7fb658b6c6f --- /dev/null +++ b/Buildings/Templates/Components/Validation/BoilerHotWaterRecord.mo @@ -0,0 +1,75 @@ +within Buildings.Templates.Components.Validation; +model BoilerHotWaterRecord + "Test model for parameter propagation with the hot water boiler record" + extends Modelica.Icons.Example; + + parameter Buildings.Fluid.Boilers.Data.Lochinvar.KnightXL.KBXdash0500 per; + + parameter Buildings.Templates.Components.Data.BoilerHotWater datBoiTab( + final typMod=Buildings.Templates.Components.Types.BoilerHotWaterModel.Table, + fue=Buildings.Fluid.Data.Fuels.NaturalGasLowerHeatingValue(), + per=per, + mHeaWat_flow_nominal=datBoiTab.cap_nominal/15/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, + cap_nominal=1000E3, + dpHeaWat_nominal(displayUnit="Pa") = 5000, + THeaWatSup_nominal=333.15) + "Design and operating parameters for the boiler model using a lookup table" + annotation (Placement(transformation(extent={{60,80},{80,100}}))); + + parameter Buildings.Templates.Components.Data.BoilerHotWater datBoiTabRed( + final typMod=Buildings.Templates.Components.Types.BoilerHotWaterModel.Table, + fue=Buildings.Fluid.Data.Fuels.NaturalGasLowerHeatingValue(), + redeclare Buildings.Fluid.Boilers.Data.Lochinvar.KnightXL.KBXdash0500 per, + mHeaWat_flow_nominal=datBoiTab.cap_nominal/15/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, + cap_nominal=1000E3, + dpHeaWat_nominal(displayUnit="Pa") = 5000, + THeaWatSup_nominal=333.15) + "Design and operating parameters for the boiler model using a lookup table with redeclaration" + annotation (Placement(transformation(extent={{60,50},{80,70}}))); + + parameter Buildings.Templates.Components.Data.BoilerHotWater datBoiTabLoc( + final typMod=Buildings.Templates.Components.Types.BoilerHotWaterModel.Table, + fue=Buildings.Fluid.Data.Fuels.NaturalGasLowerHeatingValue(), + per(effCur=per.effCur), + mHeaWat_flow_nominal=datBoiTab.cap_nominal/15/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, + cap_nominal=1000E3, + dpHeaWat_nominal(displayUnit="Pa") = 5000, + THeaWatSup_nominal=333.15) + "Design and operating parameters for the boiler model using a local assignment of the efficiency curve " + annotation (Placement(transformation(extent={{60,50},{80,70}}))); + + annotation ( + experiment( + StopTime=1, + Tolerance=1e-06), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/BoilerHotWaterRecord.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This model validates the parameter propagation within the record class + +Buildings.Templates.Components.Data.BoilerHotWater. +It illustrates +

                      +
                        +
                      • +how to assign a value to the efficiency curve either manually +(datBoiTabLoc.per.effCur) or by the means of a record redeclaration +(datBoiTabRed.per.effCur) or record binding (datBoiTab.per.effCur), +
                      • +
                      • +how the original bindings for other design parameters such as the +HW flow rate and capacity persist when redeclaring the performance record +datBoiTabRed.per, +
                      • +
                      • +how to completely overwrite the original bindings to the design conditions +when assigning an instance of a compatible record to datBoiTab.per. +Note that Dymola (as of version 2023.x) does not support a direct binding +with a record function and requires a local instance of the record as illustrated +in this model. +
                      • +
                      +")); +end BoilerHotWaterRecord; diff --git a/Buildings/Templates/Components/Validation/PumpMultipleRecord.mo b/Buildings/Templates/Components/Validation/PumpMultipleRecord.mo index 21f723c721b..a7f0cb4abca 100644 --- a/Buildings/Templates/Components/Validation/PumpMultipleRecord.mo +++ b/Buildings/Templates/Components/Validation/PumpMultipleRecord.mo @@ -82,13 +82,13 @@ The instance datDef illustrates the default pressure curve assignment based on the design parameters.

                      -The instance datRed illustrates the modification of the +The instance datRed illustrates the modification of the pressure curve by redeclaring the subrecord per. In this case, all elements per[i] are equal.

                      The instances datAss and datPre illustrate -the modification of the pressure curve by assigning either the whole +the modification of the pressure curve by assigning either the whole subrecord per or its component per.pressure. This allows assigning different pressure curves to the elements per[i].

                      diff --git a/Buildings/Templates/Components/Validation/Tanks.mo b/Buildings/Templates/Components/Validation/Tanks.mo index c1bd4f375b9..a0b2e31c3d5 100644 --- a/Buildings/Templates/Components/Validation/Tanks.mo +++ b/Buildings/Templates/Components/Validation/Tanks.mo @@ -7,7 +7,7 @@ model Tanks "Liquid medium"; parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=1 "Nominal mass flow rate"; - parameter Modelica.Units.SI.Volume V=60 * m_flow_nominal / Modelica.Media.Water.ConstantPropertyLiquidWater.d_const + parameter Modelica.Units.SI.Volume V=60 * m_flow_nominal / Buildings.Media.Water.d_const "Tank volume"; Fluid.Sources.MassFlowSource_T sou( redeclare final package Medium=Medium, @@ -78,8 +78,8 @@ equation StopTime=500), Documentation( info=" -

                      -This model validates the models within +

                      +This model validates the models within Buildings.Templates.Components.Tanks.

                      diff --git a/Buildings/Templates/Components/Validation/package.order b/Buildings/Templates/Components/Validation/package.order index 186ae648b53..a47afa4a5e6 100644 --- a/Buildings/Templates/Components/Validation/package.order +++ b/Buildings/Templates/Components/Validation/package.order @@ -1,3 +1,5 @@ +BoilerHotWater +BoilerHotWaterRecord Coils Dampers Fans diff --git a/Buildings/Templates/Components/package.order b/Buildings/Templates/Components/package.order index 02bffb65379..dd7bed5ff8d 100644 --- a/Buildings/Templates/Components/package.order +++ b/Buildings/Templates/Components/package.order @@ -1,7 +1,9 @@ Actuators +Boilers Chillers Coils Controls +Coolers Fans HeatPumps Pumps diff --git a/Buildings/Templates/Data/Defaults.mo b/Buildings/Templates/Data/Defaults.mo index 06438de3b5c..acb498f1dd8 100644 --- a/Buildings/Templates/Data/Defaults.mo +++ b/Buildings/Templates/Data/Defaults.mo @@ -40,10 +40,10 @@ package Defaults "Dry cooler entering air drybulb temperature"; constant Modelica.Units.SI.Temperature TWetBulTowEnt=24 + 273.15 "CT entering air wetbulb temperature"; - constant Real PFanByFloConWatTow( + constant Real ratPFanByMFloConWatTow( unit="W/(kg/s)")=340 "CT fan power divided by CW mass flow rate"; - constant Real mConWatFloByAirTow( + constant Real ratMFloConWatByMFloAirTow( unit="1")=1.45 "CT CW mass flow rate divided by air mass flow rate"; constant Modelica.Units.SI.PressureDifference dpConWatFriTow=1E4 @@ -52,7 +52,7 @@ package Defaults "CW elevation head (for open cooling towers only)"; constant Modelica.Units.SI.PressureDifference dpConWatTowClo=5E4 "CW flow-friction losses through closed-circuit tower and piping only (without valve)"; - constant Real mAirFloByCapChi( + constant Real ratMFloAirByCapChi( unit="(kg/s)/W")=1E-4 "Air mass flow rate divided by capacity for air-cooled chiller"; constant Real COPChiAirCoo( diff --git a/Buildings/Templates/Plants/Boilers/HotWater/BoilerPlant.mo b/Buildings/Templates/Plants/Boilers/HotWater/BoilerPlant.mo new file mode 100644 index 00000000000..0af7bb831b5 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/BoilerPlant.mo @@ -0,0 +1,897 @@ +within Buildings.Templates.Plants.Boilers.HotWater; +model BoilerPlant "Boiler plant" + extends + Buildings.Templates.Plants.Boilers.HotWater.Interfaces.PartialBoilerPlant( + final typCtl=ctl.typ, + final nAirHan=ctl.nAirHan, + final nEquZon=ctl.nEquZon, + dat( + have_senDpHeaWatLoc=ctl.have_senDpHeaWatLoc, + nSenDpHeaWatRem=ctl.nSenDpHeaWatRem, + have_senVHeaWatSec=ctl.have_senVHeaWatSec)); + + Buildings.Templates.Plants.Boilers.HotWater.Components.BoilerGroup boiCon( + redeclare final package Medium = Medium, + final typMod=typMod, + final nBoi=nBoiCon, + final is_con=true, + final typArrPumHeaWatPri=typArrPumHeaWatPriCon, + final dat=dat.boiCon, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal) + if have_boiCon + "Condensing boilers" + annotation (Placement(transformation(extent={{-220,-260},{-140,-120}}))); + + Buildings.Templates.Plants.Boilers.HotWater.Components.BoilerGroup boiNon( + redeclare final package Medium=Medium, + final typMod=typMod, + final nBoi=nBoiNon, + final is_con=false, + final typArrPumHeaWatPri=typArrPumHeaWatPriNon, + final dat=dat.boiNon, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal) + if have_boiNon + "Non-condensing boilers" + annotation (Placement(transformation(extent={{-220,-120},{-140,20}}))); + + // Primary HW loop - Condensing boilers + Buildings.Templates.Components.Routing.SingleToMultiple inlBoiCon( + redeclare final package Medium = Medium, + final nPorts=nBoiCon, + final m_flow_nominal=mHeaWatPriCon_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + icon_offset=900, + icon_dy=-300, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Return) if have_boiCon + "Condensing boiler inlet manifold" + annotation (Placement(transformation(extent={{-120,-250},{-140,-230}}))); + Buildings.Templates.Components.Routing.MultipleToMultiple inlPumHeaWatPriCon( + redeclare final package Medium = Medium, + final nPorts_b=nPumHeaWatPriCon, + final have_comLeg= + typArrPumHeaWatPriCon==Buildings.Templates.Components.Types.PumpArrangement.Headered, + final nPorts_a=nBoiCon, + final m_flow_nominal=mHeaWatPriCon_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply, + icon_xinl=-400, + icon_dy=-300) if have_boiCon + "Primary HW pumps inlet manifold" + annotation (Placement(transformation(extent={{-110,-150},{-90,-130}}))); + Buildings.Templates.Components.Pumps.Multiple pumHeaWatPriCon( + redeclare final package Medium = Medium, + final nPum=nPumHeaWatPriCon, + final have_var=have_varPumHeaWatPriCon, + final have_varCom=true, + final dat=dat.pumHeaWatPriCon, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + icon_dy=-300) if have_boiCon + "Primary HW pumps - Condensing boilers" + annotation (Placement(transformation(extent={{-90,-150},{-70,-130}}))); + Buildings.Templates.Components.Routing.MultipleToSingle outPumHeaWatPriCon( + redeclare final package Medium = Medium, + final nPorts=nPumHeaWatPriCon, + final m_flow_nominal=mHeaWatPriCon_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply, + icon_dy=-300) if have_boiCon + "Primary HW pumps outlet manifold" + annotation (Placement(transformation(extent={{-70,-150},{-50,-130}}))); + Buildings.Templates.Components.Actuators.Valve valHeaWatMinBypCon( + redeclare final package Medium = Medium, + final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating, + final dat=dat.valHeaWatMinBypCon, + final allowFlowReversal=allowFlowReversal) if have_valHeaWatMinBypCon + "HW minimum flow bypass valve - Condensing boilers" + annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={60,-190}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VHeaWatPriSupCon_flow( + redeclare final package Medium = Medium, + final m_flow_nominal=mHeaWatPriCon_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final have_sen=ctl.have_senVHeaWatPriCon and ctl.locSenVHeaWatPri == + Buildings.Templates.Plants.Boilers.HotWater.Types.SensorLocation.Supply, + final text_flip=false, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + if have_boiCon + "Primary HW volume flow rate - Condensing boilers" + annotation (Placement(transformation(extent={{-40,-150},{-20,-130}}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VHeaWatPriRetCon_flow( + redeclare final package Medium = Medium, + final m_flow_nominal=mHeaWatPriCon_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final have_sen=ctl.have_senVHeaWatPriCon and ctl.locSenVHeaWatPri == + Buildings.Templates.Plants.Boilers.HotWater.Types.SensorLocation.Return, + final text_flip=true, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Return) + if have_boiCon + "Primary HW volume flow rate - Condensing boilers" + annotation (Placement(transformation(extent={{-20,-250},{-40,-230}}))); + Buildings.Templates.Components.Sensors.Temperature THeaWatPriSupCon( + redeclare final package Medium = Medium, + final have_sen=ctl.have_senTHeaWatPriSupCon, + final text_flip=false, + final m_flow_nominal=mHeaWatPriCon_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + if have_boiCon + "Primary HW supply temperature - Condensing boilers" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={10,-140}))); + Buildings.Templates.Components.Sensors.Temperature THeaWatPlaRetCon( + redeclare final package Medium = Medium, + final have_sen=ctl.have_senTHeaWatPlaRetCon, + final text_flip=true, + final m_flow_nominal=mHeaWatPriCon_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Return) + if have_boiCon + "Plant HW return temperature - Condensing boilers" + annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={10,-240}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VHeaWatBypCon_flow( + redeclare final package Medium = Medium, + final m_flow_nominal=mHeaWat_flow_nominal, + final allowFlowReversal=true, + final have_sen=have_varPumHeaWatPriCon + and typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None + and ctl.typMeaCtlHeaWatPri==Buildings.Templates.Plants.Boilers.HotWater.Types.PrimaryOverflowMeasurement.FlowDecoupler, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter, + icon_pipe=if have_boiNon then Buildings.Templates.Components.Types.IntegrationPoint.Return + else Buildings.Templates.Components.Types.IntegrationPoint.Supply) + if have_bypHeaWatFixCon + "Decoupler HW volume flow rate / Fixed HW bypass - Condensing boilers" + annotation (Placement( + transformation( + extent={{10,10},{-10,-10}}, + rotation=90, + origin={60,-170}))); + Buildings.Templates.Components.Routing.Junction junInlBoiCon( + redeclare final package Medium = Medium, + final tau=tau, + final m_flow_nominal=mHeaWat_flow_nominal*{1,-1,1}, + final energyDynamics=energyDynamics, + dp_nominal=fill(1E3, 3), + 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, + icon_pipe1=Buildings.Templates.Components.Types.IntegrationPoint.Return, + icon_pipe2=if have_boiCon then Buildings.Templates.Components.Types.IntegrationPoint.Return + else Buildings.Templates.Components.Types.IntegrationPoint.None, + icon_pipe3=if have_bypHeaWatFixCon or have_valHeaWatMinBypCon then + (if have_boiNon then Buildings.Templates.Components.Types.IntegrationPoint.Return + else Buildings.Templates.Components.Types.IntegrationPoint.Supply) else + Buildings.Templates.Components.Types.IntegrationPoint.None) + "Fluid junction" + annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=0, + origin={60,-240}))); + Buildings.Templates.Components.Routing.Junction junOutBoiCon( + redeclare final package Medium = Medium, + final tau=tau, + final m_flow_nominal=mHeaWat_flow_nominal*{-1,-1,1}, + final energyDynamics=energyDynamics, + dp_nominal=fill(0, 3), + final portFlowDirection_1=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, + 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, + icon_pipe1=if have_bypHeaWatFixCon or have_valHeaWatMinBypCon then + (if have_boiNon then Buildings.Templates.Components.Types.IntegrationPoint.Return + else Buildings.Templates.Components.Types.IntegrationPoint.Supply) else + Buildings.Templates.Components.Types.IntegrationPoint.None, + icon_pipe2=if have_boiNon then Buildings.Templates.Components.Types.IntegrationPoint.Return + else Buildings.Templates.Components.Types.IntegrationPoint.Supply, + icon_pipe3=if have_boiCon then Buildings.Templates.Components.Types.IntegrationPoint.Supply + else Buildings.Templates.Components.Types.IntegrationPoint.None) + "Fluid junction" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={60,-140}))); + + Buildings.Templates.Components.Sensors.Temperature THeaWatIntSup( + redeclare final package Medium = Medium, + final have_sen=typ == Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.Hybrid, + final m_flow_nominal=mHeaWat_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell, + icon_pipe=if have_boiNon then Buildings.Templates.Components.Types.IntegrationPoint.Return + else Buildings.Templates.Components.Types.IntegrationPoint.Supply) + "Intermediate HW supply temperature" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={60,-120}))); + + // Primary HW loop - Non-condensing boilers + Buildings.Templates.Components.Routing.SingleToMultiple inlBoiNon( + redeclare final package Medium = Medium, + final nPorts=nBoiNon, + final m_flow_nominal=mHeaWatPriNon_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + icon_offset=900, + icon_dy=-300, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Return) if have_boiNon + "Non-condensing boiler inlet manifold" + annotation (Placement(transformation(extent={{-120,-110},{-140,-90}}))); + Buildings.Templates.Components.Routing.MultipleToMultiple inlPumHeaWatPriNon( + redeclare final package Medium = Medium, + final nPorts_b=nPumHeaWatPriNon, + final have_comLeg= + typArrPumHeaWatPriNon==Buildings.Templates.Components.Types.PumpArrangement.Headered, + final nPorts_a=nBoiNon, + final m_flow_nominal=mHeaWatPriNon_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply, + icon_xinl=-400, + icon_dy=-300) if have_boiNon + "Primary HW pumps inlet manifold" + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}))); + Buildings.Templates.Components.Pumps.Multiple pumHeaWatPriNon( + redeclare final package Medium = Medium, + final nPum=nPumHeaWatPriNon, + final have_var=have_varPumHeaWatPriNon, + final have_varCom=true, + final dat=dat.pumHeaWatPriNon, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + icon_dy=-300) if have_boiNon + "Primary HW pumps - Non-condensing boilers" + annotation (Placement(transformation(extent={{-90,-10},{-70,10}}))); + Buildings.Templates.Components.Routing.MultipleToSingle outPumHeaWatPriNon( + redeclare final package Medium = Medium, + final nPorts=nPumHeaWatPriNon, + final m_flow_nominal=mHeaWatPriNon_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply, + icon_dy=-300) if have_boiNon + "Primary HW pumps outlet manifold" + annotation (Placement(transformation(extent={{-70,-10},{-50,10}}))); + Buildings.Templates.Components.Actuators.Valve valHeaWatMinBypNon( + redeclare final package Medium = Medium, + final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating, + final dat=dat.valHeaWatMinBypNon, + final allowFlowReversal=allowFlowReversal) if have_valHeaWatMinBypNon + "HW minimum flow bypass valve - Non-condensing boilers" + annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={60,-50}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VHeaWatPriSupNon_flow( + redeclare final package Medium = Medium, + final m_flow_nominal=mHeaWatPriNon_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final have_sen=ctl.have_senVHeaWatPriNon and ctl.locSenVHeaWatPri == + Buildings.Templates.Plants.Boilers.HotWater.Types.SensorLocation.Supply, + final text_flip=false, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + if have_boiNon + "Primary HW volume flow rate - Non-condensing boilers" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VHeaWatPriRetNon_flow( + redeclare final package Medium = Medium, + final m_flow_nominal=mHeaWatPriNon_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final have_sen=ctl.have_senVHeaWatPriNon and ctl.locSenVHeaWatPri == + Buildings.Templates.Plants.Boilers.HotWater.Types.SensorLocation.Return, + final text_flip=true, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Return) + if have_boiNon + "Primary HW volume flow rate - Non-condensing boilers" + annotation (Placement(transformation(extent={{-20,-110},{-40,-90}}))); + Buildings.Templates.Components.Sensors.Temperature THeaWatPriSupNon( + redeclare final package Medium = Medium, + final have_sen=ctl.have_senTHeaWatPriSupNon, + final text_flip=false, + final m_flow_nominal=mHeaWatPriNon_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + if have_boiNon + "Primary HW supply temperature - Non-condensing boilers" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={10,0}))); + Buildings.Templates.Components.Sensors.Temperature THeaWatPlaRetNon( + redeclare final package Medium = Medium, + final have_sen=ctl.have_senTHeaWatPlaRetNon, + final text_flip=true, + final m_flow_nominal=mHeaWatPriNon_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Return) + if have_boiNon + "Plant HW return temperature - Non-condensing boilers" + annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={10,-100}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VHeaWatBypNon_flow( + redeclare final package Medium = Medium, + final m_flow_nominal=mHeaWat_flow_nominal, + final allowFlowReversal=true, + final have_sen=have_varPumHeaWatPriNon + and typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None + and ctl.typMeaCtlHeaWatPri==Buildings.Templates.Plants.Boilers.HotWater.Types.PrimaryOverflowMeasurement.FlowDecoupler, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + if have_bypHeaWatFixNon + "Decoupler HW volume flow rate / Fixed HW bypass - Non-condensing boilers" + annotation (Placement( + transformation( + extent={{10,10},{-10,-10}}, + rotation=90, + origin={60,-30}))); + Buildings.Templates.Components.Routing.Junction junInlBoiNon( + redeclare final package Medium=Medium, + final tau=tau, + final m_flow_nominal=mHeaWat_flow_nominal*{1,1,-1}, + final energyDynamics=energyDynamics, + dp_nominal=fill(1E3, 3), + final portFlowDirection_1=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, + final portFlowDirection_3=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + icon_pipe1=if have_boiNon then Buildings.Templates.Components.Types.IntegrationPoint.Return + else Buildings.Templates.Components.Types.IntegrationPoint.Supply, + icon_pipe2=if have_bypHeaWatFixNon or have_valHeaWatMinBypNon then + Buildings.Templates.Components.Types.IntegrationPoint.Supply else + Buildings.Templates.Components.Types.IntegrationPoint.None, + icon_pipe3=if have_boiNon then Buildings.Templates.Components.Types.IntegrationPoint.Return + else Buildings.Templates.Components.Types.IntegrationPoint.None) + "Fluid junction" + annotation ( + Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={60,-100}))); + Buildings.Templates.Components.Routing.Junction junOutBoiNon( + redeclare final package Medium=Medium, + final tau=tau, + final m_flow_nominal=mHeaWat_flow_nominal*{1,-1,-1}, + final energyDynamics=energyDynamics, + dp_nominal=fill(0, 3), + 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, + icon_pipe1=if have_boiNon then Buildings.Templates.Components.Types.IntegrationPoint.Supply + else Buildings.Templates.Components.Types.IntegrationPoint.None, + icon_pipe2=Buildings.Templates.Components.Types.IntegrationPoint.Supply, + icon_pipe3=if have_bypHeaWatFixNon or have_valHeaWatMinBypNon then + Buildings.Templates.Components.Types.IntegrationPoint.Supply else + Buildings.Templates.Components.Types.IntegrationPoint.None) + "Fluid junction" + annotation ( + Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={60,0}))); + + // Secondary HW loop + Buildings.Templates.Components.Routing.SingleToMultiple inlPumHeaWatSec( + redeclare final package Medium=Medium, + final nPorts=nPumHeaWatSec, + final m_flow_nominal=mHeaWat_flow_nominal, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply, + icon_dy=-300) + if have_pumHeaWatSec + "Secondary HW pumps inlet manifold" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + Buildings.Templates.Components.Pumps.Multiple pumHeaWatSec( + redeclare final package Medium=Medium, + final nPum=nPumHeaWatSec, + final have_var=true, + final have_varCom=true, + final dat=dat.pumHeaWatSec, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + icon_dy=-300) + if have_pumHeaWatSec + "Secondary HW pumps" + annotation (Placement(transformation(extent={{120,-10},{140,10}}))); + Buildings.Templates.Components.Routing.MultipleToSingle outPumHeaWatSec( + redeclare final package Medium=Medium, + final nPorts=nPumHeaWatSec, + final m_flow_nominal=mHeaWat_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply, + icon_dy=-300) + if have_pumHeaWatSec + "Secondary HW pumps outlet manifold" + annotation (Placement(transformation(extent={{140,-10},{160,10}}))); + Buildings.Templates.Components.Routing.PassThroughFluid supHeaWat( + redeclare final package Medium=Medium, + final allowFlowReversal=allowFlowReversal) + if not have_pumHeaWatSec + "HW supply line - Without secondary HW pumps" + annotation (Placement(transformation(extent={{120,-10},{140,10}}))); + Buildings.Templates.Components.Sensors.DifferentialPressure dpHeaWatLoc( + redeclare final package Medium=Medium, + final have_sen=ctl.have_senDpHeaWatLoc, + final allowFlowReversal=allowFlowReversal, + final text_rotation=90) + "Local HW differential pressure sensor" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={260,-120}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VHeaWatSecSup_flow( + redeclare final package Medium = Medium, + final m_flow_nominal=mHeaWat_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final have_sen=ctl.have_senVHeaWatSec and ctl.locSenVHeaWatSec == + Buildings.Templates.Plants.Boilers.HotWater.Types.SensorLocation.Supply, + final text_flip=false, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + "Secondary HW volume flow rate" + annotation (Placement(transformation(extent={{180,-10},{200,10}}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VHeaWatSecRet_flow( + redeclare final package Medium = Medium, + final m_flow_nominal=mHeaWat_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final have_sen=ctl.have_senVHeaWatSec and ctl.locSenVHeaWatSec == + Buildings.Templates.Plants.Boilers.HotWater.Types.SensorLocation.Return, + final text_flip=true, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Return) + "Secondary HW volume flow rate" + annotation (Placement(transformation(extent={{240,-250},{220,-230}}))); + Buildings.Templates.Components.Sensors.Temperature THeaWatSecRet( + redeclare final package Medium = Medium, + final have_sen=ctl.have_senTHeaWatSecRet, + final m_flow_nominal=mHeaWat_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Return) + "Secondary HW return temperature" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=0, + origin={190,-240}))); + Buildings.Templates.Components.Sensors.Temperature THeaWatSecSup( + redeclare final package Medium = Medium, + final have_sen=ctl.have_senTHeaWatSecSup, + final m_flow_nominal=mHeaWat_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + "Secondary HW supply temperature" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={228,0}))); + + // Controls + replaceable Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.Guideline36 ctl + constrainedby + Buildings.Templates.Plants.Boilers.HotWater.Components.Interfaces.PartialController( + final dat=dat.ctl, + final have_boiCon=have_boiCon, + final have_boiNon=have_boiNon, + final nBoiCon=nBoiCon, + final nBoiNon=nBoiNon, + final typPumHeaWatPriCon=typPumHeaWatPriCon, + final typPumHeaWatPriNon=typPumHeaWatPriNon, + final typPumHeaWatSec=typPumHeaWatSec, + final nPumHeaWatPriCon=nPumHeaWatPriCon, + final nPumHeaWatPriNon=nPumHeaWatPriNon, + final typArrPumHeaWatPriCon=typArrPumHeaWatPriCon, + final typArrPumHeaWatPriNon=typArrPumHeaWatPriNon, + final nPumHeaWatSec=nPumHeaWatSec, + final have_valHeaWatMinBypCon=have_valHeaWatMinBypCon, + final have_valHeaWatMinBypNon=have_valHeaWatMinBypNon) + "Plant controller" + annotation ( + Dialog(group="Controls"), + Placement(transformation(extent={{-10,130},{10,150}}))); + +equation + /* Control point connection - start */ + + connect(bus, boiCon.bus); + connect(bus, boiNon.bus); + connect(bus.pumHeaWatPriCon, pumHeaWatPriCon.bus); + connect(bus.pumHeaWatPriNon, pumHeaWatPriNon.bus); + connect(bus.valHeaWatMinByp, valHeaWatMinBypCon.bus); + connect(bus.valHeaWatMinByp, valHeaWatMinBypNon.bus); + connect(bus.pumHeaWatSec, pumHeaWatSec.bus); + connect(dpHeaWatLoc.y, bus.dpHeaWatLoc); + connect(VHeaWatPriSupCon_flow.y, bus.VHeaWatPriCon_flow); + connect(VHeaWatPriRetCon_flow.y, bus.VHeaWatPriCon_flow); + connect(VHeaWatPriSupNon_flow.y, bus.VHeaWatPriNon_flow); + connect(VHeaWatPriRetNon_flow.y, bus.VHeaWatPriNon_flow); + connect(VHeaWatSecSup_flow.y, bus.VHeaWatSec_flow); + connect(VHeaWatSecRet_flow.y, bus.VHeaWatSec_flow); + connect(VHeaWatBypCon_flow.y, bus.VHeaWatBypCon_flow); + connect(VHeaWatBypNon_flow.y, bus.VHeaWatBypNon_flow); + connect(THeaWatPriSupCon.y, bus.THeaWatPriSupCon); + connect(THeaWatPlaRetCon.y, bus.THeaWatPlaRetCon); + connect(THeaWatPriSupNon.y, bus.THeaWatPriSupNon); + connect(THeaWatPlaRetNon.y, bus.THeaWatPlaRetNon); + connect(THeaWatSecSup.y, bus.THeaWatSecSup); + connect(THeaWatSecRet.y, bus.THeaWatSecRet); + connect(THeaWatIntSup.y, bus.THeaWatIntSup); + + /* Control point connection - stop */ + + connect(dpHeaWatLoc.port_b, port_a) + annotation (Line( + points={{260,-130},{260,-240},{300,-240}}, + color={0,0,0}, + visible=ctl.have_senDpHeaWatLoc)); + connect(pumHeaWatPriNon.ports_b, outPumHeaWatPriNon.ports_a) + annotation (Line( + points={{-70,0},{-70,0}}, color={0,127,255})); + connect(port_a, VHeaWatSecRet_flow.port_a) + annotation (Line(points={{300,-240},{240,-240}}, color={0,0,0}, + thickness=0.5, + pattern=LinePattern.Dash)); + connect(VHeaWatSecRet_flow.port_b, THeaWatSecRet.port_a) + annotation (Line(points={{220,-240},{200,-240}}, color={0,0,0}, + thickness=0.5, + pattern=LinePattern.Dash)); + connect(port_b, dpHeaWatLoc.port_a) + annotation (Line( + points={{300,0},{260,0},{260,-110}}, + color={0,0,0}, + visible=ctl.have_senDpHeaWatLoc)); + connect(pumHeaWatPriCon.ports_b, outPumHeaWatPriCon.ports_a) + annotation (Line(points={{-70,-140},{-70,-140}}, color={0,127,255})); + connect(inlPumHeaWatPriCon.ports_b, pumHeaWatPriCon.ports_a) + annotation (Line(points={{-90,-140},{-90,-140}}, color={0,127,255})); + connect(boiCon.ports_bHeaWat, inlPumHeaWatPriCon.ports_a) + annotation (Line( + points={{-140,-140},{-110,-140}}, + color={0,0,0}, + thickness=0.5, + visible=have_boiCon)); + connect(THeaWatIntSup.port_b, junInlBoiNon.port_1) + annotation (Line(points={{60,-110},{60,-110}}, color={0,127,255})); + connect(inlBoiNon.ports_b, boiNon.ports_aHeaWat) + annotation (Line(points={{-140,-100},{-140,-100}}, color={0,127,255})); + connect(inlBoiCon.ports_b, boiCon.ports_aHeaWat) + annotation (Line(points={{-140,-240},{-140,-240}}, color={0,127,255})); + connect(junOutBoiCon.port_2, THeaWatIntSup.port_a) + annotation (Line(points={{60,-130},{60,-130}}, color={0,127,255})); + connect(outPumHeaWatSec.port_b, VHeaWatSecSup_flow.port_a) + annotation (Line( + points={{160,0},{180,0}}, + color={0,0,0}, + thickness=0.5, + visible=have_pumHeaWatSec)); + connect(pumHeaWatSec.ports_a, inlPumHeaWatSec.ports_b) + annotation (Line(points={{120,0},{120,0}}, color={0,127,255})); + connect(pumHeaWatSec.ports_b, outPumHeaWatSec.ports_a) + annotation (Line(points={{140,0},{140,0}}, color={0,127,255})); + connect(VHeaWatPriSupCon_flow.port_b, THeaWatPriSupCon.port_a) + annotation (Line( + points={{-20,-140},{0,-140}}, + color={0,0,0}, + thickness=0.5, + visible=have_boiCon)); + connect(inlPumHeaWatPriNon.ports_b, pumHeaWatPriNon.ports_a) + annotation (Line(points={{-90,0},{-90,0}}, color={0,127,255})); + connect(VHeaWatSecSup_flow.port_b, THeaWatSecSup.port_a) + annotation (Line(points={{200,0},{218,0}}, color={0,0,0}, + thickness=0.5)); + connect(THeaWatSecSup.port_b, port_b) + annotation (Line(points={{238,0},{300,0}}, color={0,0,0}, + thickness=0.5)); + connect(bus, ctl.bus) annotation (Line( + points={{-300,140},{-10,140}}, + color={255,204,51}, + thickness=0.5)); + connect(THeaWatPlaRetCon.port_b, VHeaWatPriRetCon_flow.port_a) + annotation (Line( + points={{0,-240},{-20,-240}}, + color={0,0,0}, + thickness=0.5, + pattern=LinePattern.Dash, + visible=have_boiCon)); + connect(supHeaWat.port_b, VHeaWatSecSup_flow.port_a) + annotation (Line( + points={{140,0},{180,0}}, + color={0,0,0}, + thickness=0.5, + visible=not have_pumHeaWatSec)); + connect(busAirHan, ctl.busAirHan) annotation (Line( + points={{300,180},{280,180},{280,146},{10,146}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(busEquZon, ctl.busEquZon) annotation (Line( + points={{300,100},{280,100},{280,134},{10,134}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(VHeaWatPriRetCon_flow.port_b, inlBoiCon.port_a) + annotation (Line( + points={{-40,-240},{-120,-240}}, + color={0,0,0}, + thickness=0.5, + pattern=LinePattern.Dash, + visible=have_boiCon)); + connect(junOutBoiCon.port_1, valHeaWatMinBypCon.port_a) + annotation (Line( + points={{60,-150},{60,-180}}, + color={0,0,0}, + visible=have_valHeaWatMinBypCon, + pattern=if have_boiNon then LinePattern.Dash else LinePattern.Solid, + thickness=0.5)); + connect(THeaWatSecRet.port_b, junInlBoiCon.port_1) annotation (Line(points={{180, + -240},{70,-240}}, color={0,0,0}, + thickness=0.5, + pattern=LinePattern.Dash)); + connect(junOutBoiNon.port_2, inlPumHeaWatSec.port_a) + annotation (Line( + points={{70,0},{100,0}}, + color={0,0,0}, + thickness=0.5, + visible=have_pumHeaWatSec)); + connect(junOutBoiNon.port_2, supHeaWat.port_a) annotation (Line( + points={{70,0},{120,0}}, + color={0,0,0}, + thickness=0.5, + visible=not have_pumHeaWatSec)); + connect(THeaWatPriSupCon.port_b, junOutBoiCon.port_3) + annotation (Line( + points={{20,-140},{50,-140}}, + color={0,0,0}, + thickness=0.5, + visible=have_boiCon)); + connect(outPumHeaWatPriCon.port_b, VHeaWatPriSupCon_flow.port_a) + annotation (Line( + points={{-50,-140},{-40,-140}}, + color={0,0,0}, + thickness=0.5, + visible=have_boiCon)); + connect(junOutBoiCon.port_1, VHeaWatBypCon_flow.port_a) + annotation (Line( + points={{60,-150},{60,-160}}, + color={0,0,0}, + visible=have_bypHeaWatFixCon, + pattern=if have_boiNon then LinePattern.Dash else LinePattern.Solid, + thickness=0.5)); + connect(outPumHeaWatPriNon.port_b, VHeaWatPriSupNon_flow.port_a) annotation (Line( + points={{-50,0},{-40,0}}, + color={0,0,0}, + thickness=0.5, + visible=have_boiNon)); + connect(VHeaWatPriSupNon_flow.port_b, THeaWatPriSupNon.port_a) + annotation (Line( + points={{-20,0},{0,0}}, + color={0,0,0}, + thickness=0.5, + visible=have_boiNon)); + connect(junInlBoiNon.port_3, THeaWatPlaRetNon.port_a) + annotation (Line( + points={{50,-100},{20,-100}}, + color={0,0,0}, + thickness=0.5, + visible=have_boiNon, + pattern=LinePattern.Dash)); + connect(THeaWatPlaRetNon.port_b, VHeaWatPriRetNon_flow.port_a) + annotation (Line( + points={{0,-100},{-20,-100}}, + color={0,0,0}, + thickness=0.5, + visible=have_boiNon, + pattern=LinePattern.Dash)); + connect(VHeaWatPriRetNon_flow.port_b, inlBoiNon.port_a) + annotation (Line( + points={{-40,-100},{-120,-100}}, + color={0,0,0}, + thickness=0.5, + visible=have_boiNon, + pattern=LinePattern.Dash)); + connect(VHeaWatBypNon_flow.port_b, junInlBoiNon.port_2) + annotation (Line( + points={{60,-40},{60,-90}}, + color={0,0,0}, + thickness=0.5, + visible=have_bypHeaWatFixNon)); + connect(valHeaWatMinBypNon.port_b, junInlBoiNon.port_2) + annotation (Line( + points={{60,-60},{60,-90}}, + color={0,0,0}, + thickness=0.5, + visible=have_valHeaWatMinBypNon)); + connect(junInlBoiCon.port_2, THeaWatPlaRetCon.port_a) + annotation (Line( + points={{50,-240},{20,-240}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=0.5, + visible=have_boiCon)); + connect(junInlBoiCon.port_3, valHeaWatMinBypCon.port_b) + annotation (Line( + points={{60,-230},{60,-200}}, + color={0,0,0}, + visible=have_valHeaWatMinBypCon, + pattern=if have_boiNon then LinePattern.Dash else LinePattern.Solid, + thickness=0.5)); + connect(junInlBoiCon.port_3, VHeaWatBypCon_flow.port_b) annotation (Line( + points={{60,-230},{60,-180}}, + color={0,0,0}, + visible=have_bypHeaWatFixCon, + pattern=if have_boiNon then LinePattern.Dash else LinePattern.Solid, + thickness=0.5)); + connect(valHeaWatMinBypNon.port_a, junOutBoiNon.port_3) + annotation (Line( + points={{60,-40},{60,-10}}, + color={0,0,0}, + thickness=0.5, + visible=have_valHeaWatMinBypNon)); + connect(VHeaWatBypNon_flow.port_a, junOutBoiNon.port_3) annotation (Line( + points={{60,-20},{60,-10}}, + color={0,0,0}, + thickness=0.5, + visible=have_bypHeaWatFixNon)); + connect(THeaWatPriSupNon.port_b, junOutBoiNon.port_1) + annotation (Line( + points={{20,0},{50,0}}, + color={0,0,0}, + thickness=0.5, + visible=have_boiNon)); + connect(boiNon.ports_bHeaWat, inlPumHeaWatPriNon.ports_a) + annotation (Line( + points={{-140,0},{-110,0}}, + color={0,0,0}, + thickness=0.5, + visible=have_boiNon)); + annotation ( + Documentation(info=" +

                      +This template represents a hot water plant with boilers. +

                      +

                      +The possible equipment configurations are enumerated in the table below. +If any default is provided, it is displayed in bold characters. +The user may refer to ASHRAE (2021) for further details. +

                      + + + + + + + + + + + + + + + + + + + + + + +
                      Configuration parameterOptionsNotes
                      Type of boiler +Condensing
                      +Non-condensing
                      +Hybrid (both condensing and non-condensing boilers) +
                      Type of primary HW pumps +Constant speed
                      +Variable speed
                      +Constant speed, provided with boiler with factory controls
                      +Variable speed, provided with boiler with factory controls +
                      +In case of hybrid plants, the type of primary HW pumps is specified +separately for the condensing boiler group and the non-condensing boiler group. +
                      Type of primary HW pump arrangement +Headered
                      +Dedicated +
                      +If the primary HW pumps are provided with the boilers, they are necessarily +configured in a dedicated arrangement and this option is not available. +
                      Type of secondary HW pumps +None (primary-only)
                      +Variable speed, centralized +
                      +Constant speed secondary pumps are not supported as they are generally not +advisable on any boiler system (see section 5.21.7.11 in ASHRAE, 2021 for +further explanations).
                      +In case of hybrid plants, the primary-only option is not available.
                      +Centralized secondary pumps refers to configurations with a single group +of secondary pumps that is typically integrated into the plant.
                      +Distributed secondary pumps with multiple secondary +loops served by dedicated secondary pumps are currently not supported. +This limitation stems from the Guideline 36 controller implementation in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.Controller. +
                      Controller +ASHRAE Guideline 36 controller +An open loop controller is also available for validation purposes only.
                      +

                      Control points

                      +

                      +Some input control points are required in addition to the ones already connected +inside this model, see the documentation of + +Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.Guideline36. +

                      +

                      References

                      +
                        +
                      • +ASHRAE, 2021. Guideline 36-2021, High-Performance Sequences of Operation +for HVAC Systems. Atlanta, GA. +
                      • +
                      +", revisions=" +
                        +
                      • +April 28, 2023, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +"), Diagram(graphics={Rectangle( + extent={{260,-240},{261,0}}, + lineColor={0,0,0}, + visible=ctl.have_senDpHeaWatLoc)})); +end BoilerPlant; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/BoilerGroup.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/BoilerGroup.mo new file mode 100644 index 00000000000..19f512f301a --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/BoilerGroup.mo @@ -0,0 +1,485 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components; +model BoilerGroup "Boiler group" + replaceable package Medium = Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "HW medium"; + + parameter Integer nBoi(final min=0) + "Number of boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.BoilerHotWaterModel typMod + "Type of boiler model" + annotation (Evaluate=true); + parameter Boolean is_con + "Set to true for condensing boiler, false for non-condensing boiler" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.PumpArrangement typArrPumHeaWatPri + "Type of primary HW pump arrangement" + annotation (Evaluate=true, Dialog(group="Configuration")); + + final parameter Buildings.Templates.Components.Types.Valve typValBoiIso= + if typArrPumHeaWatPri==Buildings.Templates.Components.Types.PumpArrangement.Dedicated then + Buildings.Templates.Components.Types.Valve.None + else Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + "Type of boiler HW isolation valve"; + + parameter Buildings.Templates.Plants.Boilers.HotWater.Components.Data.BoilerGroup dat( + final nBoi=nBoi, + final typMod=typMod) + "Parameter record for boiler group" + annotation (Placement(transformation(extent={{-180,160},{-160,180}}))); + final parameter Buildings.Templates.Components.Data.BoilerHotWater datBoi[nBoi]( + final typMod=fill(typMod, nBoi), + each final fue=dat.fue, + final mHeaWat_flow_nominal=mHeaWatBoi_flow_nominal, + final cap_nominal=capBoi_nominal, + final dpHeaWat_nominal=if typValBoiIso==Buildings.Templates.Components.Types.Valve.None then + dat.dpHeaWatBoi_nominal else fill(0, nBoi), + final THeaWatSup_nominal=dat.THeaWatBoiSup_nominal, + final per=dat.per) + "Parameter record of each boiler"; + final parameter Buildings.Templates.Components.Data.Valve datValBoiIso[nBoi]( + final typ=fill(typValBoiIso, nBoi), + final m_flow_nominal=mHeaWatBoi_flow_nominal, + dpValve_nominal=fill(Buildings.Templates.Data.Defaults.dpValIso, nBoi), + dpFixed_nominal=if typValBoiIso<>Buildings.Templates.Components.Types.Valve.None then + dat.dpHeaWatBoi_nominal else fill(0, nBoi)) + "Parallel boilers HW bypass valve parameters" + annotation (Dialog(enable=false)); + + final parameter Modelica.Units.SI.MassFlowRate mHeaWatBoi_flow_nominal[nBoi]= + dat.mHeaWatBoi_flow_nominal + "HW mass flow rate - Each boiler"; + final parameter Modelica.Units.SI.HeatFlowRate capBoi_nominal[nBoi]= + dat.capBoi_nominal + "Heating capacity - Each boiler"; + final parameter Modelica.Units.SI.PressureDifference dpHeaWatBoi_nominal[nBoi]= + dat.dpHeaWatBoi_nominal + "HW pressure drop - Each boiler"; + final parameter Modelica.Units.SI.Temperature THeaWatBoiSup_nominal[nBoi]= + dat.THeaWatBoiSup_nominal + "HW supply temperature - Each boiler"; + + 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 allowFlowReversal=true + "= true to allow flow reversal, false restricts to design direction (port_a -> port_b)" + annotation (Dialog(tab="Assumptions"), Evaluate=true); + + Modelica.Fluid.Interfaces.FluidPorts_b ports_bHeaWat[nBoi]( + redeclare each final package Medium = Medium, + each m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + each h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + "HW supply" + annotation (Placement(transformation(extent={{190,80},{210,160}}), + iconTransformation( + extent={{-10,-40},{10,40}}, + rotation=0, + origin={400,500}))); + Modelica.Fluid.Interfaces.FluidPorts_a ports_aHeaWat[nBoi]( + redeclare each final package Medium = Medium, + each m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + each h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + "HW return" + annotation (Placement(transformation(extent={{190,-140},{210,-60}}), + iconTransformation( + extent={{-10,-40},{10,40}}, + rotation=0, + origin={400,-500}))); + Buildings.Templates.Plants.Boilers.HotWater.Interfaces.Bus bus + "Plant control bus" + annotation (Placement(transformation(extent={{-20,180},{20,220}}), + iconTransformation(extent={{-20,680},{20,720}}))); + + Buildings.Templates.Components.Boilers.HotWaterPolynomial boiPol[nBoi]( + redeclare each final package Medium = Medium, + each final is_con=is_con, + final dat=datBoi, + each final allowFlowReversal=allowFlowReversal, + each final energyDynamics=energyDynamics) + if typMod==Buildings.Templates.Components.Types.BoilerHotWaterModel.Polynomial + "Boiler - Polynomial" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Templates.Components.Boilers.HotWaterPolynomial boiTab[nBoi]( + redeclare each final package Medium = Medium, + each final is_con=is_con, + final dat=datBoi, + each final allowFlowReversal=allowFlowReversal, + each final energyDynamics=energyDynamics) + if typMod==Buildings.Templates.Components.Types.BoilerHotWaterModel.Table + "Boiler - Table" + annotation (Placement(transformation(extent={{-10,-60},{10,-40}}))); + + Buildings.Templates.Components.Actuators.Valve valBoiIso[nBoi]( + redeclare each final package Medium=Medium, + each final typ=typValBoiIso, + final dat=datValBoiIso, + each final allowFlowReversal=allowFlowReversal) + "Boiler isolation valve" + annotation (Placement(transformation(extent={{150,110},{170,130}}))); + +protected + Buildings.Templates.Components.Interfaces.Bus busBoiCon[nBoi] if is_con + "Boiler control bus - Condensing boilers" + annotation (Placement( + transformation(extent={{-60,140},{-20,180}}),iconTransformation(extent={ + {-350,6},{-310,46}}))); + Buildings.Templates.Components.Interfaces.Bus busBoiNon[nBoi] if not is_con + "Boiler control bus - Non-condensing boilers" + annotation (Placement( + transformation(extent={{-100,140},{-60,180}}), + iconTransformation(extent={{-350,6},{-310,46}}))); + Buildings.Templates.Components.Interfaces.Bus busValBoiNonIso[nBoi] + if not is_con "Boiler isolation valve control bus - Non-condensing boilers" + annotation (Placement(transformation(extent={{80,140},{120,180}}), + iconTransformation(extent={{-350,6},{-310,46}}))); +protected + Buildings.Templates.Components.Interfaces.Bus busValBoiConIso[nBoi] if is_con + "Boiler isolation valve control bus - Condensing boilers" annotation ( + Placement(transformation(extent={{140,140},{180,180}}), + iconTransformation(extent={{-350,6},{-310,46}}))); +equation + connect(ports_aHeaWat, boiPol.port_a) annotation (Line(points={{200,-100},{-20, + -100},{-20,0},{-10,0}}, color={0,127,255})); + connect(boiPol.port_b, valBoiIso.port_a) annotation (Line(points={{10,0},{20,0}, + {20,120},{150,120}}, color={0,127,255})); + connect(valBoiIso.port_b, ports_bHeaWat) + annotation (Line(points={{170,120},{200,120}}, color={0,127,255})); + connect(busBoiCon, boiPol.bus) annotation (Line( + points={{-40,160},{-40,-40},{0,-40},{0,10}}, + color={255,204,51}, + thickness=0.5)); + connect(bus.boiCon, busBoiCon) annotation (Line( + points={{0,200},{0,180},{-40,180},{-40,160}}, + color={255,204,51}, + thickness=0.5)); + connect(bus.boiNon, busBoiNon) annotation (Line( + points={{0,200},{0,180},{-80,180},{-80,160}}, + color={255,204,51}, + thickness=0.5)); + connect(busBoiNon, boiPol.bus) annotation (Line( + points={{-80,160},{-80,10},{0,10}}, + color={255,204,51}, + thickness=0.5)); + connect(valBoiIso.bus, busValBoiConIso) annotation (Line( + points={{160,130},{160,160}}, + color={255,204,51}, + thickness=0.5)); + connect(busValBoiNonIso, valBoiIso.bus) annotation (Line( + points={{100,160},{100,130},{160,130}}, + color={255,204,51}, + thickness=0.5)); + connect(bus.valBoiNonIso, busValBoiNonIso) annotation (Line( + points={{0,200},{0,180},{100,180},{100,160}}, + color={255,204,51}, + thickness=0.5)); + connect(bus.valBoiConIso, busValBoiConIso) annotation (Line( + points={{0,200},{4,200},{4,184},{160,184},{160,160}}, + color={255,204,51}, + thickness=0.5)); + connect(ports_aHeaWat, boiTab.port_a) annotation (Line(points={{200,-100},{-20, + -100},{-20,-50},{-10,-50}}, color={0,127,255})); + connect(boiTab.port_b, valBoiIso.port_a) annotation (Line(points={{10,-50},{ + 20,-50},{20,120},{150,120}}, + color={0,127,255})); + connect(busBoiCon, boiTab.bus) annotation (Line( + points={{-40,160},{-40,10},{0,10},{0,-40}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(busBoiNon, boiTab.bus) annotation (Line( + points={{-80,160},{-80,-40},{0,-40}}, + color={255,204,51}, + thickness=0.5)); + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false, + extent={{-400,-700},{400,700}}), graphics={ + Line( + points={{200,500},{400,500}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=5), + Line( + visible=nBoi >= 2, + points={{200,200},{400,200}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=5), + Line( + visible=nBoi >= 3, + points={{200,-100},{400,-100}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=5), + Line( + visible=nBoi >= 4, + points={{200,-400},{400,-400}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=5), + Text( + extent={{-151,-712},{149,-752}}, + textColor={0,0,255}, + textString="%name"), + Bitmap( + visible=nBoi >= 1, + extent={{-280,390},{-160,510}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Boilers/ControllerOnboard.svg"), + Bitmap( + visible=typArrPumHeaWatPri==Buildings.Templates.Components.Types.PumpArrangement.Headered + and nBoi>=1, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={300,500}), + Bitmap( + visible=typArrPumHeaWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered + and nBoi >= 1, + extent={{260,560},{340,640}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=nBoi >= 2, + extent={{-280,90},{-160,212}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Boilers/ControllerOnboard.svg"), + Bitmap( + visible=typArrPumHeaWatPri==Buildings.Templates.Components.Types.PumpArrangement.Headered + and nBoi>=2, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={300,200}), + Bitmap( + visible=typArrPumHeaWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered + and nBoi >= 2, + extent={{260,260},{340,340}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=nBoi >= 3, + extent={{-280,-212},{-160,-92}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Boilers/ControllerOnboard.svg"), + Bitmap( + visible=typArrPumHeaWatPri==Buildings.Templates.Components.Types.PumpArrangement.Headered + and nBoi>=3, + extent={{260,-40},{340,40}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typArrPumHeaWatPri==Buildings.Templates.Components.Types.PumpArrangement.Headered + and nBoi>=3, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={300,-100}), + Bitmap( + visible=nBoi >= 4, + extent={{-280,-510},{-160,-390}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Boilers/ControllerOnboard.svg"), + Bitmap( + visible=typArrPumHeaWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered + and nBoi >= 4, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={300,-400}), + Bitmap( + visible=typArrPumHeaWatPri==Buildings.Templates.Components.Types.PumpArrangement.Headered + and nBoi>=4, + extent={{260,-340},{340,-260}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Rectangle( + extent={{200,540},{-160,360}}, + lineColor={0,0,0}, + lineThickness=1), + Text( + visible=is_con, + extent={{-160,520},{200,480}}, + textColor={0,0,0}, + textString="CON"), + Text( + extent={{-160,420},{200,380}}, + textColor={0,0,0}, + textString="BOI-1"), + Line( + points={{200,400},{400,400}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5), + Rectangle( + extent={{200,240},{-160,60}}, + lineColor={0,0,0}, + lineThickness=1, + visible=nBoi >= 2), + Text( + visible=nBoi >= 2 and is_con, + extent={{-160,220},{200,180}}, + textColor={0,0,0}, + textString="CON"), + Text( + visible=nBoi >= 2, + extent={{-160,120},{200,80}}, + textColor={0,0,0}, + textString="BOI-2"), + Line( + visible=nBoi >= 2, + points={{200,100},{400,100}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5), + Rectangle( + extent={{200,-60},{-160,-240}}, + lineColor={0,0,0}, + lineThickness=1, + visible=nBoi >= 3), + Text( + visible=nBoi >= 3 and is_con, + extent={{-160,-80},{200,-120}}, + textColor={0,0,0}, + textString="CON"), + Text( + visible=nBoi >= 3, + extent={{-160,-180},{200,-220}}, + textColor={0,0,0}, + textString="BOI-3"), + Line( + points={{200,-200},{400,-200}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5, + visible=nBoi >= 3), + Rectangle( + visible=nBoi >= 4, + extent={{200,-360},{-160,-540}}, + lineColor={0,0,0}, + lineThickness=1), + Text( + visible=nBoi >= 4 and is_con, + extent={{-160,-380},{200,-420}}, + textColor={0,0,0}, + textString="CON"), + Text( + visible=nBoi >= 4, + extent={{-160,-480},{200,-520}}, + textColor={0,0,0}, + textString="BOI-4"), + Line( + points={{200,-500},{400,-500}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5, + visible=nBoi >= 4), + Line( + points={{300,562},{300,500}}, + color={0,0,0}, + visible=typArrPumHeaWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered + and nBoi >= 1), + Line( + points={{300,262},{300,200}}, + color={0,0,0}, + visible=typArrPumHeaWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered + and nBoi >= 2), + Line( + points={{300,-38},{300,-100}}, + color={0,0,0}, + visible=typArrPumHeaWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered + and nBoi >= 3), + Line( + points={{300,-338},{300,-400}}, + color={0,0,0}, + visible=typArrPumHeaWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered + and nBoi >= 4)}), + Diagram(coordinateSystem(extent={{-200,-180},{200,200}})), + Documentation(info=" +

                      +This model represents a group of hot water boilers. +

                      +

                      +Modeling features and limitations: +

                      +
                        +
                      • +All units are either condensing boilers or non-condensing boilers, +depending on the value of the Boolean parameter is_con. +In order to represent a hybrid plant with both condensing and non-condensing +boilers, two instances of this model must be used. +
                      • +
                      • +All units are modeled based on the same boiler model, specified with the parameter +typMod which is based on the enumeration + +Buildings.Templates.Components.Types.BoilerHotWaterModel. +However, the boiler characteristics such as the design capacity +and HW flow rate may be different from one unit to another. +
                      • +
                      • +Two-way two-position boiler isolation valves are automatically +included in case of headered primary HW pumps, as specified with the parameter +typArrPumHeaWatPri . +
                      • +
                      +

                      Control points

                      +

                      +The following input and output points are available. +

                      +
                        +
                      • +Sub-bus boiCon[:] (resp. boiNon[:]) storing all signals +dedicated to each condensing boiler (resp. non-condensing boiler), with a +dimensionality of one +
                          +
                        • +Boiler Enable signal boi(Con|Non)[:].y1 : +DO signal dedicated to each unit, with a dimensionality of one +
                        • +
                        • +Boiler HW supply temperature setpoint boi(Con|Non)[:].THeaWatSupSet: +AO signal dedicated to each unit, with a dimensionality of one +
                        • +
                        • +Boiler firing rate boi(Con|Non)[:].y_actual: +AI signal dedicated to each unit, with a dimensionality of one +
                        • +
                        • +Boiler HW supply temperature boi(Con|Non)[:].THeaWatSup: +AI signal dedicated to each unit, with a dimensionality of one +
                        • +
                        +
                      • +
                      • +Sub-bus valBoiConIso[:] (resp. valBoiNonIso[:]) +storing all signals dedicated to each condensing boiler (resp. non-condensing boiler) +isolation valve (if any), with a dimensionality of one +
                          +
                        • +Valve opening command valBoi(Con|Non)Iso[:].y1 : +DO signal dedicated to each unit, with a dimensionality of one +
                        • +
                        • +Valve open end switch status valBoi(Con|Non)Iso[:].y1_actual : +DI signal dedicated to each unit, with a dimensionality of one +
                        • +
                        • +Valve closed end switch status valBoi(Con|Non)Iso[:].y0_actual : +DI signal dedicated to each unit, with a dimensionality of one +
                        • +
                        +
                      • +
                      +", revisions=" +
                        +
                      • +April 28, 2023, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end BoilerGroup; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/Guideline36.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/Guideline36.mo new file mode 100644 index 00000000000..a5d7488b360 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/Guideline36.mo @@ -0,0 +1,415 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components.Controls; +block Guideline36 "Guideline 36 controller" + extends + Buildings.Templates.Plants.Boilers.HotWater.Components.Interfaces.PartialController( + final typ=Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36); + + // FIXME: Are primary-only non-condensing boiler systems supported? + final parameter Boolean have_priOnl = + typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None + "Is the boiler plant a primary-only, condensing boiler plant?"; + + // FIXME: How are the following configurations supported? + // - Hybrid plant with dedicated non-condensing boiler pumps and headered condensing boiler pumps (see for instance Figure A-27 in G36) + // - Dedicated pump provided with boiler with factory controls + final parameter Boolean have_heaPriPum = + typArrPumHeaWatPriCon==Buildings.Templates.Components.Types.PumpArrangement.Headered or + typArrPumHeaWatPriNon==Buildings.Templates.Components.Types.PumpArrangement.Headered + "True: Headered primary hot water pumps; + False: Dedicated primary hot water pumps"; + + final parameter Boolean have_varPriPum = have_varPumHeaWatPriCon or have_varPumHeaWatPriNon + "True: Variable-speed primary pumps; + False: Fixed-speed primary pumps"; + + final parameter Boolean have_secFloSen = have_senVHeaWatSec + "True: Flowrate sensor in secondary loop; + False: Flowrate sensor in decoupler"; + + final parameter Boolean have_priSecTemSen = have_senTHeaWatPriSupCon or have_senTHeaWatPriSupNon + "True: Temperature sensors in primary and secondary loops; + False: Temperature sensors in boiler supply and secondary loop"; + + // Only variable speed secondary pumps are supported in the template. + final parameter Boolean have_varSecPum = true + "True: Variable-speed secondary pumps; + False: Fixed-speed secondary pumps"; + + final parameter Integer nBoi = nBoiCon + nBoiNon + "Number of boilers"; + + // Concatenation with array-comprehension to be CDL-compliant. + final parameter Integer boiTyp[nBoi] = { + if i<=nBoiCon then Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.BoilerTypes.condensingBoiler + else Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.BoilerTypes.nonCondensingBoiler + for i in 1:nBoi} + "Boiler type"; + + final parameter Integer nSta = size(staMat, 1) + "Number of boiler plant stages"; + + final parameter Integer staMat[:, nBoi] = dat.sta + "Staging matrix with stage as row index and boiler as column index"; + + /* FIXME: For hybrid plants, how to specify the number of pumps for condensing and non-condensing boilers? + To support integrated pumps with factory controls in the template, I suggest + to use the same control logic as implemented here but maybe with separate + dedicated output connectors. + This would make it clear that those are not AO/DO points of the controller + but only used for simulation purposes. + */ + final parameter Integer nPumPri = + nPumHeaWatPriCon + nPumHeaWatPriNon + "Number of primary pumps in the boiler plant loop"; + + final parameter Integer nSenPri = nSenDpHeaWatRem + "Total number of remote differential pressure sensors in primary loop" + annotation(Dialog(tab="General", + group="Boiler plant configuration parameters", + enable = have_remDPRegPri or have_locDPRegPri)); + + parameter Integer nPumPri_nominal( + final max=nPumPri, + final min=1) = nPumPri + "Number of primary HW pumps that operate at design conditions"; + + final parameter Integer nPumSec = nPumHeaWatSec + "Total number of secondary hot water pumps"; + + final parameter Integer nSenSec = nSenDpHeaWatRem + "Total number of remote differential pressure sensors in secondary loop"; + + parameter Integer nPumSec_nominal( + final max=nPumSec) = nPumSec + "Number of secondary HW pumps that operate at design conditions"; + + // FIXME: This should rather be an input point. + parameter Real schTab[:,2] = [0,1;6,1;18,1;24,1] + "Boiler plant enable schedule"; + + // FIXME: this should not be exposed in the controller but rather computed with size() as below. + final parameter Integer nSchRow = size(schTab, 1) + "Number of rows to be created for plant schedule table" + annotation(Dialog(tab="Plant enable/disable parameters")); + + final parameter Real TOutLoc = dat.TOutLck + "Boiler lock-out temperature for outdoor air" + annotation(Dialog(tab="Plant enable/disable parameters")); + + // Concatenation with array-comprehension to be CDL-compliant. + final parameter Real boiDesCap[nBoi] = { + if i<=nBoiCon then dat.capBoiCon_nominal[i] + else dat.capBoiNon_nominal[i-nBoiCon] for i in 1:nBoi} + "Design boiler capacities vector"; + + final parameter Real boiFirMin[nBoi] = { + if i<=nBoiCon then dat.ratFirBoiCon_min[i] + else dat.ratFirBoiNon_min[i-nBoiCon] for i in 1:nBoi} + "Boiler minimum firing ratio"; + + final parameter Real minFloSet[nBoi] = { + if i<=nBoiCon then dat.ratFirBoiCon_min[i] + else dat.ratFirBoiNon_min[i-nBoiCon] for i in 1:nBoi} + "Design minimum hot water flow through each boiler"; + + final parameter Real maxFloSet[nBoi] = { + if i<=nBoiCon then dat.VHeaWatBoiCon_flow_nominal[i] + else dat.VHeaWatBoiNon_flow_nominal[i-nBoiCon] for i in 1:nBoi} + "Design HW volume flow rate - Each boiler"; + + final parameter Real TPlaHotWatSetMax=dat.THeaWatSup_nominal + "Design (highest) HW supply temperature setpoint"; + + final parameter Real TConBoiHotWatSetMax=dat.THeaWatConSup_nominal + "Design (highest) HW supply temperature setpoint for condensing boilers"; + + // FIXME: Missing enable condition. + final parameter Real minPumSpePri=dat.yPumHeaWatPri_min + "Minimum pump speed"; + + // FIXME: Missing enable condition: only required for primary-only plants with headered variable speed pumps using differential pressure pump speed control, see G36 3.1.8.4. + final parameter Real VHotWatPri_flow_nominal = + max(dat.VHeaWatPriCon_flow_nominal, dat.VHeaWatPriNon_flow_nominal) + "Plant design hot water flow rate through primary loop"; + + // FIXME: Missing enable condition: only required for primary-only hot water plants with a minimum flow bypass valve, see G36 3.1.8.2. + final parameter Real boiDesFlo[nBoi] = { + if i<=nBoiCon then dat.VHeaWatBoiCon_flow_nominal[i] + else dat.VHeaWatBoiNon_flow_nominal[i-nBoiCon] for i in 1:nBoi} + "Vector of design flowrates for all boilers in plant"; + + final parameter Real maxLocDpPri = dat.dpHeaWatLocSet_nominal + "Maximum primary loop local differential pressure setpoint"; + + // FIXME: Duplicate parameter + Missing enable condition. + final parameter Real minSecPumSpe = dat.yPumHeaWatSec_min + "Minimum secondary pump speed"; + + // FIXME: Duplicate parameter + Missing enable condition. + final parameter Real minPumSpeSec = dat.yPumHeaWatSec_min + "Minimum pump speed"; + + // FIXME: Missing enable condition. + final parameter Real minPriPumSpeSta[nSta] = dat.yPumHeaWatPriSta_min + "Vector of minimum primary pump speed for each stage"; + + // FIXME: Missing enable condition: only required for primary-secondary plants with a flow meter in the secondary loop, see G36 3.1.8.4. + final parameter Real VHotWatSec_flow_nominal = dat.VHeaWatSec_flow_nominal + "Secondary loop design hot water flow rate"; + + final parameter Real maxLocDpSec = dat.dpHeaWatLocSet_nominal + "Maximum hot water loop local differential pressure setpoint in secondary loop"; + + final parameter Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes + speConTypPri = + if typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None then ( + if have_senDpHeaWatLoc then + Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.localDP + else Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.remoteDP) + else ( + if typMeaCtlHeaWatPri==Buildings.Templates.Plants.Boilers.HotWater.Types.PrimaryOverflowMeasurement.FlowDecoupler or + typMeaCtlHeaWatPri==Buildings.Templates.Plants.Boilers.HotWater.Types.PrimaryOverflowMeasurement.FlowDifference + then Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.flowrate + else Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.temperature) + "Primary pump speed regulation method"; + + final parameter Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.SecondaryPumpSpeedControlTypes + speConTypSec = if have_senDpHeaWatLoc then + Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.SecondaryPumpSpeedControlTypes.localDP + else Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.SecondaryPumpSpeedControlTypes.remoteDP + "Secondary pump speed regulation method"; + + Guideline36Plugin ctl( + final have_priOnl=have_priOnl, + final have_heaPriPum=have_heaPriPum, + final have_varPriPum=have_varPriPum, + final have_secFloSen=have_secFloSen, + final have_priSecTemSen=have_priSecTemSen, + final have_varSecPum=have_varSecPum, + final nBoi=nBoi, + final boiTyp=boiTyp, + final nSta=nSta, + final staMat=staMat, + final nPumPri=nPumPri, + final nSenPri=nSenPri, + final nPumPri_nominal=nPumPri_nominal, + final nPumSec=nPumSec, + final nSenSec=nSenSec, + final nPumSec_nominal=nPumSec_nominal, + final schTab=schTab, + final nSchRow=nSchRow, + final TOutLoc=TOutLoc, + final boiDesCap=boiDesCap, + final boiFirMin=boiFirMin, + final minFloSet=minFloSet, + final maxFloSet=maxFloSet, + final TPlaHotWatSetMax=TPlaHotWatSetMax, + final TConBoiHotWatSetMax=TConBoiHotWatSetMax, + final minPumSpePri=minPumSpePri, + final VHotWatPri_flow_nominal=VHotWatPri_flow_nominal, + final boiDesFlo=boiDesFlo, + final maxLocDpPri=maxLocDpPri, + final minSecPumSpe=minSecPumSpe, + final minPumSpeSec=minPumSpeSec, + final minPriPumSpeSta=minPriPumSpeSta, + final VHotWatSec_flow_nominal=VHotWatSec_flow_nominal, + final maxLocDpSec=maxLocDpSec) + "Plant controller" + annotation (Placement(transformation(extent={{60,-34},{80,34}}))); + + Buildings.Controls.OBC.CDL.Integers.MultiSum reqHeaWatPlaAirHan( + final nin=nAirHan) + "Sum of HW plant requests from AHU" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum reqHeaWatPlaEquZon( + final nin=nEquZon) + "Sum of HW plant requests from zone equipment" + annotation (Placement(transformation(extent={{-80,-100},{-60,-80}}))); + Buildings.Controls.OBC.CDL.Integers.Add reqHeaWatPla + "Sum of HW plant requests from all served units" + annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum reqHeaWatResAirHan( + final nin=nAirHan) + "Sum of HW reset requests from AHU" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum reqHeaWatResEquZon( + final nin=nEquZon) + "Sum of HW reset requests from zone equipment" + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + Buildings.Controls.OBC.CDL.Integers.Add reqHeaWatRes + "Sum of HW reset requests from all served units" + annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant FIXME_uBoi[nBoi](each k=true) + "Not an input point per G36 4.11.1: this should be removed." + annotation (Placement(transformation(extent={{-100,350},{-80,370}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant FIXME_uBoiAva[nBoi](each + k=true) "Not an input point per G36 4.11.1: this should be removed." + annotation (Placement(transformation(extent={{-100,310},{-80,330}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_TSupPri(k= + Buildings.Templates.Data.Defaults.THeaWatSup) + "Which sensor is that: primary loop or secondary loop? Missing Boolean condition & support for hybrid plants" + annotation (Placement(transformation(extent={{-100,270},{-80,290}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_TRetPri(k= + Buildings.Templates.Data.Defaults.THeaWatRet) + "Missing Boolean condition & support for hybrid plants" + annotation (Placement(transformation(extent={{-100,230},{-80,250}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_VHotWatPri_flow(k=1E-2) + "Missing Boolean condition & support for hybrid plants" + annotation (Placement(transformation(extent={{-100,190},{-80,210}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_uHotWatIsoVal[nBoi](each k=1) + "This point should be optional. If present, there should rather be 2 Boolean input points (DI)." + annotation (Placement(transformation(extent={{-100,150},{-80,170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_uBypValPos(k=0) "Not an input point per G36 4.11.1: this should be removed. +" annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_uPriPumSpe[nPumPri]( + each k=0.5) "Not an input point per G36 4.11.1: this should be removed. +" annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold FIXME_yHotWatIsoValCon[nBoiCon]( + each t=1E-2, each h=5E-3) + if have_boiCon and + typArrPumHeaWatPriCon==Buildings.Templates.Components.Types.PumpArrangement.Headered + "Should be a DO point (Boolean)" + annotation (Placement(transformation(extent={{120,10},{140,30}}))); + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold FIXME_yHotWatIsoValNon[nBoiNon]( + each t=1E-2, each h=5E-3) + if have_boiNon and + typArrPumHeaWatPriNon==Buildings.Templates.Components.Types.PumpArrangement.Headered + "Should be a DO point (Boolean)" + annotation (Placement(transformation(extent={{120,-30},{140,-10}}))); + +initial equation + assert(nAirHan + nEquZon > 0, + "In "+ getInstanceName() + ": "+ + "The plant model requires at least one air handler or one zone equipment " + + "generating HW plant requests and HW reset requests."); + +equation + /* Control point connection - start */ + + // Inputs from plant control bus + connect(FIXME_uBoiAva.y, ctl.uBoiAva); + connect(FIXME_uBoi.y, ctl.uBoi); + connect(busPumHeaWatPriCon.y1_actual, ctl.uPriPum[1:nBoiCon]); + connect(busPumHeaWatPriNon.y1_actual, ctl.uPriPum[(nBoiCon+1):(nBoiCon+nBoiNon)]); + connect(busPumHeaWatSec.y1_actual, ctl.uSecPum); + + connect(busAirHan.reqHeaWatRes, reqHeaWatResAirHan.u); + connect(busEquZon.reqHeaWatRes, reqHeaWatResEquZon.u); + connect(busAirHan.reqHeaWatPla, reqHeaWatPlaAirHan.u); + connect(busEquZon.reqHeaWatPla, reqHeaWatPlaEquZon.u); + + connect(bus.TOut, ctl.TOut); + connect(FIXME_TSupPri.y, ctl.TSupPri); + connect(FIXME_TRetPri.y, ctl.TRetPri); + connect(FIXME_VHotWatPri_flow.y, ctl.VHotWatPri_flow); + connect(bus.dpHeaWatRem, ctl.dpHotWatPri_rem); + connect(bus.THeaWatSecRet, ctl.TRetSec); + connect(bus.VHeaWatSec_flow, ctl.VHotWatSec_flow); + connect(bus.VHeaWatByp_flow, ctl.VHotWatDec_flow); + connect(bus.THeaWatSecSup, ctl.TSupSec); + connect(busBoiCon.T, ctl.TSupBoi[1:nBoiCon]); + connect(busBoiNon.T, ctl.TSupBoi[(nBoiCon+1):(nBoiCon+nBoiNon)]); + connect(bus.dpHeaWatRem, ctl.dpHotWatSec_rem); + connect(bus.dpHeaWatLoc, ctl.dpHotWatPri_loc); + connect(bus.dpHeaWatLoc, ctl.dpHotWatSec_loc); + connect(FIXME_uHotWatIsoVal.y, ctl.uHotWatIsoVal); + connect(FIXME_uBypValPos.y, ctl.uBypValPos); + connect(FIXME_uPriPumSpe.y, ctl.uPriPumSpe); + + // Outputs to plant control bus + connect(ctl.yBoi[1:nBoiCon], busBoiCon.y1); + connect(ctl.yBoi[(nBoiCon+1):(nBoiCon+nBoiNon)], busBoiNon.y1); + connect(ctl.yPriPum[1:nBoiCon], busPumHeaWatPriCon.y1); + connect(ctl.yPriPum[(nBoiCon+1):(nBoiCon+nBoiNon)], busPumHeaWatPriNon.y1); + connect(ctl.yPriPumSpe, busPumHeaWatPriCon.y); + connect(ctl.yPriPumSpe, busPumHeaWatPriNon.y); + connect(ctl.ySecPum, busPumHeaWatSec.y1); + connect(ctl.ySecPumSpe, busPumHeaWatSec.y); + connect(ctl.yBypValPos, busValHeaWatMinByp.y); + connect(ctl.yBypValPos, busValHeaWatMinByp.y); + connect(ctl.TBoiHotWatSupSet[1:nBoiCon], busBoiCon.THeaWatSupSet); + connect(ctl.TBoiHotWatSupSet[(nBoiCon+1):(nBoiCon+nBoiNon)], busBoiNon.THeaWatSupSet); + + connect(FIXME_yHotWatIsoValCon.y, busValBoiConIso.y1); + connect(FIXME_yHotWatIsoValNon.y, busValBoiNonIso.y1); + /* Control point connection - stop */ + + connect(reqHeaWatResAirHan.y, reqHeaWatRes.u1) annotation (Line(points={{-58,0}, + {-50,0},{-50,-24},{-42,-24}}, color={255,127,0})); + connect(reqHeaWatResEquZon.y, reqHeaWatRes.u2) annotation (Line(points={{-58,-30}, + {-50,-30},{-50,-36},{-42,-36}}, color={255,127,0})); + connect(reqHeaWatPlaAirHan.y, reqHeaWatPla.u1) annotation (Line(points={{-58,-60}, + {-50,-60},{-50,-64},{-42,-64}}, color={255,127,0})); + connect(reqHeaWatPlaEquZon.y, reqHeaWatPla.u2) annotation (Line(points={{-58,-90}, + {-50,-90},{-50,-76},{-42,-76}}, color={255,127,0})); + connect(reqHeaWatPla.y, ctl.plaReq) annotation (Line(points={{-18,-70},{0,-70}, + {0,29},{58,29}}, color={255,127,0})); + connect(reqHeaWatRes.y, ctl.TSupResReq) annotation (Line(points={{-18,-30},{-4, + -30},{-4,32},{58,32}}, color={255,127,0})); + connect(ctl.yHotWatIsoVal[1:nBoiCon], FIXME_yHotWatIsoValCon.u) annotation ( + Line(points={{82,2},{100,2},{100,20},{118,20}}, color={0,0,127})); + connect(ctl.yHotWatIsoVal[(nBoiCon + 1):(nBoiCon + nBoiNon)], + FIXME_yHotWatIsoValNon.u) annotation (Line(points={{82,2},{100,2},{100,-20}, + {118,-20}}, color={0,0,127})); + annotation (Documentation(info=" +

                      Description

                      +

                      +This is an implementation of the control sequence specified in ASHRAE (2021) +for hot water plants. +It is based on + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.Controller. +

                      +

                      Details

                      +

                      +For hybrid plants, units shall be indexed so that condensing boilers have the +lowest indices and non-condensing boilers have the highest indices. +

                      +

                      +Distributed secondary pumps are currently not supported. +This limitation stems from the Guideline 36 controller implementation in + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.Controller. +

                      +

                      Control points

                      +

                      +The Guideline 36 control sequence requires the following input points in +addition to the ones from the HW plant model. +

                      +
                        +
                      • Outdoor air temperature TOut: +AI signal with a dimensionality of zero
                      • +
                      • HW differential pressure from remote sensor(s) dpHeaWatRem: +AI signal with a dimensionality of one, the number of remote +sensors is specified by the parameter nSenDpHeaWatRem.
                      • +
                      • +Inside the sub-bus busAirHan[:] (resp. busEquZon[:]), +with a dimensionality of one +
                          +
                        • HW plant requests yielded by the air handler or zone +equipment controller bus(AirHan|EquZon)[:].reqHeaWatPla: +AI signal (Integer), with a dimensionality of one +
                        • +
                        • HW reset requests yielded by the air handler or zone +equipment controller bus(AirHan|EquZon)[:].reqHeaWatRes: +AI signal (Integer), with a dimensionality of one
                        • +
                        +
                      • +
                      +

                      References

                      +
                        +
                      • +ASHRAE, 2021. Guideline 36-2021, High-Performance Sequences of Operation +for HVAC Systems. Atlanta, GA. +
                      • +
                      +", revisions=" +
                        +
                      • +April 28, 2023, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end Guideline36; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/Guideline36Plugin.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/Guideline36Plugin.mo new file mode 100644 index 00000000000..6ab43491e4d --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/Guideline36Plugin.mo @@ -0,0 +1,1182 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components.Controls; +block Guideline36Plugin + "Placeholder class to prepare G36 controller integration" + + parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType_priPum= Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(tab="Primary pump control parameters", group="PID parameters")); + + parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType_bypVal= Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation(Dialog(tab="Bypass valve control parameters")); + + parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType_secPum= Buildings.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller" + annotation(Dialog(tab="Secondary pump control parameters", group="PID parameters")); + + parameter Boolean have_priOnl = false + "Is the boiler plant a primary-only, condensing boiler plant?" + annotation(Dialog(tab="General", group="Boiler plant configuration parameters")); + + parameter Boolean have_heaPriPum = true + "True: Headered primary hot water pumps; + False: Dedicated primary hot water pumps" + annotation(Dialog(tab="General", group="Boiler plant configuration parameters")); + + parameter Boolean have_varPriPum = false + "True: Variable-speed primary pumps; + False: Fixed-speed primary pumps" + annotation(Dialog(tab="General", group="Boiler plant configuration parameters")); + + parameter Boolean have_secFloSen=false + "True: Flowrate sensor in secondary loop; + False: Flowrate sensor in decoupler" + annotation(Dialog(tab="General", + group="Boiler plant configuration parameters", + enable = not have_priOnl)); + + parameter Boolean have_priSecTemSen=false + "True: Temperature sensors in primary and secondary loops; + False: Temperature sensors in boiler supply and secondary loop" + annotation (Dialog(tab="Primary pump control parameters", + group="General parameters", + enable = speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.temperature)); + + parameter Boolean have_varSecPum = false + "True: Variable-speed secondary pumps; + False: Fixed-speed secondary pumps" + annotation (Dialog(group="Boiler plant configuration parameters")); + + parameter Integer nIgnReq( + final min=0) = 0 + "Number of hot-water requests to be ignored before enabling boiler plant loop" + annotation(Dialog(tab="Plant enable/disable parameters")); + + parameter Integer nSchRow( + final min=1) = 4 + "Number of rows to be created for plant schedule table" + annotation(Dialog(tab="Plant enable/disable parameters")); + + parameter Integer nBoi + "Number of boilers" + annotation(Dialog(tab="General", group="Boiler plant configuration parameters")); + + parameter Integer boiTyp[nBoi]={ + Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.BoilerTypes.condensingBoiler, + Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.BoilerTypes.nonCondensingBoiler} + "Boiler type" + annotation(Dialog(tab="General", group="Boiler plant configuration parameters")); + + parameter Integer nSta + "Number of boiler plant stages" + annotation(Dialog(tab="General", group="Boiler plant configuration parameters")); + + parameter Integer staMat[nSta, nBoi] + "Staging matrix with stage as row index and boiler as column index" + annotation(Dialog(tab="General", group="Boiler plant configuration parameters")); + + parameter Integer nPumPri + "Number of primary pumps in the boiler plant loop" + annotation(Dialog(tab="General", group="Boiler plant configuration parameters")); + + parameter Integer nHotWatResReqIgn = 2 + "Number of hot-water supply temperature reset requests to be ignored" + annotation(Dialog(tab="Supply temperature reset parameters", group="Trim-and-Respond Logic parameters")); + + parameter Integer nSenPri + "Total number of remote differential pressure sensors in primary loop" + annotation(Dialog(tab="General", + group="Boiler plant configuration parameters", + enable = have_remDPRegPri or have_locDPRegPri)); + + parameter Integer numIgnReq = 0 + "Number of ignored requests" + annotation (Dialog(tab="Primary pump control parameters", + group="Temperature-based speed regulation", + enable= speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.temperature)); + + parameter Integer nPumPri_nominal( + final max=nPumPri, + final min=1) = nPumPri + "Total number of pumps that operate at design conditions" + annotation (Dialog(group="Boiler plant configuration parameters")); + + parameter Integer nPumSec + "Total number of secondary hot water pumps" + annotation (Dialog(group="Boiler plant configuration parameters")); + + parameter Integer nSenSec + "Total number of remote differential pressure sensors in secondary loop" + annotation (Dialog(group="Boiler plant configuration parameters")); + + parameter Integer nPumSec_nominal( + final max=nPumSec) = nPumSec + "Total number of pumps that operate at design conditions in secondary loop" + annotation (Dialog(group="Boiler plant configuration parameters")); + + parameter Real schTab[nSchRow,2] = [0,1;6,1;18,1;24,1] + "Table defining schedule for enabling plant" + annotation(Dialog(tab="Plant enable/disable parameters")); + + parameter Real TOutLoc( + final unit="K", + displayUnit="K") = 300 + "Boiler lock-out temperature for outdoor air" + annotation(Dialog(tab="Plant enable/disable parameters")); + + parameter Real locDt( + final unit="K", + displayUnit="K", + final quantity="ThermodynamicTemperature") = 1 + "Temperature deadband for boiler lockout" + annotation(Dialog(tab="Plant enable/disable parameters", group="Advanced")); + + parameter Real plaOffThrTim( + final unit="s", + displayUnit="s") = 900 + "Minimum time for which the plant has to stay off once it has been disabled" + annotation(Dialog(tab="Plant enable/disable parameters")); + + parameter Real plaOnThrTim( + final unit="s", + displayUnit="s") = plaOffThrTim + "Minimum time for which the boiler plant has to stay on once it has been enabled" + annotation(Dialog(tab="Plant enable/disable parameters")); + + parameter Real staOnReqTim( + final unit="s", + displayUnit="s") = 180 + "Time-limit for receiving hot-water requests to maintain enabled plant on" + annotation(Dialog(tab="Plant enable/disable parameters")); + + parameter Real boiDesCap[nBoi] + "Design boiler capacities vector" + annotation(Dialog(tab="General", group="Boiler plant configuration parameters")); + + parameter Real boiFirMin[nBoi] + "Boiler minimum firing ratio" + annotation(Dialog(tab="General", group="Boiler plant configuration parameters")); + + parameter Real delStaCha( + final unit="s", + displayUnit="s", + final quantity="Time") = 600 + "Hold period for each stage change" + annotation(Dialog(tab="Staging setpoint parameters", group="General parameters")); + + parameter Real avePer( + final unit="s", + displayUnit="s", + final quantity="Time") = 300 + "Time period for the capacity requirement rolling average" + annotation(Dialog(tab="Staging setpoint parameters", group="Capacity requirement calculation parameters")); + + parameter Real fraNonConBoi( + final unit="1", + displayUnit="1") = 0.9 + "Fraction of current stage design capacity at which efficiency condition is + satisfied for non-condensing boilers" + annotation(Dialog(tab="Staging setpoint parameters", group="Efficiency condition parameters")); + + parameter Real fraConBoi( + final unit="1", + displayUnit="1") = 1.5 + "Fraction of higher stage design capacity at which efficiency condition is + satisfied for condensing boilers" + annotation(Dialog(tab="Staging setpoint parameters", group="Efficiency condition parameters")); + + parameter Real delEffCon( + final unit="s", + displayUnit="s", + final quantity="Time") = 600 + "Enable delay for heating capacity requirement condition" + annotation(Dialog(tab="Staging setpoint parameters", group="Efficiency condition parameters")); + + parameter Real TDif( + final unit="K", + displayUnit="K", + final quantity="TemperatureDifference") = 10 + "Required temperature difference between setpoint and measured temperature" + annotation(Dialog(tab="Staging setpoint parameters", group="Failsafe condition parameters")); + + parameter Real delFaiCon( + final unit="s", + displayUnit="s", + final quantity="Time") = 900 + "Enable delay for temperature condition" + annotation(Dialog(tab="Staging setpoint parameters", group="Failsafe condition parameters")); + + parameter Real sigDif( + final unit="1", + displayUnit="1") = 0.1 + "Signal hysteresis deadband for flowrate measurements" + annotation (Dialog(tab="Staging setpoint parameters", group="Advanced")); + + parameter Real TDifHys( + final unit="K", + displayUnit="K", + final quantity="TemperatureDifference") = 1 + "Temperature deadband for hysteresis loop" + annotation (Dialog(tab="Staging setpoint parameters", group="Advanced")); + + parameter Real fraMinFir( + final unit="1", + displayUnit="1") = 1.1 + "Fraction of boiler minimum firing rate that required capacity needs to be + to initiate stage-down process" + annotation(Dialog(tab="Staging setpoint parameters", group="Staging down parameters")); + + parameter Real delMinFir( + final unit="s", + displayUnit="s", + final quantity="Time") = 300 + "Delay for staging based on minimum firing rate of current stage" + annotation(Dialog(tab="Staging setpoint parameters", group="Staging down parameters")); + + parameter Real fraDesCap( + final unit="1", + displayUnit="1") = 0.8 + "Fraction of design capacity of next lower stage that heating capacity needs + to be for staging down" + annotation(Dialog(tab="Staging setpoint parameters", group="Staging down parameters")); + + parameter Real delDesCapNonConBoi( + final unit="s", + displayUnit="s", + final quantity="Time") = 600 + "Enable delay for capacity requirement condition for non-condensing boilers" + annotation(Dialog(tab="Staging setpoint parameters", group="Staging down parameters")); + + parameter Real delDesCapConBoi( + final unit="s", + displayUnit="s", + final quantity="Time") = 300 + "Enable delay for capacity requirement condition for condensing boilers" + annotation(Dialog(tab="Staging setpoint parameters", group="Staging down parameters")); + + parameter Real delBypVal( + final unit="s", + displayUnit="s", + final quantity="Time") = 300 + "Enable delay for bypass valve condition for primary-only plants" + annotation ( + Evaluate=true, + Dialog( + enable=have_priOnl, + tab="Staging setpoint parameters", + group="Staging down parameters")); + + parameter Real TCirDif( + final unit="K", + displayUnit="K", + final quantity="TemperatureDifference") = 3 + "Required return water temperature difference between primary and secondary + circuits for staging down" + annotation ( + Evaluate=true, + Dialog( + enable=not + (have_priOnl), + tab="Staging setpoint parameters", + group="Staging down parameters")); + + parameter Real delTRetDif( + final unit="s", + displayUnit="s", + final quantity="Time") = 300 + "Enable delay for measured hot water return temperature difference condition" + annotation ( + Evaluate=true, + Dialog( + enable=not + (have_priOnl), + tab="Staging setpoint parameters", + group="Staging down parameters")); + + parameter Real bypValClo( + final unit="1", + displayUnit="1") = 0 + "Adjustment for signal received when bypass valve is closed" + annotation ( + Evaluate=true, + Dialog( + enable=have_priOnl, + tab="Staging setpoint parameters", + group="Advanced")); + + parameter Real dTemp( + final unit="K", + displayUnit="K", + final quantity="TemperatureDifference") = 0.1 + "Hysteresis deadband for measured temperatures" + annotation (Dialog(tab="Staging setpoint parameters", group="Advanced")); + + parameter Real minFloSet[nBoi] + "Design minimum hot water flow through each boiler" + annotation(Dialog(tab="General", group="Boiler plant configuration parameters")); + + parameter Real maxFloSet[nBoi] + "Design maximum hot water flow through each boiler" + annotation(Dialog(tab="General", group="Boiler plant configuration parameters")); + + parameter Real bypSetRat( + final unit="m3/s2", + displayUnit="m3/s2", + final min=0) = 0.001 + "Rate at which to reset bypass valve setpoint during stage change" + annotation(Dialog(tab="Staging setpoint parameters", group="General parameters")); + + parameter Real TPlaHotWatSetMax( + final unit="K", + displayUnit="K", + final quantity="ThermodynamicTemperature") = 353.15 + "The maximum allowed hot-water setpoint temperature for the plant" + annotation(Dialog(tab="Supply temperature reset parameters", group="Trim-and-Respond Logic parameters")); + + parameter Real TConBoiHotWatSetMax( + final unit="K", + displayUnit="K", + final quantity="ThermodynamicTemperature") = 353.15 + "The maximum allowed hot water setpoint temperature for condensing boilers" + annotation(Dialog(tab="Supply temperature reset parameters", group="Trim-and-Respond Logic parameters")); + + parameter Real TConBoiHotWatSetOff( + final unit="K", + displayUnit="K", + final quantity="TemperatureDifference") = -10 + "The offset for hot water setpoint temperature for condensing boilers in + non-condensing stage type" + annotation(Dialog(tab="Supply temperature reset parameters", group="General parameters")); + + parameter Real THotWatSetMinNonConBoi( + final unit="K", + displayUnit="K", + final quantity="ThermodynamicTemperature") = 341.48 + "The minimum allowed hot-water setpoint temperature for non-condensing boilers" + annotation(Dialog(tab="Supply temperature reset parameters", group="Trim-and-Respond Logic parameters")); + + parameter Real THotWatSetMinConBoi( + final unit="K", + displayUnit="K", + final quantity="ThermodynamicTemperature") = 305.37 + "The minimum allowed hot-water setpoint temperature for condensing boilers" + annotation(Dialog(tab="Supply temperature reset parameters", group="Trim-and-Respond Logic parameters")); + + parameter Real delTimVal( + final unit="s", + displayUnit="s", + final quantity="Time") = 600 + "Delay time" + annotation(Dialog(tab="Supply temperature reset parameters", group="Trim-and-Respond Logic parameters")); + + parameter Real samPerVal( + final unit="s", + displayUnit="s", + final quantity="Time") = 300 + "Sample period" + annotation(Dialog(tab="Supply temperature reset parameters", group="Trim-and-Respond Logic parameters")); + + parameter Real triAmoVal( + final unit="K", + displayUnit="K", + final quantity="TemperatureDifference") = -2 + "Setpoint trim value" + annotation(Dialog(tab="Supply temperature reset parameters", group="Trim-and-Respond Logic parameters")); + + parameter Real resAmoVal( + final unit="K", + displayUnit="K", + final quantity="TemperatureDifference") = 3 + "Setpoint respond value" + annotation(Dialog(tab="Supply temperature reset parameters", group="Trim-and-Respond Logic parameters")); + + parameter Real maxResVal( + final unit="K", + displayUnit="K", + final quantity="TemperatureDifference") = 7 + "Setpoint maximum respond value" + annotation(Dialog(tab="Supply temperature reset parameters", group="Trim-and-Respond Logic parameters")); + + parameter Real holTimVal( + final unit="s", + displayUnit="s", + final quantity="Time") = 600 + "Minimum setpoint hold time for stage change process" + annotation(Dialog(tab="Supply temperature reset parameters", group="General parameters")); + + parameter Real TMinSupNonConBoi( + final unit="K", + displayUnit="K", + final quantity="ThermodynamicTemperature") = 333.2 + "Minimum supply temperature required for non-condensing boilers" + annotation(Dialog(tab="General", group="Boiler plant configuration parameters")); + + parameter Real delProSupTemSet( + final unit="s", + displayUnit="s", + final quantity="time")=300 + "Process time-out for hot water supply temperature setpoint reset" + annotation (Dialog(tab="Staging process parameters",group="Time and delay parameters")); + + parameter Real delEnaMinFloSet( + final unit="s", + displayUnit="s", + final quantity="time")=60 + "Enable delay after minimum flow setpoint is achieved in bypass valve" + annotation (Dialog(tab="Staging process parameters",group="Time and delay parameters")); + + parameter Real chaIsoValRat( + final unit="1/s", + displayUnit="1/s") = 1/60 + "Rate at which to slowly change isolation valve position, should be determined + in the field" + annotation (Dialog(tab="Staging process parameters",group="Time and delay parameters")); + + parameter Real chaIsoValTim( + final unit="s", + displayUnit="s", + final quantity="time") = 1/chaIsoValRat + "Time to slowly change isolation valve position from fully closed to fully open, + should be determined in the field" + annotation (Dialog(tab="Staging process parameters", group="Time and delay parameters")); + + parameter Real delPreBoiEna( + final unit="s", + displayUnit="s", + final quantity="time") = 30 + "Time delay after valve and pump change process has been completed before + starting boiler change process" + annotation (Dialog(tab="Staging process parameters",group="Time and delay parameters")); + + parameter Real boiChaProOnTim( + final unit="s", + displayUnit="s", + final quantity="time") = 300 + "Enabled boiler operation time to indicate if it is proven on during a staging + process where one boiler is turned on and the other is turned off" + annotation (Dialog(tab="Staging process parameters",group="Time and delay parameters")); + + parameter Real delBoiEna( + final unit="s", + displayUnit="s", + final quantity="time") = 180 + "Time delay after boiler change process has been completed before turning off + excess valves and pumps" + annotation (Dialog(tab="Staging process parameters",group="Time and delay parameters")); + + parameter Real k_bypVal( + final min=0, + final unit="1", + displayUnit="1") = 1 + "Gain of controller" + annotation(Dialog(tab="Bypass valve control parameters")); + + parameter Real Ti_bypVal( + final min=0, + final unit="s", + displayUnit="s", + final quantity="time") = 0.5 + "Time constant of integrator block" + annotation(Dialog(tab="Bypass valve control parameters")); + + parameter Real Td_bypVal( + final min=0, + final unit="s", + displayUnit="s", + final quantity="time") = 0.1 + "Time constant of derivative block" + annotation(Dialog(tab="Bypass valve control parameters")); + + parameter Real minPumSpePri( + final unit="1", + displayUnit="1", + final min=0, + final max=maxPumSpePri) = 0.1 + "Minimum pump speed" + annotation (Dialog(tab="Primary pump control parameters", group="General parameters", enable=have_varPriPum)); + + parameter Real maxPumSpePri( + final unit="1", + displayUnit="1", + final min=minPumSpePri, + final max=1) = 1 + "Maximum pump speed" + annotation (Dialog(tab="Primary pump control parameters", group="General parameters", enable=have_varPriPum)); + + parameter Real VHotWatPri_flow_nominal( + final min=1e-6, + final unit="m3/s", + displayUnit="m3/s", + final quantity="VolumeFlowRate") + "Plant design hot water flow rate through primary loop" + annotation (Dialog(group="Boiler plant configuration parameters")); + + parameter Real boiDesFlo[nBoi]( + each final min=1e-6, + each final unit="m3/s", + each displayUnit="m3/s") + "Vector of design flowrates for all boilers in plant" + annotation (Dialog(group="Boiler plant configuration parameters")); + + parameter Real maxLocDpPri( + final unit="Pa", + displayUnit="Pa", + final quantity="PressureDifference", + final min=1e-6) = 5*6894.75 + "Maximum primary loop local differential pressure setpoint" + annotation (Dialog(tab="Primary pump control parameters", group="DP-based speed regulation", + enable = speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.localDP + or speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.remoteDP)); + + parameter Real minLocDpPri( + final unit="Pa", + displayUnit="Pa", + final quantity="PressureDifference", + final min=1e-6) = 5*6894.75 + "Minimum primary loop local differential pressure setpoint" + annotation (Dialog(tab="Primary pump control parameters", + group="DP-based speed regulation", + enable = speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.localDP + or speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.remoteDP)); + + parameter Real offTimThr_priPum( + final unit="s", + displayUnit="s", + final quantity="time", + final min=0) = 180 + "Threshold to check lead boiler off time" + annotation (Dialog(tab="Primary pump control parameters", group="Pump staging parameters")); + + parameter Real timPer_priPum( + final unit="s", + displayUnit="s", + final quantity="time", + final min=0) = 600 + "Delay time period for enabling and disabling lag pumps" + annotation (Dialog(tab="Primary pump control parameters", group="Pump staging parameters")); + + parameter Real staCon_priPum( + final unit="1", + displayUnit="1") = -0.03 + "Constant used in the staging equation" + annotation (Dialog(tab="Primary pump control parameters", group="Pump staging parameters")); + + parameter Real relFloHys_priPum( + final unit="1", + displayUnit="1") = 0.01 + "Constant value used in hysteresis for checking relative flow rate" + annotation (Dialog(tab="Primary pump control parameters", group="Pump staging parameters")); + + parameter Real delTim_priPum( + final unit="s", + displayUnit="s", + final quantity="time", + final min=0) = 900 + "Delay time" + annotation (Dialog(tab="Primary pump control parameters", + group="Temperature-based speed regulation", + enable = speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.temperature)); + + parameter Real samPer_priPum( + final unit="s", + displayUnit="s", + final quantity="time", + final min=0) = 120 + "Sample period of component" + annotation (Dialog(tab="Primary pump control parameters", + group="Temperature-based speed regulation", + enable = speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.temperature)); + + parameter Real triAmo_priPum( + final unit="1", + displayUnit="1") = -0.02 + "Trim amount" + annotation (Dialog(tab="Primary pump control parameters", + group="Temperature-based speed regulation", + enable = speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.temperature)); + + parameter Real resAmo_priPum( + final unit="1", + displayUnit="1") = 0.03 + "Respond amount" + annotation (Dialog(tab="Primary pump control parameters", + group="Temperature-based speed regulation", + enable = speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.temperature)); + + parameter Real maxRes_priPum( + final unit="1", + displayUnit="1") = 0.06 + "Maximum response per time interval" + annotation (Dialog(tab="Primary pump control parameters", + group="Temperature-based speed regulation", + enable = speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.temperature)); + + parameter Real twoReqLimLow_priPum( + final unit="K", + displayUnit="K", + final quantity="TemperatureDifference") = 1.2 + "Lower limit of hysteresis loop sending two requests" + annotation (Dialog(tab="Primary pump control parameters", + group="Temperature-based speed regulation", + enable = speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.temperature)); + + parameter Real twoReqLimHig_priPum( + final unit="K", + displayUnit="K", + final quantity="TemperatureDifference") = 2 + "Higher limit of hysteresis loop sending two requests" + annotation (Dialog(tab="Primary pump control parameters", + group="Temperature-based speed regulation", + enable = speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.temperature)); + + parameter Real oneReqLimLow_priPum( + final unit="K", + displayUnit="K", + final quantity="TemperatureDifference") = 0.2 + "Lower limit of hysteresis loop sending one request" + annotation (Dialog(tab="Primary pump control parameters", + group="Temperature-based speed regulation", + enable = speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.temperature)); + + parameter Real oneReqLimHig_priPum( + final unit="K", + displayUnit="K", + final quantity="TemperatureDifference") = 1 + "Higher limit of hysteresis loop sending one request" + annotation (Dialog(tab="Primary pump control parameters", + group="Temperature-based speed regulation", + enable = speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.temperature)); + + parameter Real k_priPum( + final unit="1", + displayUnit="1", + final min=0) = 1 + "Gain of controller" + annotation (Dialog(tab="Primary pump control parameters", group="PID parameters")); + + parameter Real Ti_priPum( + final unit="s", + displayUnit="s", + final quantity="time", + final min=0) = 0.5 + "Time constant of integrator block" + annotation (Dialog(tab="Primary pump control parameters", group="PID parameters")); + + parameter Real Td_priPum( + final unit="s", + displayUnit="s", + final quantity="time", + final min=0) = 0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Primary pump control parameters", group="PID parameters")); + + parameter Real TRetSet( + final unit="K", + displayUnit="K", + final quantity="ThermodynamicTemperature") = 333.15 + "Minimum hot water return temperature for optimal non-condensing boiler performance" + annotation(Dialog(tab="Condensation control parameters")); + + parameter Real TRetMinAll( + final unit="K", + displayUnit="K", + final quantity="ThermodynamicTemperature") = 330.35 + "Minimum allowed hot water return temperature for non-condensing boiler" + annotation(Dialog(tab="Condensation control parameters")); + + parameter Real minSecPumSpe( + final unit="1", + displayUnit="1", + final min=0, + final max=1) = 0 + "Minimum secondary pump speed" + annotation(Dialog(tab="Condensation control parameters")); + + parameter Real minPriPumSpeSta[nSta]( + final unit=fill("1",nSta), + displayUnit=fill("1",nSta), + final min=fill(0,nSta), + final max=fill(1,nSta)) + "Vector of minimum primary pump speed for each stage" + annotation(Dialog(group="Boiler plant configuration parameters")); + + parameter Real minPumSpeSec( + final unit="1", + displayUnit="1", + final min=0, + final max=maxPumSpeSec) = 0.1 + "Minimum pump speed" + annotation (Dialog(tab="Secondary pump control parameters", + group="General parameters", + enable=have_varSecPum)); + + parameter Real maxPumSpeSec( + final unit="1", + displayUnit="1", + final min=minPumSpeSec, + final max=1) = 1 + "Maximum pump speed" + annotation (Dialog(tab="Secondary pump control parameters", + group="General parameters", + enable=have_varSecPum)); + + parameter Real VHotWatSec_flow_nominal( + final unit="m3/s", + displayUnit="m3/s", + final quantity="VolumeFlowRate") = 0.5 + "Secondary loop design hot water flow rate" + annotation (Dialog(group="Boiler plant configuration parameters")); + + parameter Real maxLocDpSec( + final unit="Pa", + displayUnit="Pa", + final quantity="PressureDifference", + final min=1e-6) = 5*6894.75 + "Maximum hot water loop local differential pressure setpoint in secondary loop" + annotation (Dialog(tab="Secondary pump control parameters", group="DP-based speed regulation", + enable = speConTypSec == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.localDP)); + + parameter Real minLocDpSec( + final unit="Pa", + displayUnit="Pa", + final quantity="PressureDifference", + final min=1e-6) = 5*6894.75 + "Minimum hot water loop local differential pressure setpoint in secondary loop" + annotation (Dialog(tab="Secondary pump control parameters", + group="DP-based speed regulation", + enable = speConTypSec == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.localDP)); + + parameter Real offTimThr( + final unit="s", + displayUnit="s", + final quantity="time", + final min=0) = 180 + "Threshold to check lead boiler off time" + annotation (Dialog(tab="Secondary pump control parameters", + group="Pump staging parameters", + enable=have_varSecPum and have_secFloSen)); + + parameter Real timPerSec( + final unit="s", + displayUnit="s", + final quantity="time", + final min=0) = 600 + "Delay time period for enabling and disabling secondary lag pumps" + annotation (Dialog(tab="Secondary pump control parameters", + group="Pump staging parameters", + enable=have_varSecPum and have_secFloSen)); + + parameter Real staConSec( + final unit="1", + displayUnit="1") = -0.03 + "Constant used in the staging equation" + annotation (Dialog(tab="Secondary pump control parameters", + group="Pump staging parameters", + enable=have_varSecPum and have_secFloSen)); + + parameter Real speLim( + final unit="1", + displayUnit="1") = 0.9 + "Speed limit with longer enable delay for enabling next lag pump" + annotation (Dialog(tab="Secondary pump control parameters", + group="Pump staging parameters", + enable=have_varSecPum and not have_secFloSen)); + + parameter Real speLim1( + final unit="1", + displayUnit="1") = 0.99 + "Speed limit with shorter enable delay for enabling next lag pump" + annotation (Dialog(tab="Secondary pump control parameters", + group="Pump staging parameters", + enable=have_varSecPum and not have_secFloSen)); + + parameter Real speLim2( + final unit="1", + displayUnit="1") = 0.4 + "Speed limit for disabling last lag pump" + annotation (Dialog(tab="Secondary pump control parameters", + group="Pump staging parameters", + enable=have_varSecPum and not have_secFloSen)); + + parameter Real timPer1( + final unit="s", + displayUnit="s", + final quantity="time") = 300 + "Delay time period for enabling next lag pump at speed limit speLim" + annotation (Dialog(tab="Secondary pump control parameters", + group="Pump staging parameters", + enable=have_varSecPum and not have_secFloSen)); + + parameter Real timPer2( + final unit="s", + displayUnit="s", + final quantity="time") = 60 + "Delay time period for enabling next lag pump at speed limit speLim1" + annotation (Dialog(tab="Secondary pump control parameters", + group="Pump staging parameters", + enable=have_varSecPum and not have_secFloSen)); + + parameter Real timPer3( + final unit="s", + displayUnit="s", + final quantity="time") = 600 + "Delay time period for disabling last lag pump" + annotation (Dialog(tab="Secondary pump control parameters", + group="Pump staging parameters", + enable=have_varSecPum and not have_secFloSen)); + + parameter Real k_sec( + final unit="1", + displayUnit="1", + final min=0) = 1 + "Gain of controller" + annotation (Dialog(tab="Secondary pump control parameters", + group="PID parameters", + enable=have_varSecPum)); + + parameter Real Ti_sec( + final unit="s", + displayUnit="s", + final quantity="time", + final min=0) = 0.5 + "Time constant of integrator block" + annotation (Dialog(tab="Secondary pump control parameters", + group="PID parameters", + enable=have_varSecPum)); + + parameter Real Td_sec( + final unit="s", + displayUnit="s", + final quantity="time", + final min=0) = 0.1 + "Time constant of derivative block" + annotation (Dialog(tab="Secondary pump control parameters", + group="PID parameters", + enable=have_varSecPum)); + + parameter Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes + speConTypPri = Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.remoteDP + "Primary pump speed regulation method" + annotation (Dialog(group="Boiler plant configuration parameters", enable=have_varPriPum)); + + parameter Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.SecondaryPumpSpeedControlTypes + speConTypSec = Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.SecondaryPumpSpeedControlTypes.remoteDP + "Secondary pump speed regulation method" + annotation (Dialog(group="Boiler plant configuration parameters", enable=have_varSecPum)); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uBoiAva[nBoi] + "Boiler availability status signal" + annotation (Placement(transformation(extent={{-440,70},{-400,110}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uBoi[nBoi] + "Boiler status vector from plant" + annotation (Placement(transformation(extent={{-440,-360},{-400,-320}}), + iconTransformation(extent={{-140,-190},{-100,-150}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPriPum[nPumPri] + "Primary pump proven on signal from plant" + annotation (Placement(transformation(extent={{-440,-400},{-400,-360}}), + iconTransformation(extent={{-140,-220},{-100,-180}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSecPum[nPumSec] if not have_priOnl + "Secondary pump proven on signal" + annotation (Placement(transformation(extent={{-440,-440},{-400,-400}}), + iconTransformation(extent={{-140,-250},{-100,-210}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput plaReq + "Plant requests" + annotation (Placement(transformation(extent={{-440,350},{-400,390}}), + iconTransformation(extent={{-140,270},{-100,310}}))); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput TSupResReq + "Hot water supply temperature reset requests" + annotation (Placement(transformation(extent={{-440,380},{-400,420}}), + iconTransformation(extent={{-140,300},{-100,340}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Measured outdoor air temperature" + annotation (Placement(transformation(extent={{-440,310},{-400,350}}), + iconTransformation(extent={{-140,240},{-100,280}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TSupPri( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Measured hot water supply temperature" + annotation (Placement(transformation(extent={{-440,270},{-400,310}}), + iconTransformation(extent={{-140,210},{-100,250}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TRetPri( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Measured hot water primary return temperature" + annotation (Placement(transformation(extent={{-440,230},{-400,270}}), + iconTransformation(extent={{-140,180},{-100,220}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput VHotWatPri_flow( + final unit="m3/s", + displayUnit="m3/s", + final quantity="VolumeFlowRate") + "Measured hot water primary circuit flowrate" + annotation (Placement(transformation(extent={{-440,190},{-400,230}}), + iconTransformation(extent={{-140,150},{-100,190}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpHotWatPri_rem[nSenPri]( + final unit=fill("Pa", nSenPri), + displayUnit=fill("Pa", nSenPri), + final quantity=fill("PressureDifference", nSenPri)) if have_varPriPum and (have_remDPRegPri or have_locDPRegPri) + "Measured differential pressure between hot water supply and return in primary circuit" + annotation (Placement(transformation(extent={{-440,110},{-400,150}}), + iconTransformation(extent={{-140,90},{-100,130}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TRetSec( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") if not have_priOnl + "Measured hot water secondary return temperature" + annotation (Placement(transformation(extent={{-440,150},{-400,190}}), + iconTransformation(extent={{-140,120},{-100,160}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput VHotWatSec_flow( + final unit="m3/s", + displayUnit="m3/s", + final quantity="VolumeFlowRate") if not have_priOnl and have_secFloSen + "Measured hot water secondary circuit flowrate" + annotation (Placement(transformation(extent={{-440,-70},{-400,-30}}), + iconTransformation(extent={{-140,30},{-100,70}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput VHotWatDec_flow( + final unit="m3/s", + displayUnit="m3/s", + final quantity="VolumeFlowRate") if not have_priOnl and have_varPriPum + and have_floRegPri and not have_secFloSen + "Measured hot water flowrate through decoupler leg" + annotation (Placement(transformation(extent={{-440,-110},{-400,-70}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TSupSec( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") if not have_priOnl and + have_varPriPum and have_temRegPri and have_priSecTemSen + "Measured hot water supply temperature in secondary circuit" + annotation (Placement(transformation(extent={{-440,-150},{-400,-110}}), + iconTransformation(extent={{-140,-40},{-100,0}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TSupBoi[nBoi]( + final unit=fill("K", nBoi), + displayUnit=fill("degC", nBoi), + final quantity=fill("ThermodynamicTemperature", nBoi)) if not have_priOnl + and have_varPriPum and have_temRegPri and not have_priSecTemSen + "Measured hot water supply temperature at boiler outlets" + annotation (Placement(transformation(extent={{-440,-190},{-400,-150}}), + iconTransformation(extent={{-140,-70},{-100,-30}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpHotWatSec_rem[nSenSec]( + final unit=fill("Pa", nSenSec), + displayUnit=fill("Pa", nSenSec), + final quantity=fill("PressureDifference", nSenSec)) if not + have_priOnl and have_varSecPum and (have_remDPRegSec or have_locDPRegSec) + "Measured differential pressure between hot water supply and return in secondary circuit" + annotation (Placement(transformation(extent={{-440,-230},{-400,-190}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpHotWatPri_loc( + final unit="Pa", + displayUnit="Pa", + final quantity="PressureDifference") if have_varPriPum and have_locDPRegPri + "Measured differential pressure between hot water supply and return in primary circuit" + annotation (Placement(transformation(extent={{-440,-270},{-400,-230}}), + iconTransformation(extent={{-140,-130},{-100,-90}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpHotWatSec_loc( + final unit="Pa", + displayUnit="Pa", + final quantity="PressureDifference") if not have_priOnl and + have_varSecPum and have_locDPRegSec + "Measured differential pressure between hot water supply and return in secondary circuit" + annotation (Placement(transformation(extent={{-440,-310},{-400,-270}}), + iconTransformation(extent={{-140,-160},{-100,-120}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uHotWatIsoVal[nBoi]( + final unit=fill("1",nBoi), + displayUnit=fill("1",nBoi)) if have_heaPriPum + "Measured boiler isolation valve position signals from plant" + annotation (Placement(transformation(extent={{-440,-480},{-400,-440}}), + iconTransformation(extent={{-140,-280},{-100,-240}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uBypValPos( + final unit="1", + displayUnit="1") if have_priOnl + "Measured bypass valve position signal from plant" + annotation (Placement(transformation(extent={{-440,-520},{-400,-480}}), + iconTransformation(extent={{-140,-310},{-100,-270}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput uPriPumSpe[nPumPri]( + final unit=fill("1",nBoi), + displayUnit=fill("1",nBoi)) if not have_priOnl + "Measured primary pump speed signal from plant" + annotation (Placement(transformation(extent={{-440,-560},{-400,-520}}), + iconTransformation(extent={{-140,-340},{-100,-300}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yBoi[nBoi] + "Boiler status vector" + annotation (Placement(transformation(extent={{400,200},{440,240}}), + iconTransformation(extent={{100,80},{140,120}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yPriPum[nPumPri] + "Primary pump enable status vector" + annotation (Placement(transformation(extent={{400,-130},{440,-90}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput ySecPum[nPumSec] if not have_priOnl + "Secondary pump enable status vector" + annotation (Placement(transformation(extent={{400,-340},{440,-300}}), + iconTransformation(extent={{100,-160},{140,-120}}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yPla + "Plant enable signal" + annotation (Placement(transformation(extent={{400,300},{440,340}}), + iconTransformation(extent={{100,160},{140,200}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TPlaHotWatSupSet + "Plant hot water supply temperature setpoint" + annotation (Placement(transformation(extent={{400,240},{440,280}}), + iconTransformation(extent={{100,120},{140,160}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHotWatIsoVal[nBoi]( + final unit=fill("1",nBoi), + displayUnit=fill("1",nBoi)) if have_heaPriPum + "Boiler hot water isolation valve position vector" + annotation (Placement(transformation(extent={{400,120},{440,160}}), + iconTransformation(extent={{100,0},{140,40}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yPriPumSpe( + final unit="1", + displayUnit="1") if have_varPriPum + "Primary pump speed" + annotation (Placement(transformation(extent={{400,-170},{440,-130}}), + iconTransformation(extent={{100,-120},{140,-80}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yBypValPos( + final unit="1", + displayUnit="1") if have_priOnl + "Bypass valve position" + annotation (Placement(transformation(extent={{400,-30},{440,10}}), + iconTransformation(extent={{100,-40},{140,0}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySecPumSpe( + final unit="1", + displayUnit="1") if not have_priOnl and have_varSecPum + "Secondary pump speed vector" + annotation (Placement(transformation(extent={{400,-390},{440,-350}}), + iconTransformation(extent={{100,-200},{140,-160}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TBoiHotWatSupSet[nBoi] + "Boiler hot water supply temperature setpoint vector" + annotation (Placement(transformation(extent={{400,170},{440,210}}), + iconTransformation(extent={{100,40},{140,80}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1Boi[nBoi]( + each table=[0,0; 1,1; 2,0], + each timeScale=1000, + each period=2000) "Boiler Enable signal" + annotation (Placement(transformation(extent={{280,210},{300,230}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSup(k= + TPlaHotWatSetMax) "HW supply temperature set point" + annotation (Placement(transformation(extent={{280,250},{300,270}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep(final nout=nBoi) + "Replicate signal" + annotation (Placement(transformation(extent={{360,180},{380,200}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1Pla( + table=[0,0; 1,1; 2,0], + timeScale=1000, + period=2000) "Plant Enable signal" + annotation (Placement(transformation(extent={{280,310},{300,330}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nBoi] + annotation (Placement(transformation(extent={{340,130},{360,150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zero(k=0) "Constant" + annotation (Placement(transformation(extent={{340,-20},{360,0}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1PumPri[nPumPri]( + each table=[0,0; 1,1; 2,0], + each timeScale=1000, + each period=2000) "Primary pump Enable signal" + annotation (Placement(transformation(extent={{280,-120},{300,-100}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(k=1) "Constant" + annotation (Placement(transformation(extent={{340,-160},{360,-140}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1PumSec[nPumSec]( + each table=[0,0; 1,1; 2,0], + each timeScale=1000, + each period=2000) "Secondary pump Enable signal" + annotation (Placement(transformation(extent={{280,-330},{300,-310}}))); +protected + parameter Boolean have_remDPRegPri = (speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.remoteDP) + "Boolean flag for primary pump speed control with remote differential pressure"; + + parameter Boolean have_locDPRegPri = (speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.localDP) + "Boolean flag for primary pump speed control with local differential pressure"; + + parameter Boolean have_temRegPri = (speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.temperature) + "Boolean flag for primary pump speed control with temperature readings"; + + parameter Boolean have_floRegPri = (speConTypPri == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.PrimaryPumpSpeedControlTypes.flowrate) + "Boolean flag for primary pump speed control with flowrate readings"; + + parameter Boolean have_remDPRegSec = (speConTypSec == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.SecondaryPumpSpeedControlTypes.remoteDP) + "Boolean flag for secondary pump speed control with remote differential pressure"; + + parameter Boolean have_locDPRegSec = (speConTypSec == Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.TypesTmp.SecondaryPumpSpeedControlTypes.localDP) + "Boolean flag for secondary pump speed control with local differential pressure"; + + parameter Integer staInd[nSta]={i for i in 1:nSta} + "Staging indices starting at 1"; + + parameter Integer priPumInd[nPumPri]={i for i in 1:nPumPri} + "Vector of primary pump indices up to total number of primary pumps"; + + parameter Integer secPumInd[nPumSec]={i for i in 1:nPumSec} + "Vector of secondary pump indices up to total number of secondary pumps"; + +equation + + connect(y1Boi.y[1], yBoi) + annotation (Line(points={{302,220},{420,220}}, color={255,0,255})); + connect(THeaWatSup.y, rep.u) annotation (Line(points={{302,260},{340,260},{ + 340,190},{358,190}}, color={0,0,127})); + connect(rep.y, TBoiHotWatSupSet) annotation (Line(points={{382,190},{420,190}}, + color={0,0,127})); + connect(y1Pla.y[1], yPla) annotation (Line(points={{302,320},{420,320}}, + color={255,0,255})); + connect(y1Boi.y[1], booToRea.u) annotation (Line(points={{302,220},{320,220},{ + 320,140},{338,140}}, color={255,0,255})); + connect(booToRea.y, yHotWatIsoVal) + annotation (Line(points={{362,140},{420,140}}, color={0,0,127})); + connect(zero.y, yBypValPos) + annotation (Line(points={{362,-10},{420,-10}}, color={0,0,127})); + connect(y1PumPri.y[1], yPriPum) + annotation (Line(points={{302,-110},{420,-110}}, color={255,0,255})); + connect(one.y, yPriPumSpe) + annotation (Line(points={{362,-150},{420,-150}}, color={0,0,127})); + connect(one.y, ySecPumSpe) annotation (Line(points={{362,-150},{380,-150},{380, + -370},{420,-370}}, color={0,0,127})); + connect(y1PumSec.y[1], ySecPum) annotation (Line(points={{302,-320},{351,-320}, + {351,-320},{420,-320}}, color={255,0,255})); + connect(THeaWatSup.y, TPlaHotWatSupSet) + annotation (Line(points={{302,260},{420,260}}, color={0,0,127})); + annotation (Diagram(coordinateSystem(extent={{-400,-600},{400,600}})), Icon( + coordinateSystem(extent={{-100,-340},{100,340}})), + Documentation(info=" +

                      +FIXME: This class is for temporary use only. +It aims at providing the outside connectors and parameters of the +G36 controller while the comments at + +are being addressed. +

                      +")); +end Guideline36Plugin; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/OpenLoop.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/OpenLoop.mo new file mode 100644 index 00000000000..0fe36138a96 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/OpenLoop.mo @@ -0,0 +1,157 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components.Controls; +block OpenLoop + extends + Buildings.Templates.Plants.Boilers.HotWater.Components.Interfaces.PartialController( + final typ=Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.OpenLoop); + + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1Con_default[nBoiCon]( + each table=[0,0; 1,1; 2,0], + each timeScale=1000, + each period=2000) + "Default Enable signal for all condensing units" + annotation (Placement(transformation(extent={{-140,270},{-120,290}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1Non_default[nBoiNon]( + each table=[0,0; 1,1; 2,0], + each timeScale=1000, + each period=2000) + "Default Enable signal for all non-condensing units" + annotation (Placement(transformation(extent={{-80,270},{-60,290}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1BoiCon[nBoiCon]( + table=y1Con_default.table, + timeScale=y1Con_default.timeScale, + period=y1Con_default.period) if have_boiCon + "Boiler Enable signal - Condensing Boilers" + annotation (Placement(transformation(extent={{-120,190},{-140,210}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatConSupSet( + y(final unit="K", displayUnit="degC"), final k=dat.THeaWatConSup_nominal) + if have_boiCon + "HW supply temperature set point - Condensing Boilers" + annotation (Placement(transformation(extent={{-120,230},{-140,250}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep( + final nout=nBoiCon) if have_boiCon + "Replicate signal" + annotation (Placement(transformation(extent={{-150,230},{-170,250}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1ValBoiConIso[nBoiCon]( + table=y1Con_default.table, + timeScale=y1Con_default.timeScale, + period=y1Con_default.period) if have_boiCon + "Boiler isolation valve opening signal - Condensing Boilers" + annotation (Placement(transformation(extent={{-120,130},{-140,150}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1BoiNon[nBoiNon]( + table=y1Non_default.table, + timeScale=y1Non_default.timeScale, + period=y1Non_default.period) if have_boiNon + "Boiler Enable signal - Non-condensing Boilers" + annotation (Placement(transformation(extent={{-60,170},{-80,190}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupSet( + y(final unit="K", displayUnit="degC"), final k=dat.THeaWatSup_nominal) + if have_boiNon + "HW supply temperature set point" + annotation (Placement(transformation(extent={{-60,210},{-80,230}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep1( + final nout=nBoiNon) if have_boiNon + "Replicate signal" + annotation (Placement(transformation(extent={{-90,210},{-110,230}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1ValBoiNonIso[nBoiNon]( + table=y1Non_default.table, + timeScale=y1Non_default.timeScale, + period=y1Non_default.period) if have_boiNon + "Boiler isolation valve opening signal - Non-condensing Boilers" + annotation (Placement(transformation(extent={{-60,110},{-80,130}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1PumHeaWatPriCon[ + nPumHeaWatPriCon]( + table=y1Con_default.table, + timeScale=y1Con_default.timeScale, + period=y1Con_default.period) if have_boiCon + "Primary HW pump Enable signal - Condensing Boilers" + annotation (Placement(transformation(extent={{-120,90},{-140,110}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yPumHeaWatPriCon( + y(final unit="1"), k=1) if have_boiCon and have_varPumHeaWatPriCon + "Primary HW pump speed signal - Condensing Boilers" + annotation (Placement(transformation(extent={{-120,50},{-140,70}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1PumHeaWatPriNon[ + nPumHeaWatPriNon]( + table=y1Non_default.table, + timeScale=y1Non_default.timeScale, + period=y1Non_default.period) if have_boiNon + "Primary HW pump Enable signal - Non-condensing Boilers" + annotation (Placement(transformation(extent={{-60,70},{-80,90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yPumHeaWatPriNon( + y(final unit="1"), k=1) if have_boiNon and have_varPumHeaWatPriNon + "Primary HW pump speed signal - Non-condensing Boilers" + annotation (Placement(transformation(extent={{-60,30},{-80,50}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1PumHeaWatSec[nPumHeaWatSec]( + each table=[0,0; 1,1; 2,0], + each timeScale=1000, + each period=2000) + if typPumHeaWatSec == Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Centralized + "Secondary HW pump Enable signal" + annotation (Placement(transformation(extent={{-120,-50},{-140,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yPumHeaWatSec( + y(final unit="1"), k=1) + if typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Centralized + "Secondary HW pump speed signal" + annotation (Placement(transformation(extent={{-120,-90},{-140,-70}}))); + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yValHeaWatMinByp( + y(final unit="1"), k=0) if have_valHeaWatMinBypCon or have_valHeaWatMinBypNon + "HW minimum flow bypass valve opening signal" + annotation (Placement(transformation(extent={{-120,10},{-140,30}}))); +equation + connect(y1PumHeaWatPriCon.y[1], busPumHeaWatPriCon.y1) + annotation (Line(points={{-142,100},{-240,100},{-240,80}}, + color={255,0,255})); + connect(yPumHeaWatPriCon.y, busPumHeaWatPriCon.y) + annotation (Line(points={{-142,60},{-240,60},{-240,80}}, color={0,0,127})); + connect(y1PumHeaWatSec.y[1], busPumHeaWatSec.y1) + annotation (Line(points={{-142,-40},{-200,-40}}, color={255,0,255})); + connect(yPumHeaWatSec.y, busPumHeaWatSec.y) annotation (Line(points={{-142, + -80},{-200,-80},{-200,-40}}, + color={0,0,127})); + connect(y1PumHeaWatPriNon.y[1], busPumHeaWatPriNon.y1) + annotation (Line(points={{-82,80},{-160,80}}, color={255,0,255})); + connect(y1ValBoiNonIso.y[1], busValBoiNonIso.y1) + annotation (Line(points={{-82,120},{-160,120}}, color={255,0,255})); + connect(yPumHeaWatPriNon.y, busPumHeaWatPriNon.y) + annotation (Line(points={{-82,40},{-160,40},{-160,80}}, color={0,0,127})); + connect(y1BoiCon.y[1], busBoiCon.y1) annotation (Line(points={{-142,200},{ + -240,200},{-240,160}}, + color={255,0,255})); + connect(THeaWatConSupSet.y, rep.u) + annotation (Line(points={{-142,240},{-148,240}}, color={0,0,127})); + connect(rep.y, busBoiCon.THeaWatSupSet) annotation (Line(points={{-172,240},{ + -240,240},{-240,160}}, + color={0,0,127})); + connect(THeaWatSupSet.y, rep1.u) + annotation (Line(points={{-82,220},{-88,220}}, color={0,0,127})); + connect(rep1.y, busBoiNon.THeaWatSupSet) annotation (Line(points={{-112,220}, + {-160,220},{-160,160}},color={0,0,127})); + connect(y1BoiNon.y[1], busBoiNon.y1) annotation (Line(points={{-82,180},{-160, + 180},{-160,160}}, color={255,0,255})); + connect(y1ValBoiConIso.y[1], busValBoiConIso.y1) annotation (Line(points={{-142, + 140},{-240,140},{-240,120}}, color={255,0,255})); + connect(yValHeaWatMinByp.y, busValHeaWatMinByp.y) annotation (Line(points={{ + -142,20},{-194,20},{-194,40},{-200,40}}, color={0,0,127})); + annotation ( + defaultComponentName="ctl", Documentation(info=" +

                      +This is an open loop controller providing control inputs +for the plant model + +Buildings.Templates.Plants.Boilers.HotWater.BoilerPlant. +It is only used for testing purposes. +

                      +", revisions=" +
                        +
                      • +April 28, 2023, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end OpenLoop; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/TypesTmp.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/TypesTmp.mo new file mode 100644 index 00000000000..f54b3b50b76 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/TypesTmp.mo @@ -0,0 +1,61 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components.Controls; +package TypesTmp + "Temporary type definitions to prepare G36 controller integration" + + package BoilerTypes + "Definitions for boiler types" + + constant Integer condensingBoiler = 1 + "Condensing boiler"; + + constant Integer nonCondensingBoiler = 2 + "Non-condensing boiler"; + + annotation ( + Documentation(info=" +

                      + This package provides constants that indicate the boiler type based on the + presence of flue gas heat recovery. + The boiler types are enumerated in an order that enables identification of stage + type as condensing or non-condensing. +

                      + ", + revisions=" +
                        +
                      • + May 21, 2020, by Karthik Devaprasad:
                        + First implementation. +
                      • +
                      + "), + Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); + end BoilerTypes; + + type PrimaryPumpSpeedControlTypes = enumeration( + localDP "Pump speed regulated to maintain local differential pressure setpoint", + remoteDP "Pump speed regulated to maintain remote differential pressure setpoint", + flowrate "Pump speed regulated to maintain flowrate through decoupler", + temperature "Pump speed regulated to maintain temperature difference between + primary and secondary loops") + "Definitions for primary pump speed control types"; + type SecondaryPumpSpeedControlTypes = enumeration( + localDP "Pump speed regulated to maintain local differential pressure setpoint", + remoteDP "Pump speed regulated to maintain remote differential pressure setpoint") + "Definitions for secondary pump speed control types"; + annotation (Documentation(info=" +

                      +FIXME: Temporary files to be deleted after merging +issue2180_BoilerPlant_MainController_oct_2021. +

                      +")); +end TypesTmp; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/package.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/package.mo new file mode 100644 index 00000000000..8fcfb9051b9 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/package.mo @@ -0,0 +1,12 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components; +package Controls "Controllers" + extends Modelica.Icons.VariantsPackage; + + annotation (Documentation(info=" +

                      +All control blocks that form the control sequence of a system are instantiated +into one single class, a so-called control section. +This package contains such control sections for hot water plant models. +

                      +")); +end Controls; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/package.order b/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/package.order new file mode 100644 index 00000000000..1fff8ab7291 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/package.order @@ -0,0 +1,4 @@ +Guideline36 +Guideline36Plugin +OpenLoop +TypesTmp diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Data/BoilerGroup.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/Data/BoilerGroup.mo new file mode 100644 index 00000000000..4fdb7d26499 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Data/BoilerGroup.mo @@ -0,0 +1,97 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components.Data; +record BoilerGroup "Record for boiler group model" + extends Modelica.Icons.Record; + + parameter Integer nBoi(final min=0) + "Number of boilers (as installed)" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.BoilerHotWaterModel typMod + "Type of boiler model (same model for all boilers)" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Buildings.Fluid.Data.Fuels.Generic fue + "Fuel type" + annotation (choicesAllMatching = true); + parameter Modelica.Units.SI.MassFlowRate mHeaWatBoi_flow_nominal[nBoi]( + each final min=0) + "HW mass flow rate - Each boiler" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpHeaWatBoi_nominal[nBoi]( + each final min=0, + each start=Buildings.Templates.Data.Defaults.dpHeaWatBoi) + "HW pressure drop - Each boiler" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.HeatFlowRate capBoi_nominal[nBoi]( + each final min=0) + "Heating capacity - Each boiler" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature THeaWatBoiSup_nominal[nBoi]( + each final min=260) + "(Highest) HW supply temperature - Each boiler" + annotation(Dialog(group="Nominal condition")); + // To avoid missing support for zero-sized record in case of nBoi=0 we use max(nBoi, 1). + replaceable parameter Buildings.Fluid.Boilers.Data.Generic per[max(nBoi, 1)] + constrainedby Buildings.Fluid.Boilers.Data.Generic( + each fue=fue, + Q_flow_nominal=if nBoi>0 then capBoi_nominal else {0}, + TIn_nominal=if nBoi>0 then THeaWatBoiSup_nominal - + capBoi_nominal / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq ./ mHeaWatBoi_flow_nominal + else {Buildings.Templates.Data.Defaults.THeaWatRet}, + m_flow_nominal=if nBoi>0 then mHeaWatBoi_flow_nominal else {0}, + dp_nominal=if nBoi>0 then dpHeaWatBoi_nominal else {0}) + "Boiler performance data - Each boiler" + annotation ( + Dialog(enable=typMod==Buildings.Templates.Components.Types.BoilerHotWaterModel.Table), + choicesAllMatching=true); + + parameter Buildings.Fluid.Types.EfficiencyCurves effCur= + Buildings.Fluid.Types.EfficiencyCurves.Constant + "Curve used to compute the efficiency (same curve type for all boilers)" + annotation (Dialog(enable= + typMod==Buildings.Templates.Components.Types.BoilerHotWaterModel.Polynomial)); + parameter Real a[nBoi, :] = fill({0.9}, nBoi) + "Coefficients for efficiency curve - Each boiler" + annotation (Dialog(enable= + typMod==Buildings.Templates.Components.Types.BoilerHotWaterModel.Polynomial)); + parameter Modelica.Units.SI.Temperature T_nominal[nBoi]=THeaWatBoiSup_nominal + "Temperature used to compute nominal efficiency (only used if efficiency curve depends on temperature) - Each boiler" + annotation (Dialog(enable= + typMod==Buildings.Templates.Components.Types.BoilerHotWaterModel.Polynomial and + (effCur==Buildings.Fluid.Types.EfficiencyCurves.QuadraticLinear))); + + annotation ( + defaultComponentName="datBoi", + Documentation(info=" +

                      +This record provides the set of sizing and operating parameters for +boiler group models that can be found within + +Buildings.Templates.Plants.Boilers.HotWater.Components.BoilerGroups. +

                      +

                      +Within this class, the design values declared at the top-level +are propagated by default to the performance data record per +under the assumption that the nominal conditions used for assessing the +performance data match the design conditions. +

                      +

                      +Note that, among those propagated parameters, the only meaningful parameter +is the chiller capacity that should be consistent with the value +used for performance assessment. +Regarding the nominal value of the condenser cooling fluid, it may +only yield a warning if an inconsistent value is used. +All other propagated parameters have no impact on the +computation of the chiller performance and are informative +only inside the performance data record. +

                      +

                      +The validation model + +Buildings.Templates.ChilledWaterPlants.Components.Validation.RecordChillerGroup +illustrates how the default bindings from this class may be +overwritten when redeclaring the performance data record, +and how different performance curves may be assigned to each chiller +inside the same group. +

                      +")); +end BoilerGroup; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Data/Controller.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/Data/Controller.mo new file mode 100644 index 00000000000..b97b5bb834e --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Data/Controller.mo @@ -0,0 +1,237 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components.Data; +record Controller "Record for plant controller" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.Controller typ + "Type of controller" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_boiCon + "Set to true if the plant includes condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_boiNon + "Set to true if the plant includes non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Integer nBoiCon + "Number of condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Integer nBoiNon + "Number of non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Integer nPumHeaWatPriCon + "Number of primary HW pumps - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Integer nPumHeaWatPriNon + "Number of primary HW pumps - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_varPumHeaWatPriCon + "Set to true for variable speed primary HW pumps - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_varPumHeaWatPriNon + "Set to true for variable speed primary HW pumps - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary typPumHeaWatSec + "Type of secondary HW pumps" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Integer nPumHeaWatSec + "Number of secondary HW pumps" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_valHeaWatMinBypCon + "Set to true if the plant has a HW minimum flow bypass valve - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_valHeaWatMinBypNon + "Set to true if the plant has a HW minimum flow bypass valve - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_senDpHeaWatLoc + "Set to true for local HW differential pressure sensor hardwired to plant controller" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Integer nSenDpHeaWatRem + "Number of remote HW differential pressure sensors used for HW pump speed control" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_senVHeaWatSec + "Set to true if secondary loop is equipped with a flow meter" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.PumpArrangement typArrPumHeaWatPriCon + "Type of primary HW pump arrangement - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.PumpArrangement typArrPumHeaWatPriNon + "Type of primary HW pump arrangement - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Modelica.Units.SI.Temperature THeaWatSup_nominal( + displayUnit="degC", + start=Buildings.Templates.Data.Defaults.THeaWatSup, + final min=273.15) + "Design (highest) HW supply temperature setpoint" + annotation(Dialog(group="Temperature setpoints")); + parameter Modelica.Units.SI.Temperature THeaWatConSup_nominal( + displayUnit="degC", + start=Buildings.Templates.Data.Defaults.THeaWatSup, + final min=273.15) + "Design (highest) HW supply temperature setpoint for condensing boilers" + annotation(Dialog(group="Temperature setpoints", enable=have_boiCon and have_boiNon)); + parameter Modelica.Units.SI.Temperature TOutLck( + displayUnit="degC", + final min=273.15)=Buildings.Templates.Data.Defaults.TOutHeaWatLck + "Outdoor air lockout temperature above which the plant is prevented from operating" + annotation(Dialog(group="Temperature setpoints", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36)); + + parameter Modelica.Units.SI.VolumeFlowRate VHeaWatBoiCon_flow_nominal[nBoiCon]( + start=fill(0.1, nBoiCon), + displayUnit=fill("L/s", nBoiCon), + final min=fill(0, nBoiCon)) + "Design HW volume flow rate - Each condensing boiler" + annotation(Dialog(group="Boiler flow setpoints", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + have_boiCon and have_valHeaWatMinBypCon)); + parameter Modelica.Units.SI.VolumeFlowRate VHeaWatBoiCon_flow_min[nBoiCon]( + start=fill(0.1, nBoiCon), + displayUnit=fill("L/s", nBoiCon), + final min=fill(0, nBoiCon)) + "Minimum HW volume flow rate - Each condensing boiler" + annotation(Dialog(group="Boiler flow setpoints", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + have_boiCon)); + parameter Modelica.Units.SI.VolumeFlowRate VHeaWatBoiNon_flow_nominal[nBoiNon]( + start=fill(0.1, nBoiNon), + displayUnit=fill("L/s", nBoiNon), + final min=fill(0, nBoiNon)) + "Design HW volume flow rate - Each non-condensing boiler" + annotation(Dialog(group="Boiler flow setpoints", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + have_boiNon + and have_valHeaWatMinBypNon)); + parameter Modelica.Units.SI.VolumeFlowRate VHeaWatBoiNon_flow_min[nBoiNon]( + start=fill(0.1, nBoiNon), + displayUnit=fill("L/s", nBoiNon), + final min=fill(0, nBoiNon)) + "Minimum HW volume flow rate - Each non-condensing boiler" + annotation(Dialog(group="Boiler flow setpoints", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + have_boiNon)); + parameter Real ratFirBoiCon_min[nBoiCon]( + start=fill(0.2, nBoiCon), + final unit=fill("1", nBoiCon)) + "Boiler minimum firing rate before cycling" + annotation(Dialog(group="Minimum boiler firing rate", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + have_boiCon)); + parameter Real ratFirBoiNon_min[nBoiNon]( + start=fill(0.2, nBoiNon), + final unit=fill("1", nBoiNon)) + "Boiler minimum firing rate before cycling" + annotation(Dialog(group="Minimum boiler firing rate", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + have_boiCon)); + parameter Modelica.Units.SI.HeatFlowRate capBoiCon_nominal[nBoiCon]( + start=fill(1, nBoiCon), + final min=fill(0, nBoiCon)) + "Design capacity - Each condensing boiler" + annotation(Dialog(group="Capacity", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36)); + parameter Modelica.Units.SI.HeatFlowRate capBoiNon_nominal[nBoiNon]( + start=fill(1, nBoiNon), + final min=fill(0, nBoiNon)) + "Design capacity - Each non-condensing boiler" + annotation(Dialog(group="Capacity", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36)); + parameter Modelica.Units.SI.VolumeFlowRate VHeaWatPriCon_flow_nominal( + start=0.01, + displayUnit="L/s", + final min=0) + "Design primary HW volume flow rate - Condensing boilers" + annotation(Dialog(group="Capacity", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + have_boiCon and + typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None and + have_varPumHeaWatPriCon and typArrPumHeaWatPriCon==Buildings.Templates.Components.Types.PumpArrangement.Headered)); + parameter Modelica.Units.SI.VolumeFlowRate VHeaWatPriNon_flow_nominal( + start=0.01, + displayUnit="L/s", + final min=0) + "Design primary HW volume flow rate - Non-condensing boilers" + annotation(Dialog(group="Capacity", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + have_boiNon and + typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None and + have_varPumHeaWatPriNon and typArrPumHeaWatPriCon==Buildings.Templates.Components.Types.PumpArrangement.Headered)); + parameter Modelica.Units.SI.VolumeFlowRate VHeaWatSec_flow_nominal( + start=0.01, + displayUnit="L/s", + final min=0) + "Design secondary HW volume flow rate" + annotation(Dialog(group="Capacity", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None and + have_senVHeaWatSec)); + + parameter Modelica.Units.SI.PressureDifference dpHeaWatRemSet_nominal[nSenDpHeaWatRem]( + start=fill(Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, nSenDpHeaWatRem), + final min=fill(0, nSenDpHeaWatRem)) + "Design (maximum) HW differential pressure setpoint - Remote sensor" + annotation(Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + ((have_varPumHeaWatPriCon or have_varPumHeaWatPriNon) and + typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None or + typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None))); + parameter Modelica.Units.SI.PressureDifference dpHeaWatLocSet_nominal( + start=Buildings.Templates.Data.Defaults.dpHeaWatLocSet_max, + final min=0) + "Design (maximum) HW differential pressure setpoint - Local sensor" + annotation(Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + have_senDpHeaWatLoc)); + parameter Real yPumHeaWatPri_min( + final unit="1", + final min=0, + final max=1)=0.1 + "Primary HW pump minimum speed" + annotation(Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + (have_varPumHeaWatPriCon or have_varPumHeaWatPriNon) and + typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None)); + parameter Real yPumHeaWatSec_min( + final unit="1", + final min=0, + final max=1)=0.1 + "Secondary HW pump minimum speed" + annotation(Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None)); + parameter Real yPumHeaWatPriSta_min[nSta]( + each final unit="1", + each final min=0, + each final max=1, + each start=0.3) + "Primary HW pump speed delivering minimum flow through boilers - Each plant stage" + annotation(Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + (have_varPumHeaWatPriCon or have_varPumHeaWatPriNon) and + typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None)); + + // FIXME: How are interchangeable units (lead/lag alternated) specified? + parameter Integer sta[:, nBoiCon + nBoiNon]( + each final min=0, + each final max=1) + "Staging matrix with plant stage as row index and boiler as column index (starting with condensing boilers): 0 for disabled, 1 for enabled" + annotation (Dialog(group="Plant staging")); + final parameter Integer nSta(start=1) = size(sta, 1) + "Number of plant stages" + annotation (Evaluate=true, Dialog(group="Plant staging")); + + annotation ( + defaultComponentName="datCtl", + Documentation(info=" +

                      +This record provides the set of sizing and operating parameters for +HW plant controllers that can be found within + +Buildings.Templates.Plants.Boilers.HotWater.Components.Controls. +

                      +

                      +For hybrid plants, units shall be indexed so that condensing boilers have the +lowest indices and non-condensing boilers have the highest indices. +

                      +")); +end Controller; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Data/package.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/Data/package.mo new file mode 100644 index 00000000000..f0711d3419e --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Data/package.mo @@ -0,0 +1,9 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components; +package Data "Records for design and operating parameters" + extends Modelica.Icons.MaterialPropertiesPackage; + annotation (Documentation(info=" +

                      +This package provides records for design and operating parameters. +

                      +")); +end Data; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Data/package.order b/Buildings/Templates/Plants/Boilers/HotWater/Components/Data/package.order new file mode 100644 index 00000000000..dce44713d13 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Data/package.order @@ -0,0 +1,2 @@ +BoilerGroup +Controller diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Interfaces/PartialController.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/Interfaces/PartialController.mo new file mode 100644 index 00000000000..5bde0ae6036 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Interfaces/PartialController.mo @@ -0,0 +1,294 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components.Interfaces; +block PartialController + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.Controller typ + "Type of controller" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_boiCon + "Set to true if the plant includes condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_boiNon + "Set to true if the plant includes non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Integer nBoiCon(start=0, final min=0) + "Number of condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=have_boiCon)); + parameter Integer nBoiNon(start=0, final min=0) + "Number of non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=have_boiNon)); + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary typPumHeaWatPriCon( + start=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.Variable) + "Type of primary HW pumps - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=have_boiCon)); + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary typPumHeaWatPriNon( + start=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.Variable) + "Type of primary HW pumps - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=have_boiNon)); + final parameter Boolean have_varPumHeaWatPriCon= + typPumHeaWatPriCon==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.FactoryVariable or + typPumHeaWatPriCon==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.Variable + "Set to true for variable speed primary HW pumps - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + final parameter Boolean have_varPumHeaWatPriNon= + typPumHeaWatPriNon==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.FactoryVariable or + typPumHeaWatPriNon==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.Variable + "Set to true for variable speed primary HW pumps - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary typPumHeaWatSec + "Type of secondary HW pumps" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Integer nPumHeaWatPriCon=nBoiCon + "Number of primary HW pumps - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=have_boiCon)); + parameter Integer nPumHeaWatPriNon=nBoiNon + "Number of primary HW pumps - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=have_boiNon)); + parameter Buildings.Templates.Components.Types.PumpArrangement typArrPumHeaWatPriCon( + start=Buildings.Templates.Components.Types.PumpArrangement.Headered) + "Type of primary HW pump arrangement - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=have_boiCon)); + parameter Buildings.Templates.Components.Types.PumpArrangement typArrPumHeaWatPriNon( + start=Buildings.Templates.Components.Types.PumpArrangement.Headered) + "Type of primary HW pump arrangement - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=have_boiNon)); + parameter Integer nPumHeaWatSec(start=0) + "Number of secondary HW pumps" + annotation (Evaluate=true, Dialog(group="Configuration", + enable=typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None)); + parameter Boolean have_valHeaWatMinBypCon + "Set to true if the plant has a HW minimum flow bypass valve - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_valHeaWatMinBypNon + "Set to true if the plant has a HW minimum flow bypass valve - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + + parameter Integer nAirHan( + final min=if typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 + and nEquZon==0 then 1 else 0, + start=0) + "Number of air handling units served by the plant" + annotation(Evaluate=true, Dialog(group="Configuration", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36)); + parameter Integer nEquZon( + final min=if typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + nAirHan==0 then 1 else 0, + start=0) + "Number of terminal units (zone equipment) served by the plant" + annotation(Evaluate=true, Dialog(group="Configuration", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36)); + + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.PrimaryOverflowMeasurement typMeaCtlHeaWatPri( + start=Buildings.Templates.Plants.Boilers.HotWater.Types.PrimaryOverflowMeasurement.TemperatureSupplySensor) + "Type of sensors for variable speed primary pumps control in primary-secondary plants" + annotation (Evaluate=true, Dialog(group="Configuration", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None and + (have_varPumHeaWatPriCon or have_varPumHeaWatPriNon))); + + final parameter Boolean have_senVHeaWatPriCon= + have_boiCon and ( + if have_varPumHeaWatPriCon and + typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None then + typMeaCtlHeaWatPri==Buildings.Templates.Plants.Boilers.HotWater.Types.PrimaryOverflowMeasurement.FlowDifference + else typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None) + "Set to true for primary HW flow sensor - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + final parameter Boolean have_senVHeaWatPriNon= + have_boiNon and ( + if have_varPumHeaWatPriNon and + typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None then + typMeaCtlHeaWatPri==Buildings.Templates.Plants.Boilers.HotWater.Types.PrimaryOverflowMeasurement.FlowDifference + else typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None) + "Set to true for primary HW flow sensor - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.SensorLocation locSenVHeaWatPri= + Buildings.Templates.Plants.Boilers.HotWater.Types.SensorLocation.Return + "Location of primary HW flow sensor" + annotation (Evaluate=true, Dialog(group="Configuration", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + have_senVHeaWatPriCon or have_senVHeaWatPriNon)); + final parameter Boolean have_senVHeaWatSec= + typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None and + typMeaCtlHeaWatPri==Buildings.Templates.Plants.Boilers.HotWater.Types.PrimaryOverflowMeasurement.FlowDifference + "Set to true for secondary HW flow sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.SensorLocation locSenVHeaWatSec= + Buildings.Templates.Plants.Boilers.HotWater.Types.SensorLocation.Return + "Location of secondary HW flow sensor" + annotation (Evaluate=true, Dialog(group="Configuration", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 and + have_senVHeaWatSec)); + + final parameter Boolean have_senTHeaWatPriSupCon= + have_boiCon and ( + if typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None then + typMeaCtlHeaWatPri==Buildings.Templates.Plants.Boilers.HotWater.Types.PrimaryOverflowMeasurement.TemperatureSupplySensor + else have_varPumHeaWatPriCon) + "Set to true for primary HW supply temperature sensor - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + final parameter Boolean have_senTHeaWatPriSupNon= + have_boiNon and ( + if typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None then + typMeaCtlHeaWatPri==Buildings.Templates.Plants.Boilers.HotWater.Types.PrimaryOverflowMeasurement.TemperatureSupplySensor + else have_varPumHeaWatPriNon) + "Set to true for primary HW supply temperature sensor - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + + final parameter Boolean have_senTHeaWatPlaRetCon= + have_boiCon and typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None + "Set to true for plant HW return temperature sensor - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + final parameter Boolean have_senTHeaWatPlaRetNon=have_boiNon + "Set to true for plant HW return temperature sensor - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration")); + + final parameter Boolean have_senTHeaWatSecSup= + typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None + "Set to true for secondary HW supply temperature sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + + final parameter Boolean have_senTHeaWatSecRet= + typPumHeaWatSec<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None + "Set to true for secondary HW return temperature sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + + parameter Boolean have_senDpHeaWatLoc=false + "Set to true for local HW differential pressure sensor hardwired to plant or pump controller" + annotation (Evaluate=true, Dialog(group="Configuration", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36)); + parameter Integer nSenDpHeaWatRem( + final min=if typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36 + then 1 else 0)=1 + "Number of remote HW differential pressure sensors used for HW pump speed control" + annotation (Evaluate=true, Dialog(group="Configuration", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Controller.Guideline36)); + + parameter Buildings.Templates.Plants.Boilers.HotWater.Components.Data.Controller dat( + final typ=typ, + final have_boiCon=have_boiCon, + final have_boiNon=have_boiNon, + final nBoiCon=nBoiCon, + final nBoiNon=nBoiNon, + final have_varPumHeaWatPriCon=have_varPumHeaWatPriCon, + final have_varPumHeaWatPriNon=have_varPumHeaWatPriNon, + final typArrPumHeaWatPriCon=typArrPumHeaWatPriCon, + final typArrPumHeaWatPriNon=typArrPumHeaWatPriNon, + final typPumHeaWatSec=typPumHeaWatSec, + final nPumHeaWatPriCon=nPumHeaWatPriCon, + final nPumHeaWatPriNon=nPumHeaWatPriNon, + final nPumHeaWatSec=nPumHeaWatSec, + final have_valHeaWatMinBypCon=have_valHeaWatMinBypCon, + final have_valHeaWatMinBypNon=have_valHeaWatMinBypNon, + final have_senDpHeaWatLoc=have_senDpHeaWatLoc, + final nSenDpHeaWatRem=nSenDpHeaWatRem, + final have_senVHeaWatSec=have_senVHeaWatSec) + "Parameter record for controller"; + + Buildings.Templates.Plants.Boilers.HotWater.Interfaces.Bus bus + "Plant control bus" annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-260,0}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-100,0}))); + Buildings.Templates.AirHandlersFans.Interfaces.Bus busAirHan[nAirHan] + if nAirHan>0 + "Air handling unit control bus" + annotation (Placement(transformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={260,140}), iconTransformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,60}))); + Buildings.Templates.ZoneEquipment.Interfaces.Bus busEquZon[nEquZon] + if nEquZon>0 + "Terminal unit control bus" + annotation (Placement(transformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={260,-140}), + iconTransformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,-60}))); + +protected + Buildings.Templates.Components.Interfaces.Bus busBoiCon[nBoiCon] + if have_boiCon "Boiler control bus - Condensing boilers" annotation ( + Placement(transformation(extent={{-260,140},{-220,180}}), + iconTransformation(extent={{-466,50},{-426,90}}))); + Buildings.Templates.Components.Interfaces.Bus busBoiNon[nBoiNon] if have_boiNon + "Boiler control bus - Non-condensing boilers" + annotation (Placement(transformation(extent={{-180,140},{-140,180}}), + iconTransformation(extent={{-466,50},{-426,90}}))); + Buildings.Templates.Components.Interfaces.Bus busValBoiConIso[nBoiCon] + if have_boiCon "Boiler isolation valve control bus - Condensing boilers" + annotation (Placement(transformation(extent={{-260,100},{-220,140}}), + iconTransformation(extent={{-466,50},{-426,90}}))); + Buildings.Templates.Components.Interfaces.Bus busValBoiNonIso[nBoiNon] if have_boiNon + "Boiler isolation valve control bus - Non-condensing boilers" + annotation (Placement(transformation(extent={{-180,100},{-140,140}}), + iconTransformation(extent={{-466,50},{-426,90}}))); + Buildings.Templates.Components.Interfaces.Bus busPumHeaWatPriCon + if have_boiCon "Primary HW pump control bus - Condensing boilers" + annotation (Placement(transformation(extent={{-260,60},{-220,100}}), + iconTransformation(extent={{-466,50},{-426,90}}))); + Buildings.Templates.Components.Interfaces.Bus busPumHeaWatPriNon if have_boiNon + "Primary HW pump control bus - Condensing boilers" + annotation (Placement(transformation(extent={{-180,60},{-140,100}}), + iconTransformation(extent={{-466,50},{-426,90}}))); + Buildings.Templates.Components.Interfaces.Bus busPumHeaWatSec + if typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Centralized + "Secondary HW pump control bus" + annotation (Placement(transformation(extent={{-220,-60},{-180,-20}}), + iconTransformation(extent={{-466,50},{-426,90}}))); + Buildings.Templates.Components.Interfaces.Bus busValHeaWatMinByp + if have_valHeaWatMinBypCon or have_valHeaWatMinBypNon + "HW minimum flow bypass valve control bus" + annotation (Placement(transformation(extent={{-220,20},{-180,60}}), + iconTransformation(extent={{-466,50},{-426,90}}))); +equation + connect(busBoiCon, bus.boiCon) annotation (Line( + points={{-240,160},{-220,160},{-220,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busValBoiConIso, bus.valBoiConIso) annotation (Line( + points={{-240,120},{-220,120},{-220,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busPumHeaWatPriCon, bus.pumHeaWatPriCon) annotation (Line( + points={{-240,80},{-220,80},{-220,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busPumHeaWatSec, bus.pumHeaWatSec) annotation (Line( + points={{-200,-40},{-200,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busPumHeaWatPriNon, bus.pumHeaWatPriNon) annotation (Line( + points={{-160,80},{-180,80},{-180,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busValBoiNonIso, bus.valBoiNonIso) annotation (Line( + points={{-160,120},{-180,120},{-180,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busBoiNon, bus.boiNon) annotation (Line( + points={{-160,160},{-180,160},{-180,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busValHeaWatMinByp, bus.valHeaWatMinByp) annotation (Line( + points={{-200,40},{-200,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-260,-380},{260,380}})), + Documentation(info=" +

                      +This partial class provides a standard interface for boiler plant controllers. +

                      +", revisions=" +
                        +
                      • +April 28, 2023, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end PartialController; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Interfaces/package.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/Interfaces/package.mo new file mode 100644 index 00000000000..25677852ecd --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Interfaces/package.mo @@ -0,0 +1,9 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components; +package Interfaces "Interface classes" + extends Modelica.Icons.InterfacesPackage; + annotation (Documentation(info=" +

                      +This package contains interface classes. +

                      +")); +end Interfaces; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Interfaces/package.order b/Buildings/Templates/Plants/Boilers/HotWater/Components/Interfaces/package.order new file mode 100644 index 00000000000..d2438eaafd8 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Interfaces/package.order @@ -0,0 +1 @@ +PartialController diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupPolynomial.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupPolynomial.mo new file mode 100644 index 00000000000..a7d5b65b72c --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupPolynomial.mo @@ -0,0 +1,187 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components.Validation; +model BoilerGroupPolynomial "Validation model for boiler group" + extends Modelica.Icons.Example; + + replaceable package Medium=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "HW medium"; + + parameter Integer nBoi(final min=0) = 3 + "Number of boilers"; + final parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal= + sum(datBoi.mHeaWatBoi_flow_nominal) + "HW mass flow rate" + annotation (Dialog(group="Nominal condition")); + + parameter Buildings.Templates.Plants.Boilers.HotWater.Components.Data.BoilerGroup datBoi( + final typMod=boi.typMod, + final nBoi=nBoi, + fue=Buildings.Fluid.Data.Fuels.NaturalGasLowerHeatingValue(), + mHeaWatBoi_flow_nominal=datBoi.capBoi_nominal/ + (Buildings.Templates.Data.Defaults.THeaWatSup - Buildings.Templates.Data.Defaults.THeaWatRet) / + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, + capBoi_nominal=fill(1000E3, nBoi), + dpHeaWatBoi_nominal=fill(Buildings.Templates.Data.Defaults.dpHeaWatBoi, nBoi), + THeaWatBoiSup_nominal=fill(Buildings.Templates.Data.Defaults.THeaWatSup, nBoi)) + "Design and operating parameters" + annotation (Placement(transformation(extent={{100,100},{120,120}}))); + parameter Buildings.Templates.Components.Data.PumpMultiple datPumHeaWatPri( + final typ=Buildings.Templates.Components.Types.Pump.Multiple, + final nPum=nBoi, + final m_flow_nominal=fill(mHeaWat_flow_nominal/datPumHeaWatPri.nPum, datPumHeaWatPri.nPum), + dp_nominal=datBoi.dpHeaWatBoi_nominal .+ + Buildings.Templates.Data.Defaults.dpValChe .+ + Buildings.Templates.Data.Defaults.dpValIso) + "Parameter record for primary HW pumps" + annotation (Placement(transformation(extent={{100,60},{120,80}}))); + parameter Modelica.Units.SI.Time tau=10 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + 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.Templates.Plants.Boilers.HotWater.Components.BoilerGroup boi( + redeclare final package Medium=Medium, + final nBoi=nBoi, + typMod=Buildings.Templates.Components.Types.BoilerHotWaterModel.Polynomial, + final is_con=true, + typArrPumHeaWatPri=Buildings.Templates.Components.Types.PumpArrangement.Headered, + final dat=datBoi, + final energyDynamics=energyDynamics) + "Boiler group" + annotation (Placement(transformation(extent={{-120,-100},{-40,20}}))); + Buildings.Templates.Components.Pumps.Multiple pumHeaWatPri( + have_var=false, + have_valChe=true, + final nPum=nBoi, + final dat=datPumHeaWatPri, + final energyDynamics=energyDynamics, + final tau=tau) + "Primary HW pumps" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Buildings.Templates.Components.Routing.MultipleToMultiple inlPumHeaWatPri( + redeclare final package Medium=Medium, + final nPorts_a=nBoi, + final have_comLeg=boi.typArrPumHeaWatPri==Buildings.Templates.Components.Types.PumpArrangement.Headered, + final m_flow_nominal=mHeaWat_flow_nominal, + final energyDynamics=energyDynamics) + "Primary HW pumps inlet manifold" + annotation (Placement(transformation(extent={{-30,-10},{-10,10}}))); + Buildings.Templates.Components.Routing.MultipleToSingle outPumHeaWatPri( + redeclare final package Medium=Medium, + final nPorts=nBoi, + final m_flow_nominal=mHeaWat_flow_nominal, + final energyDynamics=energyDynamics) + "Primary HW pumps outlet manifold" + annotation (Placement(transformation(extent={{30,-10},{50,10}}))); + Fluid.Sensors.TemperatureTwoPort THeaWatSup( + redeclare final package Medium=Medium, + final m_flow_nominal=mHeaWat_flow_nominal) + "HW supply temperature" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + Fluid.Sensors.MassFlowRate mHeaWat_flow( + redeclare final package Medium=Medium) "HW mass flow rate" + annotation (Placement(transformation(extent={{90,-10},{110,10}}))); + Fluid.Sources.Boundary_pT bouHeaWat( + redeclare final package Medium = Medium, + p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal, + T=Buildings.Templates.Data.Defaults.THeaWatRet, + nPorts=2) "Boundary conditions for HW distribution system" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=-90, + origin={60,-100}))); + Fluid.Sensors.TemperatureTwoPort THeaWatRet( + redeclare final package Medium =Medium, + final m_flow_nominal=mHeaWat_flow_nominal) + "HW return temperature" + annotation (Placement(transformation(extent={{30,-90},{10,-70}}))); + Buildings.Templates.Components.Routing.SingleToMultiple inlBoi( + redeclare final package Medium = Medium, + final nPorts=nBoi, + final m_flow_nominal=mHeaWat_flow_nominal, + final energyDynamics=energyDynamics) + "Boiler group inlet manifold" + annotation (Placement(transformation(extent={{-10,-90},{-30,-70}}))); + Controls.OpenLoop ctl( + final have_boiCon=true, + final have_boiNon=false, + final nBoiCon=nBoi, + final nBoiNon=0, + final typPumHeaWatPriCon=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.Variable, + final typArrPumHeaWatPriCon=boi.typArrPumHeaWatPri, + final typPumHeaWatSec=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None, + have_valHeaWatMinBypCon=false, + have_valHeaWatMinBypNon=false, + dat( + THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSup, + sta={fill(0, nBoi)})) + "Controller" + annotation (Placement(transformation(extent={{-10,110},{10,130}}))); + + Buildings.Templates.Plants.Boilers.HotWater.Interfaces.Bus busPla + "Plant control bus" + annotation (Placement(transformation(extent={{-100,60},{-60,100}}), + iconTransformation(extent={{-310,60},{-270,100}}))); + +equation + connect(inlPumHeaWatPri.ports_b, pumHeaWatPri.ports_a) + annotation (Line(points={{-10,0},{0,0}}, color={0,127,255})); + connect(boi.ports_bHeaWat, inlPumHeaWatPri.ports_a) + annotation (Line(points={{-40,2.85714},{-36,2.85714},{-36,0},{-30,0}}, + color={0,127,255})); + connect(outPumHeaWatPri.port_b, THeaWatSup.port_a) + annotation (Line(points={{50,0},{60,0}}, color={0,127,255})); + connect(THeaWatSup.port_b, mHeaWat_flow.port_a) + annotation (Line(points={{80,0},{90,0}}, color={0,127,255})); + connect(inlBoi.ports_b, boi.ports_aHeaWat) + annotation (Line(points={{-30,-80},{-36,-80},{-36,-82.8571},{-40,-82.8571}}, + color={0,127,255})); + connect(THeaWatRet.port_b, inlBoi.port_a) + annotation (Line(points={{10,-80},{-10,-80}}, color={0,127,255})); + connect(ctl.bus, busPla) annotation (Line( + points={{-10,120},{-80,120},{-80,80}}, + color={255,204,51}, + thickness=0.5)); + connect(pumHeaWatPri.ports_b, outPumHeaWatPri.ports_a) + annotation (Line(points={{20,0},{30,0}}, color={0,127,255})); + connect(mHeaWat_flow.port_b, bouHeaWat.ports[1]) annotation (Line(points={{110,0}, + {120,0},{120,-80},{59,-80},{59,-90}}, color={0,127,255})); + connect(bouHeaWat.ports[2], THeaWatRet.port_a) annotation (Line(points={{61,-90}, + {61,-80},{30,-80}}, color={0,127,255})); + connect(busPla, boi.bus) annotation (Line( + points={{-80,80},{-80,20}}, + color={255,204,51}, + thickness=0.5)); + connect(busPla.pumHeaWatPriCon, pumHeaWatPri.bus) annotation (Line( + points={{-80,80},{10,80},{10,10}}, + color={255,204,51}, + thickness=0.5)); + annotation ( + Diagram(coordinateSystem(extent={{-140,-140},{140,140}})), + experiment( + StopTime=2000, + Tolerance=1e-06), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupPolynomial.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This model validates the boiler group model + +Buildings.Templates.Plants.Boilers.HotWater.Components.BoilerGroup +in the case where a polynomial is used to represent the boiler efficiency. +The HW supply temperature setpoint, the HW return temperature and the +primary HW pump speed are fixed at their design value when the boilers are +enabled. +

                      +

                      +The model illustrates a bug in Dymola (#SR01004314-01). +The parameter bindings for pumHeaWatPri.dat are not properly interpreted +and the start value is used for all those parameters without any warning being issued. +Hence, the total HW flow rate differs from its design value. +OCT properly propagates the parameter values from the composite component binding. +

                      +")); +end BoilerGroupPolynomial; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupTable.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupTable.mo new file mode 100644 index 00000000000..3a6a526dfbf --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupTable.mo @@ -0,0 +1,32 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components.Validation; +model BoilerGroupTable "Validation model for boiler group" + extends Buildings.Templates.Plants.Boilers.HotWater.Components.Validation.BoilerGroupPolynomial( + boi(typMod=Buildings.Templates.Components.Types.BoilerHotWaterModel.Table)); + annotation ( + Diagram(coordinateSystem(extent={{-220,-220},{220,220}})), + experiment( + StopTime=2000, + Tolerance=1e-06), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupTable.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This model validates the boiler group model + +Buildings.Templates.Plants.Boilers.HotWater.Components.BoilerGroup +in the case where a lookup table is used to represent the boiler efficiency. +The HW supply temperature setpoint, the HW return temperature and the +primary HW pump speed are fixed at their design value when the boilers are +enabled. +

                      +

                      +The model illustrates a bug in Dymola (#SR01004314-01). +The parameter bindings for pumHeaWatPri.dat are not properly interpreted +and the start value is used for all those parameters without any warning being issued. +Hence, the total HW flow rate differs from its design value. +OCT properly propagates the parameter values from the composite component binding. +

                      +")); + +end BoilerGroupTable; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Validation/package.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/Validation/package.mo new file mode 100644 index 00000000000..9a994896567 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Validation/package.mo @@ -0,0 +1,12 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Components; +package Validation "Package with validation models" + extends Modelica.Icons.ExamplesPackage; + + annotation (Documentation(info=" +

                      +This package contains validation models for the classes within + +Buildings.Templates.Plants.Boilers.HotWater.Components. +

                      +")); +end Validation; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/Validation/package.order b/Buildings/Templates/Plants/Boilers/HotWater/Components/Validation/package.order new file mode 100644 index 00000000000..dd4566c1fb5 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/Validation/package.order @@ -0,0 +1,2 @@ +BoilerGroupPolynomial +BoilerGroupTable diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/package.mo b/Buildings/Templates/Plants/Boilers/HotWater/Components/package.mo new file mode 100644 index 00000000000..8a4b8872efb --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/package.mo @@ -0,0 +1,13 @@ +within Buildings.Templates.Plants.Boilers.HotWater; +package Components "Package with component models" + extends Modelica.Icons.VariantsPackage; + + annotation (Documentation(info=" +

                      +This package contains component models that are used in the templates +within + +Buildings.Templates.Plants.Boilers.HotWater. +

                      +")); +end Components; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Components/package.order b/Buildings/Templates/Plants/Boilers/HotWater/Components/package.order new file mode 100644 index 00000000000..9de18d36d82 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Components/package.order @@ -0,0 +1,5 @@ +BoilerGroup +Controls +Data +Validation +Interfaces diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Data/BoilerPlant.mo b/Buildings/Templates/Plants/Boilers/HotWater/Data/BoilerPlant.mo new file mode 100644 index 00000000000..099a72e1a61 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Data/BoilerPlant.mo @@ -0,0 +1,174 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Data; +record BoilerPlant "Record for HW plant model" + extends Modelica.Icons.Record; + + parameter Boolean have_boiCon + "Set to true if the plant includes condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_boiNon + "Set to true if the plant includes non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Integer nBoiCon + "Number of condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Integer nBoiNon + "Number of non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.BoilerHotWaterModel typMod + "Type of boiler model" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary typPumHeaWatSec + "Type of secondary HW pumps" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Integer nPumHeaWatPriCon + "Number of primary HW pumps - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Integer nPumHeaWatPriNon + "Number of primary HW pumps - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Integer nPumHeaWatSec + "Number of secondary HW pumps" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_valHeaWatMinBypCon + "Set to true if the condensing boiler group has a HW minimum flow bypass valve" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_valHeaWatMinBypNon + "Set to true if the non-condensing boiler group has a HW minimum flow bypass valve" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_senDpHeaWatLoc + "Set to true for local HW differential pressure sensor hardwired to plant controller" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Integer nSenDpHeaWatRem + "Number of remote HW differential pressure sensors used for HW pump speed control" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_senVHeaWatSec + "Set to true if secondary loop is equipped with a flow meter" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.PumpArrangement typArrPumHeaWatPriCon + "Type of primary HW pump arrangement - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.PumpArrangement typArrPumHeaWatPriNon + "Type of primary HW pump arrangement - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_varPumHeaWatPriCon + "Set to true for variable speed primary HW pumps - Condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_varPumHeaWatPriNon + "Set to true for variable speed primary HW pumps - Non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.Controller typCtl + "Type of controller" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Modelica.Units.SI.Density rho_default= + Modelica.Media.Water.ConstantPropertyLiquidWater.d_const + "HW default density" + annotation(Dialog(enable=false)); + + parameter Buildings.Templates.Plants.Boilers.HotWater.Components.Data.Controller ctl( + final typ=typCtl, + final have_boiCon=have_boiCon, + final have_boiNon=have_boiNon, + final nBoiCon=nBoiCon, + final nBoiNon=nBoiNon, + final nPumHeaWatPriCon=nPumHeaWatPriCon, + final nPumHeaWatPriNon=nPumHeaWatPriNon, + final have_varPumHeaWatPriCon=have_varPumHeaWatPriCon, + final have_varPumHeaWatPriNon=have_varPumHeaWatPriNon, + final typPumHeaWatSec=typPumHeaWatSec, + final nPumHeaWatSec=nPumHeaWatSec, + final have_valHeaWatMinBypCon=have_valHeaWatMinBypCon, + final have_valHeaWatMinBypNon=have_valHeaWatMinBypNon, + final have_senDpHeaWatLoc=have_senDpHeaWatLoc, + final nSenDpHeaWatRem=nSenDpHeaWatRem, + final have_senVHeaWatSec=have_senVHeaWatSec, + final typArrPumHeaWatPriCon=typArrPumHeaWatPriCon, + final typArrPumHeaWatPriNon=typArrPumHeaWatPriNon) + "Controller" + annotation(Dialog(group="Controls")); + + parameter Buildings.Templates.Plants.Boilers.HotWater.Components.Data.BoilerGroup boiCon( + final nBoi=nBoiCon, + final typMod=typMod, + capBoi_nominal=ctl.capBoiCon_nominal, + THeaWatBoiSup_nominal=fill(if have_boiCon and have_boiNon then ctl.THeaWatConSup_nominal + else ctl.THeaWatSup_nominal, nBoiCon)) + "Condensing boilers" + annotation(Dialog(group="Boilers", enable=have_boiCon)); + + parameter Buildings.Templates.Plants.Boilers.HotWater.Components.Data.BoilerGroup boiNon( + final nBoi=nBoiNon, + final typMod=typMod, + capBoi_nominal=ctl.capBoiNon_nominal, + THeaWatBoiSup_nominal=fill(ctl.THeaWatSup_nominal, nBoiNon)) + "Non-condensing boilers" + annotation(Dialog(group="Boilers", enable=have_boiNon)); + + parameter Buildings.Templates.Components.Data.PumpMultiple pumHeaWatPriCon( + final nPum=nPumHeaWatPriCon, + final rho_default=rho_default, + final typ=if have_boiCon then Buildings.Templates.Components.Types.Pump.Multiple + else Buildings.Templates.Components.Types.Pump.None, + m_flow_nominal=fill(if have_boiCon then sum(boiCon.mHeaWatBoi_flow_nominal) / + max(nPumHeaWatPriCon, 1) else 0, nPumHeaWatPriCon)) + "Primary HW pumps - Condensing boilers" + annotation(Dialog(group="Primary HW loop", enable=have_boiCon)); + parameter Buildings.Templates.Components.Data.PumpMultiple pumHeaWatPriNon( + final nPum=nPumHeaWatPriNon, + final rho_default=rho_default, + final typ=if have_boiNon then Buildings.Templates.Components.Types.Pump.Multiple + else Buildings.Templates.Components.Types.Pump.None, + m_flow_nominal=fill(if have_boiNon then sum(boiNon.mHeaWatBoi_flow_nominal) / + max(nPumHeaWatPriNon, 1) else 0, nPumHeaWatPriNon)) + "Primary HW pumps - Non-condensing boilers" + annotation(Dialog(group="Primary HW loop", enable=have_boiNon)); + parameter Buildings.Templates.Components.Data.Valve valHeaWatMinBypCon( + final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating, + m_flow_nominal= + if have_valHeaWatMinBypCon then max(ctl.VHeaWatBoiCon_flow_min) * rho_default + else 0, + dpValve_nominal=Buildings.Templates.Data.Defaults.dpValBypMin) + "HW minimum flow bypass valve - Condensing boilers" + annotation(Dialog(group="Primary HW loop", enable=have_valHeaWatMinBypCon)); + parameter Buildings.Templates.Components.Data.Valve valHeaWatMinBypNon( + final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating, + m_flow_nominal= + if have_valHeaWatMinBypNon then max(ctl.VHeaWatBoiNon_flow_min) * rho_default + else 0, + dpValve_nominal=Buildings.Templates.Data.Defaults.dpValBypMin) + "HW minimum flow bypass valve - Non-condensing boilers" + annotation(Dialog(group="Primary HW loop", enable=have_valHeaWatMinBypNon)); + + parameter Buildings.Templates.Components.Data.PumpMultiple pumHeaWatSec( + final nPum=nPumHeaWatSec, + final rho_default=rho_default, + final typ=if typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Centralized + then Buildings.Templates.Components.Types.Pump.Multiple + else Buildings.Templates.Components.Types.Pump.None) + "Secondary HW pumps" + annotation(Dialog(group="Secondary HW loop", + enable=typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Centralized)); + + annotation ( + defaultComponentName="dat", + Documentation(info=" +

                      +This record provides the set of sizing and operating parameters for +the boiler plant model + +Buildings.Templates.Plants.Boilers.HotWater.BoilerPlant. +

                      +

                      +Most of the parameters should be assigned through the sub-record +dedicated to the controller. +All parameters that are also needed to parameterize other plant +components are propagated from the controller sub-record +to the corresponding equipment sub-records. +Note that those parameter bindings are not final so they may be +overwritten in case a component is parameterized at nominal +conditions that differ from the design conditions specified +in the controller sub-record. +

                      +")); + +end BoilerPlant; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Data/package.mo b/Buildings/Templates/Plants/Boilers/HotWater/Data/package.mo new file mode 100644 index 00000000000..311d7ef62fb --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Data/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.Plants.Boilers.HotWater; +package Data "Records for design and operating parameters" + extends Modelica.Icons.MaterialPropertiesPackage; + + annotation (Documentation(info=" +

                      +This package provides records for design and operating parameters. +

                      +")); +end Data; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Data/package.order b/Buildings/Templates/Plants/Boilers/HotWater/Data/package.order new file mode 100644 index 00000000000..52bc0217dee --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Data/package.order @@ -0,0 +1 @@ +BoilerPlant diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Interfaces/Bus.mo b/Buildings/Templates/Plants/Boilers/HotWater/Interfaces/Bus.mo new file mode 100644 index 00000000000..d01aa204e58 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Interfaces/Bus.mo @@ -0,0 +1,14 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Interfaces; +expandable connector Bus "Control bus for HW plant" + extends Modelica.Icons.SignalBus; + + annotation ( + defaultComponentName="bus", Documentation(info=" +

                      +This expandable connector provides a standard interface for +all control signals of the hot water plant models within + +Buildings.Templates.Plants.Boilers.HotWater. +

                      +")); +end Bus; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Interfaces/PartialBoilerPlant.mo b/Buildings/Templates/Plants/Boilers/HotWater/Interfaces/PartialBoilerPlant.mo new file mode 100644 index 00000000000..89186b4d50a --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Interfaces/PartialBoilerPlant.mo @@ -0,0 +1,478 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Interfaces; +partial model PartialBoilerPlant + "Interface class for HW boiler plant" + replaceable package Medium=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "HW medium"; + + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler typ + "Type of boilers" + annotation (Evaluate=true, Dialog(group="Boilers")); + parameter Buildings.Templates.Components.Types.BoilerHotWaterModel typMod= + Buildings.Templates.Components.Types.BoilerHotWaterModel.Polynomial + "Type of boiler model" + annotation (Evaluate=true, Dialog(group="Boilers")); + + final parameter Boolean have_boiCon = + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.Condensing + or typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.Hybrid + "Set to true if the plant includes condensing boilers" + annotation (Evaluate=true); + final parameter Boolean have_boiNon= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.NonCondensing + or typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.Hybrid + "Set to true if the plant includes non-condensing boilers" + annotation (Evaluate=true); + + parameter Integer nBoiCon_select(start=0) + "Number of condensing boilers" + annotation (Evaluate=true, Dialog(group="Boilers", + enable=have_boiCon)); + parameter Integer nBoiNon_select(start=0) + "Number of non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Boilers", + enable=have_boiNon)); + final parameter Integer nBoiCon = if have_boiCon then nBoiCon_select else 0 + "Number of condensing boilers" + annotation (Evaluate=true, Dialog(group="Boilers")); + final parameter Integer nBoiNon = if have_boiNon then nBoiNon_select else 0 + "Number of non-condensing boilers" + annotation (Evaluate=true, Dialog(group="Boilers")); + + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary typPumHeaWatPriCon( + start=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.Variable) + "Type of primary HW pumps" + annotation (Evaluate=true, Dialog(group="Primary HW loop - Condensing boilers", + enable=have_boiCon)); + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary typPumHeaWatPriNon( + start=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.Variable) + "Type of primary HW pumps" + annotation (Evaluate=true, Dialog(group="Primary HW loop - Non-condensing boilers", + enable=have_boiNon)); + + final parameter Boolean have_bypHeaWatFixCon= + if typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.Condensing then + typPumHeaWatSec <> Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None + else true + "Set to true if the condensing boiler group has a fixed HW bypass" + annotation(Evaluate=true, Dialog(group="Primary HW loop - Condensing boilers")); + final parameter Boolean have_bypHeaWatFixNon= + if typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.NonCondensing then + typPumHeaWatSec <> Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None + else true + "Set to true if the non-condensing boiler group has a fixed HW bypass" + annotation(Evaluate=true, Dialog(group="Primary HW loop - Non-condensing boilers")); + // FIXME: Add condition for boilers with non-zero minimum flow. + final parameter Boolean have_valHeaWatMinBypCon= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.Condensing and + have_varPumHeaWatPriCon and + typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None + "Set to true if the condensing boiler group has a HW minimum flow bypass valve" + annotation(Evaluate=true, Dialog(group="Primary HW loop - Condensing boilers")); + // FIXME: Add condition for boilers with non-zero minimum flow. + final parameter Boolean have_valHeaWatMinBypNon= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.NonCondensing and + have_varPumHeaWatPriNon and + typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None + "Set to true if the non-condensing boiler group has a HW minimum flow bypass valve" + annotation(Evaluate=true, Dialog(group="Primary HW loop - Non-condensing boilers")); + + parameter Integer nPumHeaWatPriCon_select( + start=0, + final min=0)=nBoiCon + "Number of primary HW pumps" + annotation (Evaluate=true, Dialog(group="Primary HW loop - Condensing boilers", + enable=have_boiCon and + typArrPumHeaWatPriCon==Buildings.Templates.Components.Types.PumpArrangement.Headered)); + final parameter Integer nPumHeaWatPriCon= + if have_boiCon then ( + if typArrPumHeaWatPriCon==Buildings.Templates.Components.Types.PumpArrangement.Headered + then nPumHeaWatPriCon_select + else nBoiCon) + else 0 + "Number of primary HW pumps" + annotation (Evaluate=true, Dialog(group="Primary HW loop - Condensing boilers")); + parameter Buildings.Templates.Components.Types.PumpArrangement typArrPumHeaWatPriCon_select( + start=Buildings.Templates.Components.Types.PumpArrangement.Headered) + "Type of primary HW pump arrangement" + annotation (Evaluate=true, Dialog(group="Primary HW loop - Condensing boilers", + enable=have_boiCon and + typPumHeaWatPriCon<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.FactoryVariable and + typPumHeaWatPriCon<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.FactoryConstant)); + final parameter Buildings.Templates.Components.Types.PumpArrangement typArrPumHeaWatPriCon= + if have_boiCon and + typPumHeaWatPriCon<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.FactoryVariable and + typPumHeaWatPriCon<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.FactoryConstant + then typArrPumHeaWatPriCon_select else + Buildings.Templates.Components.Types.PumpArrangement.Dedicated + "Type of primary HW pump arrangement" + annotation (Evaluate=true, Dialog(group="Primary HW loop - Condensing boilers")); + final parameter Boolean have_varPumHeaWatPriCon= + typPumHeaWatPriCon==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.FactoryVariable or + typPumHeaWatPriCon==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.Variable + "Set to true for variable speed primary HW pumps" + annotation (Evaluate=true, Dialog(group="Primary HW loop - Condensing boilers")); + + parameter Integer nPumHeaWatPriNon_select( + start=0, + final min=0)=nBoiNon + "Number of primary HW pumps" + annotation (Evaluate=true, Dialog(group="Primary HW loop - Non-condensing boilers", + enable=have_boiNon and + typArrPumHeaWatPriNon==Buildings.Templates.Components.Types.PumpArrangement.Headered)); + final parameter Integer nPumHeaWatPriNon= + if have_boiNon then ( + if typArrPumHeaWatPriNon==Buildings.Templates.Components.Types.PumpArrangement.Headered + then nPumHeaWatPriNon_select + else nBoiNon) + else 0 + "Number of primary HW pumps" + annotation (Evaluate=true, Dialog(group="Primary HW loop - Non-condensing boilers", + enable=have_boiNon and + typArrPumHeaWatPriNon==Buildings.Templates.Components.Types.PumpArrangement.Headered)); + parameter Buildings.Templates.Components.Types.PumpArrangement typArrPumHeaWatPriNon_select( + start=Buildings.Templates.Components.Types.PumpArrangement.Headered) + "Type of primary HW pump arrangement" + annotation (Evaluate=true, Dialog(group="Primary HW loop - Non-condensing boilers", + enable=have_boiNon and + typPumHeaWatPriNon<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.FactoryVariable and + typPumHeaWatPriNon<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.FactoryConstant)); + final parameter Buildings.Templates.Components.Types.PumpArrangement typArrPumHeaWatPriNon= + if have_boiNon and + typPumHeaWatPriNon<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.FactoryVariable and + typPumHeaWatPriNon<>Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.FactoryConstant then + typArrPumHeaWatPriNon_select else Buildings.Templates.Components.Types.PumpArrangement.Dedicated + "Type of primary HW pump arrangement" + annotation (Evaluate=true, Dialog(group="Primary HW loop - Non-condensing boilers")); + final parameter Boolean have_varPumHeaWatPriNon= + typPumHeaWatPriNon==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.FactoryVariable or + typPumHeaWatPriNon==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.Variable + "Set to true for variable speed primary HW pumps" + annotation (Evaluate=true, Dialog(group="Primary HW loop - Non-condensing boilers")); + + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary typPumHeaWatSec1_select( + start=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None) + "Type of secondary HW pumps" + annotation (Evaluate=true, Dialog(group="Secondary HW loop", enable= + typ<>Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.Hybrid), + choices( + choice=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None + "No secondary pumps (primary-only)", + choice=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Centralized + "Variable secondary centralized")); + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary typPumHeaWatSec2_select= + Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Centralized + "Type of secondary HW pumps" + annotation (Evaluate=true, Dialog(group="Secondary HW loop", enable= + typ==Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.Hybrid), + choices( + choice=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Centralized + "Variable secondary centralized")); + final parameter Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary typPumHeaWatSec= + if typ<>Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.Hybrid then typPumHeaWatSec1_select + else typPumHeaWatSec2_select + "Type of secondary HW pumps" + annotation (Evaluate=true, Dialog(group="Secondary HW loop")); + final parameter Boolean have_pumHeaWatSec= + typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Centralized + "Set to true if the plant includes secondary HW pumps" + annotation(Evaluate=true, Dialog(group="Secondary HW loop")); + parameter Integer nPumHeaWatSec( + start=1, + final min=0)=if have_pumHeaWatSec then max(nBoiCon, nBoiNon) else 0 + "Number of secondary HW pumps" + annotation (Evaluate=true, Dialog(group="Secondary HW loop", + enable=have_pumHeaWatSec)); + parameter Integer nLooHeaWatSec=1 + "Number of secondary HW loops for distributed secondary distribution" + annotation (Evaluate=true, Dialog(group="Secondary HW loop", enable= + typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Distributed)); + + parameter Buildings.Templates.Plants.Boilers.HotWater.Types.Controller typCtl + "Type of controller" + annotation (Evaluate=true, Dialog(group="Controls")); + parameter Integer nAirHan + "Number of air handling units served by the plant" + annotation(Evaluate=true, Dialog(group="Controls")); + parameter Integer nEquZon + "Number of terminal units (zone equipment) served by the plant" + annotation(Evaluate=true, Dialog(group="Controls")); + + // See derived class for additional bindings of parameters not defined at top-level. + parameter Buildings.Templates.Plants.Boilers.HotWater.Data.BoilerPlant dat( + final have_boiCon=have_boiCon, + final have_boiNon=have_boiNon, + final nBoiCon=nBoiCon, + final nBoiNon=nBoiNon, + final typMod=typMod, + final typPumHeaWatSec=typPumHeaWatSec, + final nPumHeaWatPriCon=nPumHeaWatPriCon, + final nPumHeaWatPriNon=nPumHeaWatPriNon, + final nPumHeaWatSec=nPumHeaWatSec, + final have_valHeaWatMinBypCon=have_valHeaWatMinBypCon, + final have_valHeaWatMinBypNon=have_valHeaWatMinBypNon, + final typArrPumHeaWatPriCon=typArrPumHeaWatPriCon, + final typArrPumHeaWatPriNon=typArrPumHeaWatPriNon, + final have_varPumHeaWatPriCon=have_varPumHeaWatPriCon, + final have_varPumHeaWatPriNon=have_varPumHeaWatPriNon, + final typCtl=typCtl, + final rho_default=rho_default) + "Design and operating parameters" + annotation (Placement(transformation(extent={{-280,240},{-260,260}}))); + + final parameter Modelica.Units.SI.MassFlowRate mHeaWatPriCon_flow_nominal= + sum(dat.pumHeaWatPriCon.m_flow_nominal) + "Primary HW mass flow rate - Condensing boilers"; + final parameter Modelica.Units.SI.MassFlowRate mHeaWatPriNon_flow_nominal= + sum(dat.pumHeaWatPriNon.m_flow_nominal) + "Primary HW mass flow rate - Non-condensing boilers"; + // FIXME: How to assign HW flow in case of distributed secondary pumps? + final parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal= + if typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None + then (if have_boiCon then mHeaWatPriCon_flow_nominal else mHeaWatPriNon_flow_nominal) + elseif typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Centralized + then sum(dat.pumHeaWatSec.m_flow_nominal) + else max(mHeaWatPriCon_flow_nominal, mHeaWatPriNon_flow_nominal) + "HW mass flow rate (total, distributed to consumers)"; + final parameter Modelica.Units.SI.HeatFlowRate cap_nominal= + (if have_boiCon then sum(dat.boiCon.capBoi_nominal) else 0) + + (if have_boiNon then sum(dat.boiNon.capBoi_nominal) else 0) + "Heating capacity (total)"; + final parameter Modelica.Units.SI.Temperature THeaWatSup_nominal= + dat.ctl.THeaWatSup_nominal + "Maximum HW supply temperature"; + + parameter Modelica.Units.SI.Time tau=30 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + 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 allowFlowReversal=true + "= true to allow flow reversal, false restricts to design direction (port_a -> port_b)" + annotation (Dialog(tab="Assumptions"), Evaluate=true); + parameter Boolean show_T = false + "= true, if actual temperature at port is computed" + annotation(Dialog(tab="Advanced",group="Diagnostics")); + + final parameter Medium.Density rho_default= + Medium.density(sta_default) + "HW default density"; + final parameter Medium.ThermodynamicState sta_default= + Medium.setState_pTX( + T=Buildings.Templates.Data.Defaults.THeaWatSup, + p=Medium.p_default, + X=Medium.X_default) + "HW default state"; + + Modelica.Fluid.Interfaces.FluidPort_a port_a( + redeclare final package Medium = Medium, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + "HW return" + annotation (Placement(transformation(extent={{290,-250},{310,-230}}), + iconTransformation(extent={{192,-110},{212,-90}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b( + redeclare final package Medium = Medium, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + h_outflow(start = Medium.h_default, nominal = Medium.h_default)) + "HW supply" + annotation (Placement(transformation(extent={{290,-10},{310,10}}), + iconTransformation(extent={{192,-10},{212,10}}))); + Buildings.Templates.Plants.Boilers.HotWater.Interfaces.Bus bus + "Plant control bus" annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-300,140}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-200,100}))); + Buildings.Templates.AirHandlersFans.Interfaces.Bus busAirHan[nAirHan] + if nAirHan>0 + "Air handling unit control bus" + annotation (Placement(transformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={300,180}), iconTransformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={200,140}))); + Buildings.Templates.ZoneEquipment.Interfaces.Bus busEquZon[nEquZon] + if nEquZon>0 + "Terminal unit control bus" + annotation (Placement(transformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={300,100}), + iconTransformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={202,60}))); + + Modelica.Units.SI.MassFlowRate m_flow(start=_m_flow_start)=port_a.m_flow + "Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction)"; + + Modelica.Units.SI.PressureDifference dp( + start=_dp_start, + displayUnit="Pa")=port_a.p - port_b.p + "Pressure difference between port_a and port_b"; + + Medium.ThermodynamicState sta_a= + if allowFlowReversal then + Medium.setState_phX(port_a.p, + noEvent(actualStream(port_a.h_outflow)), + noEvent(actualStream(port_a.Xi_outflow))) + else + Medium.setState_phX(port_a.p, + noEvent(inStream(port_a.h_outflow)), + noEvent(inStream(port_a.Xi_outflow))) + if show_T "Medium properties in port_a"; + + Medium.ThermodynamicState sta_b= + if allowFlowReversal then + Medium.setState_phX(port_b.p, + noEvent(actualStream(port_b.h_outflow)), + noEvent(actualStream(port_b.Xi_outflow))) + else + Medium.setState_phX(port_b.p, + noEvent(port_b.h_outflow), + noEvent(port_b.Xi_outflow)) + if show_T "Medium properties in port_b"; + +protected + final parameter Modelica.Units.SI.MassFlowRate _m_flow_start=0 + "Start value for m_flow, used to avoid a warning if not set in m_flow, and to avoid m_flow.start in parameter window"; + final parameter Modelica.Units.SI.PressureDifference _dp_start( + displayUnit="Pa")=0 + "Start value for dp, used to avoid a warning if not set in dp, and to avoid dp.start in parameter window"; + +initial equation + if have_boiCon and typArrPumHeaWatPriCon==Buildings.Templates.Components.Types.PumpArrangement.Dedicated then + assert(nPumHeaWatPriCon==nBoiCon, + "In " + getInstanceName() + ": " + + "In case of dedicated pumps, the number of primary HW pumps (=" + + String(nPumHeaWatPriCon) + ") must be equal to the number of boilers (=" + + String(nBoiCon) + ")."); + end if; + if have_boiNon and typArrPumHeaWatPriNon==Buildings.Templates.Components.Types.PumpArrangement.Dedicated then + assert(nPumHeaWatPriNon==nBoiNon, + "In " + getInstanceName() + ": " + + "In case of dedicated pumps, the number of primary HW pumps (=" + + String(nPumHeaWatPriNon) + ") must be equal to the number of boilers (=" + + String(nBoiNon) + ")."); + end if; + + annotation ( + defaultComponentName="plaHeaWat", + Icon(coordinateSystem(preserveAspectRatio=false, + extent={{-200,-200},{200,200}}), + graphics={ + Rectangle( + extent={{-200,200},{200,-200}}, + lineColor={0,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-60,-60},{50,-60},{50,0}}, + color={238,46,47}, + thickness=5), + Ellipse( + extent={{-40,-40},{0,-80}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={0,100,199}), + Line( + points={{-60,100},{50,100},{50,0},{200,0}}, + color={238,46,47}, + thickness=5), + Rectangle( + extent={{-180,-40},{-60,-120}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Text( + extent={{-149,-214},{151,-254}}, + textColor={0,0,255}, + textString="%name"), + Polygon( + points={{-121,-90},{-133,-108},{-107,-108},{-121,-90}}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-180,120},{-60,40}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-121,70},{-133,52},{-107,52},{-121,70}}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Ellipse( + extent={{130,20},{170,-20}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={0,100,199}, + startAngle=0, + endAngle=360, + visible=typPumHeaWatSec == Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Centralized), + Polygon( + points={{150,19},{150,-19},{169,0},{150,19}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={255,255,255}, + visible=typPumHeaWatSec == Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Centralized), + Line( + points={{200,-100},{-60,-100}}, + color={238,46,47}, + pattern=LinePattern.Dash, + thickness=5), + Ellipse( + extent={{-40,120},{0,80}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={0,100,199}), + Polygon( + points={{-20,119},{-20,81},{-1,100},{-20,119}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={255,255,255}), + Line( + points={{-60,60},{20,60},{20,-98}}, + color={238,46,47}, + thickness=5, + pattern=LinePattern.Dash), + Line( + points={{102,-2},{102,-102}}, + color={238,46,47}, + thickness=5), + Polygon( + points={{-20,-41},{-20,-79},{-1,-60},{-20,-41}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={255,255,255})}), + Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-300,-300},{300,300}})), + Documentation(revisions=" +
                        +
                      • +April 28, 2023, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +", info=" +

                      +This partial class provides a standard interface for hot water boiler +plant models. +

                      +")); +end PartialBoilerPlant; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Interfaces/package.mo b/Buildings/Templates/Plants/Boilers/HotWater/Interfaces/package.mo new file mode 100644 index 00000000000..27336d38527 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Interfaces/package.mo @@ -0,0 +1,9 @@ +within Buildings.Templates.Plants.Boilers.HotWater; +package Interfaces "Interface classes" + extends Modelica.Icons.InterfacesPackage; + annotation (Documentation(info=" +

                      +This package contains interface classes. +

                      +")); +end Interfaces; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Interfaces/package.order b/Buildings/Templates/Plants/Boilers/HotWater/Interfaces/package.order new file mode 100644 index 00000000000..2ac17ff9a12 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Interfaces/package.order @@ -0,0 +1,2 @@ +Bus +PartialBoilerPlant diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Types.mo b/Buildings/Templates/Plants/Boilers/HotWater/Types.mo new file mode 100644 index 00000000000..254d5c81fd7 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Types.mo @@ -0,0 +1,41 @@ +within Buildings.Templates.Plants.Boilers.HotWater; +package Types "Package with type definitions" + extends Modelica.Icons.TypesPackage; +type Boiler = enumeration( + Condensing "Condensing boilers only", + Hybrid "Condensing and non-condensing boilers (hybrid plant)", + NonCondensing "Non-condensing boilers only") + "Enumeration to specify the type of boilers"; +type Controller = enumeration( + Guideline36 + "Guideline 36 controller for boiler plant", + OpenLoop + "Open loop controller") + "Enumeration to configure the plant controller"; +type PrimaryOverflowMeasurement = enumeration( + FlowDecoupler "Flow meter in the decoupler", + FlowDifference "Primary and secondary loop flow meters", + TemperatureSupplySensor "Delta-T with single HWST sensor measuring combined flow of all boilers", + TemperatureBoilerSensor "Delta-T with weighted average of HWST of all boilers proven on") + "Enumeration to configure the sensors for variable speed primary pumps control in primary-secondary plants"; +type PumpsPrimary = enumeration( + FactoryConstant "Primary pump provided with boiler with factory controls - Constant speed", + FactoryVariable "Primary pump provided with boiler with factory controls - Variable speed", + Constant "Constant speed pump", + Variable "Variable speed pump") + "Enumeration to specify the type of primary HW pumps"; +type PumpsSecondary = enumeration( + None "No secondary pumps (primary-only)", + Centralized "Variable secondary centralized", + Distributed "Variable secondary distributed") + "Enumeration to specify the type of secondary HW pumps"; +type SensorLocation = enumeration( + Return "Sensor in the return line", + Supply "Sensor in the supply line") + "Enumeration to specify the sensor location"; + annotation (Documentation(info=" +

                      +This package contains type definitions. +

                      +")); +end Types; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Validation/BoilerPlant.mo b/Buildings/Templates/Plants/Boilers/HotWater/Validation/BoilerPlant.mo new file mode 100644 index 00000000000..1f038ccdd4d --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Validation/BoilerPlant.mo @@ -0,0 +1,64 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Validation; +model BoilerPlant + "Validation of boiler plant template with G36 controls" + extends + Buildings.Templates.Plants.Boilers.HotWater.Validation.BoilerPlantOpenLoop( + BOI( + typ=Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.Hybrid, + nBoiCon_select=2, + nBoiNon_select=2, + typPumHeaWatPriCon=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.Variable, + typPumHeaWatPriNon=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.Constant, + typArrPumHeaWatPriCon_select=Buildings.Templates.Components.Types.PumpArrangement.Headered, + typPumHeaWatSec2_select=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.Centralized, + redeclare + Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.Guideline36 + ctl( + nAirHan=1, + nEquZon=0, + typMeaCtlHeaWatPri=Buildings.Templates.Plants.Boilers.HotWater.Types.PrimaryOverflowMeasurement.FlowDifference, + locSenVHeaWatPri=Buildings.Templates.Plants.Boilers.HotWater.Types.SensorLocation.Return, + locSenVHeaWatSec=Buildings.Templates.Plants.Boilers.HotWater.Types.SensorLocation.Return, + have_senDpHeaWatLoc=true))); + + UserProject.AirHandlerControlPoints sigAirHan[BOI.nAirHan] + "AHU control points" + annotation (Placement(transformation(extent={{-90,50},{-70,70}}))); + UserProject.BASControlPoints sigBAS "BAS control points" + annotation (Placement(transformation(extent={{-90,10},{-70,30}}))); + UserProject.DistributionControlPoints sigDis(nSenDpHeaWatRem=BOI.ctl.nSenDpHeaWatRem) + "HW distribution system control points" + annotation (Placement(transformation(extent={{-90,-30},{-70,-10}}))); +equation + connect(sigAirHan.bus, BOI.busAirHan) annotation (Line( + points={{-70,60},{-20,60},{-20,4}}, + color={255,204,51}, + thickness=0.5)); + connect(sigBAS.bus, BOI.bus) annotation (Line( + points={{-70,20},{-60,20},{-60,0}}, + color={255,204,51}, + thickness=0.5)); + connect(sigDis.bus, BOI.bus) annotation (Line( + points={{-70,-20},{-60,-20},{-60,0}}, + color={255,204,51}, + thickness=0.5)); +annotation ( + experiment( + StartTime=0, + StopTime=2000, + Tolerance=1e-06), Documentation(info=" +

                      +This is a validation model for the boiler plant model + +Buildings.Templates.Plants.Boilers.HotWater.BoilerPlant +with closed-loop controls as implemented within + +Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.Guideline36. +

                      +

                      +A Python script is provided with this model to test all supported system +configurations, see +Buildings/Resources/Scripts/travis/templates/BoilerPlant.py. +

                      +")); +end BoilerPlant; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Validation/BoilerPlantOpenLoop.mo b/Buildings/Templates/Plants/Boilers/HotWater/Validation/BoilerPlantOpenLoop.mo new file mode 100644 index 00000000000..e8e7677fe72 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Validation/BoilerPlantOpenLoop.mo @@ -0,0 +1,106 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Validation; +model BoilerPlantOpenLoop + "Validation of boiler plant template with open-loop controls" + extends Modelica.Icons.Example; + replaceable package Medium=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "HW medium"; + + replaceable parameter + Buildings.Templates.Plants.Boilers.HotWater.Validation.UserProject.Data.AllSystems + datAll + "Design and operating parameters" + annotation (Placement(transformation(extent={{70,70},{90,90}}))); + + parameter Modelica.Units.SI.Time tau=10 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + 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")); + + inner Buildings.Templates.Plants.Boilers.HotWater.BoilerPlant BOI( + redeclare final package Medium = Medium, + redeclare replaceable Buildings.Templates.Plants.Boilers.HotWater.Components.Controls.OpenLoop ctl, + typ=Buildings.Templates.Plants.Boilers.HotWater.Types.Boiler.NonCondensing, + nBoiNon_select=2, + typPumHeaWatPriNon=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsPrimary.Variable, + typArrPumHeaWatPriNon_select=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, + typPumHeaWatSec1_select=Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None, + final energyDynamics=energyDynamics, + final tau=tau, + final dat=datAll._BOI) + "Boiler plant" + annotation (Placement(transformation(extent={{-60,-30},{-20,10}}))); + + Fluid.Sources.Boundary_pT bou( + redeclare final package Medium=Medium, + p=200000, + T=Buildings.Templates.Data.Defaults.THeaWatRet, + nPorts=2) + "Boundary conditions for HW distribution system" + annotation (Placement(transformation(extent={{90,-30},{70,-10}}))); + + Buildings.Fluid.FixedResistances.PressureDrop res( + redeclare final package Medium = Medium, + m_flow_nominal=BOI.mHeaWat_flow_nominal, + dp_nominal=datAll._BOI.ctl.dpHeaWatLocSet_nominal) + "Flow resistance of HW distribution system" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + + Fluid.Sensors.TemperatureTwoPort THeaWatRet( + redeclare final package Medium =Medium, + final m_flow_nominal=BOI.mHeaWat_flow_nominal) + "HW return temperature" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={20,-40}))); + Fluid.Sensors.VolumeFlowRate VHeaWat_flow( + redeclare final package Medium =Medium, + final m_flow_nominal=BOI.mHeaWat_flow_nominal) + "HW volume flow rate" + annotation (Placement(transformation(extent={{60,-50},{40,-30}}))); +equation + connect(res.port_b, bou.ports[1]) + annotation (Line(points={{40,0},{70,0},{70,-21}}, color={0,127,255})); + connect(BOI.port_b, res.port_a) + annotation (Line(points={{-19.8,-10},{0,-10},{0,0},{20,0}}, + color={0,127,255})); + connect(BOI.port_a, THeaWatRet.port_b) annotation (Line(points={{-19.8,-20},{ + 0,-20},{0,-40},{10,-40}}, color={0,127,255})); + connect(THeaWatRet.port_a, VHeaWat_flow.port_b) + annotation (Line(points={{30,-40},{40,-40}}, color={0,127,255})); + connect(VHeaWat_flow.port_a, bou.ports[2]) + annotation (Line(points={{60,-40},{70,-40},{70,-19}}, color={0,127,255})); + annotation ( + experiment( + StartTime=0, + StopTime=2000, + Tolerance=1e-06), + Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}})), + Documentation(revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +", info=" +

                      +This is a validation model for the boiler plant model + +Buildings.Templates.Plants.Boilers.HotWater.BoilerPlant +with open-loop controls. +

                      +

                      +It is intended to check that the plant model is well-defined for +various plant configurations. +However, due to the open-loop controls a correct physical behavior +is not expected. +

                      +")); +end BoilerPlantOpenLoop; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/AirHandlerControlPoints.mo b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/AirHandlerControlPoints.mo new file mode 100644 index 00000000000..8c2450d84fa --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/AirHandlerControlPoints.mo @@ -0,0 +1,32 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Validation.UserProject; +block AirHandlerControlPoints + "Emulation of AHU control points" + extends Modelica.Blocks.Icons.Block; + + Buildings.Templates.AirHandlersFans.Interfaces.Bus bus + "AHU control bus" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,0}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,0}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant reqHeaWatRes(k=0) + "HW reset request" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant reqHeaWatPla(k=1) + "HW plant request" + annotation (Placement(transformation(extent={{-10,-50},{10,-30}}))); +equation + connect(reqHeaWatRes.y, bus.reqHeaWatRes) annotation (Line(points={{12,0},{ + 100,0}}, color={255,127,0})); + connect(reqHeaWatPla.y, bus.reqHeaWatPla) annotation (Line(points={{12,-40},{ + 80,-40},{80,0},{100,0}}, color={255,127,0})); + annotation (Documentation(info=" +

                      +This class generates signals typically provided by the AHU controller. +It is aimed for validation purposes only. +

                      +")); +end AirHandlerControlPoints; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/BASControlPoints.mo b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/BASControlPoints.mo new file mode 100644 index 00000000000..51ca5f67a7a --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/BASControlPoints.mo @@ -0,0 +1,28 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Validation.UserProject; +block BASControlPoints "Emulation of control points from the BAS" + extends Modelica.Blocks.Icons.Block; + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOut( + k=10+273.15) + "Outdoor air temperature" + annotation (Placement(transformation(extent={{-8,-10},{12,10}}))); + + Interfaces.Bus bus "HW plant control bus" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,0}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,0}))); +equation + connect(TOut.y, bus.TOut); + annotation ( + defaultComponentName="sigBAS", + Documentation(info=" +

                      +This class generates signals typically provided by the BAS. +It is aimed for validation purposes only. +

                      +")); +end BASControlPoints; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/Data/AllSystems.mo b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/Data/AllSystems.mo new file mode 100644 index 00000000000..d99d5b65b12 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/Data/AllSystems.mo @@ -0,0 +1,94 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Validation.UserProject.Data; +class AllSystems + "Design and operating parameters for testing purposes" + extends Buildings.Templates.Data.AllSystems( + ashCliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Not_Specified, + + stdVen=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1, + + stdEne=Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1, + sysUni=Buildings.Templates.Types.Units.SI); + + // The following instance name matches the system tag. + outer Buildings.Templates.Plants.Boilers.HotWater.BoilerPlant BOI; + + parameter Buildings.Templates.Plants.Boilers.HotWater.Data.BoilerPlant _BOI( + final have_boiCon=BOI.have_boiCon, + final have_boiNon=BOI.have_boiNon, + final nBoiCon=BOI.nBoiCon, + final nBoiNon=BOI.nBoiNon, + final typMod=BOI.typMod, + final typPumHeaWatSec=BOI.typPumHeaWatSec, + final nPumHeaWatPriCon=BOI.nPumHeaWatPriCon, + final nPumHeaWatPriNon=BOI.nPumHeaWatPriNon, + final nPumHeaWatSec=BOI.nPumHeaWatSec, + final have_valHeaWatMinBypCon=BOI.have_valHeaWatMinBypCon, + final have_valHeaWatMinBypNon=BOI.have_valHeaWatMinBypNon, + final have_senDpHeaWatLoc=BOI.ctl.have_senDpHeaWatLoc, + final nSenDpHeaWatRem=BOI.ctl.nSenDpHeaWatRem, + final have_senVHeaWatSec=BOI.ctl.have_senVHeaWatSec, + final typArrPumHeaWatPriCon=BOI.typArrPumHeaWatPriCon, + final typArrPumHeaWatPriNon=BOI.typArrPumHeaWatPriNon, + final have_varPumHeaWatPriCon=BOI.have_varPumHeaWatPriCon, + final have_varPumHeaWatPriNon=BOI.have_varPumHeaWatPriNon, + final typCtl=BOI.typCtl, + final rho_default=BOI.rho_default, + boiCon( + fue=Buildings.Fluid.Data.Fuels.NaturalGasHigherHeatingValue(), + dpHeaWatBoi_nominal=fill(Buildings.Templates.Data.Defaults.dpHeaWatBoi, BOI.nBoiCon), + mHeaWatBoi_flow_nominal=_BOI.ctl.capBoiCon_nominal / + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq ./ + (_BOI.ctl.THeaWatConSup_nominal - Buildings.Templates.Data.Defaults.THeaWatRet)), + boiNon( + fue=Buildings.Fluid.Data.Fuels.NaturalGasHigherHeatingValue(), + dpHeaWatBoi_nominal=fill(Buildings.Templates.Data.Defaults.dpHeaWatBoi, BOI.nBoiNon), + mHeaWatBoi_flow_nominal=_BOI.ctl.capBoiNon_nominal / + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq ./ + (_BOI.ctl.THeaWatSup_nominal - Buildings.Templates.Data.Defaults.THeaWatRet)), + ctl( + THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSup, + THeaWatConSup_nominal=Buildings.Templates.Data.Defaults.THeaWatConSup, + TOutLck=Buildings.Templates.Data.Defaults.TOutHeaWatLck, + VHeaWatBoiCon_flow_nominal=_BOI.boiCon.mHeaWatBoi_flow_nominal / + _BOI.rho_default, + VHeaWatBoiCon_flow_min=0.1 * _BOI.ctl.VHeaWatBoiCon_flow_nominal, + VHeaWatBoiNon_flow_nominal=_BOI.boiNon.mHeaWatBoi_flow_nominal / + _BOI.rho_default, + VHeaWatBoiNon_flow_min=0.1 * _BOI.ctl.VHeaWatBoiNon_flow_nominal, + ratFirBoiCon_min=fill(0.2, BOI.nBoiCon), + ratFirBoiNon_min=fill(0.2, BOI.nBoiNon), + capBoiCon_nominal=fill(1E6, BOI.nBoiCon), + capBoiNon_nominal=fill(1E6, BOI.nBoiNon), + VHeaWatPriCon_flow_nominal=sum(_BOI.ctl.VHeaWatBoiCon_flow_nominal), + VHeaWatPriNon_flow_nominal=sum(_BOI.ctl.VHeaWatBoiNon_flow_nominal), + VHeaWatSec_flow_nominal= + max(_BOI.ctl.VHeaWatPriCon_flow_nominal, _BOI.ctl.VHeaWatPriNon_flow_nominal) / 1.1, + dpHeaWatLocSet_nominal=Buildings.Templates.Data.Defaults.dpHeaWatLocSet_max, + dpHeaWatRemSet_nominal=fill(Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, + BOI.ctl.nSenDpHeaWatRem), + yPumHeaWatPri_min=0.1, + yPumHeaWatSec_min=0.1, + yPumHeaWatPriSta_min=fill(0.1, size(_BOI.ctl.sta, 1)), + sta=if BOI.have_boiCon and BOI.have_boiNon then + [0,0,0,0; 1,0,1,0; 1,1,1,1] else [0,0; 1,0; 1,1]), + pumHeaWatPriCon( + dp_nominal=fill(max(_BOI.boiCon.dpHeaWatBoi_nominal) * 1.5, BOI.nPumHeaWatPriCon) + + fill((if _BOI.typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None then + _BOI.ctl.dpHeaWatLocSet_nominal else 0), BOI.nPumHeaWatPriCon)), + pumHeaWatPriNon( + dp_nominal=fill(max(_BOI.boiNon.dpHeaWatBoi_nominal) * 1.5, BOI.nPumHeaWatPriNon) + + fill((if _BOI.typPumHeaWatSec==Buildings.Templates.Plants.Boilers.HotWater.Types.PumpsSecondary.None then + _BOI.ctl.dpHeaWatLocSet_nominal else 0), BOI.nPumHeaWatPriNon)), + pumHeaWatSec( + dp_nominal=fill(_BOI.ctl.dpHeaWatLocSet_nominal, BOI.nPumHeaWatSec), + m_flow_nominal=1.1 / max(1, BOI.nPumHeaWatSec) * + fill(max(sum(_BOI.pumHeaWatPriCon.m_flow_nominal), sum(_BOI.pumHeaWatPriNon.m_flow_nominal)), + BOI.nPumHeaWatSec))) + "HW plant parameters"; + annotation (Documentation(info=" +

                      +This class provides system parameters for the validation +of the boiler plant model. +

                      +")); +end AllSystems; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/Data/package.mo b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/Data/package.mo new file mode 100644 index 00000000000..269a5392934 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/Data/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Validation.UserProject; +package Data "Package with classes for storing system parameters" + extends Modelica.Icons.MaterialPropertiesPackage; + annotation (Documentation(info=" +

                      +This package provides design and operating parameters +that are used for validation purposes. +

                      +")); +end Data; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/Data/package.order b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/Data/package.order new file mode 100644 index 00000000000..3831742ec60 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/Data/package.order @@ -0,0 +1 @@ +AllSystems diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/DistributionControlPoints.mo b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/DistributionControlPoints.mo new file mode 100644 index 00000000000..4ce8273016e --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/DistributionControlPoints.mo @@ -0,0 +1,32 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Validation.UserProject; +block DistributionControlPoints + "Emulation of control points from HW distribution system" + extends Modelica.Blocks.Icons.Block; + + parameter Integer nSenDpHeaWatRem + "Number of remote HW differential pressure sensors used for HW pump speed control" + annotation (Evaluate=true, Dialog(group="Configuration")); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpHeaWatRem[nSenDpHeaWatRem]( + each k=Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max) + "HW differential pressure used for HW pump speed control" + annotation (Placement(transformation(extent={{-8,-10},{12,10}}))); + Interfaces.Bus bus "CHW plant control bus" annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,0}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,0}))); +equation + connect(dpHeaWatRem.y, bus.dpHeaWatRem) + annotation (Line(points={{14,0},{100, + 0}}, color={0,0,127})); + annotation (Documentation(info=" +

                      +This class generates signals typically yielded by sensors +from the HW distribution system. +It is aimed for validation purposes only. +

                      +")); +end DistributionControlPoints; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/package.mo b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/package.mo new file mode 100644 index 00000000000..002cd967689 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/package.mo @@ -0,0 +1,9 @@ +within Buildings.Templates.Plants.Boilers.HotWater.Validation; +package UserProject "Package of user classes generated from templates" + extends Modelica.Icons.VariantsPackage; + annotation (Documentation(info=" +

                      +This package contains classes used for validation purposes. +

                      +")); +end UserProject; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/package.order b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/package.order new file mode 100644 index 00000000000..ef08383e01b --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/package.order @@ -0,0 +1,4 @@ +AirHandlerControlPoints +BASControlPoints +DistributionControlPoints +Data diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Validation/package.mo b/Buildings/Templates/Plants/Boilers/HotWater/Validation/package.mo new file mode 100644 index 00000000000..2826b4a5a61 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Validation/package.mo @@ -0,0 +1,19 @@ +within Buildings.Templates.Plants.Boilers.HotWater; +package Validation "Package with validation models" + extends Modelica.Icons.ExamplesPackage; + + annotation (Documentation(info=" +

                      +This package contains models validating the templates within + +Buildings.Templates.Plants.Boilers.HotWater +for various system configurations. +

                      +

                      +The models also illustrate the parameterization of the whole +HVAC system using a class derived from + +Buildings.Templates.Data.AllSystems. +

                      +")); +end Validation; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/Validation/package.order b/Buildings/Templates/Plants/Boilers/HotWater/Validation/package.order new file mode 100644 index 00000000000..81b366b685d --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/Validation/package.order @@ -0,0 +1,3 @@ +BoilerPlant +BoilerPlantOpenLoop +UserProject diff --git a/Buildings/Templates/Plants/Boilers/HotWater/package.mo b/Buildings/Templates/Plants/Boilers/HotWater/package.mo new file mode 100644 index 00000000000..568468c3b18 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/package.mo @@ -0,0 +1,8 @@ +within Buildings.Templates.Plants.Boilers; +package HotWater "Hot water plants" + annotation (Documentation(info=" +

                      +This package contains templates for hot water plants. +

                      +")); +end HotWater; diff --git a/Buildings/Templates/Plants/Boilers/HotWater/package.order b/Buildings/Templates/Plants/Boilers/HotWater/package.order new file mode 100644 index 00000000000..a7e68148e34 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/HotWater/package.order @@ -0,0 +1,6 @@ +BoilerPlant +Components +Data +Types +Validation +Interfaces diff --git a/Buildings/Templates/Plants/Boilers/package.mo b/Buildings/Templates/Plants/Boilers/package.mo new file mode 100644 index 00000000000..9240f7ec6a9 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/package.mo @@ -0,0 +1,6 @@ +within Buildings.Templates.Plants; +package Boilers "Boiler plants" + annotation (Documentation(info=" +

                      This package contains templates for boiler plants.

                      +")); +end Boilers; diff --git a/Buildings/Templates/Plants/Boilers/package.order b/Buildings/Templates/Plants/Boilers/package.order new file mode 100644 index 00000000000..9943005d896 --- /dev/null +++ b/Buildings/Templates/Plants/Boilers/package.order @@ -0,0 +1 @@ +HotWater diff --git a/Buildings/Templates/Plants/Chillers/AirCooled.mo b/Buildings/Templates/Plants/Chillers/AirCooled.mo new file mode 100644 index 00000000000..61e80ac9cdf --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/AirCooled.mo @@ -0,0 +1,196 @@ +within Buildings.Templates.Plants.Chillers; +model AirCooled "Air-cooled chiller plant" + /* FIXME: Add comment for the following bindings and make them final after testing. + typArrChi_select + typDisChiWat + typArrPumChiWatPri_select + have_pumChiWatPriVar_select + chi(typValChiWatChiIso_select + */ + extends + Buildings.Templates.Plants.Chillers.Interfaces.PartialChilledWaterLoop( + redeclare replaceable package MediumCon=Buildings.Media.Air, + redeclare final Buildings.Templates.Plants.Chillers.Components.Economizers.None eco, + ctl(final typCtlHea=Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.BuiltIn), + final typChi=Buildings.Templates.Components.Types.Chiller.AirCooled, + final typCoo=Buildings.Templates.Components.Types.Cooler.None, + final nCoo=0, + final nPumConWat=0, + final typValCooInlIso=Buildings.Templates.Components.Types.Valve.None, + final typValCooOutIso=Buildings.Templates.Components.Types.Valve.None, + typArrChi_select=Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel, + typDisChiWat=Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only, + typArrPumChiWatPri_select=Buildings.Templates.Components.Types.PumpArrangement.Headered, + have_pumChiWatPriVar_select=false, + chi(typValChiWatChiIso_select=Buildings.Templates.Components.Types.Valve.TwoWayModulating)); + Buildings.Fluid.Sources.MassFlowSource_WeatherData souAir[nChi]( + redeclare each final package Medium = MediumCon, + each final nPorts=1, + each final use_m_flow_in=true) + "Air flow source" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={-80,-192}))); + + // Air loop + Buildings.Fluid.Sources.Boundary_pT bouCon( + redeclare final package Medium = MediumCon, + final nPorts=1) + "Air pressure boundary condition" + annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={-80,0}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal y1Chi[nChi] + "Convert chiller Start/Stop signal into real value" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-260,110}))); + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mCon_flow[nChi]( + final k=chi.mConChi_flow_nominal) + "Compute air mass flow rate at condenser" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-260,70}))); +protected + Buildings.Templates.Components.Interfaces.Bus busChi[nChi] + "Chiller control bus" + annotation (Placement(transformation(extent={{-280, 120},{-240,160}}), + iconTransformation(extent={{-756,-40},{-716,0}}))); +equation + for i in 1:nChi loop + connect(busWea, souAir[i].weaBus) annotation (Line( + points={{0,280},{0,260},{-100,260},{-100,-192.2},{-90,-192.2}}, + color={255,204,51}, + thickness=0.5)); + end for; + connect(souAir.ports[1], inlConChi.ports_a) + annotation(Line( + points={{-70,-192},{-70,-192}}, color={0,127,255})); + connect(outConChi.port_b, bouCon.ports[1]) + annotation (Line(points={{-60,0},{-70,0}}, + color={0,127,255})); + connect(y1Chi.y, mCon_flow.u) + annotation (Line(points={{-260,98},{-260,82}}, color={0,0,127})); + connect(mCon_flow.y, souAir.m_flow_in) annotation (Line(points={{-260,58},{ + -260,-200},{-90,-200}}, color={0,0,127})); + connect(busChi.y1, y1Chi.u) annotation (Line( + points={{-260,140},{-260,122}}, + color={255,204,51}, + thickness=0.5)); + connect(bus.chi, busChi) annotation (Line( + points={{-300,200},{-280,200},{-280,140},{-260,140}}, + color={255,204,51}, + thickness=0.5)); + annotation (Documentation(info=" +

                      +This template represents a chilled water plant with air-cooled compression chillers. +

                      +

                      +The table below lists all available equipment configurations. +The first option (shown in bold) represents the default plant configuration. +Options shown in gray italics are not currently +supported by the plant controller + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Controller +and cannot be selected. +The user may refer to ASHRAE (2021) for further details. +

                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      Configuration parameterOptionsNotes
                      Chiller arrangement +Parallel chillers
                      +Series chillers +
                      Chiller CHW isolation valve +Two-way modulating valve
                      +Two-way two-position valve
                      +No valve +
                      +If the primary CHW pumps are dedicated, the option with no isolation valve +is automatically selected.
                      +If the primary CHW pumps are headered, the choice between +two-way modulating valves and two-way two-position valves is possible. +A modulating valve is recommended on primary-only variable flow systems +to allow for slow changes in flow during chiller staging. +Sometimes electric valve timing may be sufficiently slow that two-position +valves can provide stable performance. +Two-position valves are acceptable on primary-secondary systems. +
                      CHW distribution +Variable primary-only
                      +Constant primary-only
                      +Constant primary-variable secondary
                      +Variable primary-variable secondary with centralized secondary pumps
                      +Variable primary-variable secondary with distributed secondary pumps +
                      +Constant primary-only systems are typically encountered when +only one or two very large air handlers are served by the plant.
                      +Variable primary-variable secondary with centralized secondary pumps +refers to configurations with a single group of secondary pumps that +is typically integrated into the plant.
                      +Variable secondary with distributed secondary pumps refers to configurations +with multiple secondary loops, each loop being served by a dedicated group +of secondary pumps. +
                      Primary CHW pump arrangement +Headered
                      +Dedicated +
                      +Headered pumps are required (and automatically selected) for configurations with +series chillers. +
                      Type of primary CHW pumps for constant flow configurations +Constant speed pumps
                      +Variable speed pumps operated at a constant speed +
                      +Variable speed pumps operated at a constant speed most commonly applies +to constant flow primary-only plants, for example, a plant serving +only one or two very large air handlers. +
                      Waterside economizer +No waterside economizer +Waterside economizers are not supported within air-cooled chiller plants.
                      Controller +ASHRAE Guideline 36 controller +An open loop controller is also available for validation purposes only.
                      +

                      References

                      +
                        +
                      • +ASHRAE, 2021. Guideline 36-2021, High-Performance Sequences of Operation +for HVAC Systems. Atlanta, GA. +
                      • +
                      +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end AirCooled; diff --git a/Buildings/Templates/Plants/Chillers/Components/ChillerGroups/Compression.mo b/Buildings/Templates/Plants/Chillers/Components/ChillerGroups/Compression.mo new file mode 100644 index 00000000000..68eea31e920 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/ChillerGroups/Compression.mo @@ -0,0 +1,200 @@ +within Buildings.Templates.Plants.Chillers.Components.ChillerGroups; +model Compression "Group of compression chillers" + extends Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialChillerGroup; + + Buildings.Templates.Components.Chillers.Compression chi[nChi]( + redeclare each final package MediumChiWat = MediumChiWat, + redeclare each final package MediumCon = MediumCon, + each final allowFlowReversal1=allowFlowReversalSou, + each final allowFlowReversal2=allowFlowReversal, + each final typ=typ, + final dat=datChi, + each final energyDynamics=energyDynamics, + each final tau=tau) + "Chiller" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, rotation=90))); + + // Sensors + Buildings.Templates.Components.Sensors.Temperature TChiWatChiSup[nChi]( + redeclare each final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatChi_flow_nominal, + each final have_sen=have_senTChiWatChiSup, + each final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell) + "Chiller CHW supply temperature" + annotation (Placement(transformation(extent={{90,110},{110,130}}))); + Buildings.Templates.Components.Sensors.Temperature TChiWatChiRet[nChi]( + redeclare each final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatChi_flow_nominal, + each final have_sen=have_senTChiWatChiRet, + each final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell) + "Chiller CHW return temperature" + annotation (Placement(transformation(extent={{110,-110},{90,-90}}))); + Buildings.Templates.Components.Sensors.Temperature TConWatChiSup[nChi]( + redeclare each final package Medium=MediumCon, + final m_flow_nominal=mConChi_flow_nominal, + each have_sen=have_senTConWatChiSup, + each final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell) + "Chiller CW supply temperature" + annotation (Placement(transformation(extent={{-110,-110},{-90,-90}}))); + Buildings.Templates.Components.Sensors.Temperature TConWatChiRet[nChi]( + redeclare each final package Medium=MediumCon, + final m_flow_nominal=mConChi_flow_nominal, + each have_sen=have_senTConWatChiRet, + each final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell) + "Chiller CW return temperature" + annotation (Placement(transformation(extent={{-90,110},{-110,130}}))); + + // CW isolation valve + Buildings.Templates.Components.Actuators.Valve valConWatChiIso[nChi]( + redeclare each final package Medium = MediumCon, + each final typ=typValConWatChiIso, + each final allowFlowReversal=allowFlowReversalSou, + final dat=datValConWatChiIso, + each final use_strokeTime=use_strokeTime, + each final strokeTime=strokeTime, + each final init=init, + each final y_start=y_start, + each final from_dp=from_dp, + each final linearized=linearized) + "Chiller CW isolation valve" + annotation (Placement(transformation(extent={{-150,110},{-170,130}}))); + + // CHW isolation valve + Buildings.Templates.Components.Actuators.Valve valChiWatChiIsoPar[nChi]( + redeclare each final package Medium = MediumChiWat, + each final typ=typValChiWatChiIso, + each final allowFlowReversal=allowFlowReversal, + final dat=datValChiWatChiIso, + each final use_strokeTime=use_strokeTime, + each final strokeTime=strokeTime, + each final init=init, + each final y_start=y_start, + each final from_dp=from_dp, + each final linearized=linearized) + if typArr == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + "Chiller CHW isolation valve - Parallel chillers" + annotation (Placement(transformation(extent={{130,110},{150,130}}))); + Buildings.Templates.Components.Actuators.Valve valChiWatChiIsoSer[nChi]( + redeclare each final package Medium = MediumChiWat, + each final typ=typValChiWatChiIso, + each final allowFlowReversal=allowFlowReversal, + each final dat=datValChiWatChiIso, + each final use_strokeTime=use_strokeTime, + each final strokeTime=strokeTime, + each final init=init, + each final y_start=y_start, + each final from_dp=from_dp, + each final linearized=linearized) + if typArr == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + "Chiller CHW isolation valve - Series chillers" + annotation (Placement( + transformation(extent={{10,10},{-10,-10}}, rotation=270, + origin={180,0}))); +equation + /* Control point connection - start */ + /* + HACK: The following clauses should be removed at translation if `not have_sen` + but Dymola fails to do so. + Hence, explicit `if then` statements are used. + */ + if have_senTChiWatChiSup then + connect(bus.TChiWatChiSup, TChiWatChiSup.y); + end if; + if have_senTChiWatChiRet then + connect(bus.TChiWatChiRet, TChiWatChiRet.y); + end if; + if have_senTConWatChiSup then + connect(bus.TConWatChiSup, TConWatChiSup.y); + end if; + if have_senTConWatChiRet then + connect(bus.TConWatChiRet, TConWatChiRet.y); + end if; + /* Control point connection - stop */ + + connect(TChiWatChiSup.port_b, valChiWatChiIsoPar.port_a) + annotation (Line(points={{110,120},{130,120}}, color={0,127,255})); + connect(valChiWatChiIsoPar.port_b, ports_bChiWat) + annotation (Line(points={{150,120},{200,120}}, color={0,127,255})); + connect(valConWatChiIso.port_b, ports_bCon) annotation (Line(points={{-170,120}, + {-200,120}}, color={0,127,255})); + connect(valConWatChiIso.port_a, TConWatChiRet.port_b) annotation (Line(points={{-150, + 120},{-110,120}}, color={0,127,255})); + connect(chi.port_b1, TConWatChiRet.port_a) annotation (Line(points={{-6,-10},{ + -40,-10},{-40,120},{-90,120}}, color={0,127,255})); + connect(ports_aChiWat, TChiWatChiRet.port_a) + annotation (Line(points={{200,-100},{110,-100}}, color={0,127,255})); + connect(TChiWatChiRet.port_b, chi.port_a2) annotation (Line(points={{90,-100}, + {20,-100},{20,-10},{6,-10}}, color={0,127,255})); + connect(TConWatChiSup.port_b, chi.port_a1) annotation (Line(points={{-90,-100}, + {-20,-100},{-20,10},{-6,10}}, color={0,127,255})); + connect(ports_aCon, TConWatChiSup.port_a) + annotation (Line(points={{-200,-100},{-110,-100}}, color={0,127,255})); + connect(chi.port_b2, TChiWatChiSup.port_a) annotation (Line(points={{6,10},{20, + 10},{20,120},{90,120}}, color={0,127,255})); + connect(ports_aChiWat, valChiWatChiIsoSer.port_a) annotation (Line(points={{200, + -100},{180,-100},{180,-10}}, color={0,127,255})); + connect(valChiWatChiIsoSer.port_b, ports_bChiWat) annotation (Line(points={{180,10}, + {180,120},{200,120}}, color={0,127,255})); + connect(busValConWatChiIso, valConWatChiIso.bus) annotation (Line( + points={{-80,160},{-160,160},{-160,130}}, + color={255,204,51}, + thickness=0.5)); + connect(busValChiWatChiIso, valChiWatChiIsoPar.bus) annotation (Line( + points={{80,160},{140,160},{140,130}}, + color={255,204,51}, + thickness=0.5)); + connect(busValChiWatChiIso, valChiWatChiIsoSer.bus) annotation (Line( + points={{80,160},{160,160},{160,0},{170,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busChi, chi.bus) annotation (Line( + points={{0,160},{-10,160},{-10,0}}, + color={255,204,51}, + thickness=0.5)); + annotation(defaultComponentName="chi", Documentation(info=" +

                      +This model represents a group of compression chillers. +

                      +

                      +Modeling features and limitations: +

                      +
                        +
                      • +The chillers have the same type (compression chiller). +However, the chiller parameters such as the design capacity +and CHW flow rate may be different from one unit to another. +Modeling different performance curves is also possible, +see the documentation of + +Buildings.Templates.Plants.Chillers.Components.Data.ChillerGroup +for further details. +
                      • +
                      • +Same type of cooling fluid (air or water) for all chillers. +This is a hard and final limitation considering the use of multiple-ports +connectors that require a unique medium model. +
                      • +
                      • +Same type of CW (and CHW) isolation valve for all chillers. +Hence, only the same type of head pressure control for all chillers is supported +(as the latter conditions the former). +
                      • +
                      • +The option for limiting the chiller demand is currently not modeled. +
                      • +
                      +

                      Control points

                      +

                      +See the documentation of + +Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialChillerGroup. +

                      +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end Compression; diff --git a/Buildings/Templates/Plants/Chillers/Components/ChillerGroups/package.mo b/Buildings/Templates/Plants/Chillers/Components/ChillerGroups/package.mo new file mode 100644 index 00000000000..95781a27f1c --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/ChillerGroups/package.mo @@ -0,0 +1,18 @@ +within Buildings.Templates.Plants.Chillers.Components; +package ChillerGroups "Models for chiller groups" + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +

                      +This package contains models of chiller groups. +

                      +

                      +Note that the hydronic connections between the chillers are +modeled outside of those components, for instance using + +Buildings.Templates.Plants.Chillers.Components.Routing.ChillersToPrimaryPumps. +This way, the components inside this package can be used to model +either parallel or series arrangements. +

                      +")); +end ChillerGroups; diff --git a/Buildings/Templates/Plants/Chillers/Components/ChillerGroups/package.order b/Buildings/Templates/Plants/Chillers/Components/ChillerGroups/package.order new file mode 100644 index 00000000000..d336b6ea332 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/ChillerGroups/package.order @@ -0,0 +1 @@ +Compression diff --git a/Buildings/Templates/Plants/Chillers/Components/Controls/ControllerG36Debug.mo b/Buildings/Templates/Plants/Chillers/Components/Controls/ControllerG36Debug.mo new file mode 100644 index 00000000000..c02ab92bd08 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Controls/ControllerG36Debug.mo @@ -0,0 +1,15 @@ +within Buildings.Templates.Plants.Chillers.Components.Controls; +block ControllerG36Debug + extends Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Controller( + dpChiWat_local(final unit="Pa")); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_dTLifMax(k=max( + TConWatRet_nominal - TChiWatSupMin)) "Maximum chiller lift" + annotation (Placement(transformation(extent={{-1020,-50},{-1000,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_dTLifMin(k=minChiLif) + "Minimum chiller lift" + annotation (Placement(transformation(extent={{-1020,-10},{-1000,10}}))); +equation + // FIXME Missing connect statements + connect(FIXME_dTLifMax.y, staSetCon.uLifMax); + connect(FIXME_dTLifMin.y, staSetCon.uLifMin); +end ControllerG36Debug; diff --git a/Buildings/Templates/Plants/Chillers/Components/Controls/G36.mo b/Buildings/Templates/Plants/Chillers/Components/Controls/G36.mo new file mode 100644 index 00000000000..54e742e848f --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Controls/G36.mo @@ -0,0 +1,630 @@ +within Buildings.Templates.Plants.Chillers.Components.Controls; +block G36 + "Guideline 36 controller for CHW plant" + extends Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialController( + final typ=Buildings.Templates.Plants.Chillers.Types.Controller.G36); + final parameter Boolean closeCoupledPlant=is_clsCpl + "True: the plant is close coupled, i.e. the pipe length from the chillers to cooling towers does not exceed approximately 100 feet" + annotation (Dialog(tab="General")); + // ---- General: Chiller configuration ---- + final parameter Boolean have_parChi=cfg.typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + "Flag: true means that the plant has parallel chillers" + annotation (Dialog(tab="General",group="Chillers configuration")); + parameter Boolean have_ponyChiller=false + "True: have pony chiller" + annotation (Evaluate=true, + Dialog(group="Configuration")); + // FIXME: #2299 Incorrect description and usage of this parameter. + parameter Boolean need_reduceChillerDemand=false + "True: need limit chiller demand when chiller staging" + annotation (Evaluate=true, + Dialog(group="Configuration")); + // FIXME #2299 + final parameter Real desCap( + unit="W")=sum(dat.capChi_nominal) + "Plant design capacity" + annotation (Dialog(tab="General",group="Chillers configuration")); + // FIXME #2299: Why not use an enumeration? + parameter Integer chiTyp[cfg.nChi]=fill(Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.variableSpeedCentrifugal, cfg.nChi) + "Chiller type. Recommended staging order: positive displacement, variable speed centrifugal, constant speed centrifugal" + annotation (Dialog(tab="General",group="Chillers configuration")); + final parameter Real chiDesCap[cfg.nChi]( + each final unit="W")=dat.capChi_nominal + "Design chiller capacities vector" + annotation (Dialog(tab="General",group="Chillers configuration")); + final parameter Real chiMinCap[cfg.nChi]( + each final unit="W")=dat.capUnlChi_min + "Chiller minimum cycling loads vector" + annotation (Dialog(tab="General",group="Chillers configuration")); + final parameter Real TChiWatSupMin[cfg.nChi]( + each final unit="K", + each displayUnit="degC")=dat.TChiWatChiSup_nominal + "Minimum chilled water supply temperature" + annotation (Dialog(tab="General",group="Chillers configuration")); + // FIXME #2299: Should be provided for each chiller. + final parameter Real minChiLif( + final unit="K", + displayUnit="K")=dat.dTLifChi_min[1] + "Minimum allowable lift at minimum load for chiller" + annotation (Dialog(tab="General",group="Chillers configuration", + enable=not have_heaPreConSig)); + final parameter Boolean have_heaPreConSig=typCtlHea == Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.BuiltIn + "True: if there is head pressure control signal from chiller controller" + annotation (Dialog(tab="General",group="Chillers configuration")); + final parameter Boolean anyVsdCen=sum({if chiTyp[i] == Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Types.ChillersAndStages.variableSpeedCentrifugal + then 1 else 0 for i in 1:cfg.nChi}) > 0 + "True: the plant contains at least one variable speed centrifugal chiller" + annotation (Dialog(tab="General",group="Chillers configuration")); + // ---- General: Waterside economizer ---- + final parameter Boolean have_WSE=cfg.typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None + "True if the plant has waterside economizer. When the plant has waterside economizer, the condenser water pump speed must be variable" + annotation (Dialog(tab="General",group="Waterside economizer")); + final parameter Real heaExcAppDes( + unit="K", + displayUnit="K")=dat.dTAppEco_nominal + "Design heat exchanger approach" + annotation (Evaluate=true, + Dialog(tab="General",group="Waterside economizer", + enable=have_WSE)); + final parameter Boolean have_byPasValCon=cfg.typEco == Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithValve + "True: chilled water flow through economizer is controlled using heat exchanger bypass valve" + annotation (Dialog(group="Waterside economizer", + enable=have_WSE)); + // ----- General: Chilled water pump --- + final parameter Integer nChiWatPum=cfg.nPumChiWatPri + "Total number of chilled water pumps" + annotation (Dialog(tab="General",group="Chilled water pump")); + final parameter Boolean have_heaChiWatPum=cfg.typArrPumChiWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered + "Flag of headered chilled water pumps design: true=headered, false=dedicated" + annotation (Dialog(tab="General",group="Chilled water pump")); + final parameter Boolean have_locSenChiWatPum=not cfg.have_senDpChiWatRemWir + "True: there is local differential pressure sensor hardwired to the plant controller" + annotation (Dialog(tab="General",group="Chilled water pump")); + final parameter Integer nSenChiWatPum=cfg.nSenDpChiWatRem + "Total number of remote differential pressure sensors hardwired to the plant controller" + annotation (Dialog(tab="General",group="Chilled water pump")); + // ---- General: Condenser water pump ---- + final parameter Integer nConWatPum=cfg.nPumConWat + "Total number of condenser water pumps" + annotation (Dialog(tab="General",group="Condenser water pump")); + final parameter Boolean have_fixSpeConWatPum=not cfg.have_pumConWatVar + "True: the plant has fixed speed condenser water pumps. When the plant has waterside economizer, it must be false" + annotation (Dialog(tab="General",group="Condenser water pump", + enable=not have_WSE)); + final parameter Boolean have_heaConWatPum=cfg.typArrPumConWat == Buildings.Templates.Components.Types.PumpArrangement.Headered + "True: headered condenser water pumps" + annotation (Dialog(tab="General",group="Condenser water pump")); + // ---- General: Chiller staging settings ---- + final parameter Integer nStaChiOnl=if cfg.typEco == Buildings.Templates.Plants.Chillers.Types.Economizer.None + then nSta - 1 else sum({if sta[i, nUniSta] > 0 then 0 else 1 for i in 1:nSta}) - + 1 + "Number of chiller stages, neither zero stage nor the stages with enabled waterside economizer is included" + annotation (Evaluate=true, + Dialog(tab="General",group="Staging configuration")); + final parameter Integer totSta=nSta + "Total number of plant stages, including stage zero and the stages with a WSE, if applicable" + annotation (Evaluate=true, + Dialog(tab="General",group="Staging configuration")); + // FIXME #2299: This should be refactored, see details in the PR page. + // How can we specify that chillers are interchangeable (as opposed to required to run at a given stage) and should be lead/lag alternated? + final parameter Integer staMat[nStaChiOnl, cfg.nChi]( + each fixed=false) + "Staging matrix with chiller stage as row index and chiller as column index" + annotation (Dialog(tab="General",group="Staging configuration")); + final parameter Real desChiNum[nStaChiOnl + 1]={if i == 0 then 0 else sum( + staMat[i]) for i in 0:nStaChiOnl} + "Design number of chiller that should be ON at each chiller stage, including the zero stage" + annotation (Dialog(tab="General",group="Staging configuration")); + final parameter Real staTmp[nSta, nUniSta]={{if sta[i, j] > 0 then (if j <= cfg.nChi + then sta[i, j] else 0.5) else 0 for j in 1:nUniSta} for i in 1:nSta} + "Intermediary parameter to compute staVec" + annotation (Dialog(tab="General",group="Staging configuration")); + final parameter Real staVec[nSta]={sum(staTmp[i]) for i in 1:nSta} + "Plant stage vector, element value like x.5 means chiller stage x plus WSE" + annotation (Dialog(tab="General",group="Staging configuration")); + // FIXME #2299: Should only be enabled in case of water-cooled plants with variable speed condenser pumps. + final parameter Real desConWatPumSpe[nSta]( + final min=fill(0, nSta), + final max=fill(1, nSta))=dat.yPumConWatSta_nominal + "Design condenser water pump speed setpoints, according to current chiller stage and WSE status" + annotation (Dialog(tab="General",group="Staging configuration")); + // FIXME #2299: For dedicated CW pumps this should be a 2-D array [nSta, nPumConWat] which is more aligned with §5.20.9.6. + final parameter Real desConWatPumNum[nSta]=dat.yPumConWatSta_nominal + "Design number of condenser water pumps that should be ON, according to current chiller stage and WSE status" + annotation (Dialog(tab="General",group="Staging configuration")); + final parameter Real towCelOnSet[nSta]=dat.staCoo + "Design number of tower fan cells that should be ON, according to current chiller stage and WSE status" + annotation (Dialog(tab="General",group="Staging configuration")); + // ---- General: Cooling tower ---- + final parameter Integer nTowCel=cfg.nCoo + "Total number of cooling tower cells" + annotation (Dialog(tab="General",group="Cooling tower")); + final parameter Real cooTowAppDes( + unit="K", + displayUnit="K")=dat.dTAppCoo_nominal + "Design cooling tower approach" + annotation (Evaluate=true, + Dialog(tab="General",group="Cooling tower")); + // ---- Plant enable ---- + // FIXME #2299: This should be a software point (input connector), not a parameter. + // Currently disabled. + parameter Real schTab[4, 2]=[ + 0, 1; + 6 * 3600, 1; + 19 * 3600, 1; + 24 * 3600, 1] + "Plant enabling schedule allowing operators to lock out the plant during off-hour" + annotation (Dialog(tab="Plant enable", + enable=false)); + final parameter Real TChiLocOut( + unit="K", + displayUnit="degC")=dat.TOutChiWatLck + "Outdoor air lockout temperature below which the chiller plant should be disabled" + annotation (Dialog(tab="Plant enable")); + // ---- Waterside economizer ---- + final parameter Real TOutWetDes( + unit="K", + displayUnit="degC")=dat.TWetBulCooEnt_nominal + "Design outdoor air wet bulb temperature" + annotation (Evaluate=true, + Dialog(tab="Waterside economizer",group="Design parameters")); + final parameter Real VHeaExcDes_flow( + unit="m3/s")=dat.VChiWatEco_flow_nominal + "Design heat exchanger chilled water volume flow rate" + annotation (Evaluate=true, + Dialog(tab="Waterside economizer",group="Design parameters")); + final parameter Real dpDes=dat.dpChiWatEco_nominal + "Design pressure difference across the chilled water side economizer" + annotation (Dialog(tab="Waterside economizer",group="Valve or pump control")); + // ---- Head pressure ---- + final parameter Real minConWatPumSpe( + unit="1")=dat.yPumConWat_min + "Minimum condenser water pump speed" + annotation (Dialog(enable=not + ((not have_WSE) and + have_fixSpeConWatPum),tab= + "Head pressure",group="Limits")); + final parameter Real minHeaPreValPos( + unit="1")=dat.yValConWatChiIso_min + "Minimum head pressure control valve position" + annotation (Dialog(enable=(not + ((not have_WSE) and + (not have_fixSpeConWatPum))),tab= + "Head pressure",group="Limits")); + // ---- Minimum flow bypass ---- + final parameter Real minFloSet[cfg.nChi]( + each final unit="m3/s")=dat.VChiWatChi_flow_min + "Minimum chilled water flow through each chiller" + annotation (Dialog(tab="Minimum flow bypass",group="Flow limits")); + final parameter Real maxFloSet[cfg.nChi]( + each final unit="m3/s")=dat.VChiWatChi_flow_nominal + "Maximum chilled water flow through each chiller" + annotation (Dialog(tab="Minimum flow bypass",group="Flow limits")); + // ---- Chilled water pumps ---- + // FIXME #2299: Dependency to stage and plant configuration not addressed. + final parameter Real minChiWatPumSpe( + unit="1")=dat.yPumChiWatPri_min + "Minimum pump speed" + annotation (Dialog(tab="Chilled water pumps",group="Speed controller")); + // FIXME #2299: Dependency to stage and plant configuration not addressed. + final parameter Real maxChiWatPumSpe( + unit="1")=1 + "Maximum pump speed" + annotation (Dialog(tab="Chilled water pumps",group="Speed controller")); + final parameter Integer nPum_nominal( + final max=nChiWatPum, + final min=1)=dat.cfg.nPumChiWatPri + "Total number of pumps that operate at design conditions" + annotation (Dialog(tab="Chilled water pumps",group="Nominal conditions")); + // FIXME #2299: Dependency to plant configuration not addressed. + final parameter Real VChiWat_flow_nominal( + unit="m3/s")=dat.VChiWatPri_flow_nominal + "Total plant design chilled water flow rate" + annotation (Dialog(tab="Chilled water pumps",group="Nominal conditions")); + final parameter Real maxLocDp( + unit="Pa")=dat.dpChiWatLocSet_max + "Maximum chilled water loop local differential pressure setpoint" + annotation (Dialog(tab="Chilled water pumps",group= + "Pump speed control when there is local DP sensor")); + // ---- Plant reset ---- + // FIXME #2299: Dependency to plant configuration not addressed. + final parameter Real dpChiWatPumMin( + unit="Pa", + displayUnit="Pa")=dat.dpChiWatLocSet_min + "Minimum chilled water pump differential static pressure, default 5 psi" + annotation (Dialog(tab="Plant Reset",group="Chilled water supply")); + final parameter Real dpChiWatPumMax[nSenChiWatPum]( + each final unit="Pa", + each displayUnit="Pa")=dat.dpChiWatRemSet_max + "Maximum chilled water pump differential static pressure, the array size equals to the number of remote pressure sensor" + annotation (Dialog(tab="Plant Reset",group="Chilled water supply")); + final parameter Real TChiWatSupMax( + unit="K", + displayUnit="degC")=dat.TChiWatSup_max + "Maximum chilled water supply temperature, default 60 degF" + annotation (Dialog(tab="Plant Reset",group="Chilled water supply")); + // ---- Cooling tower: fan speed ---- + final parameter Real fanSpeMin( + unit="1")=dat.yFanCoo_min + "Minimum tower fan speed" + annotation (Dialog(tab="Cooling Towers",group="Fan speed")); + // Fan speed control: controlling condenser return water temperature when WSE is not enabled + final parameter Real LIFT_min[cfg.nChi]( + each final unit="K")=dat.dTLifChi_min + "Minimum LIFT of each chiller" + annotation (Evaluate=true, + Dialog(tab="Cooling Towers",group="Fan speed: Return temperature control")); + final parameter Real TConWatSup_nominal[cfg.nChi]( + each final unit="K", + each displayUnit="degC")=dat.TConWatSupChi_nominal + "Condenser water supply temperature (condenser entering) of each chiller" + annotation (Evaluate=true, + Dialog(tab="Cooling Towers",group="Fan speed: Return temperature control")); + final parameter Real TConWatRet_nominal[cfg.nChi]( + each final unit="K", + each displayUnit="degC")=dat.TConWatRetChi_nominal + "Condenser water return temperature (condenser leaving) of each chiller" + annotation (Evaluate=true, + Dialog(tab="Cooling Towers",group="Fan speed: Return temperature control")); + // ---- Cooling tower: Water level control ---- + // FIXME #2299: Should be homogenous to [m]. + final parameter Real watLevMin( + unit="1")=dat.hLevCoo_min / dat.hLevAlaCoo_max + "Minimum cooling tower water level recommended by manufacturer" + annotation (Dialog(tab="Cooling Towers",group="Makeup water")); + // FIXME #2299: Should be homogenous to [m]. + final parameter Real watLevMax( + unit="1")=dat.hLevCoo_max / dat.hLevAlaCoo_max + "Maximum cooling tower water level recommended by manufacturer" + annotation (Dialog(tab="Cooling Towers",group="Makeup water")); + ControllerG36Debug ctl( + final nChi=cfg.nChi, + final closeCoupledPlant=closeCoupledPlant, + final have_ponyChiller=have_ponyChiller, + final need_reduceChillerDemand=need_reduceChillerDemand, + final chiTyp=chiTyp, + final schTab=schTab, + final have_parChi=have_parChi, + final desCap=desCap, + final chiDesCap=chiDesCap, + final chiMinCap=chiMinCap, + final TChiWatSupMin=TChiWatSupMin, + final minChiLif=minChiLif, + final have_heaPreConSig=have_heaPreConSig, + final anyVsdCen=anyVsdCen, + final have_WSE=have_WSE, + final heaExcAppDes=heaExcAppDes, + final have_byPasValCon=have_byPasValCon, + final nChiWatPum=nChiWatPum, + final have_heaChiWatPum=have_heaChiWatPum, + final have_locSenChiWatPum=have_locSenChiWatPum, + final nSenChiWatPum=nSenChiWatPum, + final nConWatPum=nConWatPum, + final have_fixSpeConWatPum=have_fixSpeConWatPum, + final have_heaConWatPum=have_heaConWatPum, + final nSta=nStaChiOnl, + final totSta=nSta, + final staMat=staMat, + final desChiNum=desChiNum, + final staVec=staVec, + final desConWatPumSpe=desConWatPumSpe, + final desConWatPumNum=desConWatPumNum, + final towCelOnSet=towCelOnSet, + final nTowCel=nTowCel, + final cooTowAppDes=cooTowAppDes, + final TChiLocOut=TChiLocOut, + final TOutWetDes=TOutWetDes, + final VHeaExcDes_flow=VHeaExcDes_flow, + final dpDes=dpDes, + final minConWatPumSpe=minConWatPumSpe, + final minHeaPreValPos=minHeaPreValPos, + final minFloSet=minFloSet, + final maxFloSet=maxFloSet, + final minChiWatPumSpe=minChiWatPumSpe, + final maxChiWatPumSpe=maxChiWatPumSpe, + final nPum_nominal=nPum_nominal, + final VChiWat_flow_nominal=VChiWat_flow_nominal, + final maxLocDp=maxLocDp, + final dpChiWatPumMin=dpChiWatPumMin, + final dpChiWatPumMax=dpChiWatPumMax, + final TChiWatSupMax=TChiWatSupMax, + final fanSpeMin=fanSpeMin, + final LIFT_min=LIFT_min, + final TConWatSup_nominal=TConWatSup_nominal, + final TConWatRet_nominal=TConWatRet_nominal, + final watLevMin=watLevMin, + final watLevMax=watLevMax) + "Plant controller" + annotation (Placement(transformation(extent={{0,-40},{20,20}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant RFE_uHeaPreCon[cfg.nChi]( + each k=0) + "Add chiller head pressure control demand signal from built-in chiller controller" + annotation (Placement(transformation(extent={{-140,-270},{-120,-250}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_uChiLoa[cfg.nChi]( + each k=1) + "#2299: Should be computed internally, in J/s, not A" + annotation (Placement(transformation(extent={{-140,50},{-120,70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant FIXME_uChiAva[cfg.nChi]( + each k=true) + "#2299: The logic to assess chiller availability is described in G36 5.1.15.5.b.1.ii but is not implemented here." + annotation (Placement(transformation(extent={{-140,10},{-120,30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant FIXME_uChiHeaCon[cfg.nChi]( + each k=true) + "#2299: This signal should be internally computed by the stage up and down sequences" + annotation (Placement(transformation(extent={{-140,-30},{-120,-10}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_uConWatPumSpe[cfg.nPumConWat]( + each k=1) + "#2299: Should be the commanded speed output from subcontroller." + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_uChiCooLoa[cfg.nChi]( + each k=1) + "#2299: The chiller load (𝑄𝑟𝑒𝑞𝑢𝑖𝑟𝑒𝑑) shall be internally calculated by the controller" + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_uFanSpe( + k=1) + "#2299: This should be the commanded speed `ySpeSet` computed internally" + annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_uIsoVal[cfg.nCoo]( + each k=1) + "#2299 Should be Boolean + missing dependency to plant configuration" + annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant RFE_watLev( + k=0.1) + "Add basin model with level and heating demand signal" + annotation (Placement(transformation(extent={{-100,-270},{-80,-250}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant FIXME_yTowCelIsoVal[cfg.nCoo]( + each k=true) + if cfg.typValCooInlIso == Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + or cfg.typValCooOutIso == Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + "#2299 Should be Boolean and conditional to a configuration parameter" + annotation (Placement(transformation(extent={{60,-250},{80,-230}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_VChiWat_flow( + k=0.01) + if not have_senVChiWatPri + "#2299 Should be conditional" + annotation (Placement(transformation(extent={{-140,90},{-120,110}}))); + Buildings.Utilities.Psychrometrics.TWetBul_TDryBulPhi FIXME_TOutWet( + redeclare final package Medium=Buildings.Media.Air) + "#2299 Two input points should rather be used for OA DB temperature and RH." + annotation (Placement(transformation(extent={{-140,-70},{-120,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant p_default( + final k=Buildings.Media.Air.p_default) + "Default outdoor air absolute pressure" + annotation (Placement(transformation(extent={{-180,-90},{-160,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_TConWatRet( + k=Buildings.Templates.Data.Defaults.TConWatRet) + "#2299: Missing connectors and dependency to plant configuration" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_TChiWatSup( + k=Buildings.Templates.Data.Defaults.TChiWatSup) + if not have_senTChiWatPriSup + "#2299: Missing dependency to plant configuration" + annotation (Placement(transformation(extent={{-60,130},{-40,150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant FIXME_TConWatSup( + k=Buildings.Templates.Data.Defaults.TConWatSup) + if not + (typCtlFanCoo == Buildings.Templates.Plants.Chillers.Types.CoolerFanSpeedControl.SupplyTemperature + or typCtlFanCoo == Buildings.Templates.Plants.Chillers.Types.CoolerFanSpeedControl.ReturnTemperature + and not is_clsCpl) + "#2299: Missing dependency to plant configuration" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant FIXME_uConWatPum[cfg.nPumConWat]( + each k=true) + if cfg.typChi <> Buildings.Templates.Components.Types.Chiller.WaterCooled + "#2299: Missing dependency to plant configuration" + annotation (Placement(transformation(extent={{-180,-10},{-160,10}}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum FIXME_yChiPumSpe( + final k=fill(1 / cfg.nPumChiWatPri, cfg.nPumChiWatPri), + final nin=cfg.nPumChiWatPri) + if cfg.have_pumChiWatPriVar + "#2299 Should be scalar and conditional" + annotation (Placement(transformation(extent={{60,-130},{80,-110}}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum FIXME_yTowFanSpe( + final k=fill(1 / cfg.nCoo, cfg.nCoo), + final nin=cfg.nCoo) + "#2299 Should be scalar and conditional" + annotation (Placement(transformation(extent={{90,-270},{110,-250}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator FIXME_TChiWatSupSet( + final nout=cfg.nChi) + "#2299 Should be vectorial (typ. each chiller)" + annotation (Placement(transformation(extent={{60,-90},{80,-70}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum reqResChiWatAirHan( + final nin=nAirHan) + "Sum of CHW reset requests from AHU" + annotation (Placement(transformation(extent={{230,110},{210,130}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum reqPlaChiWatEquZon( + final nin=nEquZon) + "Sum of CHW plant requests from zone equipment" + annotation (Placement(transformation(extent={{230,-130},{210,-110}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum reqResChiWatEquZon( + final nin=nEquZon) + "Sum of CHW reset requests from zone equipment" + annotation (Placement(transformation(extent={{230,-170},{210,-150}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum reqPlaChiWatAirHan( + final nin=nAirHan) + "Sum of CHW plant requests from AHU" + annotation (Placement(transformation(extent={{230,150},{210,170}}))); + Buildings.Controls.OBC.CDL.Integers.Add reqPlaChiWat + "Sum of CHW plant requests of all loads served" + annotation (Placement(transformation(extent={{190,144},{170,164}}))); + Buildings.Controls.OBC.CDL.Integers.Add reqResChiWat + "Sum of CHW reset requests of all loads served" + annotation (Placement(transformation(extent={{190,104},{170,124}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant FIXME_yValChiWatChiByp( + final k=false) + if cfg.have_valChiWatChiBypPar + "#2299 For primary-only parallel chiller plants with WSE, missing logic for chiller bypass valve" + annotation (Placement(transformation(extent={{100,-110},{120,-90}}))); + Buildings.Controls.OBC.CDL.Reals.Hysteresis FIXME_y1ValConWatIso( + uLow=0.1, + uHigh=0.2) + if cfg.typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None + "#2299 Should be Boolean" + annotation (Placement(transformation(extent={{100,10},{120,30}}))); + Buildings.Controls.OBC.CDL.Reals.MultiMax FIXME_yConWatPumSpe( + final nin=nConWatPum) + if cfg.typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled + and cfg.typArrPumConWat == Buildings.Templates.Components.Types.PumpArrangement.Headered + "#2299 Should be scalar in case of headered CW pumps" + annotation (Placement(transformation(extent={{100,-150},{120,-130}}))); +protected + Integer idx + "Iteration variable for algorithm section"; +initial algorithm + idx := 1; + if cfg.typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None + then + for i in 2:nSta loop + if sta[i, nUniSta] < 1 then + staMat[idx] := {if sta[i, j] > 0 then 1 else 0 for j in 1:cfg.nChi}; + idx := idx + 1; + end if; + end for; + else + staMat := {{if sta[k + 1, j] > 0 then 1 else 0 for j in 1:cfg.nChi} for k in 1:nStaChiOnl}; + end if; +algorithm + /* + The when clause makes the variable discrete, and when the algorithm is executed, + it is initialized with its pre value. + */ + when sample(0, 3E7) then + idx := 0; + end when; +equation + /* Control point connection - start */ + connect(busChi.y1ReqFloChiWat, ctl.uChiWatReq); + connect(busChi.y1ReqFloConWat, ctl.uConWatReq); + connect(bus.pumChiWatPri.y1_actual, ctl.uChiWatPum); + connect(bus.dpChiWatLoc, ctl.dpChiWat_local); + connect(bus.dpChiWatRem, ctl.dpChiWat_remote); + connect(bus.VChiWatPri_flow, ctl.VChiWat_flow); + connect(busChi.y1_actual, ctl.uChi); + connect(bus.TChiWatEcoAft, ctl.TChiWatRetDow); + /* FIXME #2299: In G36 controller there is only one input point TChiWatRet + which is both used for WSE control (as TChiWatEcoBef) and capacity requirement. + The use of TChiWatEcoBef for capacity requirement in primary-only plants is incorrect. + */ + if cfg.typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None + then + connect(bus.TChiWatEcoBef, ctl.TChiWatRet); + else + connect(bus.TChiWatPlaRet, ctl.TChiWatRet); + end if; + connect(bus.TConWatSup, ctl.TConWatSup); + connect(FIXME_TConWatSup.y, ctl.TConWatSup); + connect(bus.TChiWatPriSup, ctl.TChiWatSup); + connect(FIXME_TChiWatSup.y, ctl.TChiWatSup); + connect(bus.dpChiWatEco, ctl.dpChiWat); + connect(bus.pumConWat.y1_actual, ctl.uConWatPum); + connect(FIXME_uConWatPum.y, ctl.uConWatPum); + // HACK Dymola does not automatically remove the clause at translation. + if cfg.typEco == Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithPump + then + connect(bus.pumChiWatEco.y1_actual, ctl.uEcoPum); + end if; + connect(bus.TChiWatEcoEnt, ctl.TEntHex); + connect(bus.TOut, ctl.TOut); + connect(busCoo.y1_actual, ctl.uTowSta); + connect(busValChiWatChiIso.y_actual, ctl.uChiWatIsoVal); + connect(FIXME_uIsoVal.y, ctl.uIsoVal); + connect(RFE_uHeaPreCon.y, ctl.uHeaPreCon); + connect(FIXME_uChiLoa.y, ctl.uChiLoa); + connect(FIXME_uChiAva.y, ctl.uChiAva); + connect(FIXME_uChiHeaCon.y, ctl.uChiHeaCon); + connect(FIXME_uConWatPumSpe.y, ctl.uConWatPumSpe); + connect(FIXME_uChiCooLoa.y, ctl.uChiCooLoa); + connect(FIXME_uFanSpe.y, ctl.uFanSpe); + connect(RFE_watLev.y, ctl.watLev); + connect(FIXME_VChiWat_flow.y, ctl.VChiWat_flow); + connect(bus.TOut, FIXME_TOutWet.TDryBul); + connect(bus.phiOut, FIXME_TOutWet.phi); + connect(FIXME_TOutWet.TWetBul, ctl.TOutWet); + connect(FIXME_TConWatRet.y, ctl.TConWatRet); + // Controller outputs + connect(ctl.TChiWatSupSet, bus.TChiWatSupSet); + connect(ctl.yMinValPosSet, bus.valChiWatMinByp.y); + connect(ctl.yChiWatIsoVal, busValChiWatChiIso.y); + connect(ctl.yConWatIsoVal, busValConWatChiIso.y); + connect(ctl.y1ConWatIsoVal, busValConWatChiIso.y1); + connect(ctl.yWseRetVal, bus.valChiWatEcoByp.y); + connect(ctl.yWsePumOn, bus.pumChiWatEco.y1); + connect(ctl.yWsePumSpe, bus.pumChiWatEco.y); + connect(FIXME_TChiWatSupSet.y, busChi.TSupSet); + connect(ctl.yChiWatPum, bus.pumChiWatPri.y1); + connect(FIXME_yChiPumSpe.y, bus.pumChiWatPri.y); + connect(ctl.yChi, busChi.y1); + connect(ctl.yConWatPum, bus.pumConWat.y1); + connect(FIXME_yConWatPumSpe.y, bus.pumConWat.y); + connect(FIXME_yTowCelIsoVal.y, busValCooInlIso.y1); + connect(FIXME_yTowCelIsoVal.y, busValCooOutIso.y1); + connect(FIXME_yTowFanSpe.y, bus.yCoo); + connect(ctl.yTowCel, bus.y1Coo); + connect(FIXME_yValChiWatChiByp.y, bus.valChiWatChiByp.y1); + connect(FIXME_y1ValConWatIso.y, bus.valConWatEcoIso.y1); + /* Control point connection - stop */ + connect(p_default.y, FIXME_TOutWet.p) + annotation (Line(points={{-158,-80},{-150,-80},{-150,-68},{-141,-68}},color={0,0,127})); + connect(ctl.yChiPumSpe, FIXME_yChiPumSpe.u) + annotation (Line(points={{22,6.5},{40,6.5},{40,-120},{58,-120}},color={0,0,127})); + connect(ctl.yTowFanSpe, FIXME_yTowFanSpe.u) + annotation (Line(points={{22,-28},{30,-28},{30,-260},{88,-260}},color={0,0,127})); + connect(ctl.TChiWatSupSet, FIXME_TChiWatSupSet.u) + annotation (Line(points={{22,11},{28,11},{28,-80},{58,-80}},color={0,0,127})); + connect(reqPlaChiWat.y, ctl.chiPlaReq) + annotation (Line(points={{168,154},{-18,154},{-18,-22},{-2,-22}},color={255,127,0})); + connect(reqResChiWat.y, ctl.TChiWatSupResReq) + annotation (Line(points={{168,114},{-14,114},{-14,-20.5},{-2,-20.5}},color={255,127,0})); + connect(busAirHan.reqPlaChiWat, reqPlaChiWatAirHan.u) + annotation (Line(points={{260,140},{240,140},{240,160},{232,160}},color={255,204,51},thickness=0.5)); + connect(busAirHan.reqResChiWat, reqResChiWatAirHan.u) + annotation (Line(points={{260,140},{240,140},{240,120},{232,120}},color={255,204,51},thickness=0.5)); + connect(busEquZon.reqResChiWat, reqResChiWatEquZon.u) + annotation (Line(points={{260,-140},{240,-140},{240,-160},{232,-160}},color={255,204,51},thickness=0.5)); + connect(busEquZon.reqPlaChiWat, reqPlaChiWatEquZon.u) + annotation (Line(points={{260,-140},{240,-140},{240,-120},{232,-120}},color={255,204,51},thickness=0.5)); + connect(reqPlaChiWatAirHan.y, reqPlaChiWat.u1) + annotation (Line(points={{208,160},{192,160}},color={255,127,0})); + connect(reqResChiWatAirHan.y, reqResChiWat.u1) + annotation (Line(points={{208,120},{192,120}},color={255,127,0})); + connect(reqPlaChiWatEquZon.y, reqPlaChiWat.u2) + annotation (Line(points={{208,-120},{200,-120},{200,148},{192,148}},color={255,127,0})); + connect(reqResChiWatEquZon.y, reqResChiWat.u2) + annotation (Line(points={{208,-160},{198,-160},{198,108},{192,108}},color={255,127,0})); + connect(ctl.yEcoConWatIsoVal, FIXME_y1ValConWatIso.u) + annotation (Line(points={{22,19.25},{100,19.25},{100,20},{98,20}},color={0,0,127})); + connect(ctl.yConWatPumSpe, FIXME_yConWatPumSpe.u) + annotation (Line(points={{22,-5.5},{22,-6},{38,-6},{38,-140},{98,-140}}, + color={0,0,127})); + annotation ( + Documentation( + info=" +

                      Description

                      +

                      +This is an implementation of the control sequence specified in ASHRAE (2021) +for chilled water plants. +It is based on + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Controller. +

                      +

                      Details

                      +

                      +To be updated. +

                      +

                      References

                      +
                        +
                      • +ASHRAE, 2021. Guideline 36-2021, High-Performance Sequences of Operation +for HVAC Systems. Atlanta, GA. +
                      • +
                      +", + revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end G36; diff --git a/Buildings/Templates/Plants/Chillers/Components/Controls/OpenLoop.mo b/Buildings/Templates/Plants/Chillers/Components/Controls/OpenLoop.mo new file mode 100644 index 00000000000..0a16b3262d8 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Controls/OpenLoop.mo @@ -0,0 +1,360 @@ +within Buildings.Templates.Plants.Chillers.Components.Controls; +block OpenLoop + "Open loop controller (output signals only)" + extends Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialController( + final typ=Buildings.Templates.Plants.Chillers.Types.Controller.OpenLoop); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet[cfg.nChi]( + y( + each final unit="K", + each displayUnit="degC"), + each k=Buildings.Templates.Data.Defaults.TChiWatSup) + "CHW supply temperature set point" + annotation (Placement(transformation(extent={{-80,250},{-100,270}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yPumChiWatPri( + k=1) + if cfg.have_pumChiWatPriVar and cfg.have_pumChiWatPriVarCom + "Primary CHW pump speed signal" + annotation (Placement(transformation(extent={{-130,50},{-110,70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yPumChiWatPriDed[cfg.nPumChiWatPri]( + each k=1) + if cfg.have_pumChiWatPriVar and not cfg.have_pumChiWatPriVarCom + "Primary CHW pump speed signal - Dedicated" + annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yPumChiWatSec( + k=1) + if cfg.have_pumChiWatSec + "Secondary CHW pump speed signal" + annotation (Placement(transformation(extent={{-120,-20},{-100,0}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yPumConWat( + k=1) + if cfg.typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled + and cfg.have_pumConWatVar and cfg.have_pumConWatVarCom + "CW pump speed signal" + annotation (Placement(transformation(extent={{-130,-70},{-110,-50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yPumConWatDed[cfg.nPumConWat]( + each k=1) + if cfg.typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled + and cfg.have_pumConWatVar and not cfg.have_pumConWatVarCom + "CW pump speed signal - Dedicated" + annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yValChiWatChiIso[cfg.nChi]( + each k=1) + if cfg.typValChiWatChiIso == Buildings.Templates.Components.Types.Valve.TwoWayModulating + "Chiller CHW isolation valve opening signal" + annotation (Placement(transformation(extent={{-110,210},{-130,230}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yValConWatChiIso[cfg.nChi]( + each k=1) + if cfg.typValConWatChiIso == Buildings.Templates.Components.Types.Valve.TwoWayModulating + "Chiller CW isolation valve opening signal" + annotation (Placement(transformation(extent={{-40,170},{-60,190}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1ValCooInlIso[cfg.nCoo]( + each table=[ + 0, 0; + 1, 0; + 1, 1; + 2, 1], + each timeScale=1000, + each period=2000) + if cfg.typValCooInlIso == Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + "Cooler inlet isolation valve opening signal" + annotation (Placement(transformation(extent={{-140,-190},{-160,-170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yValCooInlIso[cfg.nCoo]( + each k=1) + if cfg.typValCooInlIso == Buildings.Templates.Components.Types.Valve.TwoWayModulating + "Cooler inlet isolation valve opening signal" + annotation (Placement(transformation(extent={{-110,-210},{-130,-190}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yValCooOutIso[cfg.nCoo]( + each k=1) + if cfg.typValCooOutIso == Buildings.Templates.Components.Types.Valve.TwoWayModulating + "Cooler outlet isolation valve opening signal" + annotation (Placement(transformation(extent={{-30,-250},{-50,-230}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yCoo( + k=1) + if cfg.typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled + "Cooler fan speed signal" + annotation (Placement(transformation(extent={{60,-290},{40,-270}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1Chi[cfg.nChi]( + each table=[ + 0, 0; + 1, 0; + 1, 1; + 2, 1], + each timeScale=1000, + each period=2000) + "Chiller Start/Stop signal" + annotation (Placement(transformation(extent={{-140,270},{-160,290}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1Coo[cfg.nCoo]( + each table=[ + 0, 0; + 1, 0; + 1, 1; + 2, 1], + each timeScale=1000, + each period=2000) + if cfg.typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled + "Cooler Start/Stop signal" + annotation (Placement(transformation(extent={{20,-270},{0,-250}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1ValCooOutIso[cfg.nCoo]( + each table=[ + 0, 0; + 1, 0; + 1, 1; + 2, 1], + each timeScale=1000, + each period=2000) + if cfg.typValCooOutIso == Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + "Cooler outlet isolation valve opening signal" + annotation (Placement(transformation(extent={{-60,-230},{-80,-210}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1PumChiWatSec[cfg.nPumChiWatSec]( + each table=[ + 0, 0; + 1, 0; + 1, 1; + 2, 1], + each timeScale=1000, + each period=2000) + "Secondary CHW pump Start/Stop signal" + annotation (Placement(transformation(extent={{-160,10},{-140,30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1ValChiWatChiIso[cfg.nChi]( + each table=[ + 0, 0; + 1, 0; + 1, 1; + 2, 1], + each timeScale=1000, + each period=2000) + if cfg.typValChiWatChiIso == Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + "Chiller CHW isolation valve opening signal" + annotation (Placement(transformation(extent={{-140,230},{-160,250}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1ValConWatChiIso[cfg.nChi]( + each table=[ + 0, 0; + 1, 0; + 1, 1; + 2, 1], + each timeScale=1000, + each period=2000) + if cfg.typValConWatChiIso == Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + "Chiller CW isolation valve opening signal" + annotation (Placement(transformation(extent={{-70,190},{-90,210}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1PumChiWatPri[cfg.nChi]( + each table=[ + 0, 0; + 1, 0; + 1, 1; + 2, 1], + each timeScale=1000, + each period=2000) + "Primary CHW pump Start/Stop signal" + annotation (Placement(transformation(extent={{-160,70},{-140,90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1PumConWat[cfg.nChi]( + each table=[ + 0, 0; + 1, 0; + 1, 1; + 2, 1], + each timeScale=1000, + each period=2000) + if cfg.typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled + "CW pump Start/Stop signal" + annotation (Placement(transformation(extent={{-160,-50},{-140,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yValChiWatMinByp( + k=0) + "CHW minimum flow bypass valve opening signal" + annotation (Placement(transformation(extent={{-160,110},{-140,130}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1ValChiWatChiBypSer[cfg.nChi]( + each table=[ + 0, 0; + 1, 0; + 1, 1; + 2, 1], + each timeScale=1000, + each period=2000) + "Chiller CHW bypass valve opening signal - Series chillers" + annotation (Placement(transformation(extent={{-100,130},{-120,150}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1ValChiWatChiBypPar( + table=[ + 0, 0; + 1, 0; + 1, 1; + 2, 1], + timeScale=1000, + period=2000) + "Chiller CHW bypass valve opening signal - Parallel chillers" + annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yValChiWatEcoByp( + k=1) + "WSE CHW bypass valve opening signal" + annotation (Placement(transformation(extent={{-160,-110},{-140,-90}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yPumChiWatEco( + k=1) + "WSE CHW HX pump speed signal" + annotation (Placement(transformation(extent={{-130,-170},{-110,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1PumChiWatEco( + table=[ + 0, 0; + 1, 0; + 1, 1; + 2, 1], + timeScale=1000, + period=2000) + "WSE CHW HX pump Start/Stop signal" + annotation (Placement(transformation(extent={{-160,-150},{-140,-130}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1ValConWatEcoIso( + table=[ + 0, 0; + 1, 0; + 1, 1; + 2, 1], + timeScale=1000, + period=2000) + "WSE CW isolation valve opening signal" + annotation (Placement(transformation(extent={{-120,-130},{-100,-110}}))); +protected + Buildings.Templates.Components.Interfaces.Bus busPumChiWatPri + "Primary CHW pumps control bus" + annotation (Placement(transformation(extent={{120,40},{160,80}}), + iconTransformation(extent={{-316,184},{-276,224}}))); + Buildings.Templates.Components.Interfaces.Bus busPumConWat + if cfg.typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled + "CW pumps control bus" + annotation (Placement(transformation(extent={{120,-60},{160,-20}}), + iconTransformation(extent={{-316,184},{-276,224}}))); + Buildings.Templates.Components.Interfaces.Bus busPumChiWatSec + if cfg.have_pumChiWatSec + "Secondary CHW pumps control bus" + annotation (Placement(transformation(extent={{120,0},{160,40}}), + iconTransformation(extent={{-316,184},{-276,224}}))); + Buildings.Templates.Components.Interfaces.Bus busValChiWatMinByp + "CHW minimum flow bypass valve control bus" + annotation (Placement(transformation(extent={{120,100},{160,140}}), + iconTransformation(extent={{-422,198},{-382,238}}))); + Buildings.Templates.Components.Interfaces.Bus busValChiWatChiBypPar + if cfg.typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + "Chiller CHW bypass valve control bus - Parallel chillers" + annotation (Placement(transformation(extent={{120,140},{160,180}}), + iconTransformation(extent={{-422,198},{-382,238}}))); + Buildings.Templates.Components.Interfaces.Bus busValChiWatEcoByp + "WSE CHW bypass valve control bus" + annotation (Placement(transformation(extent={{120,-120},{160,-80}}), + iconTransformation(extent={{-422,198},{-382,238}}))); + Buildings.Templates.Components.Interfaces.Bus busPumChiWatEco + "WSE CHW HX pump control bus" + annotation (Placement(transformation(extent={{120,-180},{160,-140}}), + iconTransformation(extent={{-316,184},{-276,224}}))); + Buildings.Templates.Components.Interfaces.Bus busValConWatEcoIso + "WSE CW isolation valve control bus" + annotation (Placement(transformation(extent={{120,-140},{160,-100}}), + iconTransformation(extent={{-422,198},{-382,238}}))); +equation + /* + HACK: The following clauses should be removed at translation if `not cfg.have_pumChiWatSec` + but Dymola fails to do so. + Hence, explicit `if then` statements are used. + */ if cfg.have_pumChiWatSec then + connect(yPumChiWatSec.y, busPumChiWatSec.y) + annotation (Line(points={{-98,-10},{140,-10},{140,20}},color={0,0,127})); + connect(busPumChiWatSec, bus.pumChiWatSec) + annotation (Line(points={{140,20},{160,20},{160,0},{-260,0}},color={255,204,51},thickness=0.5)); + connect(y1PumChiWatSec.y[1], busPumChiWatSec.y1) + annotation (Line(points={{-138,20},{140,20}},color={255,0,255})); + end if; + connect(yPumChiWatPri.y, busPumChiWatPri.y) + annotation (Line(points={{-108,60},{140,60}},color={0,0,127})); + connect(busPumChiWatPri, bus.pumChiWatPri) + annotation (Line(points={{140,60},{170,60},{170,0},{-260,0}},color={255,204,51},thickness=0.5)); + connect(yPumConWat.y, busPumConWat.y) + annotation (Line(points={{-108,-60},{140,-60},{140,-40}},color={0,0,127})); + connect(busPumConWat, bus.pumConWat) + annotation (Line(points={{140,-40},{160,-40},{160,0},{-260,0}},color={255,204,51},thickness=0.5)); + connect(y1PumChiWatPri.y[1], busPumChiWatPri.y1) + annotation (Line(points={{-138,80},{140,80},{140,60}},color={255,0,255})); + connect(y1PumConWat.y[1], busPumConWat.y1) + annotation (Line(points={{-138,-40},{140,-40}},color={255,0,255})); + connect(yValChiWatMinByp.y, busValChiWatMinByp.y) + annotation (Line(points={{-138,120},{140,120}},color={0,0,127})); + connect(y1ValChiWatChiBypSer.y[1], busValChiWatChiBypSer.y1) + annotation (Line(points={{-122,140},{-180,140},{-180,80},{-240,80}},color={255,0,255})); + connect(busValChiWatChiBypPar, bus.valChiWatChiByp) + annotation (Line(points={{140,160},{190,160},{190,0},{-260,0}},color={255,204,51},thickness=0.5)); + connect(y1ValChiWatChiBypPar.y[1], busValChiWatChiBypPar.y1) + annotation (Line(points={{-138,160},{140,160}},color={255,0,255})); + connect(busValChiWatMinByp, bus.valChiWatMinByp) + annotation (Line(points={{140,120},{180,120},{180,0},{-260,0}},color={255,204,51},thickness=0.5)); + connect(yPumChiWatEco.y, busPumChiWatEco.y) + annotation (Line(points={{-108,-160},{140,-160}},color={0,0,127})); + connect(y1PumChiWatEco.y[1], busPumChiWatEco.y1) + annotation (Line(points={{-138,-140},{140,-140},{140,-160}},color={255,0,255})); + connect(yValChiWatEcoByp.y, busValChiWatEcoByp.y) + annotation (Line(points={{-138,-100},{140,-100}},color={0,0,127})); + connect(busPumChiWatEco, bus.pumChiWatEco) + annotation (Line(points={{140,-160},{190,-160},{190,0},{-260,0}},color={255,204,51},thickness=0.5)); + connect(busValChiWatEcoByp, bus.valChiWatEcoByp) + annotation (Line(points={{140,-100},{170,-100},{170,0},{-260,0}},color={255,204,51},thickness=0.5)); + connect(busValConWatEcoIso, bus.valConWatEcoIso) + annotation (Line(points={{140,-120},{180,-120},{180,0},{-260,0}},color={255,204,51},thickness=0.5)); + connect(y1ValConWatEcoIso.y[1], busValConWatEcoIso.y1) + annotation (Line(points={{-98,-120},{140,-120}},color={255,0,255})); + connect(yPumConWatDed.y, busPumConWat.y) + annotation (Line(points={{-78,-80},{140,-80},{140,-40}},color={0,0,127}), + Text(string="%second",index=1,extent={{6,3},{6,3}},horizontalAlignment=TextAlignment.Left)); + connect(yPumChiWatPriDed.y, busPumChiWatPri.y) + annotation (Line(points={{-78,40},{140,40},{140,60}},color={0,0,127}),Text(string= + "%second",index=1,extent={{6,3},{6,3}},horizontalAlignment=TextAlignment.Left)); + connect(y1Chi.y[1], busChi.y1) + annotation (Line(points={{-162,280},{-258,280},{-258,200},{-240,200}},color={255,0,255}), + Text(string="%second",index=1,extent={{6,3},{6,3}},horizontalAlignment=TextAlignment.Left)); + connect(TChiWatSupSet.y, busChi.TSupSet) + annotation (Line(points={{-102,260},{-254,260},{-254,200},{-240,200}},color={0,0,127})); + connect(y1Coo.y[1], bus.y1Coo) + annotation (Line(points={{-2,-260},{-254,-260},{-254,0},{-260,0}},color={255,0,255}), + Text(string="%second",index=1,extent={{6,3},{6,3}},horizontalAlignment=TextAlignment.Left)); + connect(yCoo.y, bus.yCoo) + annotation (Line(points={{38,-280},{-256,-280},{-256,0},{-260,0}},color={0,0,127}), + Text(string="%second",index=1,extent={{6,3},{6,3}},horizontalAlignment=TextAlignment.Left)); + connect(y1ValCooInlIso.y[1], busValCooInlIso.y1) + annotation (Line(points={{-162,-180},{-200,-180},{-200,-140},{-240,-140}}, + color={255,0,255})); + connect(y1ValCooOutIso.y[1], busValCooOutIso.y1) + annotation (Line(points={{-82,-220},{-240,-220},{-240,-180}},color={255,0,255})); + connect(yValCooInlIso.y, busValCooInlIso.y) + annotation (Line(points={{-132,-200},{-202,-200},{-202,-146},{-240,-146},{-240,-140}}, + color={0,0,127})); + connect(yValCooOutIso.y, busValCooOutIso.y) + annotation (Line(points={{-52,-240},{-244,-240},{-244,-180},{-240,-180}}, + color={0,0,127})); + connect(y1ValChiWatChiIso.y[1], busValChiWatChiIso.y1) + annotation (Line(points={{-162,240},{-230,240},{-230,160},{-240,160}},color={255,0,255})); + connect(yValChiWatChiIso.y, busValChiWatChiIso.y) + annotation (Line(points={{-132,220},{-226,220},{-226,160},{-240,160}},color={0,0,127})); + connect(y1ValConWatChiIso.y[1], busValConWatChiIso.y1) + annotation (Line(points={{-92,200},{-204,200},{-204,120},{-240,120}},color={255,0,255})); + connect(yValConWatChiIso.y, busValConWatChiIso.y) + annotation (Line(points={{-62,180},{-200,180},{-200,120},{-240,120}},color={0,0,127})); + annotation ( + defaultComponentName="ctr", + Icon( + coordinateSystem( + preserveAspectRatio=false)), + Diagram( + coordinateSystem( + preserveAspectRatio=false)), + Documentation( + info=" +

                      +This is an open loop controller providing control inputs +for the templates within + +Buildings.Templates.Plants.Chillers. +It is mainly used for testing purposes. +

                      +", + revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end OpenLoop; diff --git a/Buildings/Templates/Plants/Chillers/Components/Controls/package.mo b/Buildings/Templates/Plants/Chillers/Components/Controls/package.mo new file mode 100644 index 00000000000..addea9b66e4 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Controls/package.mo @@ -0,0 +1,12 @@ +within Buildings.Templates.Plants.Chillers.Components; +package Controls "Controllers" + extends Modelica.Icons.VariantsPackage; + + annotation (Documentation(info=" +

                      +All control blocks that form the control sequence of a system +are instantiated into one single class, a so-called control section. +This package contains such control sections. +

                      +")); +end Controls; diff --git a/Buildings/Templates/Plants/Chillers/Components/Controls/package.order b/Buildings/Templates/Plants/Chillers/Components/Controls/package.order new file mode 100644 index 00000000000..180dca7e165 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Controls/package.order @@ -0,0 +1,3 @@ +ControllerG36Debug +G36 +OpenLoop diff --git a/Buildings/Templates/Plants/Chillers/Components/CoolerGroups/CoolingTowerOpen.mo b/Buildings/Templates/Plants/Chillers/Components/CoolerGroups/CoolingTowerOpen.mo new file mode 100644 index 00000000000..21d1b5cc870 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/CoolerGroups/CoolingTowerOpen.mo @@ -0,0 +1,352 @@ +within Buildings.Templates.Plants.Chillers.Components.CoolerGroups; +model CoolingTowerOpen "Open-circuit cooling towers in parallel" + extends + Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialCoolerGroup( + final typCoo=Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen); + + Buildings.Templates.Components.Coolers.CoolingTower coo[nCoo]( + redeclare each final package MediumConWat=MediumConWat, + each final typ=typCoo, + final dat=datCoo, + each final show_T=show_T, + each final allowFlowReversal=allowFlowReversal, + each final m_flow_small=m_flow_small, + each final energyDynamics=energyDynamics, + each final tau=tau) + "Cooling tower" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + + Buildings.Templates.Components.Actuators.Valve valCooInlIso[nCoo]( + redeclare each final package Medium=MediumConWat, + each final typ=typValCooInlIso, + final dat=datValCooInlIso, + each final show_T=show_T, + each final allowFlowReversal=allowFlowReversal, + each final m_flow_small=m_flow_small) + "Inlet isolation valve" + annotation ( + Placement(transformation(extent={{-50,-10},{-30,10}}))); + Buildings.Templates.Components.Actuators.Valve valCooOutIso[nCoo]( + redeclare each final package Medium = MediumConWat, + each final typ=typValCooOutIso, + final dat=datValCooOutIso, + each final show_T=show_T, + each final allowFlowReversal=allowFlowReversal, + each final m_flow_small=m_flow_small) + "Outlet isolation valve" + annotation ( + Placement(transformation(extent={{30,-10},{50,10}}))); + Buildings.Templates.Components.Routing.SingleToMultiple inlCoo( + redeclare final package Medium=MediumConWat, + final nPorts=nCoo, + final m_flow_nominal=mConWat_flow_nominal, + final show_T=show_T, + final allowFlowReversal=allowFlowReversal, + final energyDynamics=energyDynamics, + final tau=tau, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.None) + "Cooler group inlet manifold" + annotation (Placement(transformation(extent={{-90,-10},{-70,10}}))); + Buildings.Templates.Components.Routing.MultipleToSingle outCoo( + redeclare final package Medium=MediumConWat, + final nPorts=nCoo, + final m_flow_nominal=mConWat_flow_nominal, + final show_T=show_T, + final allowFlowReversal=allowFlowReversal, + final energyDynamics=energyDynamics, + final tau=tau, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.None) + "Cooling tower group outlet manifold" + annotation (Placement(transformation(extent={{70,-10},{90,10}}))); +equation + /* Control point connection - start */ + connect(busCoo, coo.bus); + /* + HACK: The following clauses should be removed at translation if typVal*==*.None` + but Dymola fails to do so. + Hence, explicit `if then` statements are used. + */ + if typValCooInlIso<>Buildings.Templates.Components.Types.Valve.None then + connect(bus.valCooInlIso, valCooInlIso.bus); + end if; + if typValCooOutIso<>Buildings.Templates.Components.Types.Valve.None then + connect(bus.valCooOutIso, valCooOutIso.bus); + end if; + for i in 1:nCoo loop + connect(busWea, coo[i].busWea); + end for; + /* Control point connection - stop */ + connect(valCooInlIso.port_b, coo.port_a) + annotation (Line(points={{-30,0},{-10,0}}, color={0,127,255})); + connect(port_b, outCoo.port_b) + annotation (Line(points={{100,0},{100,0},{100,0},{90,0}}, + color={0,127,255})); + connect(port_a, inlCoo.port_a) + annotation (Line(points={{-100,0},{-456,0},{-456,0},{-90,0}}, + color={0,127,255})); + connect(inlCoo.ports_b, valCooInlIso.port_a) + annotation (Line(points={{-70,0},{-50,0}}, color={0,127,255})); + connect(coo.port_b, valCooOutIso.port_a) + annotation (Line(points={{10,0},{30,0}}, color={0,127,255})); + connect(valCooOutIso.port_b, outCoo.ports_a) + annotation (Line(points={{50,0},{70,0}}, color={0,127,255})); + annotation ( + defaultComponentName="coo", + Documentation(info=" +

                      +This model represents a group of open-circuit cooling towers. +The tower cells (or units) may be unequally sized as explained in the documentation of + +Buildings.Templates.Plants.Chillers.Components.Data.CoolerGroup. +

                      +

                      Control points

                      +

                      +See the documentation of + +Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialCoolerGroup. +

                      +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +"), + Icon(graphics={ + Rectangle( + extent={{60,-100},{220,-160}}, + lineColor={28,108,200}, + pattern=LinePattern.None, + fillColor={239,239,239}, + fillPattern=FillPattern.Solid, + visible=nCoo >= 4), + Text( extent={{60,-100},{220,-160}}, + textColor={0,0,0}, + visible=nCoo >= 4, + textString="CT-4"), + Rectangle( + extent={{-780,-100},{-620,-160}}, + lineColor={28,108,200}, + pattern=LinePattern.None, + fillColor={239,239,239}, + fillPattern=FillPattern.Solid, + visible=nCoo >= 1), + Rectangle( + extent={{-620,160},{-780,-160}}, + lineColor={0,0,0}, + lineThickness=1, + visible=nCoo >= 1), + Text( extent={{-780,-98},{-620,-158}}, + textColor={0,0,0}, + textString="CT-1", + visible=nCoo >= 1), + Bitmap( + extent=if text_flip then {{-660,160},{-740,240}} else {{-740,160},{-660, + 240}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg", + visible=nCoo >= 1), + Bitmap( + extent={{-60,-60},{60,60}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Fans/Propeller.svg", + origin={-700,122}, + rotation=-90, + visible=nCoo >= 1), + Line( + points={{-820,-240},{-820,80},{-780,80}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5, + visible=nCoo >= 1), + Line( + points={{-700,-160},{-700,-300},{0,-300},{0,-302}}, + color={0,0,0}, + thickness=5, + visible=nCoo >= 1), + Rectangle( + extent={{-500,-100},{-340,-160}}, + lineColor={28,108,200}, + pattern=LinePattern.None, + fillColor={239,239,239}, + fillPattern=FillPattern.Solid, + visible=nCoo >= 2), + Rectangle( + extent={{-340,160},{-500,-160}}, + lineColor={0,0,0}, + lineThickness=1, + visible=nCoo >= 2), + Text( extent={{-500,-98},{-340,-158}}, + textColor={0,0,0}, + visible=nCoo >= 2, + textString="CT-2"), + Bitmap( + extent=if text_flip then {{-380,160},{-460,240}} else {{-460,160},{-380,240}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg", + visible=nCoo >= 2), + Bitmap( + extent={{-60,-60},{60,60}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Fans/Propeller.svg", + origin={-420,122}, + rotation=-90, + visible=nCoo >= 2), + Line( + points={{-822,-240},{-540,-240},{-540,80},{-500,80}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5, + visible=nCoo >= 2), + Line( + points={{-420,-160},{-420,-300}}, + color={0,0,0}, + thickness=5, + visible=nCoo >= 2), + Rectangle( + extent={{-220,-100},{-60,-160}}, + lineColor={28,108,200}, + pattern=LinePattern.None, + fillColor={239,239,239}, + fillPattern=FillPattern.Solid, + visible=nCoo >= 3), + Rectangle( + extent={{-60,160},{-220,-160}}, + lineColor={0,0,0}, + lineThickness=1, + visible=nCoo >= 3), + Text( extent={{-220,-98},{-60,-158}}, + textColor={0,0,0}, + visible=nCoo >= 3, + textString="CT-3"), + Bitmap( + extent=if text_flip then {{-100,160},{-180,240}} else {{-180,160},{-100,240}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg", + visible=nCoo >= 3), + Bitmap( + extent={{-60,-60},{60,60}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Fans/Propeller.svg", + origin={-140,122}, + rotation=-90, + visible=nCoo >= 3), + Line( + points={{-542,-240},{-260,-240},{-260,80},{-220,80}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5, + visible=nCoo >= 3), + Line( + points={{-140,-160},{-140,-300}}, + color={0,0,0}, + thickness=5, + visible=nCoo >= 3), + Rectangle( + extent={{220,160},{60,-160}}, + lineColor={0,0,0}, + lineThickness=1, + visible=nCoo >= 4), + Bitmap( + extent=if text_flip then {{180,160},{100,240}} else {{100,160},{180,240}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg", + visible=nCoo >= 4), + Bitmap( + extent={{-60,-60},{60,60}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Fans/Propeller.svg", + origin={140,122}, + rotation=-90, + visible=nCoo >= 4), + Line( + points={{-262,-240},{20,-240},{20,80},{60,80}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5, + visible=nCoo >= 4), + Line( + points={{140,-160},{140,-300},{0,-300}}, + color={0,0,0}, + thickness=5, + visible=nCoo >= 4), + Bitmap( + extent=if text_flip then {{460,160},{380,240}} else {{380,160},{460,240}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg", + visible=nCoo >= 5), + Bitmap( + extent={{-60,-60},{60,60}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Fans/Propeller.svg", + origin={420,122}, + rotation=-90, + visible=nCoo >= 5), + Line( + points={{18,-240},{300,-240},{300,80},{340,80}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5, + visible=nCoo >= 5), + Line( + points={{420,-160},{420,-300},{140,-300}}, + color={0,0,0}, + thickness=5, + visible=nCoo >= 5), + Rectangle( + extent={{340,-100},{500,-160}}, + lineColor={28,108,200}, + pattern=LinePattern.None, + fillColor={239,239,239}, + fillPattern=FillPattern.Solid, + visible=nCoo >= 5), + Rectangle( + extent={{500,160},{340,-160}}, + lineColor={0,0,0}, + lineThickness=1, + visible=nCoo >= 5), + Text( extent={{340,-100},{500,-160}}, + textColor={0,0,0}, + visible=nCoo >= 5, + textString="CT-5"), + Bitmap( + extent=if text_flip then {{740,160},{660,240}} else {{660,160},{740,240}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg", + visible=nCoo >= 6), + Bitmap( + extent={{-60,-60},{60,60}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Fans/Propeller.svg", + origin={700,122}, + rotation=-90, + visible=nCoo >= 6), + Line( + points={{298,-240},{580,-240},{580,80},{620,80}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5, + visible=nCoo >= 6), + Line( + points={{700,-160},{700,-300},{420,-300}}, + color={0,0,0}, + thickness=5, + visible=nCoo >= 6), + Rectangle( + extent={{620,-100},{780,-160}}, + lineColor={28,108,200}, + pattern=LinePattern.None, + fillColor={239,239,239}, + fillPattern=FillPattern.Solid, + visible=nCoo >= 6), + Rectangle( + extent={{780,160},{620,-160}}, + lineColor={0,0,0}, + lineThickness=1, + visible=nCoo >= 6), + Text( extent={{620,-100},{780,-160}}, + textColor={0,0,0}, + visible=nCoo >= 6, + textString="CT-6")})); +end CoolingTowerOpen; diff --git a/Buildings/Templates/Plants/Chillers/Components/CoolerGroups/package.mo b/Buildings/Templates/Plants/Chillers/Components/CoolerGroups/package.mo new file mode 100644 index 00000000000..f38e572daa5 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/CoolerGroups/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.Plants.Chillers.Components; +package CoolerGroups "Models for condenser water cooling equipment groups" + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +

                      +This package contains models of cooler groups. +

                      +")); +end CoolerGroups; diff --git a/Buildings/Templates/Plants/Chillers/Components/CoolerGroups/package.order b/Buildings/Templates/Plants/Chillers/Components/CoolerGroups/package.order new file mode 100644 index 00000000000..a96c1883e58 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/CoolerGroups/package.order @@ -0,0 +1 @@ +CoolingTowerOpen diff --git a/Buildings/Templates/Plants/Chillers/Components/Data/ChillerGroup.mo b/Buildings/Templates/Plants/Chillers/Components/Data/ChillerGroup.mo new file mode 100644 index 00000000000..83f6122a8eb --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Data/ChillerGroup.mo @@ -0,0 +1,185 @@ +within Buildings.Templates.Plants.Chillers.Components.Data; +record ChillerGroup + "Record for chiller group model" + extends Modelica.Icons.Record; + parameter Integer nChi( + start =1, final min=1) + "Number of chillers (as installed)" + annotation (Evaluate=true, + Dialog(group="Configuration", + enable=false)); + parameter Buildings.Templates.Components.Types.Chiller typ + "Type of chiller" + annotation (Evaluate=true, + Dialog(group="Configuration", + enable=false)); + parameter Modelica.Units.SI.SpecificHeatCapacity cpChiWat_default= + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq + "CHW default specific heat capacity" + annotation (Dialog(group="Configuration", + enable=false)); + parameter Modelica.Units.SI.SpecificHeatCapacity cpCon_default=if typ == + Buildings.Templates.Components.Types.Chiller.AirCooled then + Buildings.Utilities.Psychrometrics.Constants.cpAir + else Buildings.Utilities.Psychrometrics.Constants.cpWatLiq + "Condenser cooling fluid default specific heat capacity" + annotation (Dialog(group="Configuration", + enable=false)); + parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_nominal[nChi]( + each final min=0) + "CHW mass flow rate - Each chiller" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mConWatChi_flow_nominal[nChi]( + each final min=0, + start=if typ == Buildings.Templates.Components.Types.Chiller.WaterCooled + then capChi_nominal *(1 + 1 / Buildings.Templates.Data.Defaults.COPChiWatCoo) / + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq /( + Buildings.Templates.Data.Defaults.TConWatRet - + Buildings.Templates.Data.Defaults.TConWatSup) else fill(0, nChi)) + "CW mass flow rate - Each chiller" + annotation (Dialog(group="Nominal condition", + enable=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled)); + final parameter Modelica.Units.SI.MassFlowRate mConChi_flow_nominal[nChi]=if typ == + Buildings.Templates.Components.Types.Chiller.WaterCooled then mConWatChi_flow_nominal + else Buildings.Templates.Data.Defaults.ratMFloAirByCapChi * abs(capChi_nominal) + "Condenser cooling fluid mass flow rate - Each chiller" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpChiWatChi_nominal[nChi]( + each final min=0, + each start=Buildings.Templates.Data.Defaults.dpChiWatChi) + "CHW pressure drop - Each chiller" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpConChi_nominal[nChi]( + each final min=0, + each start=if typ == Buildings.Templates.Components.Types.Chiller.WaterCooled + then Buildings.Templates.Data.Defaults.dpConWatChi elseif + typ == Buildings.Templates.Components.Types.Chiller.AirCooled + then Buildings.Templates.Data.Defaults.dpAirChi else 0) + "Condenser cooling fluid pressure drop" + annotation (Dialog(group="Nominal condition", + enable=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled)); + parameter Modelica.Units.SI.HeatFlowRate capChi_nominal[nChi]( + each final min=0) + "Cooling capacity - Each chiller" + annotation (Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QConChi_flow_nominal[nChi]( + each final min=0)=abs(capChi_nominal) .*(fill(1, nChi) ./ COPChi_nominal .+ 1) + "Condenser heat flow rate - Each chiller" + annotation (Dialog(group="Nominal condition")); + parameter Real COPChi_nominal[nChi]( + each start=Buildings.Templates.Data.Defaults.COPChiAirCoo, + each final min=1, + each final unit="1") + "Cooling COP - Each chiller" + annotation (Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Components.Types.Chiller.None)); + parameter Modelica.Units.SI.Temperature TChiWatSupChi_nominal[nChi]( + each final min=260) + "Design (lowest) CHW supply temperature - Each chiller" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature TChiWatSupChi_max[nChi]= + fill(Buildings.Templates.Data.Defaults.TChiWatSup_max, nChi) + "Maximum CHW supply temperature - Each chiller" + annotation (Dialog(group="Operating limits")); + parameter Modelica.Units.SI.Temperature TConWatEntChi_nominal[nChi]( + each final min=273.15, + start=fill(Buildings.Templates.Data.Defaults.TConWatSup, nChi)) + "CW supply temperature (condenser entering) - Each chiller" + annotation (Dialog(group="Nominal condition", + enable=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled)); + parameter Modelica.Units.SI.Temperature TOut_nominal( + final min=273.15, + start=Buildings.Templates.Data.Defaults.TOutChi) + "Design OAT" + annotation (Dialog(group="Nominal condition", + enable=typ==Buildings.Templates.Components.Types.Chiller.AirCooled)); + final parameter Modelica.Units.SI.Temperature TConEntChi_nominal[nChi]= + if typ == Buildings.Templates.Components.Types.Chiller.WaterCooled then + TConWatEntChi_nominal else fill(TOut_nominal, nChi) + "OAT or CW supply temperature (condenser entering) - Each chiller" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature TConLvgChi_nominal[nChi]( + each final min=273.15)=TConEntChi_nominal + QConChi_flow_nominal ./ + mConChi_flow_nominal / cpCon_default + "Condenser leaving fluid temperature (CW or air) - Each chiller" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature TConLvgChi_min[nChi]( + each final min=273.15)=fill(Buildings.Templates.Data.Defaults.TConLvg_min, nChi) + "Minimum condenser leaving fluid temperature (CW or air) - Each chiller" + annotation (Dialog(group="Operating limits")); + parameter Modelica.Units.SI.Temperature TConLvgChi_max[nChi]( + each final min=273.15)=fill(Buildings.Templates.Data.Defaults.TConLvg_max, nChi) + "Maximum condenser leaving fluid temperature (CW or air)" + annotation (Dialog(group="Operating limits")); + parameter Real PLRUnlChi_min[nChi]( + final min=PLRChi_min, + each final max=1)=PLRChi_min + "Minimum unloading ratio before engaging hot gas bypass if any, otherwise default to PLRChi_min"; + parameter Real PLRChi_min[nChi]( + each final min=0, + each final max=1)=fill(0.15, nChi) + "Minimum part load ratio before cycling"; + replaceable parameter Buildings.Fluid.Chillers.Data.ElectricReformulatedEIR.Generic perChi[nChi]( + COP_nominal=COPChi_nominal, + QEva_flow_nominal=-abs(capChi_nominal), + TConLvg_nominal=TConLvgChi_nominal, + TConLvgMin=TConLvgChi_min, + TConLvgMax=TConLvgChi_max, + TEvaLvg_nominal=TChiWatSupChi_nominal, + TEvaLvgMin=TChiWatSupChi_nominal, + TEvaLvgMax=TChiWatSupChi_max, + PLRMin=PLRChi_min, + PLRMinUnl=PLRUnlChi_min, + each PLRMax=1.0, + each etaMotor=1.0, + mEva_flow_nominal=mChiWatChi_flow_nominal, + mCon_flow_nominal=mConChi_flow_nominal) + "Chiller performance data" + annotation (choicesAllMatching=true); + annotation ( + defaultComponentName="datChi", + Documentation( + info=" +

                      +This record provides the set of sizing and operating parameters for +chiller group models that can be found within + +Buildings.Templates.Plants.Chillers.Components.ChillerGroups. +

                      +

                      +Within this class, the design values declared at the top-level +are propagated by default to the performance data record per +under the assumption that the nominal conditions used for assessing the +performance data match the design conditions. +However, the nominal, minimum and maximum value of the +condenser cooling fluid temperature are overwritten if the performance data +record is redeclared. +(This is a limitation that comes from the constraint to make this record class +(type-)compatible with chiller group models using + +Buildings.Fluid.Chillers.ElectricReformulatedEIRs +instead of + +Buildings.Fluid.Chillers.ElectricEIR). +

                      +

                      +Note that, among those propagated parameters, the only meaningful parameter +is the chiller capacity that should be consistent with the value +used for performance assessment. +Regarding the nominal value of the condenser cooling fluid, it may +only yield a warning if an inconsistent value is used. +All other propagated parameters have no impact on the +computation of the chiller performance and are informative +only inside the performance data record. +

                      +

                      +The validation model + +Buildings.Templates.Plants.Chillers.Components.Validation.RecordChillerGroup +illustrates how the default bindings from this class may be +overwritten when redeclaring the performance data record, +and how different performance curves may be assigned to each chiller +inside the same group. +

                      +")); +end ChillerGroup; diff --git a/Buildings/Templates/Plants/Chillers/Components/Data/Controller.mo b/Buildings/Templates/Plants/Chillers/Components/Data/Controller.mo new file mode 100644 index 00000000000..1942cbaef7f --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Data/Controller.mo @@ -0,0 +1,362 @@ +within Buildings.Templates.Plants.Chillers.Components.Data; +record Controller + "Record for plant controller" + extends Modelica.Icons.Record; + parameter Buildings.Templates.Plants.Chillers.Configuration.ChillerPlant cfg + "Plant configuration parameters"; + parameter Modelica.Units.SI.Temperature TChiWatChiSup_nominal[cfg.nChi]( + each displayUnit="degC", + each start=Buildings.Templates.Data.Defaults.TChiWatSup, + each final min=260) + "Design (lowest) CHW supply temperature setpoint - Each chiller" + annotation (Dialog(group="Temperature setpoints", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36)); + parameter Modelica.Units.SI.Temperature TChiWatSup_max( + displayUnit="degC", + final min=260)=Buildings.Templates.Data.Defaults.TChiWatSup_max + "Maximum CHW supply temperature setpoint used in plant reset logic" + annotation (Dialog(group="Temperature setpoints", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36)); + parameter Modelica.Units.SI.Temperature TConWatRetChi_nominal[cfg.nChi]( + each displayUnit="degC", + each start=Buildings.Templates.Data.Defaults.TConWatRet, + each final min=273.15) + "CW return temperature (condenser leaving) at chiller selection conditions - Each chiller" + annotation (Dialog(group="Temperature setpoints", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + cfg.typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled)); + parameter Modelica.Units.SI.Temperature TConWatSupChi_nominal[cfg.nChi]( + each displayUnit="degC", + each start=Buildings.Templates.Data.Defaults.TConWatSup, + each final min=273.15) + "CW supply temperature (condenser entering) at chiller selection conditions - Each chiller" + annotation (Dialog(group="Temperature setpoints", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + cfg.typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled)); + parameter Modelica.Units.SI.Temperature TOutChiWatLck( + displayUnit="degC", + final min=250)=Buildings.Templates.Data.Defaults.TOutChiWatLck + "Outdoor air lockout temperature below which the plant is prevented from operating" + annotation (Dialog(group="Temperature setpoints", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36)); + parameter Modelica.Units.SI.PressureDifference dpChiWatLocSet_min( + start=Buildings.Templates.Data.Defaults.dpChiWatSet_min) + "Minimum CHW differential pressure setpoint used in plant reset logic - Local sensor" + annotation (Dialog(group="Differential pressure setpoints", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + cfg.typDisChiWat<>Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only + and not cfg.have_senDpChiWatRemWir)); + parameter Modelica.Units.SI.PressureDifference dpChiWatRemSet_min[cfg.nSenDpChiWatRem]( + each start=Buildings.Templates.Data.Defaults.dpChiWatSet_min) + "Minimum CHW differential pressure setpoint used in plant reset logic - Each remote sensor" + annotation (Dialog(group="Differential pressure setpoints", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + cfg.typDisChiWat<>Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only + and cfg.have_senDpChiWatRemWir)); + parameter Modelica.Units.SI.VolumeFlowRate VChiWatChi_flow_nominal[cfg.nChi]( + each displayUnit="L/s", + each final min=0, + each start=0) + "Design CHW volume flow rate - Each chiller" + annotation (Dialog(group="Chiller flow setpoints", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36)); + parameter Modelica.Units.SI.VolumeFlowRate VChiWatChi_flow_min[cfg.nChi]( + each displayUnit="L/s", + each final min=0, + each start=0) + "Minimum CHW volume flow rate - Each chiller" + annotation (Dialog(group="Chiller flow setpoints", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36)); + parameter Modelica.Units.SI.VolumeFlowRate VConWatChi_flow_nominal[cfg.nChi]( + each displayUnit="L/s", + each start=0.01, + each final min=0) + "Design CW volume flow rate - Each chiller" + annotation (Dialog(group="Chiller flow setpoints", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and cfg.typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled + and cfg.have_pumConWatVar)); + parameter Modelica.Units.SI.TemperatureDifference dTLifChi_min[cfg.nChi]( + each start=Buildings.Templates.Data.Defaults.dTLifChi_min, + each final min=0) + "Minimum allowable lift at minimum load - Each chiller" + annotation (Dialog(group="Chiller lift setpoints", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and cfg.typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled + and cfg.typCtlHea<>Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.None)); + parameter Modelica.Units.SI.TemperatureDifference dTLifChi_nominal[cfg.nChi]( + each final min=0)=TConWatRetChi_nominal - TChiWatChiSup_nominal + "Design lift at design load - Each chiller" + annotation (Dialog(group="Chiller lift setpoints", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and cfg.typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled + and cfg.typCtlHea<>Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.None)); + parameter Modelica.Units.SI.HeatFlowRate capChi_nominal[cfg.nChi]( + each start=0, + each final min=0) + "Design capacity - Each chiller" + annotation (Dialog(group="Capacity", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36)); + parameter Modelica.Units.SI.VolumeFlowRate VChiWatPri_flow_nominal( + start=0.01, + displayUnit="L/s", + final min=0)=sum(VChiWatChi_flow_nominal) + "Design primary CHW volume flow rate" + annotation (Dialog(group="Capacity", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + ((cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 + or cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed) + and (cfg.typMeaCtlChiWatPri==Buildings.Templates.Plants.Chillers.Types.PrimaryOverflowMeasurement.FlowDecoupler + or cfg.typMeaCtlChiWatPri==Buildings.Templates.Plants.Chillers.Types.PrimaryOverflowMeasurement.FlowDifference) + or cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only + and cfg.typArrPumChiWatPri==Buildings.Templates.Components.Types.PumpArrangement.Headered))); + parameter Modelica.Units.SI.VolumeFlowRate VChiWatSec_flow_nominal[cfg.nLooChiWatSec]( + each start=0.01, + each displayUnit="L/s", + each final min=0) + "Design secondary CHW volume flow rate - Each secondary loop" + annotation (Dialog(group="Capacity", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and ((cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2 + or cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 + or cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed) + and cfg.have_senVChiWatSec))); + parameter Modelica.Units.SI.HeatFlowRate capUnlChi_min[cfg.nChi]( + start=0.1 * abs(capChi_nominal), + each final min=0) + "Minimum load before engaging hot gas bypass or cycling - Each chiller" + annotation (Dialog(group="Minimum cycling load", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36)); + parameter Modelica.Units.SI.TemperatureDifference dTAppEco_nominal( + start=Buildings.Templates.Data.Defaults.TChiWatEcoLvg - Buildings.Templates.Data.Defaults.TConWatEcoEnt, + final min=0) + "Design heat exchanger approach" + annotation (Dialog(group="Waterside economizer design information", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and cfg.typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + parameter Modelica.Units.SI.TemperatureDifference TWetBulCooEnt_nominal( + start=Buildings.Templates.Data.Defaults.TWetBulTowEnt, + final min=273.15) + "Design cooling tower wetbulb temperature" + annotation (Dialog(group="Waterside economizer design information", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and cfg.typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + parameter Modelica.Units.SI.TemperatureDifference dTAppCoo_nominal( + start=Buildings.Templates.Data.Defaults.TConWatSup - Buildings.Templates.Data.Defaults.TWetBulTowEnt, + final min=0) + "Design cooling tower approach" + annotation (Dialog(group="Waterside economizer design information", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and cfg.typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + parameter Modelica.Units.SI.VolumeFlowRate VChiWatEco_flow_nominal( + start=0.01, + displayUnit="L/s", + final min=0) + "Design waterside economizer CHW volume flow rate" + annotation (Dialog(group="Waterside economizer design information", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and cfg.typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + parameter Modelica.Units.SI.VolumeFlowRate VConWatEco_flow_nominal( + start=0.01, + displayUnit="L/s", + final min=0) + "Design waterside economizer CW volume flow rate" + annotation (Dialog(group="Waterside economizer design information", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and cfg.typEco==Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithValve)); + parameter Modelica.Units.SI.PressureDifference dpChiWatEco_nominal( + start=Buildings.Templates.Data.Defaults.dpChiWatEco, + final min=0) + "Design waterside economizer CHW pressure drop" + annotation (Dialog(group="Waterside economizer design information", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and cfg.typEco==Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithValve)); + parameter Modelica.Units.SI.Height hLevAlaCoo_max( + start=0.3, + final min=0) + "Maximum level just below overflow" + annotation (Dialog(group="Cooling tower level control", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and (cfg.typCoo==Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen + or cfg.typCoo==Buildings.Templates.Components.Types.Cooler.CoolingTowerClosed) + and cfg.have_senLevCoo)); + parameter Modelica.Units.SI.Height hLevAlaCoo_min( + start=0.05, + final min=0) + "Minimum level before triggering alarm" + annotation (Dialog(group="Cooling tower level control", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and ((cfg.typCoo==Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen + or cfg.typCoo==Buildings.Templates.Components.Types.Cooler.CoolingTowerClosed) + and cfg.have_senLevCoo))); + parameter Modelica.Units.SI.Height hLevCoo_min( + start=0.1, + final min=0) + "Lowest normal operating level" + annotation (Dialog(group="Cooling tower level control", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + ((cfg.typCoo==Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen + or cfg.typCoo==Buildings.Templates.Components.Types.Cooler.CoolingTowerClosed) + and cfg.have_senLevCoo))); + parameter Modelica.Units.SI.Height hLevCoo_max( + start=0.2, + final min=0) + "Highest normal operating level" + annotation (Dialog(group="Cooling tower level control", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + ((cfg.typCoo==Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen + or cfg.typCoo==Buildings.Templates.Components.Types.Cooler.CoolingTowerClosed) + and cfg.have_senLevCoo))); + parameter Modelica.Units.SI.PressureDifference dpChiWatRemSet_max[cfg.nSenDpChiWatRem]( + each start=Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, + each final min=0) + "Mmaximum CHW differential pressure setpoint - Remote sensor" + annotation (Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and (cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only + or cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2 + or cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2))); + parameter Modelica.Units.SI.PressureDifference dpChiWatLocSet_max( + start=Buildings.Templates.Data.Defaults.dpChiWatLocSet_max, + final min=0) + "Design (maximum) CHW differential pressure setpoint - Local sensor" + annotation (Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=cfg.typCtl == Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and (cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only + and not cfg.have_senDpChiWatRemWir))); + // FIXME #2299: For dedicated CW pumps this should be a 2-D array [nSta, nPumConWat] which is more aligned with §5.20.9.6. + parameter Real yPumConWatSta_nominal[nSta]( + each final unit="1", + each final min=0, + each final max=1, + each start=1) + "CW pump speed delivering design CW flow through chillers and WSE - Each plant stage" + annotation (Dialog(group= + "Information provided by testing, adjusting, and balancing contractor", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + (cfg.typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled + and cfg.have_pumConWatVar))); + parameter Real yValConWatChiIso_min( + final unit="1", + final min=0, + final max=1, + start=0) + "Minimum head pressure control valve position" + annotation (Dialog(group= + "Information provided by testing, adjusting, and balancing contractor", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + (cfg.typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled + and not cfg.have_pumConWatVar))); + parameter Real yPumConWat_min( + final unit="1", + final min=0, + final max=1, + start=0.1) + "Minimum CW pump speed" + annotation (Dialog(group= + "Information provided by testing, adjusting, and balancing contractor", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + (cfg.typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled + and cfg.have_pumConWatVar))); + parameter Real yPumChiWatEco_nominal( + final unit="1", + final min=0, + final max=1, + start=1) + "WSE heat exchanger pump speed delivering design CHW flow through the heat exchanger " + annotation (Dialog(group= + "Information provided by testing, adjusting, and balancing contractor", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + cfg.typEco==Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithPump)); + parameter Real yPumChiWatPriSta_nominal[nSta]( + each final unit="1", + each final min=0, + each final max=1, + each start=1) + "Primary CHW pump speed delivering design flow through chillers - Each plant stage" + annotation (Dialog(group= + "Information provided by testing, adjusting, and balancing contractor", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + ((cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only + or cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2) + and cfg.have_pumChiWatPriVar))); + parameter Real yPumChiWatPriSta_min[nSta]( + each final unit="1", + each final min=0, + each final max=1, + each start=0.3) + "Primary CHW pump speed delivering minimum flow through chillers - Each plant stage" + annotation (Dialog(group= + "Information provided by testing, adjusting, and balancing contractor", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + (cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 + or cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed))); + parameter Real yPumChiWatPri_min( + final unit="1", + final min=0, + final max=1, + start=0.1) + "Primary CHW pump minimum speed" + annotation (Dialog(group= + "Information provided by testing, adjusting, and balancing contractor", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only)); + parameter Real yPumChiWatSec_min( + final unit="1", + final min=0, + final max=1, + start=0.1) + "Secondary CHW pump minimum speed" + annotation (Dialog(group= + "Information provided by testing, adjusting, and balancing contractor", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and (cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2 + or cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2))); + parameter Real yFanCoo_min( + final unit="1", + final min=0, + final max=1, + start=0.1) + "Cooler fan minimum speed" + annotation (Dialog(group= + "Information provided by testing, adjusting, and balancing contractor", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and cfg.typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled)); + // RFE: The following parameter has the type Real for future capability to specify lead/lag alternated chillers with 0.5. + parameter Real sta[:, nUniSta]( + each min=0, + each max=1, + each final unit="1") + "Staging matrix with plant stage as row index and chiller as column index (highest index for optional WSE): 0 for disabled, 1 for enabled" + annotation (Evaluate=true, + Dialog(group="Plant staging")); + final parameter Integer nUniSta=if cfg.typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None + then cfg.nChi + 1 else cfg.nChi + "Number of units to be staged, including chillers and optional WSE" + annotation (Evaluate=true, + Dialog(group="Plant staging")); + final parameter Integer nSta=size(sta, 1) + "Number of plant stages" + annotation (Evaluate=true, + Dialog(group="Plant staging", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36)); + parameter Real staCoo[nSta]( + each max=cfg.nCoo, + start=fill(0, nSta)) + "Quantity of enabled cooler units (e.g. cooling tower cells) at each plant Stage" + annotation (Evaluate=true, + Dialog(group="Plant staging", + enable=cfg.typCtl==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and cfg.typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled)); + annotation ( + defaultComponentName="datCtl", + Documentation( + info=" +

                      +This record provides the set of sizing and operating parameters for +CHW plant controllers that can be found within + +Buildings.Templates.Plants.Chillers.Components.Controls. +

                      +")); +end Controller; diff --git a/Buildings/Templates/Plants/Chillers/Components/Data/CoolerGroup.mo b/Buildings/Templates/Plants/Chillers/Components/Data/CoolerGroup.mo new file mode 100644 index 00000000000..10454f222ba --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Data/CoolerGroup.mo @@ -0,0 +1,80 @@ +within Buildings.Templates.Plants.Chillers.Components.Data; +record CoolerGroup "Record for cooler group model" + extends Modelica.Icons.Record; + + parameter Integer nCoo(final min=0) + "Number of cooler units (count one unit for each cooling tower cell)" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Cooler typCoo + "Type of cooler" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Modelica.Units.SI.MassFlowRate mConWatCoo_flow_nominal[nCoo]( + each final min=0) + "CW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpConWatFriCoo_nominal[nCoo]( + each final min=0, + each start=if typCoo==Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen then + Buildings.Templates.Data.Defaults.dpConWatFriTow else + Buildings.Templates.Data.Defaults.dpConWatTowClo) + "CW flow-friction losses through tower and piping only (without elevation head or valve)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpConWatStaCoo_nominal[nCoo]( + each final min=0, + each start=if typCoo==Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen then + Buildings.Templates.Data.Defaults.dpConWatStaTow else + 0) + "CW elevation head" + annotation (Dialog(group="Nominal condition", + enable=typCoo==Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen)); + parameter Modelica.Units.SI.MassFlowRate mAirCoo_flow_nominal[nCoo]( + each final min=0, + start=mConWatCoo_flow_nominal / Buildings.Templates.Data.Defaults.ratMFloConWatByMFloAirTow) + "Air mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature TAirEnt_nominal( + final min=273.15, + start=Buildings.Templates.Data.Defaults.TOutDryCoo) + "Entering air drybulb temperature" + annotation (Dialog(group="Nominal condition", enable= + typCoo==Buildings.Templates.Components.Types.Cooler.DryCooler)); + parameter Modelica.Units.SI.Temperature TWetBulEnt_nominal( + final min=273.15, + start=Buildings.Templates.Data.Defaults.TWetBulTowEnt) + "Entering air wetbulb temperature" + annotation (Dialog(group="Nominal condition", + enable=typCoo == Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen + or typCoo == Buildings.Templates.Components.Types.Cooler.CoolingTowerClosed)); + parameter Modelica.Units.SI.Temperature TConWatRet_nominal( + final min=273.15, + start=Buildings.Templates.Data.Defaults.TConWatRet) + "CW return temperature (cooler entering)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature TConWatSup_nominal( + final min=273.15, + start=Buildings.Templates.Data.Defaults.TConWatSup) + "CW supply temperature (cooler leaving)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Power PFanCoo_nominal[nCoo]( + each final min=0, + start=Buildings.Templates.Data.Defaults.ratPFanByMFloConWatTow * mConWatCoo_flow_nominal) + "Fan power" + annotation (Dialog(group="Nominal condition")); + annotation ( + defaultComponentName="datCoo", + Documentation(info=" +

                      +This record provides the set of sizing and operating parameters for +cooler group models that can be found within + +Buildings.Templates.Plants.Chillers.Components.CoolerGroups. +

                      +

                      +Design temperature conditions are common to all units and have a +dimensionality of zero. +Mass flow rates, pressure drops and fan power are specific to each unit. +and have a dimensionality of one. +

                      +")); +end CoolerGroup; diff --git a/Buildings/Templates/Plants/Chillers/Components/Data/Economizer.mo b/Buildings/Templates/Plants/Chillers/Components/Data/Economizer.mo new file mode 100644 index 00000000000..fa8ff4d10ae --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Data/Economizer.mo @@ -0,0 +1,89 @@ +within Buildings.Templates.Plants.Chillers.Components.Data; +record Economizer "Record for waterside economizer model" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.Plants.Chillers.Types.Economizer typ + "Equipment type" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Modelica.Units.SI.Density rhoChiWat_default=Buildings.Media.Water.d_const + "Default medium density" + annotation(Dialog(enable=false)); + + parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal( + final min=0, + start=0) + "CHW mass flow rate" + annotation(Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + parameter Modelica.Units.SI.MassFlowRate mConWat_flow_nominal( + final min=0, + start=0) + "CW mass flow rate" + annotation(Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + parameter Modelica.Units.SI.HeatFlowRate cap_nominal( + final min=0, + start=0) + "Cooling capacity" + annotation(Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + parameter Modelica.Units.SI.Temperature TChiWatEnt_nominal( + final min=273.15, + start=Buildings.Templates.Data.Defaults.TChiWatEcoEnt) + "Heat exchanger entering CHW temperature" + annotation(Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + parameter Modelica.Units.SI.Temperature TConWatEnt_nominal( + final min=273.15, + start=Buildings.Templates.Data.Defaults.TConWatEcoEnt) + "Heat exchanger entering CW temperature" + annotation(Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + parameter Modelica.Units.SI.PressureDifference dpChiWat_nominal( + final min=0, + start=Buildings.Templates.Data.Defaults.dpChiWatEco) + "Heat exchanger CHW pressure drop" + annotation(Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + parameter Modelica.Units.SI.PressureDifference dpConWat_nominal( + final min=0, + start=Buildings.Templates.Data.Defaults.dpConWatEco) + "Heat exchanger CW design pressure drop" + annotation(Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + parameter Modelica.Units.SI.PressureDifference dpValConWatIso_nominal( + final min=0)=Buildings.Templates.Data.Defaults.dpValIso + "WSE CW isolation valve" + annotation(Dialog(group="Valves", + enable=typ<>Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + parameter Modelica.Units.SI.PressureDifference dpValChiWatByp_nominal( + final min=0)=Buildings.Templates.Data.Defaults.dpValIso + "WSE CHW bypass valve" + annotation(Dialog(group="Valves", + enable=typ==Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithValve)); + parameter Modelica.Units.SI.PressureDifference dpPumChiWat_nominal( + final min=0, + start=Buildings.Templates.Data.Defaults.dpChiWatEco)=dpChiWat_nominal + "Total pressure rise" + annotation (Dialog(group="Heat exchanger CHW pump", + enable=typ==Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithPump)); + replaceable parameter Fluid.Movers.Data.Generic perPumChiWat + constrainedby Buildings.Fluid.Movers.Data.Generic( + pressure( + V_flow={0, 1, 2} * mChiWat_flow_nominal / rhoChiWat_default, + dp={1.14, 1, 0.42} * dpPumChiWat_nominal)) + "Performance data" + annotation(Dialog(group="Heat exchanger CHW pump", + enable=typ==Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithPump)); + annotation ( + defaultComponentName="datEco", + Documentation(info=" +

                      +This record provides the set of sizing and operating parameters for +waterside economizer models that can be found within + +Buildings.Templates.Plants.Chillers.Components.Economizers. +

                      +")); +end Economizer; diff --git a/Buildings/Templates/Plants/Chillers/Components/Data/package.mo b/Buildings/Templates/Plants/Chillers/Components/Data/package.mo new file mode 100644 index 00000000000..c9387bdace0 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Data/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.Plants.Chillers.Components; +package Data "Records for design and operating parameters" +extends Modelica.Icons.MaterialPropertiesPackage; + +annotation (Documentation(info=" +

                      +This package provides records for design and operating parameters. +

                      +")); +end Data; diff --git a/Buildings/Templates/Plants/Chillers/Components/Data/package.order b/Buildings/Templates/Plants/Chillers/Components/Data/package.order new file mode 100644 index 00000000000..dd834a0b367 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Data/package.order @@ -0,0 +1,4 @@ +ChillerGroup +Controller +CoolerGroup +Economizer diff --git a/Buildings/Templates/Plants/Chillers/Components/Economizers/HeatExchangerWithPump.mo b/Buildings/Templates/Plants/Chillers/Components/Economizers/HeatExchangerWithPump.mo new file mode 100644 index 00000000000..2cf9f664f08 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Economizers/HeatExchangerWithPump.mo @@ -0,0 +1,90 @@ +within Buildings.Templates.Plants.Chillers.Components.Economizers; +model HeatExchangerWithPump "Heat exchanger with pump for CHW flow control" + extends + Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialEconomizerHX( + final typ=Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithPump, + hex(from_dp2=true)); + + Buildings.Templates.Components.Sensors.Temperature TChiWatEcoEnt( + redeclare final package Medium=MediumChiWat, + final allowFlowReversal=allowFlowReversal, + final m_flow_nominal=mChiWat_flow_nominal, + final have_sen=true, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell) + "WSE entering CHW temperature" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=90, + origin={-20,20}))); + Buildings.Templates.Components.Pumps.Single pumChiWatEco( + have_valChe=false, + redeclare final package Medium = MediumChiWat, + final have_var=true, + final dat=datPumChiWat, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal) + "Heat exchanger CHW pump" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-20,50}))); + Fluid.FixedResistances.PressureDrop resChiWatByp( + redeclare final package Medium = MediumChiWat, + final m_flow_nominal=mChiWat_flow_nominal, + from_dp=true, + final dp_nominal=100) + "Bypass flow resistance" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); +equation + /* Control point connection - start */ + connect(bus.pumChiWatEco, pumChiWatEco.bus); + connect(bus.TChiWatEcoEnt,TChiWatEcoEnt.y); + /* Control point connection - stop */ + connect(pumChiWatEco.port_b, hex.port_a2) + annotation (Line(points={{-20,60},{-20,68},{-10,68}}, color={0,127,255})); + connect(port_a, resChiWatByp.port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(resChiWatByp.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(TChiWatEcoEnt.port_b, pumChiWatEco.port_a) + annotation (Line(points={{-20,30},{-20,40}}, color={0,127,255})); + connect(port_a, TChiWatEcoEnt.port_a) + annotation (Line(points={{-100,0},{-20,0},{-20,10}}, color={0,127,255})); +annotation ( + defaultComponentName="eco", +Documentation(info=" +

                      +This is a model of a waterside economizer where a variable speed +pump is used to control the CHW flow rate +through the heat exchanger. +The CW flow rate is modulated by means of a two-way valve. +As per standard practice, the model includes a temperature +sensor on the CHW side, upstream of the heat exchanger. +This sensor is typically used in conjunction with a temperature +sensor in the CHW return pipe, upstream of the WSE, to reset +the pump speed and avoid flow recirculation through the heat +exchanger. +

                      +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +"), + Icon(graphics={ + Bitmap( + extent={{300,-320},{380,-240}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/Temperature.svg"), + Bitmap(extent={{240,-40},{440,-240}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeInWell.svg"), + Line(points={{216,-142},{216,-180}},color={0,0,0}), + Bitmap( + extent={{158,-280},{258,-180}}, + rotation=text_rotation, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg"), + Bitmap( + extent={{258,-150},{158,-50}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Pumps/Single.svg")})); +end HeatExchangerWithPump; diff --git a/Buildings/Templates/Plants/Chillers/Components/Economizers/HeatExchangerWithValve.mo b/Buildings/Templates/Plants/Chillers/Components/Economizers/HeatExchangerWithValve.mo new file mode 100644 index 00000000000..121eab5170c --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Economizers/HeatExchangerWithValve.mo @@ -0,0 +1,84 @@ +within Buildings.Templates.Plants.Chillers.Components.Economizers; +model HeatExchangerWithValve + "Heat exchanger with bypass valve for CHW flow control" + extends + Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialEconomizerHX( + final typ=Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithValve, + hex(from_dp2=true)); + + Buildings.Templates.Components.Actuators.Valve valChiWatByp( + redeclare final package Medium=MediumChiWat, + final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating, + final allowFlowReversal=allowFlowReversal, + final dat=datValChiWatByp, + from_dp=true) + "WSE CHW bypass valve" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Templates.Components.Sensors.DifferentialPressure dpChiWatEco( + redeclare final package Medium=MediumChiWat, + final have_sen=true) + "WSE CHW differential pressure" + annotation (Placement(transformation(extent={{-10,30},{10,50}}))); +equation + /* Control point connection - start */ + connect(bus.valChiWatEcoByp, valChiWatByp.bus); + connect(bus.dpChiWatEco, dpChiWatEco.y); + /* Control point connection - stop */ + + connect(port_a, hex.port_a2) + annotation (Line(points={{-100,0},{-20,0},{-20,68},{-10,68}}, + color={0,127,255})); + connect(port_a, valChiWatByp.port_a) annotation (Line(points={{-100,0},{-10,0}}, + color={0,127,255})); + connect(valChiWatByp.port_b, port_b) annotation (Line(points={{10,0},{100,0}}, + color={0,127,255})); + connect(hex.port_a2, dpChiWatEco.port_a) annotation (Line(points={{-10,68},{-20, + 68},{-20,40},{-10,40}}, color={0,127,255})); + connect(hex.port_b2, dpChiWatEco.port_b) annotation (Line(points={{10,68},{20, + 68},{20,40},{10,40}}, color={0,127,255})); +annotation ( + defaultComponentName="eco", Documentation(info=" +

                      +This is a model of a waterside economizer where a modulating +heat exchanger bypass valve is used to control the CHW flow rate +through the heat exchanger. +The CW flow rate is modulated by means of a two-way valve. +As per standard practice, the model includes a differential pressure +sensor on the CHW side that measures the pressure drop +across the heat exchanger. +

                      +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +"), + Icon(graphics={ + Line( + points={{0,30},{0,-30}}, + color={0,0,0}, + origin={430,0}, + rotation=-90), + Bitmap( + extent={{460,-38},{540,42}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + extent={{140,-40},{220,40}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressure.svg"), + Bitmap( + extent={{190,-100},{270,-20}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressureHigh.svg"), + Bitmap( + extent={{190,20},{270,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressureLow.svg"), + Rectangle(extent={{175,-40},{185,-80}}, lineColor={0,0,0}), + Rectangle(extent={{175,80},{185,40}}, lineColor={0,0,0}), + Bitmap( + extent={{-100,-100},{100,100}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=180, + origin={400,0})})); +end HeatExchangerWithValve; diff --git a/Buildings/Templates/Plants/Chillers/Components/Economizers/None.mo b/Buildings/Templates/Plants/Chillers/Components/Economizers/None.mo new file mode 100644 index 00000000000..ae00dd4fa87 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Economizers/None.mo @@ -0,0 +1,30 @@ +within Buildings.Templates.Plants.Chillers.Components.Economizers; +model None "No waterside economizer" + extends Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialEconomizer( + final typ=Buildings.Templates.Plants.Chillers.Types.Economizer.None); + +equation + connect(port_a, port_b) + annotation (Line(points={{-100,0},{100,0}}, color={0,127,255})); +annotation ( + defaultComponentName="eco", + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +When no waterside economizer is considered this model shall +be used in replacement of the waterside economizer component. +The model resolves into a simple fluid pass-through on the CHW +side, +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +"), + Icon(graphics={ + Line( points={{400,80},{400,-80}}, + color={0,0,0}, + thickness=5, + pattern=LinePattern.Dash)})); +end None; diff --git a/Buildings/Templates/Plants/Chillers/Components/Economizers/package.mo b/Buildings/Templates/Plants/Chillers/Components/Economizers/package.mo new file mode 100644 index 00000000000..6e5fa328af8 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Economizers/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.Plants.Chillers.Components; +package Economizers "Models for waterside economizer" + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +

                      +This package contains waterside economizer models. +

                      +")); +end Economizers; diff --git a/Buildings/Templates/Plants/Chillers/Components/Economizers/package.order b/Buildings/Templates/Plants/Chillers/Components/Economizers/package.order new file mode 100644 index 00000000000..31d1109e6bf --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Economizers/package.order @@ -0,0 +1,3 @@ +HeatExchangerWithPump +HeatExchangerWithValve +None diff --git a/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialChillerGroup.mo b/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialChillerGroup.mo new file mode 100644 index 00000000000..ab97b5521c9 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialChillerGroup.mo @@ -0,0 +1,918 @@ +within Buildings.Templates.Plants.Chillers.Components.Interfaces; +partial model PartialChillerGroup "Interface class for chiller group" + replaceable package MediumChiWat = Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CHW medium"; + replaceable package MediumCon = Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Medium model for condenser cooling fluid"; + + parameter Integer nChi(final min=1) + "Number of chillers" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Chiller typ + "Type of chiller" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Chillers.Types.ChillerArrangement typArr + "Type of chiller arrangement" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.PumpArrangement + typArrPumChiWatPri "Type of primary CHW pump arrangement" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.PumpArrangement + typArrPumConWat(start=Buildings.Templates.Components.Types.PumpArrangement.Headered) + "Type of CW pump arrangement" + annotation (Evaluate=true, Dialog(group="Configuration", + enable=typ == Buildings.Templates.Components.Types.Chiller.WaterCooled)); + parameter Boolean have_pumConWatVar(start=false) + "Set to true for variable speed CW pumps, false for constant speed pumps" + annotation (Evaluate=true, Dialog(group="Configuration", + enable=typ == Buildings.Templates.Components.Types.Chiller.WaterCooled)); + parameter Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl typCtlHea( + start=Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.BuiltIn) + "Type of head pressure control" + annotation (Evaluate=true, Dialog(group="Configuration", + enable=typ == Buildings.Templates.Components.Types.Chiller.WaterCooled)); + parameter Buildings.Templates.Plants.Chillers.Types.Distribution typDisChiWat + "Type of CHW distribution system" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Chillers.Types.PrimaryOverflowMeasurement typMeaCtlChiWatPri( + start=Buildings.Templates.Plants.Chillers.Types.PrimaryOverflowMeasurement.FlowDecoupler) + "Type of sensors for primary CHW pump control in variable primary-variable secondary plants" + annotation (Evaluate=true, Dialog(group="Configuration", enable= + typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 + or typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed)); + + parameter Buildings.Templates.Plants.Chillers.Types.Economizer typEco( + start=Buildings.Templates.Plants.Chillers.Types.Economizer.None) + "Type of WSE" + annotation (Evaluate=true, Dialog(group="Configuration", + enable=typ == Buildings.Templates.Components.Types.Chiller.WaterCooled)); + + final parameter Boolean enaTypValChiWatChiIso= + typArrPumChiWatPri==Buildings.Templates.Components.Types.PumpArrangement.Headered + "Enable choices of chiller CHW isolation valve type" + annotation (Evaluate=true, Dialog(group="Configuration")); + // The following parameter stores the user selection. + parameter Buildings.Templates.Components.Types.Valve typValChiWatChiIso_select( + start=Buildings.Templates.Components.Types.Valve.TwoWayModulating) + "Type of chiller CHW isolation valve" + annotation (Evaluate=true, choices( + choice=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + "Two-way two-position valve", + choice=Buildings.Templates.Components.Types.Valve.TwoWayModulating + "Two-way modulating valve"), + Dialog(group="Configuration", enable=enaTypValChiWatChiIso)); + // The following parameter stores the actual configuration setting. + final parameter Buildings.Templates.Components.Types.Valve typValChiWatChiIso= + if enaTypValChiWatChiIso then typValChiWatChiIso_select + else Buildings.Templates.Components.Types.Valve.None + "Type of chiller CHW isolation valve" + annotation (Evaluate=true, Dialog(group="Configuration")); + final parameter Boolean enaTypValConWatChiIso= + typArrPumConWat==Buildings.Templates.Components.Types.PumpArrangement.Headered + and (typCtlHea==Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.None + or have_pumConWatVar + and typEco==Buildings.Templates.Plants.Chillers.Types.Economizer.None) + "Enable choices of chiller CW isolation valve type" + annotation (Evaluate=true, Dialog(group="Configuration")); + // The following parameter stores the user selection. + parameter Buildings.Templates.Components.Types.Valve typValConWatChiIso_select( + start=Buildings.Templates.Components.Types.Valve.TwoWayModulating) + "Type of chiller CW isolation valve" + annotation (Evaluate=true, + choices(choice=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + "Two-way two-position valve", + choice=Buildings.Templates.Components.Types.Valve.TwoWayModulating + "Two-way modulating valve"), + Dialog(group="Configuration", enable=enaTypValConWatChiIso)); + // The following parameter stores the actual configuration setting. + final parameter Buildings.Templates.Components.Types.Valve typValConWatChiIso + =if (typ <> Buildings.Templates.Components.Types.Chiller.WaterCooled or + typArrPumConWat == Buildings.Templates.Components.Types.PumpArrangement.Dedicated) + then Buildings.Templates.Components.Types.Valve.None elseif + enaTypValConWatChiIso then typValConWatChiIso_select + else Buildings.Templates.Components.Types.Valve.TwoWayModulating + "Type of chiller CW isolation valve" + annotation (Evaluate=true, Dialog(group="Configuration")); + + // The following parameter stores the user selection. + parameter Boolean have_senTChiWatChiSup_select=false + "Set to true for chiller CHW supply temperature sensor" + annotation (Evaluate=true, + Dialog(group="Configuration", enable= + not + ((typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 + or typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed) + and typMeaCtlChiWatPri==Buildings.Templates.Plants.Chillers.Types.PrimaryOverflowMeasurement.TemperatureChillerSensor + or typCtlHea==Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.External))); + // The following parameter stores the actual configuration setting. + final parameter Boolean have_senTChiWatChiSup= + if (typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 + or typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed) + and typMeaCtlChiWatPri==Buildings.Templates.Plants.Chillers.Types.PrimaryOverflowMeasurement.TemperatureChillerSensor + or typCtlHea==Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.External + then true + else have_senTChiWatChiSup_select + "Set to true for chiller CHW supply temperature sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_senTChiWatChiRet=false + "Set to true for chiller CHW return temperature sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_senTConWatChiSup=false + "Set to true for chiller CW supply temperature sensor" + annotation (Evaluate=true, Dialog(group="Configuration", + enable=typ == Buildings.Templates.Components.Types.Chiller.WaterCooled)); + // The following parameter stores the user selection. + parameter Boolean have_senTConWatChiRet_select=false + "Set to true for chiller CW return temperature sensor" + annotation (Evaluate=true, Dialog(group="Configuration", enable=typ == + Buildings.Templates.Components.Types.Chiller.WaterCooled and not + typCtlHea == Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.External)); + // The following parameter stores the actual configuration setting. + final parameter Boolean have_senTConWatChiRet= + if typCtlHea == Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.External + then true elseif typ <> Buildings.Templates.Components.Types.Chiller.WaterCooled + then false else have_senTConWatChiRet_select + "Set to true for chiller CW return temperature sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + + parameter Buildings.Templates.Plants.Chillers.Components.Data.ChillerGroup + dat(typ=typ, nChi=nChi) + "Parameter record for chiller group"; + + final parameter Buildings.Templates.Components.Data.Chiller datChi[nChi]( + final typ=fill(typ, nChi), + final mChiWat_flow_nominal=mChiWatChi_flow_nominal, + final mCon_flow_nominal=mConChi_flow_nominal, + final cap_nominal=capChi_nominal, + final COP_nominal=dat.COPChi_nominal, + final dpChiWat_nominal=if typValChiWatChiIso == Buildings.Templates.Components.Types.Valve.None + and typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + then dat.dpChiWatChi_nominal else fill(0, nChi), + final dpCon_nominal=if typValConWatChiIso == Buildings.Templates.Components.Types.Valve.None + then dat.dpConChi_nominal else fill(0, nChi), + final TChiWatSup_nominal=dat.TChiWatSupChi_nominal, + final TChiWatSup_max=dat.TChiWatSupChi_max, + final TConEnt_nominal=dat.TConEntChi_nominal, + final TConLvg_min=dat.TConLvgChi_min, + final TConLvg_max=dat.TConLvgChi_max, + final PLRUnl_min=dat.PLRUnlChi_min, + final PLR_min=dat.PLRChi_min, + final per=dat.perChi) + "Parameter record of each chiller"; + final parameter Buildings.Templates.Components.Data.Valve datValChiWatChiIso[nChi]( + final typ=fill(typValChiWatChiIso, nChi), + final m_flow_nominal=mChiWatChi_flow_nominal, + dpValve_nominal=fill(Buildings.Templates.Data.Defaults.dpValIso, nChi), + dpFixed_nominal=if typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + then dat.dpChiWatChi_nominal else fill(0, nChi)) + "Parallel chillers CHW bypass valve parameters" + annotation (Dialog(enable=false)); + final parameter Buildings.Templates.Components.Data.Valve datValConWatChiIso[nChi]( + final typ=fill(typValConWatChiIso, nChi), + final m_flow_nominal=mConChi_flow_nominal, + dpValve_nominal=fill(Buildings.Templates.Data.Defaults.dpValIso, nChi), + dpFixed_nominal=if typValConWatChiIso<>Buildings.Templates.Components.Types.Valve.None then + dat.dpConChi_nominal else fill(0, nChi)) + "Series chillers CHW bypass valve parameters" + annotation (Dialog(enable=false)); + + final parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_nominal[nChi]= + dat.mChiWatChi_flow_nominal + "Design CHW mass flow rate - Each chiller"; + final parameter Modelica.Units.SI.MassFlowRate mConChi_flow_nominal[nChi]=if + typ == Buildings.Templates.Components.Types.Chiller.WaterCooled + or typ == Buildings.Templates.Components.Types.Chiller.AirCooled + then dat.mConChi_flow_nominal else fill(0, nChi) + "Condenser cooling fluid mass flow rate - Each chiller"; + final parameter Modelica.Units.SI.HeatFlowRate capChi_nominal[nChi]= + dat.capChi_nominal + "Cooling capacity - Each chiller"; + final parameter Modelica.Units.SI.HeatFlowRate QChiWatChi_flow_nominal[nChi]= + -abs(capChi_nominal) + "Design cooling heat flow rate - Each chiller"; + final parameter Modelica.Units.SI.PressureDifference dpChiWatChi_nominal[nChi]= + dat.dpChiWatChi_nominal + "CHW pressure drop - Each chiller"; + final parameter Modelica.Units.SI.PressureDifference dpConChi_nominal[nChi]= + dat.dpConChi_nominal + "CW pressure drop - Each chiller"; + final parameter Modelica.Units.SI.Temperature TChiWatChiSup_nominal[nChi]= + dat.TChiWatSupChi_nominal + "CHW supply temperature - Each chiller"; + + parameter Modelica.Units.SI.Time tau=30 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + 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 allowFlowReversal=true + "Load side flow reversal: false to simplify equations, assuming, but not enforcing, no flow reversal" + annotation (Dialog(tab="Assumptions"), + Evaluate=true); + parameter Boolean allowFlowReversalSou=true + "Source side flow reversal: false to simplify equations, assuming, but not enforcing, no flow reversal" + annotation (Dialog(tab="Assumptions", + enable=Buildings.Templates.Components.Types.Chiller.WaterCooled), + Evaluate=true); + + parameter Boolean use_strokeTime= + energyDynamics <> Modelica.Fluid.Types.Dynamics.SteadyState + "Set to true to continuously open and close valve" + annotation (__ctrlFlow(enable=false), + Dialog(tab="Dynamics",group="Time needed to open or close valve", + enable=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + or typValConWatChiIso<>Buildings.Templates.Components.Types.Valve.None)); + parameter Modelica.Units.SI.Time strokeTime=120 + "Time needed to open or close valve" + annotation (__ctrlFlow(enable=false), + Dialog(tab="Dynamics",group="Time needed to open or close valve", + enable=use_strokeTime and ( + typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + or typValConWatChiIso<>Buildings.Templates.Components.Types.Valve.None))); + parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput + "Type of initialization (no init/steady state/initial state/initial output)" + annotation (__ctrlFlow(enable=false), + Dialog(tab="Dynamics",group="Time needed to open or close valve", + enable=use_strokeTime and ( + typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + or typValConWatChiIso<>Buildings.Templates.Components.Types.Valve.None))); + parameter Real y_start=1 + "Initial position of actuator" + annotation (__ctrlFlow(enable=false), + Dialog(tab="Dynamics",group="Time needed to open or close valve", + enable=use_strokeTime and ( + typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + or typValConWatChiIso<>Buildings.Templates.Components.Types.Valve.None))); + parameter Boolean from_dp=true + "= true, use m_flow = f(dp) else dp = f(m_flow)" + annotation (Evaluate=true, + Dialog(tab="Advanced", + enable=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + or typValConWatChiIso<>Buildings.Templates.Components.Types.Valve.None)); + parameter Boolean linearized=false + "= true, use linear relation between m_flow and dp for any flow rate" + annotation (Evaluate=true, + Dialog(tab="Advanced", + enable=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + or typValConWatChiIso<>Buildings.Templates.Components.Types.Valve.None)); + + // Diagnostics + parameter Boolean show_T=false + "= true, if actual temperature at port is computed" + annotation (Dialog(tab="Advanced",group="Diagnostics"),HideResult=true); + MediumChiWat.ThermodynamicState sta_aChiWat[nChi]=MediumChiWat.setState_phX( + ports_aChiWat.p, noEvent(actualStream(ports_aChiWat.h_outflow)), + noEvent(actualStream(ports_aChiWat.Xi_outflow))) + if show_T + "CHW properties in ports_aChiWat"; + MediumChiWat.ThermodynamicState sta_bChiWat[nChi]=MediumChiWat.setState_phX( + ports_bChiWat.p, noEvent(actualStream(ports_bChiWat.h_outflow)), + noEvent(actualStream(ports_bChiWat.Xi_outflow))) + if show_T + "CHW properties in ports_bChiWat"; + MediumCon.ThermodynamicState sta_aCon[nChi]=MediumCon.setState_phX( + ports_aCon.p, noEvent(actualStream(ports_aCon.h_outflow)), + noEvent(actualStream(ports_aCon.Xi_outflow))) + if show_T + "Condenser cooling fluid properties in porta_bCon"; + MediumCon.ThermodynamicState sta_bCon[nChi]=MediumCon.setState_phX( + ports_bCon.p, noEvent(actualStream(ports_bCon.h_outflow)), + noEvent(actualStream(ports_bCon.Xi_outflow))) + if show_T + "Condenser cooling fluid properties in ports_bCon"; + + Modelica.Fluid.Interfaces.FluidPorts_a ports_aChiWat[nChi]( + redeclare each final package Medium = MediumChiWat, + each m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + each h_outflow(start=MediumChiWat.h_default, nominal=MediumChiWat.h_default)) + "CHW return" + annotation (Placement(transformation(extent={{190,-140},{210, -60}}), + iconTransformation(extent={{390,-1000},{410,-920}}))); + Modelica.Fluid.Interfaces.FluidPorts_b ports_bChiWat[nChi]( + redeclare each final package Medium = MediumChiWat, + each m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + each h_outflow(start=MediumChiWat.h_default, nominal=MediumChiWat.h_default)) + "CHW supply" + annotation (Placement(transformation(extent={{190,80},{210,160}}), + iconTransformation(extent={{390,920},{410,1000}}))); + Modelica.Fluid.Interfaces.FluidPorts_b ports_bCon[nChi]( + redeclare each final package Medium = MediumCon, + each m_flow(max=if allowFlowReversalSou then +Modelica.Constants.inf else 0), + each h_outflow(start=MediumCon.h_default, nominal=MediumCon.h_default)) + "Condenser cooling fluid return (e.g. from chillers to cooling towers)" + annotation (Placement(transformation(extent={{-210,80},{-190,160}}), + iconTransformation(extent={{-410,920},{-390,1000}}))); + Modelica.Fluid.Interfaces.FluidPorts_a ports_aCon[nChi]( + redeclare each final package Medium = MediumCon, + each m_flow(min=if allowFlowReversalSou then -Modelica.Constants.inf else 0), + each h_outflow(start=MediumCon.h_default, nominal=MediumCon.h_default)) + "Condenser cooling fluid supply (e.g. from cooling towers to chillers)" + annotation (Placement(transformation(extent={{-210,-140},{-190,-60}}), + iconTransformation(extent={{-410,-1000},{-390,-920}}))); + Buildings.Templates.Plants.Chillers.Interfaces.Bus bus + "Plant control bus" + annotation (Placement(transformation(extent={{-20,180},{20,220}}), + iconTransformation(extent={{-20,982},{20,1022}}))); + +protected + Buildings.Templates.Components.Interfaces.Bus busChi[nChi] + "Chiller control bus" + annotation (Placement(transformation(extent={{-20,140},{20,180}}), + iconTransformation(extent={{-350,6},{-310,46}}))); + Buildings.Templates.Components.Interfaces.Bus busValChiWatChiIso[nChi] + if typValChiWatChiIso <> Buildings.Templates.Components.Types.Valve.None + "Chiller CHW isolation valve control bus" annotation (Placement( + transformation(extent={{60,140},{100,180}}), iconTransformation(extent= + {{-466,50},{-426,90}}))); + Buildings.Templates.Components.Interfaces.Bus busValConWatChiIso[nChi] + if typValConWatChiIso <> Buildings.Templates.Components.Types.Valve.None + "Chiller CW isolation valve control bus" annotation (Placement( + transformation(extent={{-100,140},{-60,180}}), iconTransformation( + extent={{-466,50},{-426,90}}))); +equation + connect(busChi, bus.chi) annotation (Line( + points={{0,160},{0,200}}, + color={255,204,51}, + thickness=0.5)); + connect(bus.valChiWatChiIso, busValChiWatChiIso) annotation (Line( + points={{0,200},{0,180},{80,180},{80,160}}, + color={255,204,51}, + thickness=0.5)); + connect(bus.valConWatChiIso, busValConWatChiIso) annotation (Line( + points={{0,200},{0,180},{-80,180},{-80,160}}, + color={255,204,51}, + thickness=0.5)); + annotation (Diagram(coordinateSystem(extent={{-200,-240},{200,200}})), + Icon(coordinateSystem(preserveAspectRatio=false, + extent={{-400,-1000},{400,1000}}), + graphics={ + Line( points={{180,840},{400,840}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5), + Line( + points={{180,960},{400,960}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=5), + Line( + visible=nChi >= 2, + points={{180,600},{400,600}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=5), + Line( + visible=nChi >= 3, + points={{180,240},{400,240}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=5), + Line( + visible=nChi >= 4, + points={{180,-120},{400,-120}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=5), + Text( extent={{-151,-1008},{149,-1048}}, + textColor={0,0,255}, + textString="%name"), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and nChi>=1, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={300,960}), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and nChi >= 1, + extent={{260,1020},{340,1100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso == Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and nChi >= 2, + extent={{260,660},{340,740}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 2, + extent={{-100,-100},{100,100}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={300,600}), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition and nChi >= 3, + extent={{260,300},{340,380}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and nChi >= 3, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={300,240}), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and nChi >= 4, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={300,-120}), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition and nChi>=4, + extent={{260,-60},{340,20}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayModulating + and nChi >= 1, + extent={{260,1020},{340,1100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso == Buildings.Templates.Components.Types.Valve.TwoWayModulating + and nChi >= 2, + extent={{260,660},{340,740}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso == Buildings.Templates.Components.Types.Valve.TwoWayModulating + and nChi >= 3, + extent={{260,300},{340,380}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayModulating + and nChi>=4, + extent={{260,-60},{340,20}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Rectangle( + extent={{180,1000},{-180,800}}, + lineColor={0,0,0}, + lineThickness=1), + Text( + extent={{-180,900},{180,860}}, + textColor={0,0,0}, + textString="CHI-1"), + Rectangle( + extent={{180,640},{-180,440}}, + lineColor={0,0,0}, + lineThickness=1, + visible=nChi >= 2), + Text( + visible=nChi >= 2, + extent={{-180,540},{180,500}}, + textColor={0,0,0}, + textString="CHI-2"), + Line( visible=nChi >= 2, + points={{180,480},{400,480}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5), + Rectangle( + extent={{180,280},{-180,78}}, + lineColor={0,0,0}, + lineThickness=1, + visible=nChi >= 3), + Text( + visible=nChi >= 3, + extent={{-180,180},{180,140}}, + textColor={0,0,0}, + textString="CHI-3"), + Line( points={{180,120},{400,120}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5, + visible=nChi >= 3), + Rectangle( + visible=nChi >= 4, + extent={{180,-80},{-180,-280}}, + lineColor={0,0,0}, + lineThickness=1), + Text( + visible=nChi >= 4, + extent={{-180,-180},{180,-220}}, + textColor={0,0,0}, + textString="CHI-4"), + Line( points={{180,-240},{400,-240}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5, + visible=nChi >= 4), + Line( + points={{300,1020},{300,960}}, + color={0,0,0}, + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 1), + Line( + points={{300,660},{300,600}}, + color={0,0,0}, + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 2), + Line( + points={{300,300},{300,240}}, + color={0,0,0}, + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 3), + Line( + points={{300,-60},{300,-120}}, + color={0,0,0}, + visible=typArrPumChiWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered + and nChi >= 4), + Line( + visible=nChi>=5, + points={{180,-480},{400,-480}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=5), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and nChi>=5, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={300,-480}), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and nChi>=5, + extent={{260,-420},{340,-340}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso == Buildings.Templates.Components.Types.Valve.TwoWayModulating + and nChi >= 5, + extent={{260,-420},{340,-340}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Rectangle( + visible=nChi>=5, + extent={{180,-440},{-180,-640}}, + lineColor={0,0,0}, + lineThickness=1), + Text( + visible=nChi>=5, + extent={{-180,-540},{180,-580}}, + textColor={0,0,0}, + textString="CHI-5"), + Line( points={{180,-600},{400,-600}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5, + visible=nChi>=5), + Line( + points={{300,-420},{300,-480}}, + color={0,0,0}, + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 5), + Line( + visible=nChi>=6, + points={{180,-840},{400,-840}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=5), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and nChi>=6, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={300,-840}), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and nChi>=6, + extent={{260,-780},{340,-700}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayModulating + and nChi>=6, + extent={{260,-780},{340,-700}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Rectangle( + visible=nChi>=6, + extent={{180,-800},{-180,-1000}}, + lineColor={0,0,0}, + lineThickness=1), + Text( + visible=nChi>=6, + extent={{-180,-880},{180,-920}}, + textColor={0,0,0}, + textString="CHI-6"), + Line( points={{180,-960},{400,-960}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5, + visible=nChi>=6), + Line( + points={{300,-780},{300,-840}}, + color={0,0,0}, + visible=typArr==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and typValChiWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 6), + Line( + visible=nChi >= 1 and typ == Buildings.Templates.Components.Types.Chiller.WaterCooled, + points={{-400,840},{-180,840}}, + color={0,0,0}, + thickness=5), + Line( + visible=nChi >= 1 and typ == Buildings.Templates.Components.Types.Chiller.WaterCooled, + points={{-400,960},{-180,960}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5), + Line( + visible=nChi >= 2 and typ == Buildings.Templates.Components.Types.Chiller.WaterCooled, + points={{-400,600},{-180,600}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5), + Line( + visible=nChi >= 3 and typ == Buildings.Templates.Components.Types.Chiller.WaterCooled, + points={{-400,240},{-180,240}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5), + Line( + visible=nChi >= 4 and typ == Buildings.Templates.Components.Types.Chiller.WaterCooled, + points={{-400,-120},{-180,-120}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and + typValConWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 1, + extent={{-100,-100},{100,100}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={-280,960}), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and + typValConWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and nChi >= 1, + extent={{-320,1020},{-240,1100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and + typValConWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and nChi >= 2, + extent={{-318,660},{-238,740}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and + typValConWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 2, + extent={{-100,-100},{100,100}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={-280,600}), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and + typValConWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and nChi >= 3, + extent={{-320,300},{-240,380}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and + typValConWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 3, + extent={{-100,-100},{100,100}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={-280,240}), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and +typValConWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 4, + extent={{-100,-100},{100,100}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={-280,-120}), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and + typValConWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition and nChi>=4, + extent={{-320,-60},{-240,20}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and +typValConWatChiIso== Buildings.Templates.Components.Types.Valve.TwoWayModulating + and nChi >= 1, + extent={{-320,1020},{-240,1100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and +typValConWatChiIso== Buildings.Templates.Components.Types.Valve.TwoWayModulating + and nChi >= 2, + extent={{-318,660},{-238,740}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and +typValConWatChiIso== Buildings.Templates.Components.Types.Valve.TwoWayModulating + and nChi >= 3, + extent={{-320,300},{-240,380}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and +typValConWatChiIso== Buildings.Templates.Components.Types.Valve.TwoWayModulating + and nChi>=4, + extent={{-320,-60},{-240,20}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Line( visible=nChi >= 2 and typ == Buildings.Templates.Components.Types.Chiller.WaterCooled, + points={{-400,480},{-180,480}}, + color={0,0,0}, + thickness=5), + Line( points={{-400,120},{-180,120}}, + color={0,0,0}, + thickness=5, + visible=nChi >= 3 and typ == Buildings.Templates.Components.Types.Chiller.WaterCooled), + Line( points={{-400,-240},{-180,-240}}, + color={0,0,0}, + thickness=5, + visible=nChi >= 4 and typ == Buildings.Templates.Components.Types.Chiller.WaterCooled), + Line( + points={{-280,1020},{-280,960}}, + color={0,0,0}, + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and +typValConWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 1), + Line( + points={{-280,660},{-280,600}}, + color={0,0,0}, + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and +typValConWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 2), + Line( points={{-280,300},{-280,240}}, + color={0,0,0}, + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and +typValConWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 3), + Line( + points={{-280,-60},{-280,-120}}, + color={0,0,0}, + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and +typValConWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 4), + Line( + visible=nChi>=5 and typ == Buildings.Templates.Components.Types.Chiller.WaterCooled, + points={{-400,-480},{-180,-480}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and +typValConWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 5, + extent={{-100,-100},{100,100}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={-280,-480}), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and + typValConWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition and nChi>=5, + extent={{-320,-420},{-240,-340}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and + typValConWatChiIso== Buildings.Templates.Components.Types.Valve.TwoWayModulating and nChi >= 5, + extent={{-320,-420},{-240,-340}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Line( points={{-400,-600},{-180,-600}}, + color={0,0,0}, + thickness=5, + visible=nChi>=5), + Line( + points={{-280,-420},{-280,-480}}, + color={0,0,0}, + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and +typValConWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 5), + Line( + visible=nChi>=6 and typ == Buildings.Templates.Components.Types.Chiller.WaterCooled, + points={{-400,-840},{-180,-840}}, + color={0,0,0}, + pattern=LinePattern.Dash, + thickness=5), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and + typValConWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 6, + extent={{-100,-100},{100,100}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={-280,-840}), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and + typValConWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and nChi>=6, + extent={{-320,-780},{-240,-700}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and +typValConWatChiIso== Buildings.Templates.Components.Types.Valve.TwoWayModulating + and nChi>=6, + extent={{-320,-780},{-240,-700}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Line( + points={{-400,-960},{-180,-960}}, + color={0,0,0}, + thickness=5, + visible=nChi >= 6 and typ == Buildings.Templates.Components.Types.Chiller.WaterCooled), + Line( + points={{-280,-780},{-280,-840}}, + color={0,0,0}, + visible=typ==Buildings.Templates.Components.Types.Chiller.WaterCooled and +typValConWatChiIso <> Buildings.Templates.Components.Types.Valve.None + and nChi >= 6), + Bitmap( + extent={{-60,1000},{60,1120}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Boilers/ControllerOnboard.svg", + visible=nChi >= 1), + Bitmap( + extent={{-60,640},{60,760}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Boilers/ControllerOnboard.svg", + visible=nChi >= 2), + Bitmap( + extent={{-60,280},{60,400}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Boilers/ControllerOnboard.svg", + visible=nChi >= 3), + Bitmap( + extent={{-60,-80},{60,40}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Boilers/ControllerOnboard.svg", + visible=nChi >= 4), + Bitmap( + extent={{-60,-440},{60,-320}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Boilers/ControllerOnboard.svg", + visible=nChi >= 5), + Bitmap( + extent={{-60,-800},{60,-680}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Boilers/ControllerOnboard.svg", + visible=nChi >= 6)}), + Documentation(info=" +

                      +This partial class provides a standard interface for chiller group models. +

                      +

                      Control points

                      +

                      +The following input and output points are available for all +models inheriting from this interface. +

                      + +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end PartialChillerGroup; diff --git a/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialController.mo b/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialController.mo new file mode 100644 index 00000000000..84bea8bd90d --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialController.mo @@ -0,0 +1,280 @@ +within Buildings.Templates.Plants.Chillers.Components.Interfaces; +partial block PartialController "Interface class for plant controller" + parameter Buildings.Templates.Plants.Chillers.Types.Controller typ + "Type of controller" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Chillers.Configuration.ChillerPlant cfg + "Plant configuration parameters" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl typCtlHea( + start=Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.None) + "Type of head pressure control" + annotation (Evaluate=true, Dialog(group="Configuration", + enable=typ == Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and cfg.typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled)); + parameter Boolean have_senDpChiWatRemWir=false + "Set to true for remote CHW differential pressure sensor(s) hardwired to plant or pump controller" + annotation (Evaluate=true, + Dialog(group="Configuration", + enable=typ==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and ( + cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only + or cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2 + or cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2))); + parameter Integer nSenDpChiWatRem(final min=if typ == Buildings.Templates.Plants.Chillers.Types.Controller.G36 + then 1 else 0) = 1 + "Number of remote CHW differential pressure sensors used for CHW pump speed control" + annotation (Evaluate=true, Dialog(group="Configuration", + enable=typ==Buildings.Templates.Plants.Chillers.Types.Controller.G36 and ( + cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only + or cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2 + or cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2))); + parameter Integer nAirHan( + final min=0)=0 + "Number of air handling units served by the plant" + annotation(Dialog(group="Configuration", + enable=typ == Buildings.Templates.Plants.Chillers.Types.Controller.G36), + Evaluate=true); + parameter Integer nEquZon( + final min=0)=0 + "Number of terminal units (zone equipment) served by the plant" + annotation(Dialog(group="Configuration", + enable=typ == Buildings.Templates.Plants.Chillers.Types.Controller.G36), + Evaluate=true); + parameter Buildings.Templates.Plants.Chillers.Types.PrimaryOverflowMeasurement typMeaCtlChiWatPri( + start=Buildings.Templates.Plants.Chillers.Types.PrimaryOverflowMeasurement.FlowDecoupler) + "Type of sensors for primary CHW pump control in variable primary-variable secondary plants" + annotation (Evaluate=true, Dialog(group="Configuration", enable=typ == + Buildings.Templates.Plants.Chillers.Types.Controller.G36 and ( + cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 + or cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed))); + final parameter Boolean have_senVChiWatPri= + if cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only then + true + elseif cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 + or cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed then + typMeaCtlChiWatPri==Buildings.Templates.Plants.Chillers.Types.PrimaryOverflowMeasurement.FlowDifference + else false + "Set to true for primary CHW flow sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Chillers.Types.SensorLocation locSenFloChiWatPri= + Buildings.Templates.Plants.Chillers.Types.SensorLocation.Return + "Location of primary CHW flow sensor" + annotation (Evaluate=true, Dialog(group="Configuration", enable=typ == + Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + have_senVChiWatPri)); + final parameter Boolean have_senVChiWatSec= + cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2 or + cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 or + cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed + "Set to true for secondary CHW flow sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Chillers.Types.SensorLocation locSenFloChiWatSec= + Buildings.Templates.Plants.Chillers.Types.SensorLocation.Return + "Location of secondary CHW flow sensor" + annotation (Evaluate=true, Dialog(group="Configuration", enable=typ == + Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + have_senVChiWatSec)); + + parameter Boolean have_senTChiWatPriSup_select=false + "Set to true for primary CHW supply temperature sensor" + annotation (Evaluate=true, Dialog(group="Configuration", enable=typ == + Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + cfg.typDisChiWat <> Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only + and cfg.typDisChiWat <> Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only)); + final parameter Boolean have_senTChiWatPriSup= + cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only + or cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only + or have_senTChiWatPlaRet_select + "Set to true for plant CHW return temperature sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + + parameter Boolean have_senTChiWatPlaRet_select=false + "Set to true for plant CHW return temperature sensor" + annotation (Evaluate=true, Dialog(group="Configuration", enable=typ == + Buildings.Templates.Plants.Chillers.Types.Controller.G36 and + cfg.typDisChiWat <> Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only + and cfg.typDisChiWat <> Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only)); + final parameter Boolean have_senTChiWatPlaRet= + if cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only + then false + elseif cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only + then true + else have_senTChiWatPlaRet_select + "Set to true for plant CHW return temperature sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + + // For plants with WSE, TChiWatEcoBef is used in place of TChiWatSecRet. + final parameter Boolean have_senTChiWatSecRet= + if cfg.typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None + then false + else cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2 + or cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 + or cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed + "Set to true for secondary CHW return temperature sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + + parameter Buildings.Templates.Plants.Chillers.Types.CoolerFanSpeedControl typCtlFanCoo= + Buildings.Templates.Plants.Chillers.Types.CoolerFanSpeedControl.SupplyTemperature + "Cooler fan speed control" + annotation (Evaluate=true, Dialog(group="Configuration", + enable=typ ==Buildings.Templates.Plants.Chillers.Types.Controller.G36 + and cfg.typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled)); + parameter Boolean is_clsCpl=true + "Set to true if the plant is close coupled (pipe length from chillers to coolers under 30 m)" + annotation (Evaluate=true, Dialog(group="Configuration", enable=typ == + Buildings.Templates.Plants.Chillers.Types.Controller.G36)); + parameter Boolean have_senLevCoo=false + "Set to true if cooling towers have level sensor for makeup water control" + annotation (Evaluate=true, Dialog(group="Configuration", enable=typ == + Buildings.Templates.Plants.Chillers.Types.Controller.G36 and cfg.typChi + == Buildings.Templates.Components.Types.Chiller.WaterCooled and ( + cfg.typCoo == Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen + or cfg.typCoo == Buildings.Templates.Components.Types.Cooler.CoolingTowerClosed))); + + parameter Buildings.Templates.Plants.Chillers.Components.Data.Controller dat( + cfg=cfg) + "Parameter record for controller"; + + final parameter Real sta[:,:]=dat.sta + "Staging matrix with plant stage as row index and chiller as column index (highest index for optional WSE): 0 for disabled, 1 for enabled" + annotation (Evaluate=true, Dialog(group="Plant staging", + enable=typ == Buildings.Templates.Plants.Chillers.Types.Controller.G36)); + final parameter Integer nUniSta=dat.nUniSta + "Number of units to stage, including chillers and optional WSE" + annotation (Evaluate=true, Dialog(group="Plant staging")); + final parameter Integer nSta=dat.nSta + "Number of plant stages" + annotation (Evaluate=true, Dialog(group="Plant staging")); + + Buildings.Templates.Plants.Chillers.Interfaces.Bus bus + "Plant control bus" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-260,0}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-100,0}))); + Buildings.Templates.AirHandlersFans.Interfaces.Bus busAirHan[nAirHan] + if nAirHan>0 + "Air handling unit control bus" + annotation (Placement(transformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={260,140}), iconTransformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,60}))); + Buildings.Templates.ZoneEquipment.Interfaces.Bus busEquZon[nEquZon] + if nEquZon>0 + "Terminal unit control bus" + annotation (Placement(transformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={260,-140}), + iconTransformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,-60}))); +protected + Buildings.Templates.Components.Interfaces.Bus busChi[cfg.nChi] + "Chiller control bus" + annotation (Placement(transformation(extent={{-260,180},{-220,220}}), + iconTransformation(extent={{-756,150},{-716,190}}))); + Buildings.Templates.Components.Interfaces.Bus busCoo[cfg.nCoo] + if cfg.typCoo<>Buildings.Templates.Components.Types.Cooler.None + "Cooler control bus" + annotation (Placement(transformation(extent={{-260,-120},{-220,-80}}), + iconTransformation(extent={{-756,150},{-716,190}}))); + Buildings.Templates.Components.Interfaces.Bus busValCooInlIso[cfg.nCoo] + if cfg.typValCooInlIso<>Buildings.Templates.Components.Types.Valve.None + "Cooler inlet isolation valve control bus" + annotation (Placement( + transformation(extent={{-260,-160},{-220,-120}}), iconTransformation( + extent={{-756,150},{-716,190}}))); + Buildings.Templates.Components.Interfaces.Bus busValCooOutIso[cfg.nCoo] + if cfg.typValCooOutIso<>Buildings.Templates.Components.Types.Valve.None + "Cooler outlet isolation valve control bus" + annotation (Placement( + transformation(extent={{-260,-200},{-220,-160}}), iconTransformation( + extent={{-756,150},{-716,190}}))); + Buildings.Templates.Components.Interfaces.Bus busValChiWatChiIso[cfg.nChi] + if cfg.typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + "Chiller CHW isolation valve control bus" + annotation (Placement( + transformation(extent={{-260,140},{-220,180}}), iconTransformation(extent= + {{-756,150},{-716,190}}))); + Buildings.Templates.Components.Interfaces.Bus busValConWatChiIso[cfg.nChi] + if cfg.typValConWatChiIso<>Buildings.Templates.Components.Types.Valve.None + "Chiller CW isolation valve control bus" + annotation (Placement( + transformation(extent={{-260,100},{-220,140}}), iconTransformation(extent={{ + -756,150},{-716,190}}))); + Buildings.Templates.Components.Interfaces.Bus busValChiWatChiBypSer[cfg.nChi] if + cfg.typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + "Chiller CHW bypass valve control bus - Series chillers" annotation ( + Placement(transformation(extent={{-260,60},{-220,100}}), + iconTransformation(extent={{-422,198},{-382,238}}))); +equation + connect(busValChiWatChiIso, bus.valChiWatChiIso) annotation (Line( + points={{-240,160},{-220,160},{-220,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busChi, bus.chi) annotation (Line( + points={{-240,200},{-210,200},{-210,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busCoo, bus.coo) annotation (Line( + points={{-240,-100},{-240,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busValCooInlIso, bus.valCooInlIso) annotation (Line( + points={{-240,-140},{-220,-140},{-220,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busValCooOutIso, bus.valCooOutIso) annotation (Line( + points={{-240,-180},{-210,-180},{-210,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busValChiWatChiBypSer, bus.valChiWatChiByp) annotation (Line( + points={{-240,80},{-240,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + connect(busValConWatChiIso, bus.valConWatChiIso) annotation (Line( + points={{-240,120},{-228,120},{-228,0},{-260,0}}, + color={255,204,51}, + thickness=0.5)); + 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={{-149,-114},{151,-154}}, + lineColor={0,0,255}, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-260,-300},{260,300}})), + Documentation(info=" +

                      +This partial class provides a standard interface for plant controllers. +

                      +

                      Details

                      +

                      +Array instances of nested expandable connectors are systematically +declared here to enhance support across various Modelica tools. +A typical connect clause such as +connect(bus.nestedBus[:].y, sensor[:].y) +raises issues when nestedBus is not explicitly declared +as Modelica compilers cannot decide to which variable the dimensionality +should be assigned between nestedBus and y +inside nestedBus. +

                      +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end PartialController; diff --git a/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialCoolerGroup.mo b/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialCoolerGroup.mo new file mode 100644 index 00000000000..1ede6b2511f --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialCoolerGroup.mo @@ -0,0 +1,240 @@ +within Buildings.Templates.Plants.Chillers.Components.Interfaces; +partial model PartialCoolerGroup + "Interface class for cooler group" + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + redeclare final package Medium=MediumConWat, + final m_flow_nominal=mConWat_flow_nominal); + + replaceable package MediumConWat=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CW medium model" + annotation(__Linkage(enable=false)); + + parameter Integer nCoo(final min=0) + "Number of cooler units (count one unit for each cooling tower cell)" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Cooler typCoo + "Type of cooler" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_varCom=true + "Set to true for single common speed signal, false for dedicated signals" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Valve typValCooInlIso= + Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + "Type of cooler inlet isolation valve" + annotation (Evaluate=true, Dialog(group="Configuration"), + choices( + choice=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + "Two-way two-position valve", + choice=Buildings.Templates.Components.Types.Valve.None + "No Valve")); + parameter Buildings.Templates.Components.Types.Valve typValCooOutIso= + Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + "Type of cooler outlet isolation valve" + annotation (Evaluate=true, Dialog(group="Configuration"), + choices( + choice=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + "Two-way two-position valve", + choice=Buildings.Templates.Components.Types.Valve.None + "No Valve")); + + parameter Buildings.Templates.Plants.Chillers.Components.Data.CoolerGroup dat( + final typCoo=typCoo, + final nCoo=nCoo) + "Design and operating parameters"; + final parameter Modelica.Units.SI.MassFlowRate mConWatCoo_flow_nominal[nCoo]= + dat.mConWatCoo_flow_nominal + "CW mass flow rate - Each cooler unit"; + final parameter Modelica.Units.SI.MassFlowRate mConWat_flow_nominal= + sum(mConWatCoo_flow_nominal) + "Total CW mass flow rate (all units)"; + final parameter Modelica.Units.SI.PressureDifference dpConWatFriCoo_nominal[nCoo]= + dat.dpConWatFriCoo_nominal + "CW flow-friction losses through equipment and piping only - Each cooler unit (without elevation head or valve)"; + final parameter Modelica.Units.SI.PressureDifference dpConWatStaCoo_nominal[nCoo]= + dat.dpConWatStaCoo_nominal + "CW elevation head - Each cooler unit"; + final parameter Modelica.Units.SI.MassFlowRate mAirCoo_flow_nominal[nCoo]= + dat.mAirCoo_flow_nominal + "Air mass flow rate - Each cooler unit"; + + final parameter Buildings.Templates.Components.Data.Cooler datCoo[nCoo]( + final typ=fill(typCoo, nCoo), + final mConWat_flow_nominal=dat.mConWatCoo_flow_nominal, + final dpConWatFri_nominal= + if typValCooInlIso==Buildings.Templates.Components.Types.Valve.None and + typValCooOutIso==Buildings.Templates.Components.Types.Valve.None then + dat.dpConWatFriCoo_nominal else fill(0, nCoo), + final dpConWatSta_nominal=dat.dpConWatStaCoo_nominal, + final mAir_flow_nominal=dat.mAirCoo_flow_nominal, + final TAirEnt_nominal=fill(dat.TAirEnt_nominal, nCoo), + final TWetBulEnt_nominal=fill(dat.TWetBulEnt_nominal, nCoo), + final TConWatRet_nominal=fill(dat.TConWatRet_nominal, nCoo), + final TConWatSup_nominal=fill(dat.TConWatSup_nominal, nCoo), + final PFan_nominal=dat.PFanCoo_nominal) + "Parameter record - Each cooler unit"; + final parameter Buildings.Templates.Components.Data.Valve datValCooInlIso[nCoo]( + final typ=fill(typValCooInlIso, nCoo), + final m_flow_nominal=dat.mConWatCoo_flow_nominal, + dpValve_nominal=fill(Buildings.Templates.Data.Defaults.dpValIso, nCoo), + dpFixed_nominal=if typValCooInlIso<>Buildings.Templates.Components.Types.Valve.None then + dat.dpConWatFriCoo_nominal else fill(0, nCoo)) + "Inlet isolation valve parameters" + annotation (Dialog(enable=false)); + final parameter Buildings.Templates.Components.Data.Valve datValCooOutIso[nCoo]( + final typ=fill(typValCooOutIso, nCoo), + final m_flow_nominal=dat.mConWatCoo_flow_nominal, + dpValve_nominal=fill(Buildings.Templates.Data.Defaults.dpValIso, nCoo), + dpFixed_nominal= + if typValCooInlIso==Buildings.Templates.Components.Types.Valve.None and + typValCooOutIso<>Buildings.Templates.Components.Types.Valve.None then + dat.dpConWatFriCoo_nominal else fill(0, nCoo)) + "Outlet isolation valve parameters" + annotation (Dialog(enable=false)); + + parameter Modelica.Units.SI.Time tau=30 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + 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 text_flip = false + "True to flip text horizontally in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + + Buildings.Templates.Plants.Chillers.Interfaces.Bus bus + "Plant control bus" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={0,100}), iconTransformation(extent={{-20,280},{20,320}}))); + BoundaryConditions.WeatherData.Bus busWea + "Weather data bus" + annotation (Placement(transformation(extent={{-80,80},{-40,120}}), + iconTransformation(extent={{-320,280},{-280,320}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator repSpe( + final nout=nCoo) if have_varCom + "Replicate signal in case of common unique commanded speed" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,70}))); + Modelica.Blocks.Routing.RealPassThrough pasSpe[nCoo] + if not have_varCom + "Direct pass through for dedicated speed signal" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={40,70}))); + Modelica.Blocks.Routing.BooleanPassThrough pasSta[nCoo] + "Direct pass through for Start/Stop signal" + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-40,70}))); +protected + Buildings.Templates.Components.Interfaces.Bus busCoo[nCoo] + "Cooler control bus" + annotation (Placement(transformation(extent={{-20,20}, + {20,60}}), iconTransformation(extent={{-350,6},{-310,46}}))); +equation + connect(repSpe.y, busCoo.y) + annotation (Line(points={{0,58},{0,40}}, color={0,0,127})); + connect(pasSpe.y, busCoo.y) + annotation (Line(points={{40,59},{40,50},{0,50},{0,40}}, color={0,0,127})); + connect(bus.yCoo, repSpe.u) annotation (Line( + points={{0,100},{0,82}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(bus.yCoo, pasSpe.u) annotation (Line( + points={{0,100},{0,90},{40,90},{40,82}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(busCoo, bus.coo) annotation (Line( + points={{0,40},{80,40},{80,96},{6,96},{6,100},{0,100}}, + color={255,204,51}, + thickness=0.5), Text( + string="%second", + index=-1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(bus.y1Coo, pasSta.u) annotation (Line( + points={{0,100},{0,90},{-40,90},{-40,82}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(pasSta.y, busCoo.y1) annotation (Line(points={{-40,59},{-40,40},{0,40}}, + color={255,0,255}), Text( + string="%second", + index=1, + extent={{-3,-6},{-3,-6}}, + horizontalAlignment=TextAlignment.Right)); + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false, + extent={{-820,-300},{820,300}})), + Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}})), + Documentation(info=" +

                      +This partial class provides a standard interface for cooler group models. +

                      +

                      Control points

                      +

                      +The following input and output points are available for all +models inheriting from this interface. +

                      +
                        +
                      • +Cooler Start/Stop command (VFD Run) y1Coo: +DO signal dedicated to each unit, with a dimensionality of one +
                      • +
                      • +Cooler speed command (VFD Speed) yCoo: +
                          +
                        • +If have_varCom: AO signal common to all units, +with a dimensionality of zero +
                        • +
                        • +If not have_varCom: AO signal dedicated to each unit, +with a dimensionality of one +
                        • +
                        +
                      • +
                      • +Sub-bus coo storing all signals dedicated +to each unit, with a dimensionality of one +
                          +
                        • +At least the cooler status (through VFD interface, VFD status contact, +or current switch) should be available as coo.y1_actual: +DI signal dedicated to each unit, with a dimensionality of one +
                        • +
                        +
                      • +
                      +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end PartialCoolerGroup; diff --git a/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialEconomizer.mo b/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialEconomizer.mo new file mode 100644 index 00000000000..53ed91391c5 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialEconomizer.mo @@ -0,0 +1,117 @@ +within Buildings.Templates.Plants.Chillers.Components.Interfaces; +partial model PartialEconomizer "Partial waterside economizer model" + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=mChiWat_flow_nominal); + + 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 Buildings.Templates.Plants.Chillers.Types.Economizer typ + "Type of equipment" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Buildings.Templates.Plants.Chillers.Components.Data.Economizer + dat(final typ=typ) + "Design and operating parameters"; + + final parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal( + final min=0)=dat.mChiWat_flow_nominal + "CHW mass flow rate"; + final parameter Modelica.Units.SI.MassFlowRate mConWat_flow_nominal( + final min=0)=dat.mConWat_flow_nominal + "CHW mass flow rate"; + final parameter Modelica.Units.SI.PressureDifference dpChiWat_nominal( + final min=0, + displayUnit="Pa")=dat.dpChiWat_nominal + "CHW pressure drop"; + final parameter Modelica.Units.SI.PressureDifference dpConWat_nominal( + final min=0, + displayUnit="Pa")=dat.dpConWat_nominal + "CW pressure drop"; + final parameter Modelica.Units.SI.HeatFlowRate Q_flow_nominal( + final max=0)=-1*dat.cap_nominal + "Heat flow rate"; + final parameter Buildings.Templates.Components.Data.Valve datValConWatIso( + final typ=if typ<>Buildings.Templates.Plants.Chillers.Types.Economizer.None + then Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition else + Buildings.Templates.Components.Types.Valve.None, + final m_flow_nominal=mConWat_flow_nominal, + final dpValve_nominal=dat.dpValConWatIso_nominal, + final dpFixed_nominal=dpConWat_nominal) + "WSE CW isolation valve"; + final parameter Buildings.Templates.Components.Data.Valve datValChiWatByp( + final typ=if typ==Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithValve + then Buildings.Templates.Components.Types.Valve.TwoWayModulating else + Buildings.Templates.Components.Types.Valve.None, + final m_flow_nominal=mChiWat_flow_nominal, + final dpValve_nominal=dat.dpValChiWatByp_nominal) + "WSE CHW bypass valve"; + final parameter Buildings.Templates.Components.Data.PumpSingle datPumChiWat( + final typ=if typ==Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithPump + then Buildings.Templates.Components.Types.Pump.Single else + Buildings.Templates.Components.Types.Pump.None, + final m_flow_nominal=mChiWat_flow_nominal, + final dp_nominal=dat.dpPumChiWat_nominal, + final per=dat.perPumChiWat) + "Heat exchanger CHW pump"; + + 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)); + 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")); + + Modelica.Fluid.Interfaces.FluidPort_a port_aConWat( + redeclare final package Medium = MediumConWat, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start = MediumConWat.h_default, nominal = MediumConWat.h_default)) + if typ<>Buildings.Templates.Plants.Chillers.Types.Economizer.None + "Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)" + annotation (Placement(transformation(extent={{90,70},{110,90}}), + iconTransformation(extent={{-410,70},{-390,90}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_bConWat( + redeclare final package Medium = MediumConWat, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + h_outflow(start = MediumConWat.h_default, nominal = MediumConWat.h_default)) + if typ<>Buildings.Templates.Plants.Chillers.Types.Economizer.None + "Fluid connector b1 (positive design flow direction is from port_a1 to port_b1)" + annotation (Placement(transformation(extent={{-90,70},{-110,90}}), + iconTransformation(extent={{-390,-90},{-410,-70}}))); + + Buildings.Templates.Plants.Chillers.Interfaces.Bus bus + if typ<>Buildings.Templates.Plants.Chillers.Types.Economizer.None + "Plant control bus" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={0,100}), iconTransformation(extent={{-20,80},{20,120}}))); + + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-400, + -100},{400,100}})), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

                      +This partial class provides a standard interface for waterside +economizer models. +

                      +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); + +end PartialEconomizer; diff --git a/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialEconomizerHX.mo b/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialEconomizerHX.mo new file mode 100644 index 00000000000..4d391526992 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Interfaces/PartialEconomizerHX.mo @@ -0,0 +1,110 @@ +within Buildings.Templates.Plants.Chillers.Components.Interfaces; +partial model PartialEconomizerHX "Partial model of WSE with plate and frame heat exchanger" + extends + Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialEconomizer; + + Buildings.Fluid.HeatExchangers.PlateHeatExchangerEffectivenessNTU hex( + redeclare final package Medium1=MediumConWat, + redeclare final package Medium2=MediumChiWat, + final allowFlowReversal1=allowFlowReversal, + final allowFlowReversal2=allowFlowReversal, + final use_Q_flow_nominal=true, + configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow, + final dp1_nominal=0, + final dp2_nominal=dpChiWat_nominal, + final m1_flow_nominal=mConWat_flow_nominal, + final m2_flow_nominal=mChiWat_flow_nominal, + final Q_flow_nominal=Q_flow_nominal, + final T_a1_nominal=dat.TConWatEnt_nominal, + final T_a2_nominal=dat.TChiWatEnt_nominal) + "Heat exchanger (fluid ports with index 1 for CW and 2 for CHW)" + annotation (Placement( + transformation(extent={{-10,10},{10,-10}}, rotation=180, + origin={0,74}))); + Buildings.Templates.Components.Actuators.Valve valConWatIso( + redeclare final package Medium=MediumConWat, + final typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, + final allowFlowReversal=allowFlowReversal, + final dat=datValConWatIso, + final text_flip=true) + "WSE CW isolation valve" + annotation (Placement(transformation(extent={{-60,70},{-80,90}}))); + Buildings.Templates.Components.Sensors.Temperature TConWatEcoRet( + redeclare final package Medium = MediumConWat, + final allowFlowReversal=allowFlowReversal, + final m_flow_nominal=mConWat_flow_nominal, + final have_sen=true, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell) + "WSE CW return temperature" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=0, + origin={-40,80}))); +equation + /* Control point connection - start */ + connect(bus.valConWatEcoIso, valConWatIso.bus); + connect(bus.TConWatEcoRet, TConWatEcoRet.y); + /* Control point connection - stop */ + + connect(hex.port_a1, port_aConWat) + annotation (Line(points={{10,80},{100,80}}, color={0,127,255})); + connect(hex.port_b2, port_b) + annotation (Line(points={{10,68},{20,68},{20,0},{100,0}}, color={0,127,255})); + connect(valConWatIso.port_b, port_bConWat) + annotation (Line(points={{-80,80},{-100,80}}, color={0,127,255})); + connect(hex.port_b1, TConWatEcoRet.port_a) + annotation (Line(points={{-10,80},{-30,80}}, color={0,127,255})); + connect(TConWatEcoRet.port_b, valConWatIso.port_a) + annotation (Line(points={{-50,80},{-60,80}}, color={0,127,255})); + annotation (Documentation(info=" +

                      +This model serves as the base class to construct the WSE models. +It includes an ε-NTU heat exchanger model and a +two-way modulating valve to modulate the CW flow rate. +

                      +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +"), +Icon(graphics={ + Line( points={{-400,80},{-100,80}}, + color={0,0,0}, + thickness=5), + Rectangle( + extent={{100,100},{-100,-102}}, + lineColor={0,0,0}, + lineThickness=1), + Line( + points={{-100,100},{100,-100}}, + color={0,0,0}, + thickness=1), + Line( + points={{-320,-80},{-320,-140}}, + color={0,0,0}), + Bitmap(extent={{-360,-220},{-280,-140}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Line( + points={{326,-160}}, + color={0,0,0}, + thickness=0.5), + Line( points={{100,80},{400,80},{400,-80},{100,-80}}, + color={0,0,0}, + thickness=5, + pattern=LinePattern.Dash), + Line( points={{-400,-80},{-100,-80}}, + color={0,0,0}, + thickness=5, + pattern=LinePattern.Dash), + Bitmap(extent={{-280,-40},{-80,-240}}, fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeInWell.svg"), + Bitmap(extent={{-220,-320},{-140,-240}}, fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Sensors/Temperature.svg"), + Bitmap( extent={{-100,-100},{100,100}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={-320,-80})})); +end PartialEconomizerHX; diff --git a/Buildings/Templates/Plants/Chillers/Components/Interfaces/package.mo b/Buildings/Templates/Plants/Chillers/Components/Interfaces/package.mo new file mode 100644 index 00000000000..c8f1b443e31 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Interfaces/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.Plants.Chillers.Components; +package Interfaces "Classes defining the component interfaces" +extends Modelica.Icons.InterfacesPackage; + +annotation (Documentation(info=" +

                      +This package contains interface classes. +

                      +")); +end Interfaces; diff --git a/Buildings/Templates/Plants/Chillers/Components/Interfaces/package.order b/Buildings/Templates/Plants/Chillers/Components/Interfaces/package.order new file mode 100644 index 00000000000..1a27377e904 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Interfaces/package.order @@ -0,0 +1,5 @@ +PartialChillerGroup +PartialController +PartialCoolerGroup +PartialEconomizer +PartialEconomizerHX diff --git a/Buildings/Templates/Plants/Chillers/Components/Routing/ChillersToPrimaryPumps.mo b/Buildings/Templates/Plants/Chillers/Components/Routing/ChillersToPrimaryPumps.mo new file mode 100644 index 00000000000..65b42c2c823 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Routing/ChillersToPrimaryPumps.mo @@ -0,0 +1,650 @@ +within Buildings.Templates.Plants.Chillers.Components.Routing; +model ChillersToPrimaryPumps + "Hydronic interface between chillers (and optional WSE) and primary CHW pumps" + + replaceable package MediumChiWat = Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CHW medium"; + + parameter Integer icon_dy = 360 + "Distance in y-direction between each branch in icon layer"; + + parameter Integer nChi + "Number of chillers" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Chillers.Types.ChillerArrangement typArrChi + "Type of chiller arrangement" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Chillers.Types.Distribution typDisChiWat + "Type of CHW distribution system" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Integer nPumChiWatPri( + start=1, + final min=1)=nChi + "Number of primary CHW pumps" + annotation (Evaluate=true, Dialog(group="Configuration", + enable=typArrPumChiWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered)); + parameter Buildings.Templates.Components.Types.PumpArrangement + typArrPumChiWatPri "Type of primary CHW pump arrangement" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Chillers.Types.Economizer typEco + "Type of WSE" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_senVChiWatPri=false + "Set to true for primary CHW flow sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Plants.Chillers.Types.SensorLocation locSenFloChiWatPri= + Buildings.Templates.Plants.Chillers.Types.SensorLocation.Return + "Location of primary CHW flow sensor" + annotation (Evaluate=true, Dialog(group="Configuration", enable=have_senVChiWatPri)); + parameter Boolean have_senTChiWatPlaRet=false + "Set to true for plant CHW return temperature sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + // The following parameter is only for graphical feedback. + // The valves are modeled in the chiller group component. + parameter Buildings.Templates.Components.Types.Valve typValChiWatChiIso= + Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + "Type of chiller CHW isolation valve" + annotation (Evaluate=true, Dialog(group="Configuration")); + + final parameter Integer nPorts=nChi + 1 + "Size of vectorized fluid connectors on chiller side" + annotation (Evaluate=true, Dialog(group="Configuration")); + final parameter Boolean have_valChiWatChiBypPar= + typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and (typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only or + typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only) + and typArrPumChiWatPri==Buildings.Templates.Components.Types.PumpArrangement.Headered + and typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None + "Set to true for parallel chillers with chiller CHW bypass valve" + annotation (Evaluate=true, Dialog(group="Configuration")); + + parameter Modelica.Units.SI.MassFlowRate mChiWatPri_flow_nominal + "Primary CHW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Buildings.Templates.Components.Data.Valve datValChiWatChiByp( + final typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, + final m_flow_nominal=mChiWatPri_flow_nominal, + dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso) + "Chiller CHW bypass valve parameters (identical for all valves in case of series chillers)" + annotation (Dialog(enable=have_valChiWatChiBypPar)); + + parameter Modelica.Units.SI.Time tau=10 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + 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 allowFlowReversal=true + "= true to allow flow reversal, false restricts to design direction (port_a -> port_b)" + annotation (Dialog(tab="Assumptions"), Evaluate=true); + + Modelica.Fluid.Interfaces.FluidPorts_b ports_bRet[nPorts]( + redeclare each final package Medium = MediumChiWat, + each m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + each h_outflow(start=MediumChiWat.h_default, nominal=MediumChiWat.h_default)) + "CHW return to chillers and WSE" + annotation (Placement(transformation( + extent={{-210,-140},{-190,-60}}),iconTransformation(extent={{-210,-1340}, + {-190,-1260}}))); + Modelica.Fluid.Interfaces.FluidPorts_b ports_bSup[nPumChiWatPri]( + redeclare each final package Medium = MediumChiWat, + each m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + each h_outflow(start=MediumChiWat.h_default, nominal=MediumChiWat.h_default)) + "CHW supply to CHW pumps" + annotation (Placement( + transformation(extent={{190,80},{210,160}}),iconTransformation(extent={{190, + 1260},{210,1340}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_aByp( + redeclare final package Medium = MediumChiWat, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=MediumChiWat.h_default, nominal=MediumChiWat.h_default)) + "CHW supply from minimum flow bypass or common leg" annotation (Placement( + transformation(extent={{190,-10},{210,10}}), iconTransformation(extent={{-210, + -1010},{-190,-990}}))); + Modelica.Fluid.Interfaces.FluidPorts_a ports_aSup[nPorts]( + redeclare each final package Medium = MediumChiWat, + each m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + each h_outflow(start=MediumChiWat.h_default, nominal=MediumChiWat.h_default)) + "CHW supply from chillers and WSE" + annotation (Placement(transformation( + extent={{-210,80},{-190,160}}), iconTransformation(extent={{-210,1260}, + {-190,1340}}))); + Buildings.Templates.Plants.Chillers.Interfaces.Bus bus + "Plant control bus" + annotation (Placement(transformation( + extent={{-20,180},{20,220}}), iconTransformation(extent={{-20,1320},{20, + 1360}}))); + + Buildings.Templates.Components.Actuators.Valve valChiWatChiBypPar( + redeclare final package Medium = MediumChiWat, + final typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, + final allowFlowReversal=allowFlowReversal, + final dat=datValChiWatChiByp) + if have_valChiWatChiBypPar + "Chiller CHW bypass valve - Parallel chillers with WSE and primary-only distribution)" + annotation (Placement( + transformation(extent={{10,10},{-10,-10}}, rotation=270))); + Buildings.Templates.Components.Routing.MultipleToMultiple rouSupPar( + redeclare final package Medium = MediumChiWat, + final nPorts_a=nChi, + final nPorts_b=nPumChiWatPri, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final have_comLeg=typArrPumChiWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered, + icon_dy=0) + if typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + "Hydronic routing - Supply side - Parallel arrangement" + annotation (Placement(transformation(extent={{-10,110},{10,130}}))); + Buildings.Templates.Components.Routing.PassThroughFluid rouRet( + redeclare final package Medium = MediumChiWat) "CHW return line" + annotation (Placement(transformation(extent={{160,-130},{140,-110}}))); + Buildings.Templates.Components.Routing.SingleToMultiple rouRetChiPar( + redeclare final package Medium = MediumChiWat, + final nPorts=nChi, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + icon_dy=0) + if typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + "Hydronic routing to chiller return - Parallel arrangement" + annotation (Placement(transformation(extent={{10,-110},{-10,-90}}))); + Buildings.Templates.Components.Sensors.Temperature TChiWatEcoBef( + redeclare final package Medium = MediumChiWat, + final have_sen=typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None, + final m_flow_nominal=mChiWatPri_flow_nominal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell) + "CHW return temperature before optional WSE" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=0, + origin={-140,-120}))); + Buildings.Templates.Components.Routing.SingleToMultiple rouSupSer( + redeclare final package Medium = MediumChiWat, + final nPorts=nPumChiWatPri, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + icon_dy=0) + if typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + "Hydronic routing - Supply side - Series arrangement" + annotation (Placement(transformation(extent={{-10,130},{10,150}}))); + Buildings.Templates.Components.Sensors.Temperature TChiWatEcoAft( + redeclare final package Medium = MediumChiWat, + final have_sen=typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None, + final m_flow_nominal=mChiWatPri_flow_nominal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell) + "CHW return temperature after optional WSE" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={140,60}))); + Buildings.Templates.Components.Sensors.Temperature TChiWatPlaRet( + redeclare final package Medium = MediumChiWat, + final m_flow_nominal=mChiWatPri_flow_nominal, + final have_sen=have_senTChiWatPlaRet, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell) + "Plant CHW return temperature (after bypass or common leg)" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={80,-100}))); + Buildings.Templates.Components.Routing.PassThroughFluid rouRetChiSer( + redeclare final package Medium = MediumChiWat) + if typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + "Hydronic routing to chiller return - Series arrangement" + annotation (Placement(transformation(extent={{10,-82},{-10,-62}}))); + + Buildings.Templates.Components.Routing.PassThroughFluid rouSupRetSer[nChi - 1]( + redeclare final package Medium = MediumChiWat) if nChi > 1 and typArrChi == + Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + "Hydronic routing - Chiller return to supply - Series arrangement" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={-120,0}))); + Fluid.FixedResistances.Junction junSupChiSer[nChi]( + redeclare each final package Medium = MediumChiWat, + each final tau=tau, + each final m_flow_nominal=mChiWatPri_flow_nominal*{1,-1,1}, + each final energyDynamics=energyDynamics, + each dp_nominal=fill(0, 3), + 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) if typArrChi == + Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + "Fluid junction at chiller supply - Series arrangement" + annotation (Placement(transformation(extent={{-170,130},{-150,150}}))); + Fluid.FixedResistances.Junction junByp( + redeclare final package Medium = MediumChiWat, + final tau=tau, + final m_flow_nominal=mChiWatPri_flow_nominal*{1,-1,1}, + final energyDynamics=energyDynamics, + dp_nominal=fill(0, 3), + 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 at minimum flow bypass or common leg" + annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=-90, + origin={140,0}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VChiWatPri_flow( + redeclare final package Medium = MediumChiWat, + final m_flow_nominal=mChiWatPri_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final have_sen=have_senVChiWatPri and + locSenFloChiWatPri==Buildings.Templates.Plants.Chillers.Types.SensorLocation.Return, + final text_flip=true, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter) + "Primary CHW volume flow rate" + annotation (Placement(transformation(extent={{130,-110},{110,-90}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_aRet( + redeclare final package Medium = MediumChiWat, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=MediumChiWat.h_default, nominal=MediumChiWat.h_default)) + "CHW return from CHW distribution" + annotation (Placement(transformation(extent={{190,-110},{210,-90}}), + iconTransformation(extent={{190,-1310},{210,-1290}}))); +initial equation + if typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None then + assert(typArrPumChiWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered, + "In " + getInstanceName() + ": " + + "The configuration with WSE and dedicated primary CHW pumps is not supported."); + end if; + if typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series then + assert(typArrPumChiWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered, + "In " + getInstanceName() + ": " + + "The configuration with series chillers and dedicated primary CHW pumps is not supported."); + end if; +equation + /* Control point connection - start */ + connect(bus.valChiWatChiByp, valChiWatChiBypPar.bus); + connect(bus.TChiWatEcoAft,TChiWatEcoAft.y); + connect(bus.TChiWatEcoBef,TChiWatEcoBef.y); + connect(bus.TChiWatPlaRet,TChiWatPlaRet.y); + connect(bus.VChiWatPri_flow, VChiWatPri_flow.y); + /* Control point connection - stop */ + connect(rouSupPar.ports_b, ports_bSup) + annotation (Line(points={{10,120},{200,120}}, color={0,127,255})); + connect(valChiWatChiBypPar.port_b, rouSupPar.port_aComLeg) annotation (Line( + points={{1.77636e-15,10},{0,10},{0,120}}, color={0,127,255})); + connect(TChiWatEcoBef.port_b, ports_bRet[nChi + 1]) annotation (Line(points={{-150, + -120},{-200,-120},{-200,-100}}, color={0,127,255})); + connect(rouSupSer.ports_b, ports_bSup) annotation (Line(points={{10,140},{140, + 140},{140,120},{200,120}}, + color={0,127,255})); + connect(ports_aSup[nChi + 1], TChiWatEcoAft.port_a) annotation (Line(points={{-200, + 120},{-200,100},{140,100},{140,70}}, color={0,127,255})); + connect(port_aRet, rouRet.port_a) annotation (Line(points={{200,-100},{180,-100}, + {180,-120},{160,-120}}, color={0,127,255})); + connect(rouRet.port_b, TChiWatEcoBef.port_a) + annotation (Line(points={{140,-120},{-130,-120}}, color={0,127,255})); + connect(TChiWatPlaRet.port_b, rouRetChiPar.port_a) + annotation (Line(points={{70,-100},{10,-100}}, color={0,127,255})); + connect(TChiWatPlaRet.port_b, rouRetChiSer.port_a) annotation (Line(points={{ + 70,-100},{20,-100},{20,-72},{10,-72}}, color={0,127,255})); + connect(rouRetChiSer.port_b, ports_bRet[nChi]) annotation (Line(points={{-10, + -72},{-20,-72},{-20,-100},{-200,-100}}, color={0,127,255})); + connect(TChiWatPlaRet.port_b, valChiWatChiBypPar.port_a) annotation (Line( + points={{70,-100},{40,-100},{40,-40},{0,-40},{0,-10}}, color={0,127,255})); + connect(rouSupRetSer.port_b, ports_bRet[1:nChi - 1]) + annotation (Line(points={{-120,-10},{-120,-100},{-200,-100}}, color={0,127,255})); + connect(ports_aSup[1:nChi], junSupChiSer.port_1) annotation (Line(points={{-200, + 120},{-200,140},{-170,140}}, color={0,127,255})); + connect(junSupChiSer[1].port_2, rouSupSer.port_a) + annotation (Line(points={{-150,140},{-10,140}}, color={0,127,255})); + connect(junSupChiSer[2:nChi].port_2, rouSupRetSer.port_a) + annotation (Line(points={{-150,140},{-120,140},{-120,10}}, color={0,127,255})); + connect(port_aByp, junByp.port_3) + annotation (Line(points={{200,0},{150,0}}, color={0,127,255})); + connect(TChiWatEcoAft.port_b, junByp.port_1) + annotation (Line(points={{140,50},{140,10}}, color={0,127,255})); + connect(rouRetChiPar.ports_b, ports_bRet[1:nChi]) + annotation (Line(points={{-10,-100},{-200,-100}}, color={0,127,255})); + connect(ports_aSup[1:nChi], rouSupPar.ports_a) + annotation (Line(points={{-200,120},{-10,120}}, color={0,127,255})); + connect(junByp.port_2, VChiWatPri_flow.port_a) annotation (Line(points={{140,-10}, + {140,-100},{130,-100}}, color={0,127,255})); + connect(VChiWatPri_flow.port_b,TChiWatPlaRet. port_a) + annotation (Line(points={{110,-100},{90,-100}}, color={0,127,255})); + +annotation ( + defaultComponentName="int", + Icon(coordinateSystem(preserveAspectRatio=false, + extent={{-200,-1340},{200,1340}}), + graphics={ + Line( points=if typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + then {{-200,1300},{-200,-1140}} else {{-200,1180},{-200,-1140}}, + color={0,0,0}, + thickness=5, + pattern=LinePattern.Dash), + Text( + extent={{-149,-1350},{151,-1390}}, + textColor={0,0,255}, + textString="%name"), + Bitmap( + visible=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 1, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=360, + origin={-200,1240}), + Bitmap( + visible=typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 1, + extent={{-140,1202},{-60,1282}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayModulating + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 1, + extent={{-140,1202},{-60,1282}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + visible=typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 2, + extent={{-140,1240 - 1*icon_dy - 40},{-60,1240 - 1*icon_dy + 40}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayModulating + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 2, + extent={{-140,1240 - 1*icon_dy - 40},{-60,1240 - 1*icon_dy + 40}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + visible=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 2, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=360, + origin={-200,1240 - icon_dy}), + Bitmap( + visible=typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 3, + extent={{-140,1240 - 2*icon_dy - 40},{-60,1240 - 2*icon_dy + 40}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayModulating + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 3, + extent={{-140,1240 - 2*icon_dy - 40},{-60,1240 - 2*icon_dy + 40}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + visible=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 3, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=360, + origin={-200,1240 - 2*icon_dy}), + Bitmap( + visible=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 4, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=360, + origin={-200,1240 - 3*icon_dy}), + Bitmap( + visible=typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 4, + extent={{-140,1240 - 3*icon_dy - 40},{-60,1240 - 3*icon_dy + 40}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayModulating + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 4, + extent={{-140,1240 - 3*icon_dy - 40},{-60,1240 - 3*icon_dy + 40}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Line( visible=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 1, + points={{-200,1240},{-140,1240}}, + color={0,0,0}), + Line( visible=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 2, + points={{-200,1240 - 1*icon_dy},{-140,1240 - 1*icon_dy}}, + color={0,0,0}), + Line( visible=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 3, + points={{-200,1240 - 2*icon_dy},{-140,1240 - 2*icon_dy}}, + color={0,0,0}), + Line( visible=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 4, + points={{-200,1240 - 3*icon_dy},{-140,1240 - 3*icon_dy}}, + color={0,0,0}), + Line( points={{-200,1300},{200,1300}}, + color={0,0,0}, + thickness=5), + Line( points={{-200,-1300},{200,-1300}}, + color={0,0,0}, + thickness=5, + pattern=LinePattern.Dash), + Bitmap( + visible=typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 5, + extent={{-140,1240 - 4*icon_dy - 40},{-60,1240 - 4*icon_dy + 40}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayModulating + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 5, + extent={{-140,1240 - 4*icon_dy - 40},{-60,1240 - 4*icon_dy + 40}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + visible=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 5, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=360, + origin={-200,1240 - 4*icon_dy}), + Bitmap( + visible=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 6, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=360, + origin={-200,1240-5*icon_dy}), + Bitmap( + visible=typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 6, + extent={{-140,1240 - 5*icon_dy - 40},{-60,1240 - 5*icon_dy + 40}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typValChiWatChiIso==Buildings.Templates.Components.Types.Valve.TwoWayModulating + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 6, + extent={{-140,1240 - 5*icon_dy - 40},{-60,1240 - 5*icon_dy + 40}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Line( visible=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 5, + points={{-200,1240 - 4*icon_dy},{-140,1240 - 4*icon_dy}}, + color={0,0,0}), + Line( visible=typValChiWatChiIso<>Buildings.Templates.Components.Types.Valve.None + and typArrChi==Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 6, + points={{-200,1240 - 5*icon_dy},{-140,1240 - 5*icon_dy}}, + color={0,0,0}), + Line( visible=typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and nChi >= 2, + points={{-200,1300 - icon_dy},{200,1300 - icon_dy}}, + color={0,0,0}, + thickness=5), + Line( visible=typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and nChi >= 3, + points={{-200,1300 - 2*icon_dy},{200,1300 - 2*icon_dy}}, + color={0,0,0}, + thickness=5), + Line( visible=typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and nChi >= 4, + points={{-200,1300 - 3*icon_dy},{200,1300 - 3*icon_dy}}, + color={0,0,0}, + thickness=5), + Line( visible=typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and nChi >= 5, + points={{-200,1300 - 4*icon_dy},{200,1300 - 4*icon_dy}}, + color={0,0,0}, + thickness=5), + Line( visible=typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + and nChi >= 6, + points={{-200,1300 - 5*icon_dy},{200,1300 - 5*icon_dy}}, + color={0,0,0}, + thickness=5), + Line( visible=typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 2, + points={{100,1300 - icon_dy},{200,1300 - icon_dy}}, + color={0,0,0}, + thickness=5), + Line( visible=typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 3, + points={{100,1300 - 2*icon_dy},{200,1300 - 2*icon_dy}}, + color={0,0,0}, + thickness=5), + Line( visible=typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 4, + points={{100,1300 - 3*icon_dy},{200,1300 - 3*icon_dy}}, + color={0,0,0}, + thickness=5), + Line( visible=typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 5, + points={{100,1300 - 4*icon_dy},{200,1300 - 4*icon_dy}}, + color={0,0,0}, + thickness=5), + Line( visible=typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + and nChi >= 6, + points={{100,1300 - 5*icon_dy},{200,1300 - 5*icon_dy}}, + color={0,0,0}, + thickness=5), + Line( visible=typArrPumChiWatPri==Buildings.Templates.Components.Types.PumpArrangement.Headered, + points={{100,1300},{100,1300 - (nChi - 1)*icon_dy}}, + color={0,0,0}, + thickness=5), + Line( visible=have_valChiWatChiBypPar, + points={{-200,1100},{100,1100}}, + color={0,0,0}, + thickness=5), + Bitmap( + visible=have_valChiWatChiBypPar, + extent={{-100,-100},{100,100}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90, + origin={-40,1100}), + Line( + visible=have_valChiWatChiBypPar, + points={{-30,0},{30,0}}, color={0,0,0}, + origin={-40,1070}, + rotation=-90), + Bitmap( + visible=have_valChiWatChiBypPar, + extent={{-80,960},{0,1040}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + extent={{-40,-1120},{40,-1040}}, + visible=typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/Temperature.svg"), + Bitmap(extent={{-100,-100},{100,100}}, + visible=typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeInWell.svg", + origin={-140,-1080}, + rotation=-90), + Bitmap( + extent={{-100,-100},{100,100}}, + visible=true or have_senTChiWatPlaRet, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeInWell.svg", + origin={-140,-760}, + rotation=-90), + Bitmap( + extent={{-40,-800},{40,-720}}, + visible=true or have_senTChiWatPlaRet, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/Temperature.svg"), + Bitmap( + extent={{-100,-100},{100,100}}, + visible=typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeInWell.svg", + origin={120,-1240}, + rotation=360), + Bitmap( + extent={{80,-1140},{160,-1060}}, + visible=typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/Temperature.svg"), + Bitmap( + extent={{-100,-100},{100,100}}, + visible=have_senVChiWatPri and + locSenFloChiWatPri==Buildings.Templates.Plants.Chillers.Types.SensorLocation.Return, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateFlowMeter.svg", + origin={-200,-910}, + rotation=-90), + Bitmap( + extent={{-40,-950},{40,-870}}, + visible=have_senVChiWatPri and + locSenFloChiWatPri==Buildings.Templates.Plants.Chillers.Types.SensorLocation.Return, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRate.svg"), + Line( + visible=have_senVChiWatPri and + locSenFloChiWatPri==Buildings.Templates.Plants.Chillers.Types.SensorLocation.Return, + points={{-166,-910},{-40,-910}},color={0,0,0})}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-200,-200},{200,200}})), + Documentation(info=" +

                      +This model represents the hydronic interface between +

                      +
                        +
                      • +the CHW supply and return connections of the plant components +(chillers and optional waterside economizer), +
                      • +
                      • +the inlet manifold of the primary CHW pumps (where the pumps are +assumed to be on the CHW supply side), +
                      • +
                      • +the CHW return pipe, and +
                      • +
                      • +the optional bypass (common leg for primary-secondary systems +and bypass with modulating valve for variable primary-only systems). +
                      • +
                      +

                      Implementation details

                      +

                      +In the case of series chillers, the chiller CHW bypass valves that +serve +

                      +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end ChillersToPrimaryPumps; diff --git a/Buildings/Templates/Plants/Chillers/Components/Routing/package.mo b/Buildings/Templates/Plants/Chillers/Components/Routing/package.mo new file mode 100644 index 00000000000..25f6e8bfc86 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Routing/package.mo @@ -0,0 +1,11 @@ +within Buildings.Templates.Plants.Chillers.Components; +package Routing "Connection models for hydronic routing" + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +

                      +This package contains models that allow connecting component +fluid ports together with various routing arrangements. +

                      +")); +end Routing; diff --git a/Buildings/Templates/Plants/Chillers/Components/Routing/package.order b/Buildings/Templates/Plants/Chillers/Components/Routing/package.order new file mode 100644 index 00000000000..2a96331ab30 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Routing/package.order @@ -0,0 +1 @@ +ChillersToPrimaryPumps diff --git a/Buildings/Templates/Plants/Chillers/Components/Validation/ChillerGroupAirCooled.mo b/Buildings/Templates/Plants/Chillers/Components/Validation/ChillerGroupAirCooled.mo new file mode 100644 index 00000000000..1ecae584ddc --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Validation/ChillerGroupAirCooled.mo @@ -0,0 +1,290 @@ +within Buildings.Templates.Plants.Chillers.Components.Validation; +model ChillerGroupAirCooled + "Validation model for water-cooled chiller group" + extends Modelica.Icons.Example; + + replaceable package MediumChiWat = Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CHW medium"; + replaceable package MediumAir = Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium"; + + parameter Integer nChi=3 + "Number of chillers"; + + parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_nominal[nChi]= + capChi_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/ + (TChiWatRet_nominal-TChiWatSup_nominal) + "CHW mass flow rate - Each chiller" + annotation (Evaluate=true, Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mChiWatPri_flow_nominal= + sum(mChiWatChi_flow_nominal) + "Primary CHW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mConAirChi_flow_nominal[nChi]= + capChi_nominal*Buildings.Templates.Data.Defaults.ratMFloAirByCapChi + "Air mass flow rate at condenser - Each air-cooled chiller" + annotation (Dialog(group="Nominal condition")); + + parameter Modelica.Units.SI.PressureDifference dpChiWatChi_nominal[nChi]= + fill(Buildings.Templates.Data.Defaults.dpChiWatChi, nChi) + "CHW pressure drop - Each chiller" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.HeatFlowRate capChi_nominal[nChi]( + each min=0)=fill(1e6, nChi) + "Cooling capacity - Each chiller (>0)" + annotation (Dialog(group="Nominal condition")); + parameter Real COPChi_nominal[nChi]( + each min=0)=fill(Buildings.Templates.Data.Defaults.COPChiAirCoo, nChi) + "Cooling COP - Each chiller" + annotation (Dialog(group="Nominal condition")); + + parameter Modelica.Units.SI.Temperature TChiWatSup_nominal= + Buildings.Templates.Data.Defaults.TChiWatSup + "CHW supply temperature"; + parameter Modelica.Units.SI.Temperature TChiWatRet_nominal= + Buildings.Templates.Data.Defaults.TChiWatRet + "CHW return temperature"; + + parameter Modelica.Units.SI.Time tau=10 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + 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")); + + parameter Buildings.Templates.Components.Data.PumpMultiple datPumChiWatPri( + final typ=Buildings.Templates.Components.Types.Pump.Multiple, + final nPum=nChi, + final m_flow_nominal=mChiWatChi_flow_nominal, + dp_nominal=1.5*dpChiWatChi_nominal) + "Parameter record for primary CHW pumps"; + parameter Buildings.Templates.Plants.Chillers.Components.Data.ChillerGroup + datChi( + final nChi=nChi, + final typ=Buildings.Templates.Components.Types.Chiller.AirCooled, + final mChiWatChi_flow_nominal=mChiWatChi_flow_nominal, + final dpChiWatChi_nominal=dpChiWatChi_nominal, + final capChi_nominal=capChi_nominal, + final COPChi_nominal=COPChi_nominal, + final TChiWatSupChi_nominal=fill(TChiWatSup_nominal, nChi), + TOut_nominal=Buildings.Templates.Data.Defaults.TOutChi, + PLRChi_min=fill(0.15, nChi), + redeclare + Buildings.Fluid.Chillers.Data.ElectricReformulatedEIR.ReformEIRChiller_Carrier_19XR_742kW_5_42COP_VSD + perChi) + "Parameter record for air-cooled chiller group"; + + Buildings.Templates.Components.Routing.MultipleToSingle outPumChiWatPri( + redeclare final package Medium=MediumChiWat, + final nPorts=nChi, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "Primary CHW pumps outlet manifold" + annotation (Placement(transformation(extent={{-20,90},{0,110}}))); + Buildings.Templates.Components.Pumps.Multiple pumChiWatPri( + redeclare final package Medium=MediumChiWat, + final dat=datPumChiWatPri, + final nPum=nChi, + final have_var=false, + final energyDynamics=energyDynamics) + "Primary CHW pumps" + annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); + Fluid.Sensors.TemperatureTwoPort TChiWatPriSup( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=sum(mChiWatChi_flow_nominal)) + "Primary CHW supply temperature" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={30,100}))); + Fluid.Sensors.MassFlowRate mChiWatPri_flow( + redeclare final package Medium=MediumChiWat) + "Primary CHW flow" + annotation (Placement(transformation(extent={{50,90},{70,110}}))); + Fluid.Sources.Boundary_pT bouChiWat( + redeclare final package Medium=MediumChiWat, nPorts=1) + "CHW pressure boundary condition" + annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={40,-100}))); + + Plants.Chillers.Components.ChillerGroups.Compression chi( + redeclare final package MediumChiWat = MediumChiWat, + redeclare final package MediumCon = MediumAir, + typArr=Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel, + typDisChiWat=Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only, + final dat=datChi, + final nChi=nChi, + final energyDynamics=energyDynamics, + final typ=Buildings.Templates.Components.Types.Chiller.AirCooled, + typCtlHea=Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.None, + typArrPumChiWatPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, + typArrPumConWat=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, + have_pumConWatVar=false, + typEco=Buildings.Templates.Plants.Chillers.Types.Economizer.None) + "Chiller group" + annotation (Placement(transformation(extent={{-100,-90},{-60,110}}))); + + Buildings.Templates.Components.Routing.MultipleToSingle inlChiWatChi( + redeclare final package Medium = MediumChiWat, + final nPorts=nChi, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "Chiller group CHW inlet manifold" + annotation (Placement(transformation(extent={{-52,-90},{-32,-70}}))); + Buildings.Templates.Components.Routing.MultipleToMultiple inlPumChiWatPri( + redeclare final package Medium = MediumChiWat, + nPorts_a=nChi, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) "Primary CHW pumps inlet manifold" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + Plants.Chillers.Components.Controls.OpenLoop ctl( + cfg=Buildings.Templates.Plants.Chillers.Components.Validation.Configuration.Variable1OnlyAirCooledParallel( + nChi=chi.nChi, + typArrPumChiWatPri=chi.typArrPumChiWatPri, + have_pumChiWatPriVar=pumChiWatPri.have_var, + have_pumChiWatPriVarCom=pumChiWatPri.have_varCom, + typEco=chi.typEco, + typValChiWatChiIso=chi.typValChiWatChiIso, + typValConWatChiIso=chi.typValConWatChiIso), + dat(sta=fill(fill(0, ctl.dat.nUniSta), ctl.dat.nUniSta))) + "Plant controller" + annotation (Placement(transformation(extent={{-160,170},{-180,190}}))); + Buildings.Templates.Plants.Chillers.Interfaces.Bus busPla + "Plant control bus" + annotation (Placement(transformation(extent={{-100,120},{-60,160}}), + iconTransformation(extent={{-432,12},{-412,32}}))); + Fluid.Sources.Boundary_pT bouConAir( + redeclare final package Medium = MediumAir, + final nPorts=nChi) + "Condenser cooling fluid pressure boundary condition" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={-150,100}))); + Fluid.Sources.MassFlowSource_T souConAir[nChi]( + redeclare each final package Medium = MediumAir, + final m_flow=mConAirChi_flow_nominal, + each final nPorts=1) "Condenser air flow source" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={-150,-80}))); + Fluid.Sensors.TemperatureTwoPort TChiWatPriRet(redeclare final package Medium = + MediumChiWat, final m_flow_nominal=sum(mChiWatChi_flow_nominal)) + "Primary CHW return temperature" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={0,-80}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChi] + "Convert pump return signal to real" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,80}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum comSigLoa(k=fill(1/nChi, nChi), nin + =nChi) "Compute load modulating signal" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,50}))); + Buildings.Templates.Components.Interfaces.Bus busChi[nChi] + "Chiller control bus" + annotation (Placement(transformation(extent={{180,120},{220,160}}), + iconTransformation(extent={{-422,198},{-382,238}}))); + Fluid.HeatExchangers.HeaterCooler_u loa( + redeclare final package Medium = MediumChiWat, + final m_flow_nominal=sum(mChiWatChi_flow_nominal), + final energyDynamics=energyDynamics, + final Q_flow_nominal=sum(capChi_nominal), + dp_nominal=0) + "Cooling load" + annotation (Placement(transformation(extent={{88,-90},{68,-70}}))); +equation + connect(chi.ports_bCon, bouConAir.ports) + annotation (Line(points={{-100,106},{-120,106},{-120,100},{-140,100}}, + color={0,127,255})); + connect(souConAir.ports[1], chi.ports_aCon) + annotation (Line(points={{-140,-80},{-120,-80},{-120,-86},{-100,-86}}, + color={0,127,255})); + connect(pumChiWatPri.ports_b, outPumChiWatPri.ports_a) + annotation (Line(points={{-20,100},{-20,100}},color={0,127,255})); + connect(outPumChiWatPri.port_b, TChiWatPriSup.port_a) + annotation (Line(points={{0,100},{20,100}}, color={0,127,255})); + connect(TChiWatPriSup.port_b, mChiWatPri_flow.port_a) + annotation (Line(points={{40,100},{50,100}}, color={0,127,255})); + connect(inlChiWatChi.ports_a, chi.ports_aChiWat) + annotation (Line(points={{-52,-80},{-56,-80},{-56,-86},{-60,-86}}, + color={0,127,255})); + connect(chi.ports_bChiWat, inlPumChiWatPri.ports_a) + annotation (Line(points={{-60,106},{-60,100}}, color={0,127,255})); + connect(inlPumChiWatPri.ports_b, pumChiWatPri.ports_a) + annotation (Line(points={{-40,100},{-40,100}}, color={0,127,255})); + connect(chi.bus, busPla) annotation (Line( + points={{-80,110.2},{-80,140}}, + color={255,204,51}, + thickness=0.5)); + connect(ctl.bus, busPla) annotation (Line( + points={{-160,180},{-80,180},{-80,140}}, + color={255,204,51}, + thickness=0.5)); + connect(busPla.pumChiWatPri, pumChiWatPri.bus) annotation (Line( + points={{-80,140},{-29,140},{-29,110},{-30,110}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(TChiWatPriRet.port_b, inlChiWatChi.port_b) + annotation (Line(points={{-10,-80},{-32,-80}}, color={0,127,255})); + connect(loa.port_a, mChiWatPri_flow.port_b) annotation (Line(points={{88,-80}, + {100,-80},{100,100},{70,100}},color={0,127,255})); + connect(booToRea.y,comSigLoa. u) + annotation (Line(points={{240,68},{240,62}}, color={0,0,127})); + connect(comSigLoa.y,loa. u) + annotation (Line(points={{240,38},{240,-74},{90,-74}}, color={0,0,127})); + connect(busChi.y1_actual,booToRea. u) annotation (Line( + points={{200,140},{240,140},{240,92}}, + color={255,204,51}, + thickness=0.5)); + connect(busPla.chi,busChi) annotation (Line( + points={{-80,140},{200,140}}, + color={255,204,51}, + thickness=0.5)); + connect(loa.port_b, TChiWatPriRet.port_a) + annotation (Line(points={{68,-80},{10,-80}}, color={0,127,255})); + connect(bouChiWat.ports[1], loa.port_b) + annotation (Line(points={{40,-90},{40,-80},{68,-80}}, color={0,127,255})); + annotation (Diagram(coordinateSystem(extent={{-260,-140},{260,220}})), + experiment( + StopTime=2000, + Tolerance=1e-06), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillerGroupAirCooled.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This model validates the chiller group model + +Buildings.Templates.Plants.Chillers.Components.ChillerGroups.Compression +for air-cooled chillers. +

                      +

                      +The validation uses open-loop controls and tests a single +system configuration. +The controller is automatically configured (by means +of parameters bindings with the chiller group component parameters) +to provide the necessary signals for any system configuration. +To test a different system configuration, one needs only to modify the +chiller group component. +

                      +")); +end ChillerGroupAirCooled; diff --git a/Buildings/Templates/Plants/Chillers/Components/Validation/ChillerGroupWaterCooled.mo b/Buildings/Templates/Plants/Chillers/Components/Validation/ChillerGroupWaterCooled.mo new file mode 100644 index 00000000000..f815f464f76 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Validation/ChillerGroupWaterCooled.mo @@ -0,0 +1,368 @@ +within Buildings.Templates.Plants.Chillers.Components.Validation; +model ChillerGroupWaterCooled + "Validation model for water-cooled chiller group" + 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 Integer nChi=3 + "Number of chillers"; + parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_nominal[nChi]= + capChi_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/ + (TChiWatRet_nominal-TChiWatSup_nominal) + "CHW mass flow rate - Each chiller" + annotation (Evaluate=true, Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mChiWatPri_flow_nominal= + sum(mChiWatChi_flow_nominal) + "Primary CHW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mConWatChi_flow_nominal[nChi]= + capChi_nominal*(1+1/Buildings.Templates.Data.Defaults.COPChiWatCoo)/ + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/ + (TConWatRet_nominal-TConWatSup_nominal) + "CW mass flow rate - Each water-cooled chiller" + annotation (Evaluate=true,Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mConWat_flow_nominal= + sum(mConWatChi_flow_nominal) + "CW mass flow rate (total)" + annotation (Dialog(group="Nominal condition")); + + parameter Modelica.Units.SI.PressureDifference dpChiWatChi_nominal[nChi]= + fill(Buildings.Templates.Data.Defaults.dpChiWatChi, nChi) + "CHW pressure drop - Each chiller" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpConWatChi_nominal[nChi]= + fill(Buildings.Templates.Data.Defaults.dpConWatChi, nChi) + "WSE CHW pressure drop" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.HeatFlowRate capChi_nominal[nChi]( + each min=0)=fill(1e6, nChi) + "Cooling capacity - Each chiller" + annotation (Dialog(group="Nominal condition")); + parameter Real COPChi_nominal[nChi]( + each min=0)=fill(Buildings.Templates.Data.Defaults.COPChiWatCoo, nChi) + "Cooling COP - Each chiller" + annotation (Dialog(group="Nominal condition")); + + parameter Modelica.Units.SI.Temperature TChiWatSup_nominal= + Buildings.Templates.Data.Defaults.TChiWatSup + "CHW supply temperature"; + parameter Modelica.Units.SI.Temperature TChiWatRet_nominal= + Buildings.Templates.Data.Defaults.TChiWatRet + "CHW return temperature"; + parameter Modelica.Units.SI.Temperature TConWatSup_nominal= + Buildings.Templates.Data.Defaults.TConWatSup + "CW supply temperature"; + parameter Modelica.Units.SI.Temperature TConWatRet_nominal= + Buildings.Templates.Data.Defaults.TConWatRet + "CW return temperature"; + + parameter Modelica.Units.SI.Time tau=10 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + 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")); + + parameter Buildings.Templates.Components.Data.PumpMultiple datPumChiWatPri( + final typ=Buildings.Templates.Components.Types.Pump.Multiple, + final nPum=nChi, + final m_flow_nominal=mChiWatChi_flow_nominal, + dp_nominal=1.5*dpChiWatChi_nominal) + "Parameter record for primary CHW pumps"; + parameter Buildings.Templates.Components.Data.PumpMultiple datPumConWat( + final typ=Buildings.Templates.Components.Types.Pump.Multiple, + final nPum=nChi, + final m_flow_nominal=mConWatChi_flow_nominal, + dp_nominal=1.5*dpConWatChi_nominal) + "Parameter record for CW pumps"; + parameter Buildings.Templates.Plants.Chillers.Components.Data.ChillerGroup + datChi( + final nChi=nChi, + final typ=Buildings.Templates.Components.Types.Chiller.WaterCooled, + final mChiWatChi_flow_nominal=mChiWatChi_flow_nominal, + final mConWatChi_flow_nominal=mConWatChi_flow_nominal, + final dpChiWatChi_nominal=dpChiWatChi_nominal, + final dpConChi_nominal=dpConWatChi_nominal, + final capChi_nominal=capChi_nominal, + final COPChi_nominal=COPChi_nominal, + final TChiWatSupChi_nominal=fill(TChiWatSup_nominal, nChi), + final TConWatEntChi_nominal=fill(TConWatSup_nominal, nChi), + PLRChi_min=fill(0.15, nChi), + redeclare + Buildings.Fluid.Chillers.Data.ElectricReformulatedEIR.ReformEIRChiller_Trane_CVHE_1442kW_6_61COP_VSD + perChi) + "Parameter record for water-cooled chiller group"; + + Buildings.Templates.Components.Routing.MultipleToSingle outPumChiWatPri( + redeclare final package Medium=MediumChiWat, + final nPorts=nChi, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "Primary CHW pumps outlet manifold" + annotation (Placement(transformation(extent={{-20,90},{0,110}}))); + Buildings.Templates.Components.Pumps.Multiple pumChiWatPri( + redeclare final package Medium=MediumChiWat, + final dat=datPumChiWatPri, + final nPum=nChi, + final have_var=false, + final energyDynamics=energyDynamics) + "Primary CHW pumps" + annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); + Fluid.Sensors.TemperatureTwoPort TChiWatPriSup( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=sum(mChiWatChi_flow_nominal)) + "Primary CHW supply temperature" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={30,100}))); + Fluid.Sensors.MassFlowRate mChiWatPri_flow( + redeclare final package Medium=MediumChiWat) + "Primary CHW flow" + annotation (Placement(transformation(extent={{50,90},{70,110}}))); + Fluid.Sources.Boundary_pT bouChiWat( + redeclare final package Medium=MediumChiWat, nPorts=1) + "CHW pressure boundary condition" + annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={40,-100}))); + Fluid.Sources.PropertySource_T tow( + redeclare final package Medium=MediumConWat, + final use_T_in=true) + "Ideal cooling to input set point (representing cooling tower)" + annotation (Placement(transformation(extent={{-206,-90},{-186,-70}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TConWat( + final k=TConWatSup_nominal) "CW supply temperature set point" + annotation (Placement(transformation(extent={{-240,130},{-220,150}}))); + + Plants.Chillers.Components.ChillerGroups.Compression chi( + redeclare final package MediumChiWat = MediumChiWat, + redeclare final package MediumCon = MediumConWat, + typArr=Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel, + typDisChiWat=Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only, + final dat=datChi, + final nChi=nChi, + final energyDynamics=energyDynamics, + typ=Buildings.Templates.Components.Types.Chiller.WaterCooled, + typCtlHea=Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.None, + typArrPumChiWatPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, + typArrPumConWat=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, + have_pumConWatVar=false, + typEco=Buildings.Templates.Plants.Chillers.Types.Economizer.None, + show_T=true) + "Chiller group" + annotation (Placement(transformation(extent={{-100,-96},{-60,104}}))); + + Buildings.Templates.Components.Pumps.Multiple pumConWat( + redeclare final package Medium = MediumConWat, + final dat=datPumConWat, + final nPum=nChi, + final have_var=false, + final energyDynamics=energyDynamics) + "CW pumps" + annotation (Placement(transformation(extent={{-150,-90},{-130,-70}}))); + Buildings.Templates.Components.Routing.SingleToMultiple inlPumConWat( + redeclare final package Medium = MediumConWat, + final nPorts=nChi, + final m_flow_nominal=mConWat_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "CW pumps inlet manifold" + annotation (Placement(transformation(extent={{-170,-90},{-150,-70}}))); + Buildings.Templates.Components.Routing.SingleToMultiple outConWatChi( + redeclare final package Medium = MediumConWat, + final nPorts=nChi, + final m_flow_nominal=mConWat_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "Chiller group CW outlet manifold" + annotation (Placement(transformation(extent={{-150,90},{-130,110}}))); + Buildings.Templates.Components.Routing.MultipleToSingle inlChiWatChi( + redeclare final package Medium = MediumChiWat, + final nPorts=nChi, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "Chiller group CHW inlet manifold" + annotation (Placement(transformation(extent={{-52,-90},{-32,-70}}))); + Fluid.Sources.Boundary_pT bouCon(redeclare final package Medium = + MediumConWat, nPorts=1) "CW pressure boundary condition" annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-180,-110}))); + Buildings.Templates.Components.Routing.MultipleToMultiple inlPumChiWatPri( + redeclare final package Medium = MediumChiWat, + nPorts_a=nChi, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) "Primary CHW pumps inlet manifold" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + Buildings.Templates.Components.Routing.MultipleToMultiple outPumConWat( + redeclare final package Medium = MediumConWat, + nPorts_a=nChi, + final m_flow_nominal=mConWat_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "CW pumps outlet manifold" + annotation (Placement(transformation(extent={{-130,-90},{-110,-70}}))); + + Plants.Chillers.Components.Controls.OpenLoop ctl( + cfg=Buildings.Templates.Plants.Chillers.Components.Validation.Configuration.Variable1OnlyWaterCooledParallel( + nChi=chi.nChi, + typArrPumChiWatPri=chi.typArrPumChiWatPri, + typArrPumConWat=chi.typArrPumConWat, + have_pumChiWatPriVar=pumChiWatPri.have_var, + have_pumChiWatPriVarCom=pumChiWatPri.have_varCom, + have_pumConWatVar=pumConWat.have_var, + have_pumConWatVarCom=pumConWat.have_varCom, + typEco=chi.typEco, + typValChiWatChiIso=chi.typValChiWatChiIso, + typValConWatChiIso=chi.typValConWatChiIso), + dat(sta=fill(fill(0, ctl.dat.nUniSta), ctl.dat.nUniSta))) + "Plant controller" + annotation (Placement(transformation(extent={{-160,170},{-180,190}}))); + Buildings.Templates.Plants.Chillers.Interfaces.Bus busPla + "Plant control bus" + annotation (Placement(transformation(extent={{-100,120},{-60,160}}), + iconTransformation(extent={{-432,12},{-412,32}}))); + Fluid.Sensors.TemperatureTwoPort TChiWatPriRet(redeclare final package Medium = + MediumChiWat, final m_flow_nominal=sum(mChiWatChi_flow_nominal)) + "Primary CHW return temperature" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={0,-80}))); + Fluid.HeatExchangers.HeaterCooler_u loa( + redeclare final package Medium = MediumChiWat, + final m_flow_nominal=sum(mChiWatChi_flow_nominal), + final energyDynamics=energyDynamics, + final Q_flow_nominal=sum(capChi_nominal), + dp_nominal=0) + "Cooling load" + annotation (Placement(transformation(extent={{88,-90},{68,-70}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChi] + "Convert pump return signal to real" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={200,80}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum comSigLoa(k=fill(1/nChi, nChi), nin + =nChi) "Compute load modulating signal" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={200,50}))); + Buildings.Templates.Components.Interfaces.Bus busChi[nChi] + "Chiller control bus" + annotation (Placement(transformation(extent={{140,120},{180,160}}), + iconTransformation(extent={{-422,198},{-382,238}}))); +equation + connect(pumChiWatPri.ports_b, outPumChiWatPri.ports_a) + annotation (Line(points={{-20,100},{-20,100}},color={0,127,255})); + connect(outPumChiWatPri.port_b, TChiWatPriSup.port_a) + annotation (Line(points={{0,100},{20,100}}, color={0,127,255})); + connect(TChiWatPriSup.port_b, mChiWatPri_flow.port_a) + annotation (Line(points={{40,100},{50,100}}, color={0,127,255})); + connect(TConWat.y, tow.T_in) annotation (Line(points={{-218,140},{-200,140},{-200, + -68}}, color={0,0,127})); + connect(tow.port_b, inlPumConWat.port_a) + annotation (Line(points={{-186,-80},{-170,-80}}, color={0,127,255})); + connect(pumConWat.ports_a, inlPumConWat.ports_b) + annotation (Line(points={{-150,-80},{-150,-80}}, color={0,127,255})); + connect(chi.ports_bCon, outConWatChi.ports_b) + annotation (Line(points={{-100,100},{-130,100}}, color={0,127,255})); + connect(outConWatChi.port_a, tow.port_a) annotation (Line(points={{-150,100},{ + -220,100},{-220,-80},{-206,-80}}, color={0,127,255})); + connect(inlChiWatChi.ports_a, chi.ports_aChiWat) + annotation (Line(points={{-52,-80},{-56,-80},{-56,-92},{-60,-92}}, + color={0,127,255})); + connect(chi.ports_bChiWat, inlPumChiWatPri.ports_a) + annotation (Line(points={{-60,100},{-60,100}}, color={0,127,255})); + connect(inlPumChiWatPri.ports_b, pumChiWatPri.ports_a) + annotation (Line(points={{-40,100},{-40,100}}, color={0,127,255})); + connect(pumConWat.ports_b, outPumConWat.ports_a) + annotation (Line(points={{-130,-80},{-130,-80}}, color={0,127,255})); + connect(outPumConWat.ports_b, chi.ports_aCon) + annotation (Line(points={{-110,-80},{-106,-80},{-106,-92},{-100,-92}}, + color={0,127,255})); + connect(tow.port_b, bouCon.ports[1]) annotation (Line(points={{-186,-80},{-180, + -80},{-180,-100}},color={0,127,255})); + connect(chi.bus, busPla) annotation (Line( + points={{-80,104.2},{-80,140}}, + color={255,204,51}, + thickness=0.5)); + connect(ctl.bus, busPla) annotation (Line( + points={{-160,180},{-80,180},{-80,140}}, + color={255,204,51}, + thickness=0.5)); + connect(busPla.pumChiWatPri, pumChiWatPri.bus) annotation (Line( + points={{-80,140},{-29,140},{-29,110},{-30,110}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(busPla.pumConWat, pumConWat.bus) annotation (Line( + points={{-80,140},{-140,140},{-140,-70}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(TChiWatPriRet.port_b, inlChiWatChi.port_b) + annotation (Line(points={{-10,-80},{-32,-80}}, color={0,127,255})); + connect(loa.port_a, mChiWatPri_flow.port_b) annotation (Line(points={{88,-80}, + {100,-80},{100,100},{70,100}},color={0,127,255})); + connect(booToRea.y,comSigLoa. u) + annotation (Line(points={{200,68},{200,62}}, color={0,0,127})); + connect(comSigLoa.y,loa. u) + annotation (Line(points={{200,38},{200,-74},{90,-74}}, color={0,0,127})); + connect(busChi.y1_actual,booToRea. u) annotation (Line( + points={{160,140},{200,140},{200,92}}, + color={255,204,51}, + thickness=0.5)); + connect(busPla.chi,busChi) annotation (Line( + points={{-80,140},{160,140}}, + color={255,204,51}, + thickness=0.5)); + connect(loa.port_b, TChiWatPriRet.port_a) + annotation (Line(points={{68,-80},{10,-80}}, color={0,127,255})); + connect(bouChiWat.ports[1], loa.port_b) + annotation (Line(points={{40,-90},{40,-80},{68,-80}}, color={0,127,255})); + annotation (Diagram(coordinateSystem(extent={{-260,-140},{260,220}})), + experiment( + StopTime=2000, + Tolerance=1e-06), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillerGroupWaterCooled.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This model validates the chiller group model + +Buildings.Templates.Plants.Chillers.Components.ChillerGroups.Compression +for water-cooled chillers. +

                      +

                      +The validation uses open-loop controls and tests a single +system configuration. +The controller is automatically configured (by means +of parameters bindings with the chiller group component parameters) +to provide the necessary signals for any system configuration. +To test a different system configuration, one needs only to modify the +chiller group component. +

                      +")); +end ChillerGroupWaterCooled; diff --git a/Buildings/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsParallel.mo b/Buildings/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsParallel.mo new file mode 100644 index 00000000000..dce927058f2 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsParallel.mo @@ -0,0 +1,516 @@ +within Buildings.Templates.Plants.Chillers.Components.Validation; +model ChillersToPrimaryPumpsParallel + "Validation model for hydronic interface between parallel chillers and primary pumps" + extends Modelica.Icons.Example; + + replaceable package MediumChiWat = Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CHW medium"; + + parameter Integer nChi=3 + "Number of chillers"; + + parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_nominal[nChi]= + capChi_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/ + (TChiWatRet_nominal-TChiWatSup_nominal) + "CHW mass flow rate - Each chiller" + annotation (Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mChiWatPri_flow_nominal= + sum(mChiWatChi_flow_nominal) + "Primary CHW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mChiWatEco_flow_nominal= + sum(mChiWatChi_flow_nominal) + "WSE CHW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpChiWatChi_nominal[nChi]= + fill(Buildings.Templates.Data.Defaults.dpChiWatChi, nChi) + "CHW pressure drop - Each chiller" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpChiWatEco_nominal= + Buildings.Templates.Data.Defaults.dpChiWatEco + "WSE CHW pressure drop" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.HeatFlowRate capChi_nominal[nChi]( + each min=0)=fill(1e6, nChi) + "Cooling capacity - Each chiller (>0)" + annotation (Dialog(group="Nominal condition")); + + parameter Modelica.Units.SI.Temperature TChiWatSup_nominal= + Buildings.Templates.Data.Defaults.TChiWatSup + "CHW supply temperature"; + parameter Modelica.Units.SI.Temperature TChiWatRet_nominal= + Buildings.Templates.Data.Defaults.TChiWatRet + "CHW return temperature"; + + parameter Modelica.Units.SI.Time tau=10 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + 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")); + + parameter Buildings.Templates.Components.Data.PumpMultiple datPumChiWatPri( + final typ=Buildings.Templates.Components.Types.Pump.Multiple, + final nPum=nChi, + final m_flow_nominal=mChiWatChi_flow_nominal, + dp_nominal=1.5*dpChiWatChi_nominal) + "Parameter record for primary CHW pumps"; + parameter Buildings.Templates.Components.Data.PumpSingle datPumChiWatEco( + final typ=Buildings.Templates.Components.Types.Pump.Single, + final m_flow_nominal=mChiWatEco_flow_nominal, + dp_nominal=1.5*dpChiWatEco_nominal) + "Parameter record for WSE CHW pump"; + parameter Buildings.Templates.Components.Data.Valve datValChiWatEcoByp( + final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating, + final m_flow_nominal=mChiWatEco_flow_nominal, + dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso) + "Parameter record for WSE CHW bypass valve"; + parameter Buildings.Templates.Components.Data.Valve datValChiWatChiByp( + final typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, + final m_flow_nominal=mChiWatPri_flow_nominal, + dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso) + "Parameter record for chiller CHW bypass valve"; + + Plants.Chillers.Components.Routing.ChillersToPrimaryPumps rou( + redeclare final package MediumChiWat = MediumChiWat, + final nChi=nChi, + final mChiWatPri_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final datValChiWatChiByp=datValChiWatChiByp, + typDisChiWat=Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only, + typArrChi=Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel, + typArrPumChiWatPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, + typEco=Buildings.Templates.Plants.Chillers.Types.Economizer.None) + "Parallel chillers, dedicated pumps, no WSE" + annotation (Placement(transformation(extent={{-80,-30},{-40,230}}))); + + Fluid.FixedResistances.PressureDrop resEva[nChi]( + redeclare each final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatChi_flow_nominal, + final dp_nominal=dpChiWatChi_nominal) + "Flow resistance for chiller evaporator" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-200,10}))); + Buildings.Templates.Components.Routing.MultipleToSingle outPumChiWatPri( + redeclare final package Medium=MediumChiWat, + final nPorts=nChi, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "Primary CHW pumps outlet manifold" + annotation (Placement(transformation(extent={{20,210},{40,230}}))); + Buildings.Templates.Components.Pumps.Multiple pumChiWatPri( + redeclare final package Medium=MediumChiWat, + final dat=datPumChiWatPri, + final nPum=nChi, + final have_var=true, + final have_varCom=true, + final energyDynamics=energyDynamics) + "Primary CHW pumps" + annotation (Placement(transformation(extent={{-10,210},{10,230}}))); + Buildings.Templates.Components.Interfaces.Bus busPumChiWatPri + "Primary CHW pumps control bus" + annotation (Placement(transformation(extent={{180,180},{220,220}}), + iconTransformation(extent={{-316,184},{-276,224}}))); + Fluid.Sensors.TemperatureTwoPort TChiWatChiEnt[nChi]( + redeclare each final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatChi_flow_nominal) + "Chiller entering CHW return temperature" + annotation (Placement(transformation(extent={{-170,-30},{-190,-10}}))); + Fluid.Sensors.MassFlowRate mChiWatChi_flow[nChi]( + redeclare each final package Medium=MediumChiWat) "Chiller CHW flow" + annotation (Placement(transformation(extent={{-130,-30},{-150,-10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1PumChiWatPri[nChi]( + each table=[0,0; 1,0; 1,1; 2,1], + each timeScale=1000, + each period=2000) "Primary CHW pumps Start/Stop signal" + annotation (Placement(transformation(extent={{-220,270},{-200,290}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yPumChiWatPri( + k=1) "Primary CHW pump speed signal" + annotation (Placement(transformation(extent={{-250,290},{-230,310}}))); + Fluid.HeatExchangers.HeaterCooler_u loa( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=sum(mChiWatChi_flow_nominal), + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final Q_flow_nominal=sum(capChi_nominal), + dp_nominal=0) + "Cooling load" + annotation (Placement(transformation(extent={{30,-30},{10,-10}}))); + Fluid.Sensors.TemperatureTwoPort TChiWatPriSup( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=sum(mChiWatChi_flow_nominal)) + "Primary CHW supply temperature" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={60,220}))); + Fluid.Sensors.MassFlowRate mChiWatPri_flow( + redeclare final package Medium=MediumChiWat) + "Primary CHW flow" + annotation (Placement(transformation(extent={{90,210},{110,230}}))); + Fluid.Sources.Boundary_pT bouChiWat( + redeclare final package Medium=MediumChiWat, + final nPorts=1) + "CHW pressure boundary condition" + annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={0,-40}))); + Fluid.Sources.PropertySource_T coo[nChi]( + redeclare each final package Medium=MediumChiWat, + each final use_T_in=true) + "Ideal cooling to input set point (representing chiller evaporator)" + annotation (Placement(transformation(extent={{-180,210},{-160,230}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWat[nChi]( + each final k=TChiWatSup_nominal) "CHW supply temperature set point" + annotation (Placement(transformation(extent={{-250,70},{-230,90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1ValChiWatChiByp( + table=[0,0; 1.8,0; 1.8,1; 2,1], + timeScale=1000, + period=2000) "CHW bypass valve opening signal" + annotation (Placement(transformation(extent={{-192,250},{-172,270}}))); + + Plants.Chillers.Components.Routing.ChillersToPrimaryPumps rou1( + redeclare final package MediumChiWat = MediumChiWat, + final nChi=nChi, + final mChiWatPri_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final datValChiWatChiByp=datValChiWatChiByp, + typDisChiWat=Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only, + typArrChi=Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel, + typArrPumChiWatPri=Buildings.Templates.Components.Types.PumpArrangement.Headered, + typEco=Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithValve) + "Parallel chillers, headered pumps, WSE with CHW bypass valve" + annotation (Placement(transformation(extent={{-80,-330},{-40,-70}}))); + + Fluid.FixedResistances.PressureDrop resEva1[nChi]( + redeclare each final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatChi_flow_nominal, + final dp_nominal=dpChiWatChi_nominal) + "Flow resistance for chiller evaporator" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-200,-110}))); + Buildings.Templates.Components.Routing.MultipleToSingle outPumChiWatPri1( + redeclare final package Medium=MediumChiWat, + final nPorts=nChi, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "Primary CHW pumps outlet manifold" + annotation (Placement(transformation(extent={{20,-90},{40,-70}}))); + Buildings.Templates.Components.Pumps.Multiple pumChiWatPri1( + redeclare final package Medium=MediumChiWat, + final dat=datPumChiWatPri, + final nPum=nChi, + final have_var=true, + final have_varCom=true, + final energyDynamics=energyDynamics) + "Primary CHW pumps" + annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); + Fluid.Sensors.TemperatureTwoPort TChiWatChiEnt1[nChi]( + redeclare each final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatChi_flow_nominal) + "Chiller entering CHW return temperature" + annotation (Placement(transformation(extent={{-170,-150},{-190,-130}}))); + Fluid.Sensors.MassFlowRate mChiWatChi_flow1[nChi]( + redeclare each final package Medium=MediumChiWat) + "Chiller CHW flow" + annotation (Placement(transformation(extent={{-130,-150},{-150,-130}}))); + Fluid.HeatExchangers.HeaterCooler_u loa1( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=sum(mChiWatChi_flow_nominal), + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final Q_flow_nominal=sum(capChi_nominal), + dp_nominal=0) + "Cooling load" + annotation (Placement(transformation(extent={{30,-330},{10,-310}}))); + Fluid.Sensors.TemperatureTwoPort TChiWatPriSup1( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=sum(mChiWatChi_flow_nominal)) + "Primary CHW supply temperature" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={60,-80}))); + Fluid.Sensors.MassFlowRate mChiWatPri_flow1( + redeclare final package Medium=MediumChiWat) + "Primary CHW flow" + annotation (Placement(transformation(extent={{90,-90},{110,-70}}))); + Fluid.Sources.Boundary_pT bouChiWat1( + redeclare final package Medium=MediumChiWat, + final nPorts=1) "CHW pressure boundary condition" + annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={0,-340}))); + Fluid.Sources.PropertySource_T coo1[nChi]( + redeclare each final package Medium=MediumChiWat, + each final use_T_in=true) + "Ideal cooling to input set point (representing chiller evaporator)" + annotation (Placement(transformation(extent={{-180,-90},{-160,-70}}))); + Buildings.Templates.Components.Interfaces.Bus busPumChiWatPri1 + "Primary CHW pumps control bus" + annotation (Placement(transformation(extent={{180,-120},{220,-80}}), + iconTransformation(extent={{-316,184},{-276,224}}))); + Fluid.FixedResistances.PressureDrop resEco( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatEco_flow_nominal, + final dp_nominal=dpChiWatEco_nominal) + "Flow resistance for WSE HX" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-200,-290}))); + Fluid.Sensors.TemperatureTwoPort TChiWatEcoEnt( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatEco_flow_nominal) + "WSE entering CHW return temperature" + annotation (Placement(transformation(extent={{-170,-330},{-190,-310}}))); + Fluid.Sensors.MassFlowRate mChiWatEco_flow( + redeclare final package Medium=MediumChiWat) + "WSE CHW flow" + annotation (Placement(transformation(extent={{-130,-330},{-150,-310}}))); + Fluid.Sources.PropertySource_T cooEco( + redeclare final package Medium=MediumChiWat, + final use_T_in=true) + "Ideal cooling to input set point (representing WSE)" + annotation (Placement(transformation(extent={{-180,-270},{-160,-250}}))); + Buildings.Templates.Components.Actuators.Valve valChiWatEcoByp( + redeclare final package Medium=MediumChiWat, + final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating, + final dat=datValChiWatEcoByp) + "WSE CHW bypass valve" annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={-120,-290}))); + Buildings.Templates.Components.Interfaces.Bus busValChiWatEcoByp + "WSE CHW bypass valve control bus" + annotation (Placement(transformation( + extent={{180,-300},{220,-260}}), + iconTransformation(extent={{-316,184},{-276, + 224}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable yValChiWatEcoByp(table=[0, + 1; 1.5,1; 1.5,0; 2,0], timeScale=1000) + "WSE CHW bypass valve opening signal" + annotation (Placement(transformation(extent={{-160,230},{-140,250}}))); + Buildings.Templates.Components.Interfaces.Bus busValChiWatChiByp + "CHW bypass valves control bus" + annotation (Placement(transformation(extent={{180,-60},{220,-20}}), + iconTransformation(extent={{-316,184},{-276, + 224}}))); + .Buildings.Templates.Plants.Chillers.Interfaces.Bus busPla + "Plant control bus" annotation (Placement(transformation(extent={{180,-80},{ + 220,-40}}), iconTransformation(extent={{-432,12},{-412,32}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChi] + "Convert pump return signal to real" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,70}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum comSigLoa(k=fill(1/nChi, nChi), + nin=nChi) "Compute load modulating signal" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,40}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 + [nChi] + "Convert pump return signal to real" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,-170}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum comSigLoa1(k=fill(1/nChi, nChi), + nin=nChi) "Compute load modulating signal" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,-200}))); + Buildings.Templates.Components.Routing.PassThroughFluid pas( + redeclare final package Medium=MediumChiWat) + "Direct fluid pass-through for no WSE" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-100,30}))); +equation + connect(pumChiWatPri.ports_b, outPumChiWatPri.ports_a) + annotation (Line(points={{10,220},{20,220}}, color={0,127,255})); + connect(mChiWatChi_flow.port_a, rou.ports_bRet[1:nChi]) + annotation (Line(points={{-130,-20},{-106,-20},{-106,-26.1194},{-80,-26.1194}}, + color={0,127,255})); + connect(mChiWatChi_flow.port_b, TChiWatChiEnt.port_a) + annotation (Line(points={{-150,-20},{-170,-20}}, + color={0,127,255})); + connect(TChiWatChiEnt.port_b, resEva.port_a) annotation (Line(points={{-190,-20}, + {-200,-20},{-200,0}}, color={0,127,255})); + connect(y1PumChiWatPri.y[1], busPumChiWatPri.y1) annotation (Line(points={{-198, + 280},{160,280},{160,200},{200,200}}, color={255,0,255})); + connect(yPumChiWatPri.y, busPumChiWatPri.y) annotation (Line(points={{-228,300}, + {180,300},{180,220},{200,220},{200,200}}, color={0,0,127})); + connect(busPumChiWatPri, pumChiWatPri.bus) annotation (Line( + points={{200,200},{200,190},{0,190},{0,230}}, + color={255,204,51}, + thickness=0.5)); + connect(outPumChiWatPri.port_b, TChiWatPriSup.port_a) + annotation (Line(points={{40,220},{50,220}}, color={0,127,255})); + connect(TChiWatPriSup.port_b, mChiWatPri_flow.port_a) + annotation (Line(points={{70,220},{90,220}}, color={0,127,255})); + connect(loa.port_a, mChiWatPri_flow.port_b) annotation (Line(points={{30,-20}, + {120,-20},{120,220},{110,220}}, + color={0,127,255})); + connect(loa.port_b, rou.port_aRet) annotation (Line(points={{10,-20},{-16,-20}, + {-16,-26.1194},{-40,-26.1194}}, + color={0,127,255})); + connect(bouChiWat.ports[1], loa.port_b) + annotation (Line(points={{0,-30},{0,-20},{10,-20}}, + color={0,127,255})); + connect(coo.port_b, rou.ports_aSup[1:nChi]) + annotation (Line(points={{-160,220},{-120,220},{-120,226.119},{-80,226.119}}, + color={0,127,255})); + connect(resEva.port_b, coo.port_a) annotation (Line(points={{-200,20},{-200,220}, + {-180,220}}, color={0,127,255})); + connect(TChiWat.y, coo.T_in) annotation (Line(points={{-228,80},{-220,80},{-220, + 240},{-174,240},{-174,232}}, + color={0,0,127})); + connect(rou.ports_bSup, pumChiWatPri.ports_a) + annotation (Line(points={{-40,226.119},{-26,226.119},{-26,220},{-10,220}}, + color={0,127,255})); + connect(pumChiWatPri1.ports_b, outPumChiWatPri1.ports_a) + annotation (Line(points={{10,-80},{20,-80}}, + color={0,127,255})); + connect(mChiWatChi_flow1.port_a, rou1.ports_bRet[1:nChi]) + annotation (Line(points={{-130,-140},{-100,-140},{-100,-326.119},{-80, + -326.119}}, color={0,127,255})); + connect(mChiWatChi_flow1.port_b, TChiWatChiEnt1.port_a) + annotation (Line(points={{-150,-140},{-170,-140}}, + color={0,127,255})); + connect(TChiWatChiEnt1.port_b, resEva1.port_a) annotation (Line(points={{-190, + -140},{-200,-140},{-200,-120}}, + color={0,127,255})); + connect(y1PumChiWatPri.y[1], busPumChiWatPri1.y1) annotation (Line(points={{-198, + 280},{160,280},{160,-100},{200,-100}}, + color={255,0,255})); + connect(busPumChiWatPri1, pumChiWatPri1.bus) annotation (Line( + points={{200,-100},{200,-104},{0,-104},{0,-70}}, + color={255,204,51}, + thickness=0.5)); + connect(outPumChiWatPri1.port_b, TChiWatPriSup1.port_a) + annotation (Line(points={{40,-80},{50,-80}}, + color={0,127,255})); + connect(TChiWatPriSup1.port_b, mChiWatPri_flow1.port_a) + annotation (Line(points={{70,-80},{90,-80}}, + color={0,127,255})); + connect(loa1.port_a, mChiWatPri_flow1.port_b) annotation (Line(points={{30,-320}, + {120,-320},{120,-80},{110,-80}}, + color={0,127,255})); + connect(loa1.port_b, rou1.port_aRet) annotation (Line(points={{10,-320},{-16, + -320},{-16,-326.119},{-40,-326.119}}, + color={0,127,255})); + connect(bouChiWat1.ports[1], loa1.port_b) annotation (Line(points={{0,-330},{0, + -320},{10,-320}}, color={0,127,255})); + connect(coo1.port_b, rou1.ports_aSup[1:nChi]) + annotation (Line(points={{-160,-80},{-120,-80},{-120,-73.8806},{-80,-73.8806}}, + color={0,127,255})); + connect(resEva1.port_b, coo1.port_a) annotation (Line(points={{-200,-100},{-200, + -80},{-180,-80}}, + color={0,127,255})); + connect(TChiWat.y, coo1.T_in) annotation (Line(points={{-228,80},{-220,80},{-220, + -60},{-174,-60},{-174,-68}}, color={0,0,127})); + connect(rou1.ports_bSup, pumChiWatPri1.ports_a) + annotation (Line(points={{-40,-73.8806},{-26,-73.8806},{-26,-80},{-10,-80}}, + color={0,127,255})); + connect(mChiWatEco_flow.port_b,TChiWatEcoEnt. port_a) + annotation (Line(points={{-150,-320},{-170,-320}}, color={0,127,255})); + connect(TChiWatEcoEnt.port_b,resEco. port_a) annotation (Line(points={{-190,-320}, + {-200,-320},{-200,-300}}, color={0,127,255})); + connect(resEco.port_b,cooEco. port_a) annotation (Line(points={{-200,-280},{-200, + -260},{-180,-260}}, color={0,127,255})); + connect(TChiWat[1].y, cooEco.T_in) annotation (Line(points={{-228,80},{-220,80}, + {-220,-170},{-174,-170},{-174,-248}}, + color={0,0,127})); + connect(cooEco.port_b, rou1.ports_aSup[nChi + 1]) annotation (Line(points={{-160, + -260},{-120,-260},{-120,-73.8806},{-80,-73.8806}}, + color={0,127,255})); + connect(busValChiWatEcoByp, valChiWatEcoByp.bus) annotation (Line( + points={{200,-280},{200,-290},{-110,-290}}, + color={255,204,51}, + thickness=0.5)); + connect(yValChiWatEcoByp.y[1], busValChiWatEcoByp.y) annotation (Line(points={{-138, + 240},{150,240},{150,-280},{200,-280}}, color={0,0,127})); + connect(busPla, rou1.bus) annotation (Line( + points={{200,-60},{-60,-60},{-60,-70}}, + color={255,204,51}, + thickness=0.5)); + connect(yPumChiWatPri.y, busPumChiWatPri1.y) annotation (Line(points={{-228,300}, + {180,300},{180,-96},{190,-96},{190,-100},{200,-100}}, + color={0,0,127})); + connect(y1ValChiWatChiByp.y[1], busValChiWatChiByp.y1) annotation (Line( + points={{-170,260},{170,260},{170,-40},{200,-40}}, color={255,0,255})); + connect(rou1.ports_bRet[nChi + 1], mChiWatEco_flow.port_a) annotation (Line( + points={{-80,-326.119},{-106,-326.119},{-106,-320},{-130,-320}}, + color={0,127,255})); + connect(mChiWatEco_flow.port_a, valChiWatEcoByp.port_a) annotation (Line( + points={{-130,-320},{-120,-320},{-120,-300}}, color={0,127,255})); + connect(valChiWatEcoByp.port_b, cooEco.port_b) annotation (Line(points={{-120, + -280},{-120,-260},{-160,-260}}, + color={0,127,255})); + connect(busValChiWatChiByp, busPla.valChiWatChiByp) annotation (Line( + points={{200,-40},{200,-60}}, + color={255,204,51}, + thickness=0.5)); + connect(booToRea.y,comSigLoa. u) + annotation (Line(points={{240,58},{240,52}}, color={0,0,127})); + connect(busPumChiWatPri.y1_actual, booToRea.u) annotation (Line( + points={{200,200},{240,200},{240,82}}, + color={255,204,51}, + thickness=0.5)); + connect(comSigLoa.y, loa.u) + annotation (Line(points={{240,28},{240,-14},{32,-14}}, color={0,0,127})); + connect(booToRea1.y, comSigLoa1.u) + annotation (Line(points={{240,-182},{240,-188}}, + color={0,0,127})); + connect(comSigLoa1.y, loa1.u) + annotation (Line(points={{240,-212},{240,-314},{32,-314}}, + color={0,0,127})); + connect(busPumChiWatPri1.y1_actual, booToRea1.u) annotation (Line( + points={{200,-100},{240,-100},{240,-158}}, + color={255,204,51}, + thickness=0.5)); + connect(rou.ports_bRet[nChi + 1], pas.port_a) annotation (Line(points={{-80,-26.1194}, + {-100,-26.1194},{-100,20}}, + color={0,127,255})); + connect(pas.port_b, rou.ports_aSup[nChi + 1]) annotation (Line(points={{-100,40}, + {-100,226.119},{-80,226.119}}, + color={0,127,255})); + annotation (Diagram(coordinateSystem(extent={{-260,-400},{260,320}})), + experiment( + StopTime=2000, + Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsParallel.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This model validates the hydronic interface model + +Buildings.Templates.Plants.Chillers.Components.Routing.ChillersToPrimaryPumps +for various plant configurations where the chillers are connected +in parallel. +The validation uses open-loop controls. +

                      +
                        +
                      • +The first configuration has no waterside economizer. +
                      • +
                      • +The second configuration has a waterside economizer with a heat exchanger +bypass valve to control the CHW flow rate. +
                      • +
                      +")); +end ChillersToPrimaryPumpsParallel; diff --git a/Buildings/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsSeries.mo b/Buildings/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsSeries.mo new file mode 100644 index 00000000000..5c113147e1d --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsSeries.mo @@ -0,0 +1,705 @@ +within Buildings.Templates.Plants.Chillers.Components.Validation; +model ChillersToPrimaryPumpsSeries + "Validation model for hydronic interface between series chillers and primary pumps" + extends Modelica.Icons.Example; + + replaceable package MediumChiWat = Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CHW medium"; + + parameter Integer nChi=3 + "Number of chillers"; + + parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_nominal[nChi]= + capChi_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/ + (TChiWatRet_nominal-TChiWatSup_nominal) + "CHW mass flow rate - Each chiller" + annotation (Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mChiWatPri_flow_nominal= + sum(mChiWatChi_flow_nominal) + "Primary CHW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mChiWatEco_flow_nominal= + sum(mChiWatChi_flow_nominal) + "WSE CHW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpChiWatChi_nominal[nChi]= + fill(Buildings.Templates.Data.Defaults.dpChiWatChi, nChi) + "CHW pressure drop - Each chiller" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpChiWatEco_nominal= + Buildings.Templates.Data.Defaults.dpChiWatEco + "WSE CHW pressure drop" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.HeatFlowRate capChi_nominal[nChi]( + each min=0)=fill(1e6, nChi) + "Cooling capacity - Each chiller (>0)" + annotation (Dialog(group="Nominal condition")); + + parameter Modelica.Units.SI.Temperature TChiWatSup_nominal= + Buildings.Templates.Data.Defaults.TChiWatSup + "CHW supply temperature"; + parameter Modelica.Units.SI.Temperature TChiWatRet_nominal= + Buildings.Templates.Data.Defaults.TChiWatRet + "CHW return temperature"; + + parameter Modelica.Units.SI.Time tau=10 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + 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")); + + parameter Buildings.Templates.Components.Data.PumpMultiple datPumChiWatPri( + final typ=Buildings.Templates.Components.Types.Pump.Multiple, + final nPum=nChi, + final m_flow_nominal=mChiWatChi_flow_nominal, + dp_nominal=fill(1.5*sum(dpChiWatChi_nominal), nChi)) + "Parameter record for primary CHW pumps"; + parameter Buildings.Templates.Components.Data.PumpSingle datPumChiWatEco( + final typ=Buildings.Templates.Components.Types.Pump.Single, + final m_flow_nominal=mChiWatEco_flow_nominal, + dp_nominal=1.5*dpChiWatEco_nominal) + "Parameter record for WSE CHW pump"; + parameter Buildings.Templates.Components.Data.Valve datValChiWatEcoByp( + final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating, + final m_flow_nominal=mChiWatEco_flow_nominal, + dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso) + "Parameter record for WSE CHW bypass valve"; + parameter Buildings.Templates.Components.Data.Valve datValChiWatChiByp( + final typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, + final m_flow_nominal=mChiWatPri_flow_nominal, + dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso) + "Parameter record for chiller CHW bypass valve"; + + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1PumChiWatPri[nChi]( + each table=[0,0; 1,0; 1,1; 2,1], + each timeScale=1000, + each period=2000) "Primary CHW pumps Start/Stop signal" + annotation (Placement(transformation(extent={{-250,290},{-230,310}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yPumChiWatPri( + k=1) "Primary CHW pump speed signal" + annotation (Placement(transformation(extent={{-250,330},{-230,350}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWat[nChi]( + each final k=TChiWatSup_nominal) + "CHW supply temperature set point" + annotation (Placement(transformation(extent={{-250,210},{-230,230}}))); + Plants.Chillers.Components.Routing.ChillersToPrimaryPumps rou1( + redeclare final package MediumChiWat = MediumChiWat, + final nChi=nChi, + final mChiWatPri_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final datValChiWatChiByp=datValChiWatChiByp, + typDisChiWat=Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only, + typArrChi=Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series, + typArrPumChiWatPri=Buildings.Templates.Components.Types.PumpArrangement.Headered, + typEco=Buildings.Templates.Plants.Chillers.Types.Economizer.None) + "Series chillers, headered pumps, no WSE" + annotation (Placement(transformation(extent={{-80,90},{-40,210}}))); + + Fluid.FixedResistances.PressureDrop resEva1[nChi]( + redeclare each final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatChi_flow_nominal, + final dp_nominal=dpChiWatChi_nominal) + "Flow resistance for chiller evaporator" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-200,150}))); + Buildings.Templates.Components.Routing.MultipleToSingle outPumChiWatPri1( + redeclare final package Medium=MediumChiWat, + final nPorts=nChi, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "Primary CHW pumps outlet manifold" + annotation (Placement(transformation(extent={{16,170},{36,190}}))); + Buildings.Templates.Components.Pumps.Multiple pumChiWatPri1( + redeclare final package Medium=MediumChiWat, + final dat=datPumChiWatPri, + final nPum=nChi, + final have_var=true, + final have_varCom=true, + final energyDynamics=energyDynamics) + "Primary CHW pumps" + annotation (Placement(transformation(extent={{-30,170},{-10,190}}))); + Fluid.Sensors.TemperatureTwoPort TChiWatChiEnt1[nChi]( + redeclare each final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatChi_flow_nominal) + "Chiller entering CHW return temperature" + annotation (Placement(transformation(extent={{-170,110},{-190,130}}))); + Fluid.Sensors.MassFlowRate mChiWatChi_flow1[nChi]( + redeclare each final package Medium=MediumChiWat) + "Chiller CHW flow" + annotation (Placement(transformation(extent={{-130,110},{-150,130}}))); + Fluid.HeatExchangers.HeaterCooler_u loa1( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=sum(mChiWatChi_flow_nominal), + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final Q_flow_nominal=sum(capChi_nominal), + dp_nominal=0) + "Cooling load" + annotation (Placement(transformation(extent={{10,110},{-10,130}}))); + Fluid.Sensors.TemperatureTwoPort TChiWatPriSup1( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=sum(mChiWatChi_flow_nominal)) + "Primary CHW supply temperature" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={60,180}))); + Fluid.Sensors.MassFlowRate mChiWatPri_flow1( + redeclare final package Medium=MediumChiWat) + "Primary CHW flow" + annotation (Placement(transformation(extent={{90,170},{110,190}}))); + Fluid.Sources.Boundary_pT bouChiWat1( + redeclare final package Medium=MediumChiWat, + final nPorts=1) + "CHW pressure boundary condition" + annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-20,100}))); + Fluid.Sources.PropertySource_T coo1[nChi]( + redeclare each final package Medium=MediumChiWat, + each final use_T_in=true) + "Ideal cooling to input set point (representing chiller evaporator)" + annotation (Placement(transformation(extent={{-180,170},{-160,190}}))); + Buildings.Templates.Components.Interfaces.Bus busPumChiWatPri1 + "Primary CHW pumps control bus" + annotation (Placement(transformation(extent={{180,200},{220,240}}), + iconTransformation(extent={{-316,184},{-276,224}}))); + Plants.Chillers.Components.Routing.ChillersToPrimaryPumps rou2( + redeclare final package MediumChiWat = MediumChiWat, + final nChi=nChi, + final mChiWatPri_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final datValChiWatChiByp=datValChiWatChiByp, + typDisChiWat=Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only, + typArrChi=Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series, + typArrPumChiWatPri=Buildings.Templates.Components.Types.PumpArrangement.Headered, + typEco=Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithValve) + "Series chillers, headered pumps, WSE with CHW bypass valve" + annotation (Placement(transformation(extent={{-80,-50},{-40,70}}))); + + Fluid.FixedResistances.PressureDrop resEva2[nChi]( + redeclare each final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatChi_flow_nominal, + final dp_nominal=dpChiWatChi_nominal) + "Flow resistance for chiller evaporator" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-200,10}))); + Buildings.Templates.Components.Routing.MultipleToSingle outPumChiWatPri2( + redeclare final package Medium=MediumChiWat, + final nPorts=nChi, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "Primary CHW pumps outlet manifold" + annotation (Placement(transformation(extent={{16,30},{36,50}}))); + Buildings.Templates.Components.Pumps.Multiple pumChiWatPri2( + redeclare final package Medium=MediumChiWat, + final dat=datPumChiWatPri, + final nPum=nChi, + final have_var=true, + final have_varCom=true, + final energyDynamics=energyDynamics) + "Primary CHW pumps" + annotation (Placement(transformation(extent={{-30,30},{-10,50}}))); + Fluid.Sensors.TemperatureTwoPort TChiWatChiEnt2[nChi]( + redeclare each final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatChi_flow_nominal) + "Chiller entering CHW return temperature" + annotation (Placement(transformation(extent={{-170,-30},{-190,-10}}))); + Fluid.Sensors.MassFlowRate mChiWatChi_flow2[nChi]( + redeclare each final package Medium=MediumChiWat) "Chiller CHW flow" + annotation (Placement(transformation(extent={{-130,-30},{-150,-10}}))); + Fluid.HeatExchangers.HeaterCooler_u loa2( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=sum(mChiWatChi_flow_nominal), + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final Q_flow_nominal=sum(capChi_nominal), + dp_nominal=0) + "Cooling load" + annotation (Placement(transformation(extent={{10,-30},{-10,-10}}))); + Fluid.Sensors.TemperatureTwoPort TChiWatPriSup2( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=sum(mChiWatChi_flow_nominal)) + "Primary CHW supply temperature" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={60,40}))); + Fluid.Sensors.MassFlowRate mChiWatPri_flow2( + redeclare final package Medium=MediumChiWat) + "Primary CHW flow" + annotation (Placement(transformation(extent={{90,30},{110,50}}))); + Fluid.Sources.Boundary_pT bouChiWat2( + redeclare final package Medium=MediumChiWat, + final nPorts=1) + "CHW pressure boundary condition" + annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-20,-40}))); + Fluid.Sources.PropertySource_T coo2[nChi]( + redeclare each final package Medium=MediumChiWat, + each final use_T_in=true) + "Ideal cooling to input set point (representing chiller evaporator)" + annotation (Placement(transformation(extent={{-180,30},{-160,50}}))); + Buildings.Templates.Components.Interfaces.Bus busPumChiWatPri2 + "Primary CHW pumps control bus" + annotation (Placement(transformation(extent={{180,80},{220,120}}), + iconTransformation(extent={{-316,184},{-276,224}}))); + Fluid.FixedResistances.PressureDrop resEco( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatEco_flow_nominal, + final dp_nominal=dpChiWatEco_nominal) + "Flow resistance for WSE HX" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-200,-90}))); + Fluid.Sensors.TemperatureTwoPort TChiWatEcoEnt( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatEco_flow_nominal) + "WSE entering CHW return temperature" + annotation (Placement(transformation(extent={{-170,-130},{-190,-110}}))); + Fluid.Sensors.MassFlowRate mChiWatEco_flow( + redeclare final package Medium=MediumChiWat) + "WSE CHW flow" + annotation (Placement(transformation(extent={{-130,-130},{-150,-110}}))); + Fluid.Sources.PropertySource_T cooEco( + redeclare final package Medium=MediumChiWat, final use_T_in=true) + "Ideal cooling to input set point (representing WSE)" + annotation (Placement(transformation(extent={{-180,-70},{-160,-50}}))); + Plants.Chillers.Components.Routing.ChillersToPrimaryPumps rou3( + redeclare final package MediumChiWat = MediumChiWat, + final nChi=nChi, + final mChiWatPri_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final datValChiWatChiByp=datValChiWatChiByp, + typDisChiWat=Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only, + typArrChi=Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series, + typArrPumChiWatPri=Buildings.Templates.Components.Types.PumpArrangement.Headered, + typEco=Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithPump) + "Series chillers, headered pumps, WSE with HX pump" + annotation (Placement(transformation(extent={{-80,-250},{-40,-130}}))); + + Fluid.FixedResistances.PressureDrop resEva3[nChi]( + redeclare each final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatChi_flow_nominal, + final dp_nominal=dpChiWatChi_nominal) + "Flow resistance for chiller evaporator" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-200,-190}))); + Buildings.Templates.Components.Routing.MultipleToSingle outPumChiWatPri3( + redeclare final package Medium=MediumChiWat, + final nPorts=nChi, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "Primary CHW pumps outlet manifold" + annotation (Placement(transformation(extent={{16,-170},{36,-150}}))); + Buildings.Templates.Components.Pumps.Multiple pumChiWatPri3( + redeclare final package Medium=MediumChiWat, + final dat=datPumChiWatPri, + final nPum=nChi, + final have_var=true, + final have_varCom=true, + final energyDynamics=energyDynamics) + "Primary CHW pumps" + annotation (Placement(transformation(extent={{-30,-170},{-10,-150}}))); + Fluid.Sensors.TemperatureTwoPort TChiWatChiEnt3[nChi]( + redeclare each final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatChi_flow_nominal) + "Chiller entering CHW return temperature" + annotation (Placement(transformation(extent={{-170,-230},{-190,-210}}))); + Fluid.Sensors.MassFlowRate mChiWatChi_flow3[nChi]( + redeclare each final package Medium=MediumChiWat) + "Chiller CHW flow" + annotation (Placement(transformation(extent={{-130,-230},{-150,-210}}))); + Fluid.HeatExchangers.HeaterCooler_u loa3( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=sum(mChiWatChi_flow_nominal), + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final Q_flow_nominal=sum(capChi_nominal), + dp_nominal=0) + "Cooling load" + annotation (Placement(transformation(extent={{10,-230},{-10,-210}}))); + Fluid.Sensors.TemperatureTwoPort TChiWatPriSup3(redeclare final package + Medium=MediumChiWat, final m_flow_nominal=sum(mChiWatChi_flow_nominal)) + "Primary CHW supply temperature" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={60,-160}))); + Fluid.Sensors.MassFlowRate mChiWatPri_flow3( + redeclare final package Medium=MediumChiWat) + "Primary CHW flow" + annotation (Placement(transformation(extent={{90,-170},{110,-150}}))); + Fluid.Sources.Boundary_pT bouChiWat3( + redeclare final package Medium=MediumChiWat, + final nPorts=1) + "CHW pressure boundary condition" + annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-20,-240}))); + Fluid.Sources.PropertySource_T coo3[nChi]( + redeclare each final package Medium=MediumChiWat, + each final use_T_in=true) + "Ideal cooling to input set point (representing chiller evaporator)" + annotation (Placement(transformation(extent={{-180,-170},{-160,-150}}))); + Buildings.Templates.Components.Interfaces.Bus busPumChiWatPri3 + "Primary CHW pumps control bus" + annotation (Placement(transformation(extent={{180,-120},{220,-80}}), + iconTransformation(extent={{-316,184},{-276,224}}))); + Fluid.Sensors.MassFlowRate mChiWatEco_flow1( + redeclare final package Medium=MediumChiWat) + "WSE CHW flow" + annotation (Placement(transformation(extent={{-130,-330},{-150,-310}}))); + Fluid.Sources.PropertySource_T cooEco1( + redeclare final package Medium=MediumChiWat, + final use_T_in=true) + "Ideal cooling to input set point (representing WSE)" + annotation (Placement(transformation(extent={{-180,-270},{-160,-250}}))); + Fluid.FixedResistances.PressureDrop resEco1( + redeclare final package Medium=MediumChiWat, + final m_flow_nominal=mChiWatEco_flow_nominal, + final dp_nominal=dpChiWatEco_nominal) + "Flow resistance for WSE HX" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-200,-290}))); + Fluid.Sensors.TemperatureTwoPort TChiWatEcoEnt1(redeclare final package + Medium=MediumChiWat, final m_flow_nominal=mChiWatEco_flow_nominal) + "WSE entering CHW return temperature" + annotation (Placement(transformation(extent={{-170,-330},{-190,-310}}))); + + Buildings.Templates.Components.Pumps.Single pumEco( + final dat=datPumChiWatEco, + final have_var=true, + final energyDynamics=energyDynamics) + "WSE HX pump" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-100,-280}))); + Buildings.Templates.Components.Interfaces.Bus busPumChiWatEco + "WSE HX pump control bus" + annotation (Placement(transformation(extent={{180,-180},{220,-140}}), + iconTransformation(extent={{-316,184},{-276,224}}))); + Buildings.Templates.Components.Interfaces.Bus busValChiWatEcoByp + "WSE CHW bypass valve control bus" annotation (Placement(transformation( + extent={{180,20},{220,60}}), iconTransformation(extent={{-316,184},{-276, + 224}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable yValChiWatEcoByp(table=[0, + 1; 1.5,1; 1.5,0; 2,0], timeScale=1000) + "WSE CHW bypass valve opening signal" + annotation (Placement(transformation(extent={{-250,250},{-230,270}}))); + Buildings.Templates.Components.Actuators.Valve valChiWatEcoByp1( + redeclare final package Medium=MediumChiWat, + final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating, + final dat=datValChiWatEcoByp) + "WSE CHW bypass valve" annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={-120,-90}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChi] + "Convert pump return signal to real" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={220,180}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum comSigLoa(k=fill(1/nChi, nChi), + nin=nChi) "Compute load modulating signal" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={220,150}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 + [nChi] + "Convert pump return signal to real" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,40}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum comSigLoa1(k=fill(1/nChi, nChi), + nin=nChi) "Compute load modulating signal" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,10}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea2 + [nChi] + "Convert pump return signal to real" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,-160}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum comSigLoa2(k=fill(1/nChi, nChi), + nin=nChi) "Compute load modulating signal" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,-190}))); + Buildings.Templates.Components.Routing.PassThroughFluid pas(redeclare final + package Medium = MediumChiWat) + "Direct fluid pass-through for no WSE" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-100,150}))); +equation + connect(pumChiWatPri1.ports_b, outPumChiWatPri1.ports_a) + annotation (Line(points={{-10,180},{16,180}},color={0,127,255})); + connect(mChiWatChi_flow1.port_a, rou1.ports_bRet[1:nChi]) + annotation (Line(points={{-130,120},{-100,120},{-100,91.791},{-80,91.791}}, + color={0,127,255})); + connect(mChiWatChi_flow1.port_b, TChiWatChiEnt1.port_a) + annotation (Line(points={{-150,120},{-170,120}}, color={0,127,255})); + connect(TChiWatChiEnt1.port_b, resEva1.port_a) annotation (Line(points={{-190, + 120},{-200,120},{-200,140}}, color={0,127,255})); + connect(outPumChiWatPri1.port_b, TChiWatPriSup1.port_a) + annotation (Line(points={{36,180},{50,180}}, color={0,127,255})); + connect(TChiWatPriSup1.port_b, mChiWatPri_flow1.port_a) + annotation (Line(points={{70,180},{90,180}}, color={0,127,255})); + connect(loa1.port_a, mChiWatPri_flow1.port_b) annotation (Line(points={{10,120}, + {120,120},{120,180},{110,180}}, color={0,127,255})); + connect(loa1.port_b, rou1.port_aRet) annotation (Line(points={{-10,120},{-36, + 120},{-36,91.791},{-40,91.791}}, color={0,127,255})); + connect(bouChiWat1.ports[1], loa1.port_b) + annotation (Line(points={{-20,110},{-20,120},{-10,120}}, + color={0,127,255})); + connect(coo1.port_b, rou1.ports_aSup[1:nChi]) + annotation (Line(points={{-160,180},{-100,180},{-100,208.209},{-80,208.209}}, + color={0,127,255})); + connect(resEva1.port_b, coo1.port_a) annotation (Line(points={{-200,160},{-200, + 180},{-180,180}}, color={0,127,255})); + connect(TChiWat.y, coo1.T_in) annotation (Line(points={{-228,220},{-174,220},{ + -174,192}},color={0,0,127})); + connect(busPumChiWatPri1, pumChiWatPri1.bus) annotation (Line( + points={{200,220},{200,200},{-20,200},{-20,190}}, + color={255,204,51}, + thickness=0.5)); + connect(yPumChiWatPri.y, busPumChiWatPri1.y) + annotation (Line(points={{-228,340},{180,340},{180,244},{200,244},{200,220}}, + color={0,0,127})); + connect(y1PumChiWatPri.y[1], busPumChiWatPri1.y1) annotation (Line(points={{-228, + 300},{160,300},{160,220},{200,220}}, color={255,0,255})); + connect(pumChiWatPri2.ports_b,outPumChiWatPri2. ports_a) + annotation (Line(points={{-10,40},{16,40}}, color={0,127,255})); + connect(mChiWatChi_flow2.port_a,rou2. ports_bRet[1:nChi]) + annotation (Line(points={{-130,-20},{-100,-20},{-100,-48.209},{-80,-48.209}}, + color={0,127,255})); + connect(mChiWatChi_flow2.port_b,TChiWatChiEnt2. port_a) + annotation (Line(points={{-150,-20},{-170,-20}}, color={0,127,255})); + connect(TChiWatChiEnt2.port_b,resEva2. port_a) annotation (Line(points={{-190, + -20},{-200,-20},{-200,0}}, color={0,127,255})); + connect(outPumChiWatPri2.port_b,TChiWatPriSup2. port_a) + annotation (Line(points={{36,40},{50,40}}, color={0,127,255})); + connect(TChiWatPriSup2.port_b,mChiWatPri_flow2. port_a) + annotation (Line(points={{70,40},{90,40}}, color={0,127,255})); + connect(loa2.port_a,mChiWatPri_flow2. port_b) annotation (Line(points={{10,-20}, + {120,-20},{120,40},{110,40}}, color={0,127,255})); + connect(loa2.port_b,rou2. port_aRet) annotation (Line(points={{-10,-20},{-36, + -20},{-36,-48.209},{-40,-48.209}}, + color={0,127,255})); + connect(bouChiWat2.ports[1],loa2. port_b) + annotation (Line(points={{-20,-30},{-20,-20},{-10,-20}}, + color={0,127,255})); + connect(coo2.port_b,rou2.ports_aSup[1:nChi]) + annotation (Line(points={{-160,40},{-120,40},{-120,68.209},{-80,68.209}}, + color={0,127,255})); + connect(resEva2.port_b,coo2. port_a) annotation (Line(points={{-200,20},{-200, + 40},{-180,40}}, color={0,127,255})); + connect(yPumChiWatPri.y,busPumChiWatPri2. y) + annotation (Line(points={{-228,340},{180,340},{180,104},{200,104},{200,100}}, + color={0,0,127})); + connect(y1PumChiWatPri.y[1],busPumChiWatPri2. y1) annotation (Line(points={{-228, + 300},{160,300},{160,100},{200,100}}, color={255,0,255})); + connect(mChiWatEco_flow.port_b, TChiWatEcoEnt.port_a) + annotation (Line(points={{-150,-120},{-170,-120}}, color={0,127,255})); + connect(TChiWatEcoEnt.port_b, resEco.port_a) annotation (Line(points={{-190,-120}, + {-200,-120},{-200,-100}}, color={0,127,255})); + connect(resEco.port_b, cooEco.port_a) annotation (Line(points={{-200,-80},{-200, + -60},{-180,-60}}, color={0,127,255})); + connect(rou2.ports_bRet[nChi + 1], mChiWatEco_flow.port_a) annotation (Line( + points={{-80,-48.209},{-100,-48.209},{-100,-120},{-130,-120}}, + color={0,127,255})); + connect(rou2.ports_aSup[nChi + 1], cooEco.port_b) annotation (Line(points={{-80, + 68.209},{-120,68.209},{-120,-60},{-160,-60}}, + color={0,127,255})); + connect(busPumChiWatPri2, pumChiWatPri2.bus) annotation (Line( + points={{200,100},{200,60},{-20,60},{-20,50}}, + color={255,204,51}, + thickness=0.5)); + connect(rou1.ports_bSup, pumChiWatPri1.ports_a) + annotation (Line(points={{-40,208.209},{-36,208.209},{-36,180},{-30,180}}, + color={0,127,255})); + connect(rou2.ports_bSup, pumChiWatPri2.ports_a) + annotation (Line(points={{-40,68.209},{-36,68.209},{-36,40},{-30,40}}, + color={0,127,255})); + connect(pumChiWatPri3.ports_b, outPumChiWatPri3.ports_a) + annotation (Line(points={{-10,-160},{16,-160}}, + color={0,127,255})); + connect(mChiWatChi_flow3.port_a, rou3.ports_bRet[1:nChi]) + annotation (Line(points={{-130,-220},{-100,-220},{-100,-248.209},{-80, + -248.209}}, color={0,127,255})); + connect(mChiWatChi_flow3.port_b, TChiWatChiEnt3.port_a) + annotation (Line(points={{-150,-220},{-170,-220}}, + color={0,127,255})); + connect(TChiWatChiEnt3.port_b, resEva3.port_a) annotation (Line(points={{-190, + -220},{-200,-220},{-200,-200}}, + color={0,127,255})); + connect(outPumChiWatPri3.port_b, TChiWatPriSup3.port_a) + annotation (Line(points={{36,-160},{50,-160}}, + color={0,127,255})); + connect(TChiWatPriSup3.port_b, mChiWatPri_flow3.port_a) + annotation (Line(points={{70,-160},{90,-160}}, + color={0,127,255})); + connect(loa3.port_b, rou3.port_aRet) annotation (Line(points={{-10,-220},{-36, + -220},{-36,-248.209},{-40,-248.209}}, + color={0,127,255})); + connect(bouChiWat3.ports[1], loa3.port_b) annotation (Line(points={{-20,-230}, + {-20,-220},{-10,-220}}, + color={0,127,255})); + connect(coo3.port_b, rou3.ports_aSup[1:nChi]) + annotation (Line(points={{-160,-160},{-120,-160},{-120,-131.791},{-80, + -131.791}}, color={0,127,255})); + connect(resEva3.port_b, coo3.port_a) annotation (Line(points={{-200,-180},{-200, + -160},{-180,-160}}, color={0,127,255})); + connect(TChiWat.y, coo3.T_in) annotation (Line(points={{-228,220},{-220,220},{ + -220,-180},{-174,-180},{-174,-148}}, + color={0,0,127})); + connect(TChiWat.y, coo1.T_in) annotation (Line(points={{-228,220},{-174,220},{ + -174,192}},color={0,0,127})); + connect(TChiWat.y,coo2. T_in) annotation (Line(points={{-228,220},{-220,220},{ + -220,60},{-174,60},{-174,52}}, + color={0,0,127})); + connect(TChiWat[1].y, cooEco.T_in) annotation (Line(points={{-228,220},{-220,220}, + {-220,-40},{-174,-40},{-174,-48}}, + color={0,0,127})); + connect(rou3.ports_bSup, pumChiWatPri3.ports_a) + annotation (Line(points={{-40,-131.791},{-36,-131.791},{-36,-160},{-30,-160}}, + color={0,127,255})); + connect(y1PumChiWatPri.y[1], busPumChiWatPri3.y1) annotation (Line(points={{-228, + 300},{160,300},{160,-100},{200,-100}}, color={255,0,255}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(yPumChiWatPri.y, busPumChiWatPri3.y) annotation (Line(points={{-228,340}, + {180,340},{180,-136},{200,-136},{200,-100}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(busPumChiWatPri3, pumChiWatPri3.bus) annotation (Line( + points={{200,-100},{200,-140},{-20,-140},{-20,-150}}, + color={255,204,51}, + thickness=0.5)); + connect(TChiWat[1].y, cooEco1.T_in) annotation (Line(points={{-228,220},{-220, + 220},{-220,-280},{-174,-280},{-174,-248}}, + color={0,0,127})); + connect(cooEco1.port_b, rou3.ports_aSup[nChi + 1]) annotation (Line(points={{-160, + -260},{-120,-260},{-120,-131.791},{-80,-131.791}}, + color={0,127,255})); + connect(mChiWatEco_flow1.port_b, TChiWatEcoEnt1.port_a) + annotation (Line(points={{-150,-320},{-170,-320}}, color={0,127,255})); + connect(TChiWatEcoEnt1.port_b, resEco1.port_a) annotation (Line(points={{-190, + -320},{-200,-320},{-200,-300}}, color={0,127,255})); + connect(resEco1.port_b, cooEco1.port_a) annotation (Line(points={{-200,-280},{ + -200,-260},{-180,-260}}, color={0,127,255})); + connect(mChiWatEco_flow1.port_a, pumEco.port_b) annotation (Line(points={{-130, + -320},{-100,-320},{-100,-290}}, color={0,127,255})); + connect(pumEco.port_a, rou3.ports_bRet[nChi + 1]) annotation (Line(points={{-100, + -270},{-100,-248.209},{-80,-248.209}}, + color={0,127,255})); + connect(busPumChiWatEco, pumEco.bus) annotation (Line( + points={{200,-160},{200,-280},{-90,-280}}, + color={255,204,51}, + thickness=0.5)); + connect(yPumChiWatPri.y, busPumChiWatEco.y) annotation (Line(points={{-228,340}, + {180,340},{180,-196},{200,-196},{200,-160}}, color={0,0,127})); + connect(y1PumChiWatPri[1].y[1], busPumChiWatEco.y1) annotation (Line(points={{-228, + 300},{160,300},{160,-160},{200,-160}}, color={255,0,255})); + connect(yValChiWatEcoByp.y[1], busValChiWatEcoByp.y) annotation (Line(points={{-228, + 260},{150,260},{150,40},{200,40}}, color={0,0,127})); + connect(cooEco.port_b, valChiWatEcoByp1.port_b) annotation (Line(points={{-160, + -60},{-120,-60},{-120,-80}}, color={0,127,255})); + connect(mChiWatEco_flow.port_a, valChiWatEcoByp1.port_a) annotation (Line( + points={{-130,-120},{-120,-120},{-120,-100}}, color={0,127,255})); + connect(busValChiWatEcoByp, valChiWatEcoByp1.bus) annotation (Line( + points={{200,40},{200,-90},{-110,-90}}, + color={255,204,51}, + thickness=0.5)); + connect(booToRea.y,comSigLoa. u) + annotation (Line(points={{220,168},{220,162}}, color={0,0,127})); + connect(busPumChiWatPri1.y1_actual, booToRea.u) annotation (Line( + points={{200,220},{220,220},{220,192}}, + color={255,204,51}, + thickness=0.5)); + connect(comSigLoa.y, loa1.u) + annotation (Line(points={{220,138},{220,126},{12,126}}, color={0,0,127})); + connect(booToRea1.y, comSigLoa1.u) + annotation (Line(points={{240,28},{240,22}}, color={0,0,127})); + connect(comSigLoa1.y, loa2.u) + annotation (Line(points={{240,-2},{240,-14},{12,-14}}, + color={0,0,127})); + connect(busPumChiWatPri2.y1_actual, booToRea1.u) annotation (Line( + points={{200,100},{220,100},{220,60},{240,60},{240,52}}, + color={255,204,51}, + thickness=0.5)); + connect(booToRea2.y, comSigLoa2.u) + annotation (Line(points={{240,-172},{240,-178}}, color={0,0,127})); + connect(busPumChiWatPri3.y1_actual, booToRea2.u) annotation (Line( + points={{200,-100},{220,-100},{220,-140},{240,-140},{240,-148}}, + color={255,204,51}, + thickness=0.5)); + connect(mChiWatPri_flow3.port_b, loa3.port_a) annotation (Line(points={{110,-160}, + {120,-160},{120,-220},{10,-220}}, color={0,127,255})); + connect(comSigLoa2.y, loa3.u) annotation (Line(points={{240,-202},{240,-214},{ + 12,-214}}, color={0,0,127})); + connect(pas.port_b, rou1.ports_aSup[nChi + 1]) annotation (Line(points={{-100, + 160},{-100,208.209},{-80,208.209}}, + color={0,127,255})); + connect(rou1.ports_bRet[nChi + 1], pas.port_a) annotation (Line(points={{-80, + 91.791},{-100,91.791},{-100,140}}, + color={0,127,255})); + annotation (Diagram(coordinateSystem(extent={{-260,-360},{260,360}})), + experiment( + StopTime=2000, + Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/ChillersToPrimaryPumpsSeries.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This model validates the hydronic interface model + +Buildings.Templates.Plants.Chillers.Components.Routing.ChillersToPrimaryPumps +for various plant configurations where the chillers are connected +in series. +The validation uses open-loop controls. +

                      +
                        +
                      • +The first configuration has no waterside economizer. +
                      • +
                      • +The second configuration has a waterside economizer with a heat exchanger +bypass valve to control the CHW flow rate. +
                      • +
                      • +The third configuration has a waterside economizer with a heat exchanger +pump to control the CHW flow rate. +
                      • +
                      +")); +end ChillersToPrimaryPumpsSeries; diff --git a/Buildings/Templates/Plants/Chillers/Components/Validation/Configuration/Variable1OnlyAirCooledParallel.mo b/Buildings/Templates/Plants/Chillers/Components/Validation/Configuration/Variable1OnlyAirCooledParallel.mo new file mode 100644 index 00000000000..8f5af5ea86a --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Validation/Configuration/Variable1OnlyAirCooledParallel.mo @@ -0,0 +1,40 @@ +within Buildings.Templates.Plants.Chillers.Components.Validation.Configuration; +record Variable1OnlyAirCooledParallel + "Default configuration parameters for primary-only parallel air-cooled chiller plant" + extends Buildings.Templates.Plants.Chillers.Configuration.ChillerPlant( + cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, + cpCon_default=Buildings.Utilities.Psychrometrics.Constants.cpAir, + have_pumChiWatPriVar=true, + have_pumChiWatSec=false, + have_senDpChiWatRemWir=false, + have_senLevCoo=false, + have_senVChiWatSec=false, + have_valChiWatChiBypPar=false, + have_pumChiWatPriVarCom=true, + have_pumConWatVarCom=false, + have_pumConWatVar=false, + nAirHan=0, + nCoo=0, + nEquZon=0, + nLooChiWatSec=1, + nPumChiWatPri=nChi, + nPumChiWatSec=0, + nPumConWat=0, + nSenDpChiWatRem=1, + rhoChiWat_default=Buildings.Media.Water.d_const, + rhoCon_default=Buildings.Media.Air.dStp, + typArrChi=Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel, + typArrPumChiWatPri=Buildings.Templates.Components.Types.PumpArrangement.Headered, + typArrPumConWat=Buildings.Templates.Components.Types.PumpArrangement.Headered, + typChi=Buildings.Templates.Components.Types.Chiller.AirCooled, + typCoo=Buildings.Templates.Components.Types.Cooler.None, + typCtl=Buildings.Templates.Plants.Chillers.Types.Controller.OpenLoop, + typCtlHea=Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.None, + typDisChiWat=Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only, + typEco=Buildings.Templates.Plants.Chillers.Types.Economizer.None, + typMeaCtlChiWatPri=Buildings.Templates.Plants.Chillers.Types.PrimaryOverflowMeasurement.TemperatureSupplySensor, + typValChiWatChiIso=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, + typValConWatChiIso=Buildings.Templates.Components.Types.Valve.None, + typValCooInlIso=Buildings.Templates.Components.Types.Valve.None, + typValCooOutIso=Buildings.Templates.Components.Types.Valve.None); +end Variable1OnlyAirCooledParallel; diff --git a/Buildings/Templates/Plants/Chillers/Components/Validation/Configuration/Variable1OnlyWaterCooledParallel.mo b/Buildings/Templates/Plants/Chillers/Components/Validation/Configuration/Variable1OnlyWaterCooledParallel.mo new file mode 100644 index 00000000000..a61fe427b1e --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Validation/Configuration/Variable1OnlyWaterCooledParallel.mo @@ -0,0 +1,12 @@ +within Buildings.Templates.Plants.Chillers.Components.Validation.Configuration; +record Variable1OnlyWaterCooledParallel + "Default configuration parameters for primary-only parallel water-cooled chiller plant" + extends Buildings.Templates.Plants.Chillers.Components.Validation.Configuration.Variable1OnlyAirCooledParallel( + cpCon_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, + nCoo=nChi, + nPumConWat=nChi, + rhoCon_default=Buildings.Media.Water.d_const, + typChi=Buildings.Templates.Components.Types.Chiller.WaterCooled, + typCoo=Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen, + typValConWatChiIso=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition); +end Variable1OnlyWaterCooledParallel; diff --git a/Buildings/Templates/Plants/Chillers/Components/Validation/Configuration/package.mo b/Buildings/Templates/Plants/Chillers/Components/Validation/Configuration/package.mo new file mode 100644 index 00000000000..59133fb82d0 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Validation/Configuration/package.mo @@ -0,0 +1,4 @@ +within Buildings.Templates.Plants.Chillers.Components.Validation; +package Configuration "Default configuration parameters for validation purposes" + extends Modelica.Icons.MaterialPropertiesPackage; +end Configuration; diff --git a/Buildings/Templates/Plants/Chillers/Components/Validation/Configuration/package.order b/Buildings/Templates/Plants/Chillers/Components/Validation/Configuration/package.order new file mode 100644 index 00000000000..18a36fe49b7 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Validation/Configuration/package.order @@ -0,0 +1,2 @@ +Variable1OnlyAirCooledParallel +Variable1OnlyWaterCooledParallel diff --git a/Buildings/Templates/Plants/Chillers/Components/Validation/CoolerGroupCoolingTowerOpen.mo b/Buildings/Templates/Plants/Chillers/Components/Validation/CoolerGroupCoolingTowerOpen.mo new file mode 100644 index 00000000000..998c1bd899b --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Validation/CoolerGroupCoolingTowerOpen.mo @@ -0,0 +1,359 @@ +within Buildings.Templates.Plants.Chillers.Components.Validation; +model CoolerGroupCoolingTowerOpen + "Validation model for cooler group with open-circuit cooling towers" + extends Modelica.Icons.Example; + + replaceable package MediumConWat = Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CW medium"; + + parameter Integer nCoo=2 + "Number of cooler units"; + + parameter Modelica.Units.SI.MassFlowRate mConWatCoo_flow_nominal[nCoo]= + capCoo_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/ + (TConWatRet_nominal-TConWatSup_nominal) + "CW mass flow rate - Each cooler unit" + annotation (Evaluate=true, Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mConWat_flow_nominal= + sum(mConWatCoo_flow_nominal) + "Total CW mass flow rate (all units)"; + parameter Modelica.Units.SI.PressureDifference dpConWatFriCoo_nominal[nCoo]= + fill(Buildings.Templates.Data.Defaults.dpConWatFriTow, nCoo) + "CW flow-friction losses through tower and piping only (without elevation head or valve)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpConWatStaCoo_nominal[nCoo]= + fill(Buildings.Templates.Data.Defaults.dpConWatStaTow, nCoo) + "CW elevation head" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mAirCoo_flow_nominal[nCoo]= + mConWatCoo_flow_nominal / Buildings.Templates.Data.Defaults.ratMFloConWatByMFloAirTow + "Air mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.HeatFlowRate capCoo_nominal[nCoo]=fill(1e6, nCoo) + "Cooling capacity - Each unit (>0)" + annotation (Dialog(group="Nominal condition")); + + parameter Modelica.Units.SI.Temperature TAirEnt_nominal= + Buildings.Templates.Data.Defaults.TOutDryCoo + "Entering air drybulb temperature" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature TWetBulEnt_nominal= + Buildings.Templates.Data.Defaults.TWetBulTowEnt + "Entering air wetbulb temperature" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature TConWatSup_nominal= + Buildings.Templates.Data.Defaults.TConWatSup + "CW supply temperature"; + parameter Modelica.Units.SI.Temperature TConWatRet_nominal= + Buildings.Templates.Data.Defaults.TConWatRet + "CW return temperature"; + + parameter Modelica.Units.SI.Time tau=10 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + 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")); + + parameter Buildings.Templates.Components.Data.PumpMultiple datPumConWat( + final typ=Buildings.Templates.Components.Types.Pump.Multiple, + final nPum=nCoo, + final m_flow_nominal=mConWatCoo_flow_nominal, + dp_nominal=fill(1.5*max(dpConWatFriCoo_nominal .+ dpConWatStaCoo_nominal), nCoo)) + "Parameter record for CW pumps" + annotation (Placement(transformation(extent={{180,260},{200,280}}))); + parameter Buildings.Templates.Plants.Chillers.Components.Data.CoolerGroup datCoo( + final nCoo=nCoo, + final typCoo=Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen, + final mConWatCoo_flow_nominal=mConWatCoo_flow_nominal, + final dpConWatFriCoo_nominal=dpConWatFriCoo_nominal, + final dpConWatStaCoo_nominal=dpConWatStaCoo_nominal, + final mAirCoo_flow_nominal=mAirCoo_flow_nominal, + final TWetBulEnt_nominal=TWetBulEnt_nominal, + final TConWatSup_nominal=TConWatSup_nominal, + final TConWatRet_nominal=TConWatRet_nominal, + PFanCoo_nominal=Buildings.Templates.Data.Defaults.ratPFanByMFloConWatTow * mConWatCoo_flow_nominal) + "Parameter record for cooler group" + annotation (Placement(transformation(extent={{220,260},{240,280}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1[nCoo]( + each table=[0,0; 1.2,0; 1.2,1; 2,1], + each timeScale=1000, + each period=2000) + "CW pump and cooler Start/Stop signal" + annotation (Placement(transformation(extent={{-250,190},{-230,210}}))); + Fluid.HeatExchangers.HeaterCooler_u loaCon( + redeclare final package Medium = MediumConWat, + final m_flow_nominal=mConWat_flow_nominal, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final Q_flow_nominal=sum(capCoo_nominal), + dp_nominal=0) + "Load from condenser" + annotation (Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=90, + origin={20,20}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1ValIso[nCoo]( + each table=[0,0; 1,0; 1,1; 2,1], + each timeScale=1000, + each period=2000) + "CW isolation valve opening signal" + annotation (Placement(transformation(extent={{-250,150},{-230,170}}))); + Buildings.Templates.Plants.Chillers.Interfaces.Bus busPla + "Plant control bus" + annotation (Placement(transformation(extent={{180,80},{220,120}}), + iconTransformation(extent={{-432,12},{-412,32}}))); + Buildings.Templates.Components.Pumps.Multiple pumConWat( + redeclare final package Medium = MediumConWat, + final dat=datPumConWat, + final nPum=nCoo, + final have_var=false, + final energyDynamics=energyDynamics) + "CW pumps" + annotation (Placement(transformation(extent={{-50,-30},{-30,-10}}))); + Buildings.Templates.Components.Routing.SingleToMultiple inlPumConWat( + redeclare final package Medium = MediumConWat, + final nPorts=nCoo, + final m_flow_nominal=mConWat_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "CW pumps inlet manifold" + annotation (Placement(transformation(extent={{-70,-30},{-50,-10}}))); + Buildings.Templates.Components.Routing.SingleToMultiple outConWatChi( + redeclare final package Medium = MediumConWat, + final nPorts=nCoo, + final m_flow_nominal=mConWat_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "Chiller group CW outlet manifold" + annotation (Placement(transformation(extent={{0,-30},{-20,-10}}))); + Fluid.Sources.Boundary_pT bouCon( + redeclare final package Medium =MediumConWat, + nPorts=1) + "CW pressure boundary condition" annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-80,-50}))); + Buildings.Templates.Components.Interfaces.Bus busPumConWat + "CW pumps control bus" + annotation (Placement(transformation(extent={{180,40},{220,80}}), + iconTransformation(extent={{-316,184},{-276,224}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nCoo] + "Convert start signal to real" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,60}))); + Buildings.Controls.OBC.CDL.Reals.MultiSum comSigLoa( + final k=fill(1/nCoo, nCoo), + final nin=nCoo) + "Compute load modulating signal" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,30}))); + Plants.Chillers.Components.CoolerGroups.CoolingTowerOpen coo( + show_T=true, + final energyDynamics=energyDynamics, + redeclare final package MediumConWat = MediumConWat, + final dat=datCoo, + final nCoo=nCoo) + "Cooler group" + annotation (Placement(transformation( + extent={{40,-40},{-40,40}}, + rotation=0, + origin={-140,60}))); + Buildings.Templates.Components.Interfaces.Bus valCooOutIso[nCoo] + "Cooler outlet isolation valve control bus" + annotation (Placement( + transformation(extent={{120,100},{160,140}}), iconTransformation(extent= + {{-422,198},{-382,238}}))); + Buildings.Templates.Components.Interfaces.Bus valCooInlIso[nCoo] + "Cooler inlet isolation valve control bus" + annotation (Placement( + transformation(extent={{80,100},{120,140}}), iconTransformation(extent={ + {-422,198},{-382,238}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yCoo(k=1) + "Fan speed signal" + annotation (Placement(transformation(extent={{-250,230},{-230,250}}))); + BoundaryConditions.WeatherData.ReaderTMY3 weaDat( + filNam=Modelica.Utilities.Files.loadResource( + "modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) + "Weather data" + annotation (Placement(transformation(extent={{-250,110},{-230,130}}))); + Fluid.HeatExchangers.HeaterCooler_u loaCon1( + redeclare final package Medium = MediumConWat, + final m_flow_nominal=mConWat_flow_nominal, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final Q_flow_nominal=sum(capCoo_nominal), + dp_nominal=0) + "Load from condenser" + annotation (Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=90, + origin={20,-160}))); + Buildings.Templates.Components.Pumps.Multiple pumConWat1( + redeclare final package Medium = MediumConWat, + final dat=datPumConWat, + final nPum=nCoo, + final have_var=false, + final energyDynamics=energyDynamics) + "CW pumps" + annotation (Placement(transformation(extent={{-50,-210},{-30,-190}}))); + Buildings.Templates.Components.Routing.SingleToMultiple inlPumConWat1( + redeclare final package Medium = MediumConWat, + final nPorts=nCoo, + final m_flow_nominal=mConWat_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "CW pumps inlet manifold" + annotation (Placement(transformation(extent={{-70,-210},{-50,-190}}))); + Buildings.Templates.Components.Routing.SingleToMultiple outConWatChi1( + redeclare final package Medium = MediumConWat, + final nPorts=nCoo, + final m_flow_nominal=mConWat_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau) + "Chiller group CW outlet manifold" + annotation (Placement(transformation(extent={{0,-210},{-20,-190}}))); + Fluid.Sources.Boundary_pT bouCon1( + redeclare final package Medium =MediumConWat, + nPorts=1) + "CW pressure boundary condition" annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-80,-230}))); + Plants.Chillers.Components.CoolerGroups.CoolingTowerOpen coo1( + show_T=true, + final energyDynamics=energyDynamics, + redeclare final package MediumConWat = MediumConWat, + final dat=datCoo, + final nCoo=nCoo, + typValCooInlIso=Buildings.Templates.Components.Types.Valve.None, + typValCooOutIso=Buildings.Templates.Components.Types.Valve.None) + "Cooler group" annotation (Placement( + transformation( + extent={{40,-40},{-40,40}}, + rotation=0, + origin={-140,-120}))); + Buildings.Templates.Plants.Chillers.Interfaces.Bus busPla1 + "Plant control bus" + annotation (Placement(transformation(extent={{180,-100},{220,-60}}), + iconTransformation(extent={{-432,12},{-412,32}}))); + Buildings.Templates.Components.Interfaces.Bus busPumConWat1 + "CW pumps control bus" + annotation (Placement(transformation(extent={{180,-140},{220,-100}}), + iconTransformation(extent={{-316,184},{-276,224}}))); + +equation + connect(pumConWat.ports_a, inlPumConWat.ports_b) + annotation (Line(points={{-50,-20},{-50,-20}}, color={0,127,255})); + connect(y1.y[1], busPumConWat.y1) annotation (Line(points={{-228,200},{160,200}, + {160,60},{200,60}}, color={255,0,255})); + connect(booToRea.y,comSigLoa. u) + annotation (Line(points={{240,48},{240,42}}, color={0,0,127})); + connect(comSigLoa.y, loaCon.u) + annotation (Line(points={{240,18},{240,0},{26,0},{26,8}},color={0,0,127})); + connect(coo.port_b, inlPumConWat.port_a) annotation (Line(points={{-144.878, + 60},{-200,60},{-200,-20},{-70,-20}}, + color={0,127,255})); + connect(bouCon.ports[1], inlPumConWat.port_a) annotation (Line(points={{-80,-40}, + {-80,-20},{-70,-20}}, color={0,127,255})); + connect(pumConWat.ports_b, outConWatChi.ports_b) + annotation (Line(points={{-30,-20},{-20,-20}}, color={0,127,255})); + connect(outConWatChi.port_a, loaCon.port_a) + annotation (Line(points={{0,-20},{20,-20},{20,10}}, color={0,127,255})); + connect(loaCon.port_b, coo.port_a) annotation (Line(points={{20,30},{20,60},{ + -135.122,60}}, + color={0,127,255})); + connect(busPumConWat, pumConWat.bus) annotation (Line( + points={{200,60},{200,-10},{-40,-10}}, + color={255,204,51}, + thickness=0.5)); + connect(busPla, coo.bus) annotation (Line( + points={{200,100},{-140,100}}, + color={255,204,51}, + thickness=0.5)); + connect(valCooInlIso, busPla.valCooInlIso) annotation (Line( + points={{100,120},{100,100},{200,100}}, + color={255,204,51}, + thickness=0.5)); + connect(valCooOutIso, busPla.valCooOutIso) annotation (Line( + points={{140,120},{140,100},{200,100}}, + color={255,204,51}, + thickness=0.5)); + connect(y1ValIso.y[1], valCooInlIso.y1) annotation (Line(points={{-228,160},{100, + 160},{100,120}}, color={255,0,255})); + connect(y1ValIso.y[1], valCooOutIso.y1) annotation (Line(points={{-228,160},{140, + 160},{140,120}}, color={255,0,255})); + connect(weaDat.weaBus, coo.busWea) annotation (Line( + points={{-230,120},{-125.366,120},{-125.366,100}}, + color={255,204,51}, + thickness=0.5)); + connect(pumConWat1.ports_a, inlPumConWat1.ports_b) + annotation (Line(points={{-50,-200},{-50,-200}}, + color={0,127,255})); + connect(y1.y[1], busPumConWat1.y1) annotation (Line(points={{-228,200},{160,200}, + {160,-120},{200,-120}}, color={255,0,255})); + connect(coo1.port_b, inlPumConWat1.port_a) annotation (Line(points={{-144.878, + -120},{-200,-120},{-200,-200},{-70,-200}}, + color={0,127,255})); + connect(bouCon1.ports[1], inlPumConWat1.port_a) annotation (Line(points={{-80, + -220},{-80,-200},{-70,-200}}, + color={0,127,255})); + connect(pumConWat1.ports_b, outConWatChi1.ports_b) + annotation (Line(points={{-30,-200},{-20,-200}}, + color={0,127,255})); + connect(outConWatChi1.port_a, loaCon1.port_a) + annotation (Line(points={{0,-200},{20,-200},{20,-170}}, + color={0,127,255})); + connect(loaCon1.port_b, coo1.port_a) + annotation (Line(points={{20,-150},{20,-120},{-135.122,-120}}, + color={0,127,255})); + connect(busPumConWat1, pumConWat1.bus) annotation (Line( + points={{200,-120},{200,-190},{-40,-190}}, + color={255,204,51}, + thickness=0.5)); + connect(busPla1, coo1.bus) annotation (Line( + points={{200,-80},{-140,-80}}, + color={255,204,51}, + thickness=0.5)); + connect(weaDat.weaBus, coo1.busWea) annotation (Line( + points={{-230,120},{-220,120},{-220,-60},{-125.366,-60},{-125.366,-80}}, + color={255,204,51}, + thickness=0.5)); + connect(yCoo.y, busPla.yCoo) annotation (Line(points={{-228,240},{200,240},{200, + 100}}, color={0,0,127})); + connect(y1.y[1], busPla.y1Coo) annotation (Line(points={{-228,200},{180,200},{ + 180,104},{200,104},{200,100}}, color={255,0,255})); + connect(y1.y[1], busPla1.y1Coo) annotation (Line(points={{-228,200},{180,200}, + {180,-76},{200,-76},{200,-80}}, color={255,0,255})); + connect(yCoo.y, busPla1.yCoo) annotation (Line(points={{-228,240},{220,240},{220, + -80},{200,-80}}, color={0,0,127})); + connect(y1.y[1], booToRea.u) annotation (Line(points={{-228,200},{240,200},{240, + 72}}, color={255,0,255})); + connect(comSigLoa.y, loaCon1.u) annotation (Line(points={{240,18},{240,-180},{ + 26,-180},{26,-172}}, color={0,0,127})); + annotation (Diagram(coordinateSystem(extent={{-260,-300},{260,300}})), + experiment( + StopTime=2000, + Tolerance=1e-06), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Components/Validation/CoolerGroupCoolingTowerOpen.mos" + "Simulate and plot"), + Documentation(info=" +

                      +This model validates the cooler group model + +Buildings.Templates.Plants.Chillers.Components.CoolerGroups.CoolingTowerOpen +with open-loop controls. +

                      +

                      +Two model configurations are tested: one with inlet and outlet +isolation valves, the other without any isolation valves. +

                      +")); +end CoolerGroupCoolingTowerOpen; diff --git a/Buildings/Templates/Plants/Chillers/Components/Validation/Economizers.mo b/Buildings/Templates/Plants/Chillers/Components/Validation/Economizers.mo new file mode 100644 index 00000000000..340d2346cf1 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Validation/Economizers.mo @@ -0,0 +1,245 @@ +within Buildings.Templates.Plants.Chillers.Components.Validation; +model Economizers "Validation model for waterside economizers" + 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 Modelica.Units.SI.MassFlowRate mChiWatEco_flow_nominal= + capEco_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/ + (TChiWatEcoEnt_nominal - TChiWatEcoLvg_nominal) + "WSE CHW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mConWatEco_flow_nominal= + mChiWatEco_flow_nominal + "WSE CHW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpChiWatEco_nominal= + Buildings.Templates.Data.Defaults.dpChiWatEco + "WSE CHW pressure drop" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpConWatEco_nominal= + Buildings.Templates.Data.Defaults.dpConWatEco + "WSE CW pressure drop" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.HeatFlowRate capEco_nominal( + final min=0)=1e6 + "WSE cooling capacity (>0)" + annotation (Dialog(group="Nominal condition")); + + parameter Modelica.Units.SI.Temperature TChiWatEcoEnt_nominal= + Buildings.Templates.Data.Defaults.TChiWatEcoEnt + "WSE entering CHW temperature"; + parameter Modelica.Units.SI.Temperature TChiWatEcoLvg_nominal= + Buildings.Templates.Data.Defaults.TChiWatEcoLvg + "WSE leaving CHW temperature"; + parameter Modelica.Units.SI.Temperature TConWatEcoEnt_nominal= + Buildings.Templates.Data.Defaults.TConWatEcoEnt + "WSE entering CW temperature"; + + parameter Modelica.Units.SI.Time tau=10 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + 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")); + + parameter Buildings.Templates.Plants.Chillers.Components.Data.Economizer datEcoVal( + final typ=Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithValve, + final mChiWat_flow_nominal=mChiWatEco_flow_nominal, + final mConWat_flow_nominal=mConWatEco_flow_nominal, + final cap_nominal=capEco_nominal, + final TChiWatEnt_nominal=TChiWatEcoEnt_nominal, + final TConWatEnt_nominal=TConWatEcoEnt_nominal, + final dpChiWat_nominal=dpChiWatEco_nominal, + final dpConWat_nominal=dpConWatEco_nominal) + "Parameters for WSE with valve"; + parameter Buildings.Templates.Plants.Chillers.Components.Data.Economizer datEcoPum( + final typ=Buildings.Templates.Plants.Chillers.Types.Economizer.HeatExchangerWithPump, + final mChiWat_flow_nominal=mChiWatEco_flow_nominal, + final mConWat_flow_nominal=mConWatEco_flow_nominal, + final cap_nominal=capEco_nominal, + final TChiWatEnt_nominal=TChiWatEcoEnt_nominal, + final TConWatEnt_nominal=TConWatEcoEnt_nominal, + final dpChiWat_nominal=dpChiWatEco_nominal, + final dpConWat_nominal=dpConWatEco_nominal) + "Parameters for WSE with pump"; + + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable yValChiWatEcoByp(table=[0, + 1; 1,1; 1.5,0; 2,0], timeScale=1000) + "WSE CHW bypass valve opening signal" + annotation (Placement(transformation(extent={{-130,-10},{-110,10}}))); + Fluid.Sources.Boundary_pT bouChiWatSup(redeclare final package Medium = + MediumChiWat, final nPorts=2) "CHW supply boundary condition" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={80,-90}))); + .Buildings.Templates.Plants.Chillers.Components.Economizers.HeatExchangerWithValve + ecoVal( + redeclare final package MediumChiWat = MediumChiWat, + redeclare final package MediumConWat = MediumConWat, + final dat=datEcoVal, + hex(show_T=true), + final energyDynamics=energyDynamics, + final tau=tau) + "WSE with CHW bypass valve" + annotation (Placement(transformation(extent={{-10,10},{10,30}}))); + Fluid.Sources.Boundary_pT bouConWatRet( + redeclare final package Medium=MediumConWat, + final nPorts=2) + "CW return boundary condition" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-80,50}))); + Fluid.Sources.Boundary_pT bouConWatSup( + redeclare final package Medium = MediumChiWat, + p=bouConWatRet.p + dpConWatEco_nominal, + T=TConWatEcoEnt_nominal, + final nPorts=2) "CW supply boundary condition" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={80,50}))); + Buildings.Templates.Components.Interfaces.Bus busValChiWatEcoByp + "WSE CHW bypass valve control bus" + annotation (Placement(transformation(extent={{-20,80},{20,120}}), + iconTransformation(extent={{-316,184},{-276, + 224}}))); + .Buildings.Templates.Plants.Chillers.Interfaces.Bus busPla + "Plant control bus" annotation (Placement(transformation(extent={{-20,40},{ + 20,80}}), iconTransformation(extent={{-432,12},{-412,32}}))); + .Buildings.Templates.Plants.Chillers.Components.Economizers.HeatExchangerWithPump + ecoPum( + redeclare final package MediumChiWat = MediumChiWat, + redeclare final package MediumConWat = MediumConWat, + final dat=datEcoPum, + hex(show_T=true), + final energyDynamics=energyDynamics, + final tau=tau) "WSE with HX pump" + annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); + Buildings.Templates.Components.Interfaces.Bus busPumChiWatEco + "WSE CHW pump control bus" annotation (Placement(transformation(extent={{-20,-40}, + {20,0}}), iconTransformation(extent={{-316,184},{-276,224}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1PumChiWatEco( + table=[0,0; 1,0; 1,1; 2,1], + timeScale=1000, + period=2000) "WSE CHW pump Start/Stop signal" + annotation (Placement(transformation(extent={{-130,30},{-110,50}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable yPumChiWatEco(table=[0, + 0; 1,0; 1.5,1; 2,1], timeScale=1000) "WSE CHW pump speed signal" + annotation (Placement(transformation(extent={{-130,70},{-110,90}}))); + .Buildings.Templates.Plants.Chillers.Interfaces.Bus busPla1 + "Plant control bus" annotation (Placement(transformation(extent={{-20,-80}, + {20,-40}}), iconTransformation(extent={{-432,12},{-412,32}}))); + Buildings.Templates.Components.Interfaces.Bus busValConWatEcoIso + "WSE CW isolation valve control bus" annotation (Placement(transformation( + extent={{20,60},{60,100}}), iconTransformation(extent={{-316,184},{-276, + 224}}))); + Buildings.Templates.Components.Interfaces.Bus busValConWatEcoIso1 + "WSE CW isolation valve control bus" annotation (Placement(transformation( + extent={{20,-60},{60,-20}}), iconTransformation(extent={{-316,184},{-276, + 224}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1ValConWatEcoIso( + table=[0,0; 1,0; 1,1; 2,1], + timeScale=1000, + period=2000) "WSE CW isolation valve opening signal" + annotation (Placement(transformation(extent={{-130,110},{-110,130}}))); + Fluid.Sources.MassFlowSource_T bouChiWatRet1( + redeclare final package Medium = MediumChiWat, + m_flow=mChiWatEco_flow_nominal, + T=TChiWatEcoEnt_nominal, + final nPorts=1) "CHW return boundary condition" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-80,-98}))); + Fluid.Sources.MassFlowSource_T bouChiWatRet( + redeclare final package Medium = MediumChiWat, + m_flow=mChiWatEco_flow_nominal, + T=TChiWatEcoEnt_nominal, + final nPorts=1) "CHW return boundary condition" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-80,0}))); +equation + connect(ecoVal.port_b, bouChiWatSup.ports[1]) + annotation (Line(points={{2.5,20},{79,20},{79,-80}}, color={0,127,255})); + connect(bouConWatSup.ports[1], ecoVal.port_aConWat) + annotation (Line(points={{79,40},{79,28},{-10,28}}, color={0,127,255})); + connect(ecoVal.port_bConWat, bouConWatRet.ports[1]) annotation (Line(points={{-10,12}, + {-81,12},{-81,40}}, color={0,127,255})); + connect(busPla, ecoVal.bus) annotation (Line( + points={{0,60},{0,30}}, + color={255,204,51}, + thickness=0.5)); + connect(yValChiWatEcoByp.y[1], busValChiWatEcoByp.y) + annotation (Line(points={{-108,0},{-100,0},{-100,76},{0,76},{0,100}}, + color={0,0,127})); + connect(bouConWatSup.ports[2], ecoPum.port_aConWat) annotation (Line(points={{81,40}, + {60,40},{60,-72},{-10,-72}}, color={0,127,255})); + connect(ecoPum.port_bConWat, bouConWatRet.ports[2]) annotation (Line(points={{-10,-88}, + {-60,-88},{-60,40},{-79,40}}, color={0,127, + 255})); + connect(y1PumChiWatEco.y[1], busPumChiWatEco.y1) annotation (Line(points={{-108,40}, + {-50,40},{-50,-20},{0,-20}}, color={255,0,255})); + connect(yPumChiWatEco.y[1], busPumChiWatEco.y) annotation (Line(points={{-108,80}, + {-40,80},{-40,-36},{0,-36},{0,-20}}, color={0,0,127})); + connect(busPumChiWatEco, busPla1.pumChiWatEco) annotation (Line( + points={{0,-20},{0,-60}}, + color={255,204,51}, + thickness=0.5)); + connect(busPla1, ecoPum.bus) annotation (Line( + points={{0,-60},{0,-70}}, + color={255,204,51}, + thickness=0.5)); + connect(busValConWatEcoIso, busPla.valConWatEcoIso) annotation (Line( + points={{40,80},{40,60},{0,60}}, + color={255,204,51}, + thickness=0.5)); + connect(busValConWatEcoIso1, busPla1.valConWatEcoIso) annotation (Line( + points={{40,-40},{40,-60},{0,-60}}, + color={255,204,51}, + thickness=0.5)); + connect(busValChiWatEcoByp, busPla.valChiWatEcoByp) annotation (Line( + points={{0,100},{0,60}}, + color={255,204,51}, + thickness=0.5)); + connect(y1ValConWatEcoIso.y[1], busValConWatEcoIso.y1) annotation (Line( + points={{-108,120},{100,120},{100,80},{40,80}}, color={255,0,255})); + connect(y1ValConWatEcoIso.y[1], busValConWatEcoIso1.y1) annotation (Line( + points={{-108,120},{100,120},{100,-40},{40,-40}}, + color={255,0,255})); + connect(ecoPum.port_b, bouChiWatSup.ports[2]) + annotation (Line(points={{2.5,-80},{81,-80}}, + color={0,127,255})); + connect(bouChiWatRet1.ports[1], ecoPum.port_a) annotation (Line(points={{-80,-88}, + {-80,-80},{-2.5,-80}}, color={0,127,255})); + connect(bouChiWatRet.ports[1], ecoVal.port_a) + annotation (Line(points={{-80,10},{-80,20},{-2.5,20}},color={0,127,255})); + annotation ( + experiment( + StopTime=2000, + Tolerance=1e-06), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Templates/ChilledWaterPlants/Components/Validation/Economizer.mos" + "Simulate and plot"), + Diagram(coordinateSystem(extent={{-140,-140},{120,140}})), + Documentation(info=" +

                      +This model validates the waterside economizer models + +Buildings.Templates.Plants.Chillers.Components.Economizers.HeatExchangerWithPump +and + +Buildings.Templates.Plants.Chillers.Components.Economizers.HeatExchangerWithValve +using open-loop controls. +

                      +")); +end Economizers; diff --git a/Buildings/Templates/Plants/Chillers/Components/Validation/StagingMatrixComputation.mo b/Buildings/Templates/Plants/Chillers/Components/Validation/StagingMatrixComputation.mo new file mode 100644 index 00000000000..98b9b22e5a6 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Validation/StagingMatrixComputation.mo @@ -0,0 +1,77 @@ +within Buildings.Templates.Plants.Chillers.Components.Validation; +model StagingMatrixComputation + "Validation of the algorithm used to compute the chiller staging matrix" + extends Modelica.Icons.Example; + + parameter Integer nChi=2; + parameter Boolean have_eco=true; + + final parameter Integer staMat[nStaChiOnl, nChi]( + each fixed=false) + "Staging matrix with chiller stage as row index and chiller as column index" + annotation (Dialog(tab="General", group="Staging configuration")); + final parameter Integer nStaChiOnl= + if not have_eco then nSta-1 + else sum({if sta[i, nUniSta]>0 then 0 else 1 for i in 1:nSta}) - 1 + "Number of chiller stages, neither zero stage nor the stages with enabled waterside economizer is included" + annotation (Evaluate=true, Dialog(tab="General", group="Staging configuration")); + final parameter Real desChiNum[nStaChiOnl+1]= + {if i==0 then 0 else sum(staMat[i]) for i in 0:nStaChiOnl} + "Design number of chiller that should be ON at each chiller stage, including the zero stage" + annotation (Dialog(tab="General", group="Staging configuration")); + final parameter Real staTmp[nSta, nUniSta]={ + {if sta[i, j]>0 then (if j<=nChi then sta[i, j] else 0.5) else 0 for j in 1:nUniSta} for i in 1:nSta} + "Intermediary parameter to compute staVec" + annotation (Evaluate=true, Dialog(tab="General", group="Staging configuration")); + final parameter Real staVec[nSta]={sum(staTmp[i]) for i in 1:nSta} + "Plant stage vector, element value like x.5 means chiller stage x plus WSE"; + + parameter Real sta[:, nUniSta]={ + {0, 0, 0}, + {0, 0, 1}, + {1, 0, 0}, + {1, 0, 1}, + {1, 1, 0}, + {1, 1, 1}} + "Staging matrix with plant stage as row index and chiller as column index (nChi+1 for WSE)" + annotation (Evaluate=true, Dialog(group="Configuration")); + final parameter Integer nUniSta= + if have_eco then nChi+1 + else nChi + "Number of units to stage, including chillers and optional WSE" + annotation (Evaluate=true, Dialog(group="Configuration")); + final parameter Integer nSta=size(sta, 1) + "Number of plant stages" + annotation (Evaluate=true, Dialog(group="Configuration")); +protected + Integer idx; +initial algorithm + idx := 1; + if have_eco then + for i in 2:nSta loop + if sta[i, nUniSta]<1 then + staMat[idx] := {if sta[i,j]>0 then 1 else 0 for j in 1:nChi}; + idx := idx + 1; + end if; + end for; + else + staMat := {{if sta[k+1,j]>0 then 1 else 0 for j in 1:nChi} for k in 1:nStaChiOnl}; + end if; +equation +/* +The when clause makes the variable discrete, and when the algorithm is executed, +it is initialized with its pre value. +*/ +algorithm + when sample(0, 3E7) then + idx := 0; + end when; + annotation (Documentation(info=" +

                      +This model validates the algorithm used to compute the so-called +staging matrix within the plant controller + +Buildings.Templates.Plants.Chillers.Components.Controls.G36. +

                      +")); +end StagingMatrixComputation; diff --git a/Buildings/Templates/Plants/Chillers/Components/Validation/package.mo b/Buildings/Templates/Plants/Chillers/Components/Validation/package.mo new file mode 100644 index 00000000000..380bd960527 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Validation/package.mo @@ -0,0 +1,12 @@ +within Buildings.Templates.Plants.Chillers.Components; +package Validation "Package with validation models" + extends Modelica.Icons.ExamplesPackage; + +annotation (Documentation(info=" +

                      +This package contains models validating the models within + +Buildings.Templates.Plants.Chillers.Components. +

                      +")); +end Validation; diff --git a/Buildings/Templates/Plants/Chillers/Components/Validation/package.order b/Buildings/Templates/Plants/Chillers/Components/Validation/package.order new file mode 100644 index 00000000000..934fcf61c95 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/Validation/package.order @@ -0,0 +1,8 @@ +ChillerGroupAirCooled +ChillerGroupWaterCooled +ChillersToPrimaryPumpsParallel +ChillersToPrimaryPumpsSeries +CoolerGroupCoolingTowerOpen +Economizers +StagingMatrixComputation +Configuration diff --git a/Buildings/Templates/Plants/Chillers/Components/package.mo b/Buildings/Templates/Plants/Chillers/Components/package.mo new file mode 100644 index 00000000000..8d8b3578d42 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/package.mo @@ -0,0 +1,13 @@ +within Buildings.Templates.Plants.Chillers; +package Components "Package with component models" + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +

                      +This package contains component models that are used in the templates +within + +Buildings.Templates.Plants.Chillers. +

                      +")); +end Components; diff --git a/Buildings/Templates/Plants/Chillers/Components/package.order b/Buildings/Templates/Plants/Chillers/Components/package.order new file mode 100644 index 00000000000..9c4b882a702 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Components/package.order @@ -0,0 +1,8 @@ +ChillerGroups +Controls +CoolerGroups +Economizers +Routing +Data +Validation +Interfaces diff --git a/Buildings/Templates/Plants/Chillers/Configuration/ChillerPlant.mo b/Buildings/Templates/Plants/Chillers/Configuration/ChillerPlant.mo new file mode 100644 index 00000000000..7a90911d28c --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Configuration/ChillerPlant.mo @@ -0,0 +1,133 @@ +within Buildings.Templates.Plants.Chillers.Configuration; +record ChillerPlant "Configuration parameters for chiller plant" + extends Modelica.Icons.Record; + // Chillers + parameter Buildings.Templates.Components.Types.Chiller typChi + "Type of chiller" + annotation (Evaluate=true); + parameter Integer nChi + "Number of chillers" + annotation (Evaluate=true); + parameter Buildings.Templates.Plants.Chillers.Types.ChillerArrangement typArrChi + "Type of chiller arrangement" + annotation (Evaluate=true); + parameter Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl typCtlHea + "Type of head pressure control" + annotation (Evaluate=true); + parameter Buildings.Templates.Components.Types.Valve typValChiWatChiIso + "Type of chiller CHW isolation valve" + annotation (Evaluate=true); + parameter Buildings.Templates.Components.Types.Valve typValConWatChiIso + "Type of chiller CW isolation valve" + annotation (Evaluate=true); + parameter Boolean have_valChiWatChiBypPar + "Set to true for chiller CHW bypass valve - Parallel chillers with WSE and primary-only distribution" + annotation (Evaluate=true); + // Controls + parameter Buildings.Templates.Plants.Chillers.Types.Controller typCtl + "Type of controller" + annotation (Evaluate=true); + // Loads + parameter Integer nAirHan + "Number of air handling units served by the plant" + annotation (Evaluate=true); + parameter Integer nEquZon + "Number of terminal units (zone equipment) served by the plant" + annotation (Evaluate=true); + // Default fluid properties + parameter Modelica.Units.SI.Density rhoChiWat_default + "CHW default density" + annotation (Evaluate=true); + parameter Modelica.Units.SI.SpecificHeatCapacity cpChiWat_default + "CHW default specific heat capacity" + annotation (Evaluate=true); + parameter Modelica.Units.SI.Density rhoCon_default + "Condenser cooling fluid (OA or CW) default density" + annotation (Evaluate=true); + parameter Modelica.Units.SI.SpecificHeatCapacity cpCon_default + "Condenser cooling fluid (OA or CW) default specific heat capacity" + annotation (Evaluate=true); + // CHW loop + parameter Buildings.Templates.Plants.Chillers.Types.Distribution typDisChiWat + "Type of CHW distribution system" + annotation (Evaluate=true); + parameter Buildings.Templates.Components.Types.PumpArrangement typArrPumChiWatPri + "Type of primary CHW pump arrangement" + annotation (Evaluate=true); + parameter Boolean have_pumChiWatPriVar + "Set to true for variable speed primary CHW pumps" + annotation (Evaluate=true); + parameter Boolean have_pumChiWatPriVarCom + "Set to true for single common speed signal for primary CHW pumps, false for dedicated signals" + annotation (Evaluate=true); + parameter Integer nPumChiWatPri + "Number of primary CHW pumps" + annotation (Evaluate=true); + parameter Boolean have_pumChiWatSec + "Set to true if the plant includes secondary CHW pumps" + annotation (Evaluate=true); + parameter Integer nPumChiWatSec + "Number of secondary CHW pumps" + annotation (Evaluate=true); + parameter Integer nSenDpChiWatRem + "Number of remote CHW differential pressure sensors used for CHW pump speed control" + annotation (Evaluate=true); + parameter Buildings.Templates.Plants.Chillers.Types.PrimaryOverflowMeasurement typMeaCtlChiWatPri + "Type of sensors for primary CHW pump control in variable primary-variable secondary plants" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_senDpChiWatRemWir + "Set to true for remote CHW differential pressure sensor(s) hardwired to plant or pump controller" + annotation (Evaluate=true); + parameter Integer nLooChiWatSec=1 + "Number of secondary CHW loops" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_senVChiWatSec + "Set to true if secondary loop is equipped with a flow meter" + annotation (Evaluate=true, Dialog(group="Configuration")); + // WSE + parameter Buildings.Templates.Plants.Chillers.Types.Economizer typEco + "Type of WSE" + annotation (Evaluate=true); + // CW pumps + parameter Integer nPumConWat + "Number of CW pumps" + annotation (Evaluate=true); + parameter Buildings.Templates.Components.Types.PumpArrangement typArrPumConWat + "Type of CW pump arrangement" + annotation (Evaluate=true); + parameter Boolean have_pumConWatVar + "Set to true for variable speed CW pumps, false for constant speed pumps" + annotation (Evaluate=true); + parameter Boolean have_pumConWatVarCom + "Set to true for single common speed signal for CW pumps, false for dedicated signals" + annotation (Evaluate=true); + // Coolers + parameter Buildings.Templates.Components.Types.Cooler typCoo + "Condenser water cooling equipment" + annotation(Evaluate=true); + parameter Integer nCoo + "Number of cooler units" + annotation (Evaluate=true); + parameter Boolean have_senLevCoo + "Set to true if cooling towers have level sensor for makeup water control" + annotation (Evaluate=true); + parameter Buildings.Templates.Components.Types.Valve typValCooInlIso + "Cooler inlet isolation valve" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Valve typValCooOutIso + "Cooler outlet isolation valve" + annotation (Evaluate=true, Dialog(group="Configuration")); + + annotation ( + defaultComponentPrefixes="parameter", + defaultComponentName="cfg", + Documentation( + info=" +

                      +This record provides the set of configuration parameters for +the heat pump plant models within + +Buildings.Templates.Plants.HeatPumps. +

                      +")); +end ChillerPlant; diff --git a/Buildings/Templates/Plants/Chillers/Configuration/package.mo b/Buildings/Templates/Plants/Chillers/Configuration/package.mo new file mode 100644 index 00000000000..af7c5d3e85e --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Configuration/package.mo @@ -0,0 +1,9 @@ +within Buildings.Templates.Plants.Chillers; +package Configuration "Records for configuration parameters" + extends Modelica.Icons.MaterialPropertiesPackage; + annotation (Documentation(info=" +

                      +This package provides records for configuration parameters. +

                      +")); +end Configuration; diff --git a/Buildings/Templates/Plants/Chillers/Configuration/package.order b/Buildings/Templates/Plants/Chillers/Configuration/package.order new file mode 100644 index 00000000000..14d2951a766 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Configuration/package.order @@ -0,0 +1 @@ +ChillerPlant diff --git a/Buildings/Templates/Plants/Chillers/Data/ChillerPlant.mo b/Buildings/Templates/Plants/Chillers/Data/ChillerPlant.mo new file mode 100644 index 00000000000..8bd644cba4f --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Data/ChillerPlant.mo @@ -0,0 +1,108 @@ +within Buildings.Templates.Plants.Chillers.Data; +record ChillerPlant "Record for chiller plant" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.Plants.Chillers.Configuration.ChillerPlant cfg + "Configuration parameters" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Buildings.Templates.Plants.Chillers.Components.Data.Controller ctl( + final cfg=cfg) + "Controller" + annotation(Dialog(group="Controls")); + + parameter Buildings.Templates.Plants.Chillers.Components.Data.ChillerGroup + chi( + final nChi=cfg.nChi, + final typ=cfg.typChi, + final cpChiWat_default=cfg.cpChiWat_default, + final cpCon_default=cfg.cpCon_default, + mChiWatChi_flow_nominal=ctl.VChiWatChi_flow_nominal*cfg.rhoChiWat_default, + mConWatChi_flow_nominal=ctl.VConWatChi_flow_nominal*cfg.rhoCon_default, + capChi_nominal=ctl.capChi_nominal, + TChiWatSupChi_nominal=ctl.TChiWatChiSup_nominal, + TChiWatSupChi_max=fill(ctl.TChiWatSup_max, cfg.nChi), + TConWatEntChi_nominal=ctl.TConWatSupChi_nominal, + PLRUnlChi_min=ctl.capUnlChi_min ./ ctl.capChi_nominal) + "Chiller group" + annotation (Dialog(group="Chillers")); + + parameter Buildings.Templates.Components.Data.PumpMultiple pumChiWatPri( + final nPum=cfg.nPumChiWatPri, + final rho_default=cfg.rhoChiWat_default, + final typ=Buildings.Templates.Components.Types.Pump.Multiple, + m_flow_nominal=chi.mChiWatChi_flow_nominal) + "Primary CHW pumps" + annotation(Dialog(group="Primary CHW loop")); + parameter Buildings.Templates.Components.Data.Valve valChiWatMinByp( + final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating, + m_flow_nominal=max(ctl.VChiWatChi_flow_min) * cfg.rhoChiWat_default, + dpValve_nominal=max(chi.dpChiWatChi_nominal) * max(ctl.VChiWatChi_flow_min ./ ctl.VChiWatChi_flow_nominal)^2) + "CHW minimum flow bypass valve" + annotation(Dialog(group="Primary CHW loop", + enable=cfg.typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only)); + + parameter Buildings.Templates.Components.Data.PumpMultiple pumChiWatSec( + final nPum=cfg.nPumChiWatSec, + final rho_default=cfg.rhoChiWat_default, + final typ=if cfg.have_pumChiWatSec + then Buildings.Templates.Components.Types.Pump.Multiple + else Buildings.Templates.Components.Types.Pump.None, + m_flow_nominal=if cfg.have_pumChiWatSec then + fill(ctl.VChiWatSec_flow_nominal[1] * cfg.rhoChiWat_default / cfg.nPumChiWatSec, cfg.nPumChiWatSec) + else fill(0, cfg.nPumChiWatSec)) + "Secondary CHW pumps" + annotation(Dialog(group="Secondary CHW loop", + enable=cfg.have_pumChiWatSec)); + + parameter Buildings.Templates.Plants.Chillers.Components.Data.CoolerGroup coo( + final nCoo=cfg.nCoo, + final typCoo=cfg.typCoo, + mConWatCoo_flow_nominal=fill(sum(ctl.VConWatChi_flow_nominal) * cfg.rhoCon_default / cfg.nCoo, cfg.nCoo), + TWetBulEnt_nominal=ctl.TWetBulCooEnt_nominal, + TConWatRet_nominal=max(ctl.TConWatRetChi_nominal), + TConWatSup_nominal=min(ctl.TConWatSupChi_nominal)) + "Cooler group" + annotation(Dialog(group="CW loop", + enable=cfg.typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled)); + parameter Buildings.Templates.Components.Data.PumpMultiple pumConWat( + final nPum=cfg.nPumConWat, + final rho_default=cfg.rhoCon_default, + final typ=if cfg.typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled + then Buildings.Templates.Components.Types.Pump.Multiple + else Buildings.Templates.Components.Types.Pump.None, + m_flow_nominal=fill(sum(coo.mConWatCoo_flow_nominal) / cfg.nPumConWat, cfg.nPumConWat)) + "CW pumps" + annotation(Dialog(group="CW loop", + enable=cfg.typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled)); + + parameter Buildings.Templates.Plants.Chillers.Components.Data.Economizer eco( + final typ=cfg.typEco, + final rhoChiWat_default=cfg.rhoChiWat_default, + mChiWat_flow_nominal=ctl.VChiWatEco_flow_nominal * cfg.rhoChiWat_default, + mConWat_flow_nominal=ctl.VConWatEco_flow_nominal * cfg.rhoCon_default, + dpChiWat_nominal=ctl.dpChiWatEco_nominal) + "Waterside economizer" + annotation(Dialog(group="Waterside economizer", + enable=cfg.typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + + annotation (Documentation(info=" +

                      +This record provides the set of sizing and operating parameters for +CHW plant models that can be found within + +Buildings.Templates.Plants.Chillers. +

                      +

                      +Most of the parameters should be assigned through the sub-record +dedicated to the controller. +All parameters that are also needed to parameterize other plant +components are propagated from the controller sub-record +to the corresponding equipment sub-records. +Note that those parameter bindings are not final so they may be +overwritten in case a component is parameterized at nominal +conditions that differ from the design conditions specified +in the controller sub-record. +

                      +")); +end ChillerPlant; diff --git a/Buildings/Templates/Plants/Chillers/Data/package.mo b/Buildings/Templates/Plants/Chillers/Data/package.mo new file mode 100644 index 00000000000..e5e21918f85 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Data/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.Plants.Chillers; +package Data "Records for design and operating parameters" +extends Modelica.Icons.MaterialPropertiesPackage; + +annotation (Documentation(info=" +

                      +This package provides records for design and operating parameters. +

                      +")); +end Data; diff --git a/Buildings/Templates/Plants/Chillers/Data/package.order b/Buildings/Templates/Plants/Chillers/Data/package.order new file mode 100644 index 00000000000..14d2951a766 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Data/package.order @@ -0,0 +1 @@ +ChillerPlant diff --git a/Buildings/Templates/Plants/Chillers/Interfaces/Bus.mo b/Buildings/Templates/Plants/Chillers/Interfaces/Bus.mo new file mode 100644 index 00000000000..86419e2d53b --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Interfaces/Bus.mo @@ -0,0 +1,17 @@ +within Buildings.Templates.Plants.Chillers.Interfaces; +expandable connector Bus "Control bus for chilled water plant" + extends Modelica.Icons.SignalBus; + + annotation ( + defaultComponentName="bus", + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100, + -100},{100,100}}), graphics={Rectangle( + extent={{-20,2},{22,-2}}, + lineColor={255,204,51}, + lineThickness=0.5)}), Documentation(info=" +

                      +This expandable connector provides a standard interface for +all control signals required by a chiller plant controller. +

                      +")); +end Bus; diff --git a/Buildings/Templates/Plants/Chillers/Interfaces/PartialChilledWaterLoop.mo b/Buildings/Templates/Plants/Chillers/Interfaces/PartialChilledWaterLoop.mo new file mode 100644 index 00000000000..7bca65d6830 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Interfaces/PartialChilledWaterLoop.mo @@ -0,0 +1,539 @@ +within Buildings.Templates.Plants.Chillers.Interfaces; +partial model PartialChilledWaterLoop + "Partial chilled water plant with chiller group and CHW pumps" + extends Buildings.Templates.Plants.Chillers.Interfaces.PartialChillerPlant( + final typValChiWatChiIso=chi.typValChiWatChiIso, + final typValConWatChiIso=chi.typValConWatChiIso, + final typEco=eco.typ, + final typCtl=ctl.typ, + cfg( + final have_senDpChiWatRemWir=ctl.have_senDpChiWatRemWir, + final have_senVChiWatSec=ctl.have_senVChiWatSec, + final have_senLevCoo=ctl.have_senLevCoo, + final nSenDpChiWatRem=ctl.nSenDpChiWatRem, + final typCtlHea=ctl.typCtlHea, + final typMeaCtlChiWatPri=ctl.typMeaCtlChiWatPri, + final have_valChiWatChiBypPar=intChi.have_valChiWatChiBypPar)); + + replaceable + Buildings.Templates.Plants.Chillers.Components.ChillerGroups.Compression + chi(final linearized=linearized, final show_T=show_T) + constrainedby + Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialChillerGroup( + redeclare final package MediumChiWat = MediumChiWat, + redeclare final package MediumCon = MediumCon, + final nChi=nChi, + final typ=typChi, + final typArr=typArrChi, + final typArrPumChiWatPri=typArrPumChiWatPri, + final typArrPumConWat=typArrPumConWat, + final have_pumConWatVar=have_pumConWatVar, + final typCtlHea=ctl.typCtlHea, + final typDisChiWat=typDisChiWat, + final typMeaCtlChiWatPri=ctl.typMeaCtlChiWatPri, + final typEco=typEco, + final dat=dat.chi, + final tau=tau, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal) "Chillers" annotation (Dialog( + group="Chillers"), Placement(transformation(extent={{-40,-196},{40,4}}))); + + // Primary CHW loop + Plants.Chillers.Components.Routing.ChillersToPrimaryPumps intChi( + redeclare final package MediumChiWat = MediumChiWat, + final nChi=nChi, + final typValChiWatChiIso=chi.typValChiWatChiIso, + final nPumChiWatPri=nPumChiWatPri, + final have_senTChiWatPlaRet=ctl.have_senTChiWatPlaRet, + final have_senVChiWatPri=ctl.have_senVChiWatPri, + final locSenFloChiWatPri=ctl.locSenFloChiWatPri, + final typArrChi=typArrChi, + final typDisChiWat=typDisChiWat, + final typArrPumChiWatPri=typArrPumChiWatPri, + final typEco=typEco, + final mChiWatPri_flow_nominal=mChiWatPri_flow_nominal, + final tau=tau, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal) + "Hydronic interface between chillers (and optional WSE) and primary CHW pumps" + annotation (Placement(transformation(extent={{40,-264},{80,4}}))); + Buildings.Templates.Components.Pumps.Multiple pumChiWatPri( + redeclare final package Medium=MediumChiWat, + final nPum=nPumChiWatPri, + final have_var=have_pumChiWatPriVar, + final have_varCom=have_pumChiWatPriVarCom, + final dat=dat.pumChiWatPri, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + icon_dy=-360) + "Primary CHW pumps" + annotation ( + Placement(transformation(extent={{80,-10},{100,10}}))); + Buildings.Templates.Components.Routing.MultipleToSingle outPumChiWatPri( + redeclare final package Medium=MediumChiWat, + final nPorts=nPumChiWatPri, + final m_flow_nominal=mChiWatPri_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + icon_dy=-360, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + "Primary CHW pumps outlet manifold" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + Buildings.Templates.Components.Actuators.Valve valChiWatMinByp( + redeclare final package Medium=MediumChiWat, + final show_T=show_T, + final typ=if typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only + then Buildings.Templates.Components.Types.Valve.TwoWayModulating else + Buildings.Templates.Components.Types.Valve.None, + final dat=dat.valChiWatMinByp, + final allowFlowReversal=allowFlowReversal, + from_dp=true, + final linearized=linearized) + if typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only or + have_bypChiWatFix + "CHW minimum flow bypass valve or fixed CHW bypass (common leg)" + annotation ( + Placement(transformation(extent={{10,10},{-10,-10}}, + rotation=90, + origin={170,-100}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VChiWatPri_flow( + redeclare final package Medium = MediumChiWat, + final m_flow_nominal=mChiWatPri_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final have_sen=ctl.have_senVChiWatPri and + ctl.locSenFloChiWatPri==Buildings.Templates.Plants.Chillers.Types.SensorLocation.Supply, + final text_flip=false, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + "Primary CHW volume flow rate" + annotation ( + Placement(transformation(extent={{120,-10},{140,10}}))); + Buildings.Templates.Components.Routing.Junction junction( + redeclare final package Medium=MediumChiWat, + final tau=tau, + final m_flow_nominal=mChiWatPri_flow_nominal*{1,-1,-1}, + final energyDynamics=energyDynamics, + dp_nominal=fill(0, 3), + 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 at minimum flow bypass or common leg" + annotation ( + Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={170,0}))); + Buildings.Templates.Components.Sensors.Temperature TChiWatPriSup( + redeclare final package Medium = MediumChiWat, + final have_sen=ctl.have_senTChiWatPriSup, + final m_flow_nominal=mChiWat_flow_nominal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + "Primary CHW supply temperature" + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={150,0}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VChiWatByp_flow( + redeclare final package Medium = MediumChiWat, + final m_flow_nominal=mChiWat_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final have_sen= + (typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 + or typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed) and + ctl.typMeaCtlChiWatPri==Buildings.Templates.Plants.Chillers.Types.PrimaryOverflowMeasurement.FlowDecoupler, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + "Decoupler CHW volume flow rate" + annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=90, + origin={170,-150}))); + + // CW loop + Buildings.Templates.Components.Routing.MultipleToMultiple inlConChi( + redeclare final package Medium = MediumCon, + final nPorts_a=if typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled + then nPumConWat else nChi, + final nPorts_b=nChi, + final m_flow_nominal=mCon_flow_nominal, + final have_comLeg=typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled + and typArrPumConWat==Buildings.Templates.Components.Types.PumpArrangement.Headered, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + icon_xout=200, + icon_offset=(6-nChi)*inlConChi.icon_dy, + icon_dy=360, + icon_pipe=if typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled then + Buildings.Templates.Components.Types.IntegrationPoint.Supply else + Buildings.Templates.Components.Types.IntegrationPoint.None) + "Chiller group condenser fluid inlet" + annotation (Placement(transformation(extent={{-70,-202},{-50,-182}}))); + Buildings.Templates.Components.Routing.MultipleToSingle outConChi( + redeclare final package Medium = MediumCon, + final nPorts=if typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled + and typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None + then nChi + 1 else nChi, + final m_flow_nominal=mCon_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + icon_dy=-360, + icon_pipe=if typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled then + Buildings.Templates.Components.Types.IntegrationPoint.Return else + Buildings.Templates.Components.Types.IntegrationPoint.None) + "Chiller group condenser fluid outlet" + annotation (Placement(transformation(extent={{-40,-10},{-60,10}}))); + + // Secondary CHW loop + Buildings.Templates.Components.Routing.SingleToMultiple inlPumChiWatSec( + redeclare final package Medium=MediumChiWat, + final nPorts=nPumChiWatSec, + final m_flow_nominal=mChiWat_flow_nominal, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + icon_dy=300, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + if have_pumChiWatSec + "Secondary CHW pumps inlet manifold" + annotation (Placement(transformation(extent={{180,-10},{200,10}}))); + Buildings.Templates.Components.Pumps.Multiple pumChiWatSec( + redeclare final package Medium=MediumChiWat, + final nPum=nPumChiWatSec, + final have_var=true, + final have_varCom=true, + final dat=dat.pumChiWatSec, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal) + if have_pumChiWatSec + "Secondary CHW pumps" + annotation (Placement(transformation(extent={{200,-10},{220,10}}))); + Buildings.Templates.Components.Routing.MultipleToSingle outPumChiWatSec( + redeclare final package Medium=MediumChiWat, + final nPorts=nPumChiWatSec, + final m_flow_nominal=mChiWat_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + icon_dy=300, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + if have_pumChiWatSec + "Secondary CHW pumps outlet manifold" + annotation (Placement(transformation(extent={{220,-10},{240,10}}))); + Buildings.Templates.Components.Routing.PassThroughFluid supChiWat( + redeclare final package Medium=MediumChiWat, + final allowFlowReversal=allowFlowReversal, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + if not have_pumChiWatSec + "CHW supply line - Without secondary CHW pumps" + annotation (Placement(transformation(extent={{200,-10},{220,10}}))); + Buildings.Templates.Components.Sensors.DifferentialPressure dpChiWatLoc( + redeclare final package Medium=MediumChiWat, + final allowFlowReversal=allowFlowReversal, + final text_rotation=-90) if not ctl.have_senDpChiWatRemWir + "Local CHW differential pressure sensor" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={280,-120}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VChiWatSecSup_flow( + redeclare final package Medium = MediumChiWat, + final m_flow_nominal=mChiWat_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final have_sen=ctl.have_senVChiWatSec and ctl.locSenFloChiWatSec == + Buildings.Templates.Plants.Chillers.Types.SensorLocation.Supply, + final text_flip=false, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + "Secondary CHW volume flow rate" + annotation (Placement(transformation(extent={{250,-10},{270,10}}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VChiWatSecRet_flow( + redeclare final package Medium = MediumChiWat, + final m_flow_nominal=mChiWat_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final have_sen=ctl.have_senVChiWatSec and ctl.locSenFloChiWatSec == + Buildings.Templates.Plants.Chillers.Types.SensorLocation.Return, + final text_flip=true, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Return) + "Secondary CHW volume flow rate" + annotation (Placement(transformation(extent={{250,-270},{230,-250}}))); + Buildings.Templates.Components.Sensors.Temperature TChiWatSecRet( + redeclare final package Medium = MediumChiWat, + final have_sen=ctl.have_senTChiWatSecRet, + final m_flow_nominal=mChiWat_flow_nominal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Return) + "Secondary CHW return temperature" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=0, + origin={200,-260}))); + + // WSE + replaceable Buildings.Templates.Plants.Chillers.Components.Economizers.None eco(final + show_T=show_T) + constrainedby + Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialEconomizer( + redeclare final package MediumChiWat=MediumChiWat, + redeclare final package MediumConWat=MediumCon, + final dat=dat.eco, + final allowFlowReversal=allowFlowReversal, + final energyDynamics=energyDynamics) + "Waterside economizer" + annotation ( + Dialog(group="Waterside economizer"), + choices( + choice(redeclare replaceable Buildings.Templates.Plants.Chillers.Components.Economizers.None eco + "No waterside economizer"), + choice(redeclare replaceable Buildings.Templates.Plants.Chillers.Components.Economizers.HeatExchangerWithPump eco + "Heat exchanger with pump for CHW flow control"), + choice(redeclare replaceable Buildings.Templates.Plants.Chillers.Components.Economizers.HeatExchangerWithValve eco + "Heat exchanger with bypass valve for CHW flow control")), + Placement(transformation(extent={{-40,-262},{40,-242}}))); + + // Controls + replaceable Buildings.Templates.Plants.Chillers.Components.Controls.OpenLoop ctl + constrainedby + Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialController( + final nAirHan=nAirHan, + final nEquZon=nEquZon, + final cfg=cfg, + final dat=dat.ctl) + "Plant controller" + annotation ( + Dialog(group="Controls"), + Placement(transformation(extent={{-10,190},{10,210}}))); + + // Miscellaneous + Buildings.Fluid.Sources.Outside out( + redeclare replaceable package Medium=Buildings.Media.Air, + nPorts=2) + "Outdoor air conditions" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,240}))); + Buildings.Fluid.Sensors.RelativeHumidity phiOut( + redeclare replaceable package Medium=Buildings.Media.Air, + final warnAboutOnePortConnection=false) + "OA relative humidity" + annotation (Placement(transformation(extent={{-50,230},{-30,250}}))); + Buildings.Fluid.Sensors.Temperature TOut( + redeclare replaceable package Medium=Buildings.Media.Air, + warnAboutOnePortConnection=false) + "OA temperature" + annotation (Placement(transformation(extent={{30,230},{50,250}}))); + Fluid.Sources.Boundary_pT bouChiWat( + redeclare final package Medium = MediumChiWat, + p=Buildings.Templates.Data.Defaults.pChiWat_rel_nominal + 101325, + nPorts=1) + "Pressure boundary condition mimicking expansion tank" annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={0,-220}))); +equation + /* Control point connection - start */ + connect(TOut.T, bus.TOut); + connect(phiOut.phi, bus.phiOut); + connect(bus, intChi.bus); + connect(bus, chi.bus); + connect(bus, eco.bus); + connect(bus.pumChiWatPri, pumChiWatPri.bus); + connect(bus.valChiWatMinByp, valChiWatMinByp.bus); + connect(bus.pumChiWatSec, pumChiWatSec.bus); + connect(dpChiWatLoc.y, bus.dpChiWatLoc); + connect(VChiWatPri_flow.y, bus.VChiWatPri_flow); + connect(VChiWatSecSup_flow.y, bus.VChiWatSec_flow); + connect(VChiWatSecRet_flow.y, bus.VChiWatSec_flow); + connect(TChiWatPriSup.y, bus.TChiWatPriSup); + connect(TChiWatSecRet.y, bus.TChiWatSecRet); + /* Control point connection - stop */ + connect(intChi.ports_bSup, pumChiWatPri.ports_a) + annotation (Line(points={{80,0},{80,0}}, color={0,127,255})); + connect(chi.ports_bCon, outConChi.ports_a[1:nChi]) + annotation (Line(points={{-40,0},{-40,0}}, color={0,127,255})); + connect(pumChiWatPri.ports_b, outPumChiWatPri.ports_a) + annotation (Line(points={{100,0},{100,0}}, color={0,127,255})); + connect(inlPumChiWatSec.ports_b, pumChiWatSec.ports_a) + annotation (Line(points={{200,0},{200,0}}, color={0,127,255})); + connect(pumChiWatSec.ports_b, outPumChiWatSec.ports_a) + annotation (Line(points={{220,0},{220,0}}, color={0,127,255})); + connect(intChi.ports_bRet[1:nChi], chi.ports_aChiWat) annotation (Line( + points={{40,-260},{40,-192}}, + color={0,127,255}, + visible=viewDiagramAll)); + connect(chi.ports_bChiWat, intChi.ports_aSup[1:nChi]) annotation (Line(points={{40,0},{ + 40,0}}, color={0,0,0}, + thickness=0.5)); + connect(intChi.ports_bRet[nChi + 1], eco.port_a) annotation (Line( + points={{40,-260},{40,-236},{-64,-236},{-64,-280},{-10,-280},{-10,-252}}, + color={0,127,255}, + visible=viewDiagramAll)); + connect(eco.port_b, intChi.ports_aSup[nChi + 1]) annotation (Line( + points={{10,-252},{40,-252},{40,0}}, + color={0,127,255}, + visible=viewDiagramAll)); + connect(inlConChi.ports_b, chi.ports_aCon) + annotation (Line( + points={{-50,-192},{-40,-192}}, + color={0,127,255}, + visible=viewDiagramAll)); + connect(inlConChi.port_aComLeg, eco.port_aConWat) + annotation (Line( + points={{-60,-192},{-60,-244},{-40,-244}}, + color={0,0,0}, + thickness=0.5, + visible=typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + connect(eco.port_bConWat, outConChi.ports_a[nChi + 1]) annotation (Line( + points={{-40,-260},{-50,-260},{-50,0},{-40,0}}, + color={0,0,0}, + thickness=0.5, + pattern=LinePattern.Dash, + visible=typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + connect(dpChiWatLoc.port_a, port_b) + annotation (Line( + points={{280,-110},{280,0},{300,0}}, + color={0,127,255}, + visible=viewDiagramAll)); + connect(dpChiWatLoc.port_b, port_a) annotation (Line( + points={{280,-130},{280,-260},{300,-260}}, + color={0,127,255}, + visible=viewDiagramAll)); + connect(outPumChiWatPri.port_b, VChiWatPri_flow.port_a) + annotation (Line(points={{120,0},{120,0}}, color={0,0,0}, + thickness=0.5)); + connect(junction.port_2, inlPumChiWatSec.port_a) + annotation (Line(points={{180,0},{180,0}}, color={0,127,255})); + connect(junction.port_3, valChiWatMinByp.port_a) annotation (Line( + points={{170,-10},{170,-90}}, + color={0,0,0}, + thickness=0.5)); + connect(junction.port_2, supChiWat.port_a) annotation (Line( + points={{180,0},{200,0}}, + color={0,0,0}, + thickness=0.5)); + connect(outPumChiWatSec.port_b, VChiWatSecSup_flow.port_a) + annotation (Line(points={{240,0},{250,0}}, color={0,127,255})); + connect(supChiWat.port_b, VChiWatSecSup_flow.port_a) annotation (Line(points={{220,0}, + {250,0}}, color={0,0,0}, thickness=0.5)); + connect(VChiWatSecSup_flow.port_b, port_b) + annotation (Line(points={{270,0},{300,0}}, color={0,0,0}, + thickness=0.5)); + connect(port_a, VChiWatSecRet_flow.port_a) + annotation (Line(points={{300,-260},{250,-260}}, color={0,0,0}, + thickness=0.5, + pattern=LinePattern.Dash)); + connect(VChiWatSecRet_flow.port_b, TChiWatSecRet.port_a) + annotation (Line(points={{230,-260},{210,-260}}, color={0,0,0}, + thickness=0.5, + pattern=LinePattern.Dash)); + connect(TChiWatSecRet.port_b, intChi.port_aRet) annotation (Line(points={{190, + -260},{80,-260}}, color={0,0,0}, + thickness=0.5, + pattern=LinePattern.Dash)); + connect(VChiWatPri_flow.port_b, TChiWatPriSup.port_a) + annotation (Line( + points={{140,0},{140,0}}, + color={0,0,0}, + thickness=0.5)); + connect(TChiWatPriSup.port_b, junction.port_1) annotation (Line( + points={{160,0},{160,0}}, + color={0,0,0}, + thickness=0.5)); + connect(VChiWatByp_flow.port_b, intChi.port_aByp) annotation (Line(points={{170, + -160},{170,-230},{40,-230}}, color={0,0,0}, + thickness=0.5)); + connect(valChiWatMinByp.port_b, VChiWatByp_flow.port_a) annotation (Line( + points={{170,-110},{170,-140}}, color={0,0,0}, + thickness=0.5)); + connect(busWea, out.weaBus) annotation (Line( + points={{0,280},{0,250},{0.2,250}}, + color={255,204,51}, + thickness=0.5)); + connect(out.ports[1], TOut.port) + annotation (Line(points={{-1,230},{40,230}}, color={0,127,255})); + connect(phiOut.port, out.ports[2]) + annotation (Line(points={{-40,230},{1,230}}, color={0,127,255})); + connect(bus, ctl.bus) annotation (Line( + points={{-300,200},{-10,200}}, + color={255,204,51}, + thickness=0.5)); + connect(ctl.busAirHan, busAirHan) annotation (Line( + points={{10,206},{280,206},{280,240},{300,240}}, + color={255,204,51}, + thickness=0.5)); + connect(ctl.busEquZon, busEquZon) annotation (Line( + points={{10,194},{280,194},{280,160},{300,160}}, + color={255,204,51}, + thickness=0.5)); + connect(bouChiWat.ports[1], intChi.port_aByp) + annotation (Line(points={{0,-230},{40,-230}}, color={0,127,255})); + annotation (Documentation(info=" +

                      +This serves as the base class to build chilled water plant +templates. +The model boundaries are the condenser inlet and outlet ports +on the CW side, and the supply and return ports on the CHW side. +The following components are included. +

                      + +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +"), +Diagram(graphics={Rectangle( + extent={{280,0},{281,-240}}, + lineColor={0,0,0}, + visible=not ctl.have_senDpChiWatRemWir)})); +end PartialChilledWaterLoop; diff --git a/Buildings/Templates/Plants/Chillers/Interfaces/PartialChillerPlant.mo b/Buildings/Templates/Plants/Chillers/Interfaces/PartialChillerPlant.mo new file mode 100644 index 00000000000..15f8df5ac0e --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Interfaces/PartialChillerPlant.mo @@ -0,0 +1,665 @@ +within Buildings.Templates.Plants.Chillers.Interfaces; +partial model PartialChillerPlant "Interface class for chiller plant" + replaceable package MediumChiWat=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CHW medium"; + replaceable package MediumCon=Modelica.Media.Interfaces.PartialMedium + constrainedby Modelica.Media.Interfaces.PartialMedium + "Medium model for condenser cooling fluid"; + + inner parameter Boolean viewDiagramAll=false + "Set to true to view all component icons and connection lines in diagram" + annotation (Dialog(tab="Graphics")); + + parameter Buildings.Templates.Components.Types.Chiller typChi + "Type of chiller" + annotation (Evaluate=true, Dialog(group="Chillers")); + parameter Integer nChi( + start=1, + final min=1) + "Number of chillers" + annotation (Evaluate=true, Dialog(group="Chillers")); + // The following parameter stores the user selection. + parameter Buildings.Templates.Plants.Chillers.Types.ChillerArrangement typArrChi_select( + start=Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel) + "Type of chiller arrangement" + annotation (Evaluate=true, Dialog(group="Chillers", enable=nChi>1)); + // The following parameter stores the actual configuration setting. + final parameter Buildings.Templates.Plants.Chillers.Types.ChillerArrangement typArrChi= + if nChi==1 then Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + else typArrChi_select + "Type of chiller arrangement" + annotation (Evaluate=true, Dialog(group="Chillers")); + + parameter Buildings.Templates.Plants.Chillers.Types.Distribution typDisChiWat + "Type of CHW distribution system" + annotation (Evaluate=true, Dialog(group="Primary CHW loop")); + + final parameter Boolean have_bypChiWatFix= + typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2 or + typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 or + typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed + "Set to true if the plant has a fixed CHW bypass" + annotation(Evaluate=true, Dialog(group="Primary CHW loop")); + final parameter Boolean have_pumChiWatSec= + typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2 or + typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 + "Set to true if the plant includes secondary CHW pumps" + annotation(Evaluate=true, Dialog(group="Secondary CHW loop")); + + parameter Integer nPumChiWatPri( + start=1, + final min=1)=nChi + "Number of primary CHW pumps" + annotation (Evaluate=true, Dialog(group="Primary CHW loop", + enable=typArrPumChiWatPri == Buildings.Templates.Components.Types.PumpArrangement.Headered)); + // The following parameter stores the user selection. + parameter Buildings.Templates.Components.Types.PumpArrangement + typArrPumChiWatPri_select(start=Buildings.Templates.Components.Types.PumpArrangement.Headered) + "Type of primary CHW pump arrangement" + annotation (Evaluate=true, Dialog(group="Primary CHW loop", + enable=typEco == Buildings.Templates.Plants.Chillers.Types.Economizer.None + and typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel)); + // The following parameter stores the actual configuration setting. + final parameter Buildings.Templates.Components.Types.PumpArrangement + typArrPumChiWatPri=if typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None + or typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Series + then Buildings.Templates.Components.Types.PumpArrangement.Headered else + typArrPumChiWatPri_select "Type of primary CHW pump arrangement" + annotation (Evaluate=true, Dialog(group="Primary CHW loop")); + // The following parameter stores the user selection. + // This parameter is only needed to specify variable speed pumps operated at a constant speed. + parameter Boolean have_pumChiWatPriVar_select=false + "Set to true for variable speed primary CHW pumps operated at one or more fixed speeds, false for constant speed pumps" + annotation (Evaluate=true, Dialog(group="Primary CHW loop", enable= + typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only + or typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2)); + // The following parameter stores the actual configuration setting. + final parameter Boolean have_pumChiWatPriVar= + if (typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only + or typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2) + then have_pumChiWatPriVar_select else true + "Set to true for variable speed primary CHW pumps, false for constant speed pumps" + annotation (Evaluate=true, Dialog(group="Primary CHW loop")); + final parameter Boolean have_pumChiWatPriVarCom=true + "Set to true for single common speed signal for primary CHW pumps, false for dedicated signals" + annotation (Evaluate=true, Dialog(group="Primary CHW loop")); + + parameter Integer nPumChiWatSec( + start=1, + final min=0)=if typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only + or typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only then 0 + else nChi + "Number of secondary CHW pumps" + annotation (Evaluate=true, Dialog(group="Secondary CHW loop", + enable=typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2 + or typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 + or typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed)); + parameter Integer nLooChiWatSec=1 + "Number of secondary CHW loops for distributed secondary distribution" + annotation (Evaluate=true, Dialog(group="Secondary CHW loop", + enable=typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed)); + + parameter Buildings.Templates.Components.Types.Cooler typCoo( + start=Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen) + "Condenser water cooling equipment" + annotation(Evaluate=true, Dialog(group="Coolers", + enable=typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled)); + parameter Integer nCoo( + start=if typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled + then 1 else 0, + final min=if typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled + then 1 else 0)=nChi + "Number of cooler units" + annotation (Evaluate=true, Dialog(group="Coolers", + enable=typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled)); + + parameter Integer nPumConWat( + start=if typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled + then 1 else 0, + final min=if typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled + then 1 else 0)=nChi + "Number of CW pumps" + annotation (Evaluate=true, Dialog(group="CW loop", + enable=typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled + and typArrPumConWat == Buildings.Templates.Components.Types.PumpArrangement.Headered)); + // The following parameter stores the user selection. + parameter Buildings.Templates.Components.Types.PumpArrangement + typArrPumConWat_select(start=Buildings.Templates.Components.Types.PumpArrangement.Headered) + "Type of CW pump arrangement" + annotation (Evaluate=true, Dialog(group="CW loop", + enable=typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled + and typEco == Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + // The following parameter stores the actual configuration setting. + final parameter Buildings.Templates.Components.Types.PumpArrangement + typArrPumConWat= + if typChi==Buildings.Templates.Components.Types.Chiller.AirCooled then + Buildings.Templates.Components.Types.PumpArrangement.Dedicated + elseif typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None + then Buildings.Templates.Components.Types.PumpArrangement.Headered else + typArrPumConWat_select + "Type of CW pump arrangement" + annotation (Evaluate=true, Dialog(group="CW loop")); + // The following parameter stores the user selection. + parameter Boolean have_pumConWatVar_select=false + "Set to true for variable speed CW pumps, false for constant speed pumps" + annotation (Evaluate=true, Dialog(group="CW loop", + enable=typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled and + typEco==Buildings.Templates.Plants.Chillers.Types.Economizer.None)); + // The following parameter stores the actual configuration setting. + final parameter Boolean have_pumConWatVar= + if typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None + then true + else false + "Set to true for variable speed CW pumps, false for constant speed pumps" + annotation (Evaluate=true, Dialog(group="CW loop")); + final parameter Boolean have_pumConWatVarCom= + if typEco<>Buildings.Templates.Plants.Chillers.Types.Economizer.None + then true + elseif typArrPumConWat==Buildings.Templates.Components.Types.PumpArrangement.Dedicated + then false + else true + "Set to true for single common speed signal for CW pumps, false for dedicated signals" + annotation (Evaluate=true, Dialog(group="CW loop")); + + parameter Buildings.Templates.Plants.Chillers.Types.Economizer typEco( + start=Buildings.Templates.Plants.Chillers.Types.Economizer.None) + "Type of WSE" + annotation (Evaluate=true, Dialog(group="Waterside economizer", + enable=typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled)); + + parameter Buildings.Templates.Plants.Chillers.Types.Controller typCtl + "Type of controller" + annotation (Evaluate=true, Dialog(group="Controls", enable=false)); + parameter Integer nAirHan( + final min=0)=0 + "Number of air handling units served by the plant" + annotation(Evaluate=true, + Dialog(group="Controls", + enable=typCtl == Buildings.Templates.Plants.Chillers.Types.Controller.G36)); + parameter Integer nEquZon( + final min=0)=0 + "Number of terminal units (zone equipment) served by the plant" + annotation(Evaluate=true, + Dialog(group="Controls", + enable=typCtl == Buildings.Templates.Plants.Chillers.Types.Controller.G36)); + + // Following parameters to be assigned by derived classes. + parameter Buildings.Templates.Components.Types.Valve typValChiWatChiIso + "Type of chiller CHW isolation valve" + annotation (Evaluate=true, Dialog(group="Chillers")); + parameter Buildings.Templates.Components.Types.Valve typValConWatChiIso + "Type of chiller CW isolation valve" + annotation (Evaluate=true, Dialog(group="Chillers")); + parameter Buildings.Templates.Components.Types.Valve typValCooInlIso + "Cooler inlet isolation valve" + annotation (Evaluate=true, Dialog(group="Coolers")); + parameter Buildings.Templates.Components.Types.Valve typValCooOutIso + "Cooler outlet isolation valve" + annotation (Evaluate=true, Dialog(group="Coolers")); + + parameter Buildings.Templates.Plants.Chillers.Configuration.ChillerPlant cfg( + final cpChiWat_default=cpChiWat_default, + final cpCon_default=cpCon_default, + final have_pumChiWatPriVar=have_pumChiWatPriVar, + final have_pumChiWatPriVarCom=have_pumChiWatPriVarCom, + final have_pumChiWatSec=have_pumChiWatSec, + final have_pumConWatVar=have_pumConWatVar, + final have_pumConWatVarCom=have_pumConWatVarCom, + final nAirHan=nAirHan, + final nChi=nChi, + final nCoo=nCoo, + final nEquZon=nEquZon, + final nLooChiWatSec=nLooChiWatSec, + final nPumChiWatPri=nPumChiWatPri, + final nPumChiWatSec=nPumChiWatSec, + final nPumConWat=nPumConWat, + final rhoChiWat_default=rhoChiWat_default, + final rhoCon_default=rhoCon_default, + final typArrChi=typArrChi, + final typArrPumChiWatPri=typArrPumChiWatPri, + final typArrPumConWat=typArrPumConWat, + final typChi=typChi, + final typCoo=typCoo, + final typCtl=typCtl, + final typDisChiWat=typDisChiWat, + final typEco=typEco, + final typValChiWatChiIso=typValChiWatChiIso, + final typValConWatChiIso=typValConWatChiIso, + final typValCooInlIso=typValCooInlIso, + final typValCooOutIso=typValCooOutIso) + "Configurationj parameters"; + parameter Buildings.Templates.Plants.Chillers.Data.ChillerPlant dat + "Design and operating parameters"; + + final parameter Modelica.Units.SI.MassFlowRate mChiWatPri_flow_nominal= + sum(dat.pumChiWatPri.m_flow_nominal) + "Primary CHW mass flow rate (total)"; + final parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal= + if typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Variable2 or + typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2 + then sum(dat.pumChiWatSec.m_flow_nominal) + elseif typDisChiWat==Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1And2Distributed + then sum(dat.ctl.VChiWatSec_flow_nominal) * rhoChiWat_default + else mChiWatPri_flow_nominal + "CHW mass flow rate (total, distributed to consumers)"; + final parameter Modelica.Units.SI.MassFlowRate mCon_flow_nominal= + if typChi==Buildings.Templates.Components.Types.Chiller.WaterCooled or + typChi==Buildings.Templates.Components.Types.Chiller.AirCooled then + sum(dat.chi.mConChi_flow_nominal) + else 0 + "Condenser cooling fluid mass flow rate (total)"; + final parameter Modelica.Units.SI.HeatFlowRate cap_nominal= + sum(abs(dat.chi.capChi_nominal)) + "Cooling capacity (total)"; + final parameter Modelica.Units.SI.HeatFlowRate Q_flow_nominal(final max=0)= + -cap_nominal + "Design cooling heat flow rate (total)"; + final parameter Modelica.Units.SI.Temperature TChiWatSup_nominal= + min(dat.chi.TChiWatSupChi_nominal) + "Minimum CHW supply temperature"; + final parameter Modelica.Units.SI.Temperature TChiWatRet_nominal= + TChiWatSup_nominal - Q_flow_nominal / cpChiWat_default / + mChiWat_flow_nominal + "CHW return temperature - Each heat pump" + 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.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 allowFlowReversal=true + "= true to allow flow reversal, false restricts to design direction (port_a -> port_b)" + annotation (Dialog(tab="Assumptions"), Evaluate=true); + parameter Boolean show_T = false + "= true, if actual temperature at port is computed" + annotation(Dialog(tab="Advanced",group="Diagnostics")); + parameter Boolean linearized = false + "= true, use linear relation between m_flow and dp for all valves" + annotation(Evaluate=true, Dialog(tab="Advanced")); + + final parameter MediumChiWat.Density rhoChiWat_default= + MediumChiWat.density(staChiWat_default) + "CHW default density"; + final parameter MediumChiWat.SpecificHeatCapacity cpChiWat_default= + MediumChiWat.density(staChiWat_default) + "CHW default specific heat capacity"; + final parameter MediumChiWat.ThermodynamicState staChiWat_default= + MediumChiWat.setState_pTX( + T=Buildings.Templates.Data.Defaults.TChiWatSup, + p=MediumChiWat.p_default, + X=MediumChiWat.X_default) + "CHW default state"; + final parameter MediumCon.Density rhoCon_default= + MediumCon.density(staCon_default) + "Condenser cooling fluid default density"; + final parameter MediumCon.SpecificHeatCapacity cpCon_default= + MediumCon.density(staCon_default) + "Condenser cooling fluid default specific heat capacity"; + final parameter MediumCon.ThermodynamicState staCon_default= + MediumCon.setState_pTX( + T=Buildings.Templates.Data.Defaults.TConEnt_max, + p=MediumCon.p_default, + X=MediumCon.X_default) + "Condenser cooling fluid default state"; + + Modelica.Fluid.Interfaces.FluidPort_a port_a( + redeclare final package Medium = MediumChiWat, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=MediumChiWat.h_default, nominal=MediumChiWat.h_default)) + "CHW return" + annotation (Placement(transformation(extent={{290,-270},{310,-250}}), + iconTransformation(extent={{192,-110},{212,-90}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b( + redeclare final package Medium = MediumChiWat, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + h_outflow(start = MediumChiWat.h_default, nominal = MediumChiWat.h_default)) + "CHW supply" + annotation (Placement(transformation(extent={{290,-10},{310,10}}), + iconTransformation(extent={{192,-10},{212,10}}))); + Buildings.BoundaryConditions.WeatherData.Bus busWea + "Weather data bus" + annotation (Placement(transformation( + extent={{-20,20},{20,-20}}, + rotation=180, + origin={0,280}), iconTransformation( + extent={{-20,20},{20,-20}}, + rotation=180, + origin={0,200}))); + Buildings.Templates.Plants.Chillers.Interfaces.Bus bus + "CHW plant control bus" annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-300,200}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-200,100}))); + Buildings.Templates.AirHandlersFans.Interfaces.Bus busAirHan[nAirHan] + if nAirHan>0 + "Air handling unit control bus" + annotation (Placement(transformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={300,240}), iconTransformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={200,140}))); + Buildings.Templates.ZoneEquipment.Interfaces.Bus busEquZon[nEquZon] + if nEquZon>0 + "Terminal unit control bus" + annotation (Placement(transformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={300,160}), + iconTransformation(extent={{-20,-20},{20,20}}, + rotation=-90, + origin={202,60}))); + + Modelica.Units.SI.MassFlowRate m_flow(start=_m_flow_start)=port_a.m_flow + "Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction)"; + + Modelica.Units.SI.PressureDifference dp( + start=_dp_start, + displayUnit="Pa")=port_a.p - port_b.p + "Pressure difference between port_a and port_b"; + + MediumChiWat.ThermodynamicState sta_a= + if allowFlowReversal then + MediumChiWat.setState_phX(port_a.p, + noEvent(actualStream(port_a.h_outflow)), + noEvent(actualStream(port_a.Xi_outflow))) + else + MediumChiWat.setState_phX(port_a.p, + noEvent(inStream(port_a.h_outflow)), + noEvent(inStream(port_a.Xi_outflow))) + if show_T "Medium properties in port_a"; + + MediumChiWat.ThermodynamicState sta_b= + if allowFlowReversal then + MediumChiWat.setState_phX(port_b.p, + noEvent(actualStream(port_b.h_outflow)), + noEvent(actualStream(port_b.Xi_outflow))) + else + MediumChiWat.setState_phX(port_b.p, + noEvent(port_b.h_outflow), + noEvent(port_b.Xi_outflow)) + if show_T "Medium properties in port_b"; + +protected + final parameter Modelica.Units.SI.MassFlowRate _m_flow_start=0 + "Start value for m_flow, used to avoid a warning if not set in m_flow, and to avoid m_flow.start in parameter window"; + final parameter Modelica.Units.SI.PressureDifference _dp_start( + displayUnit="Pa")=0 + "Start value for dp, used to avoid a warning if not set in dp, and to avoid dp.start in parameter window"; + +initial equation + if typArrPumChiWatPri == Buildings.Templates.Components.Types.PumpArrangement.Dedicated then + assert(nPumChiWatPri==nChi, + "In " + getInstanceName() + ": " + + "In case of dedicated pumps, the number of primary CHW pumps (=" + + String(nPumChiWatPri) + ") must be equal to the number of chillers (=" + + String(nChi) + ")."); + end if; + if typChi == Buildings.Templates.Components.Types.Chiller.WaterCooled and + typArrPumConWat == Buildings.Templates.Components.Types.PumpArrangement.Dedicated then + assert(nPumConWat==nChi, + "In " + getInstanceName() + ": " + + "In case of dedicated pumps, the number of CW pumps (=" + + String(nPumConWat) + ") must be equal to the number of chillers (=" + + String(nChi) + ")."); + end if; + + annotation ( + defaultComponentName="plaChiWat", + Icon(coordinateSystem(preserveAspectRatio=false, + extent={{-200,-200},{200,200}}), + graphics={ + Rectangle( + extent={{-200,200},{200,-200}}, + lineColor={0,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-149,-214},{151,-254}}, + textColor={0,0,255}, + textString="%name"), + Line( + points={{-60,-60},{50,-60},{50,0}}, + color={28,108,200}, + thickness=5), + Ellipse( + extent={{-40,-40},{0,-80}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={0,100,199}), + Line( + points={{-60,100},{50,100},{50,0},{200,0}}, + color={28,108,200}, + thickness=5), + Text( + extent={{-149,-214},{151,-254}}, + textColor={0,0,255}, + textString="%name"), + Ellipse( + extent={{130,20},{170,-20}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={0,100,199}, + startAngle=0, + endAngle=360, + visible=have_pumChiWatSec), + Polygon( + points={{150,19},{150,-19},{169,0},{150,19}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={255,255,255}, + visible=have_pumChiWatSec), + Line( + points={{200,-100},{-60,-100}}, + color={28,108,200}, + pattern=LinePattern.Dash, + thickness=5), + Ellipse( + extent={{-40,120},{0,80}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={0,100,199}), + Polygon( + points={{-20,119},{-20,81},{-1,100},{-20,119}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={255,255,255}), + Line( + points={{-60,60},{20,60},{20,-98}}, + color={28,108,200}, + thickness=5, + pattern=LinePattern.Dash), + Line( + points={{102,-2},{102,-102}}, + color={28,108,200}, + thickness=5), + Polygon( + points={{-20,-41},{-20,-79},{-1,-60},{-20,-41}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={255,255,255}), + Rectangle( + extent={{-180,-20},{-60,-140}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-50,8},{50,-8}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-80,-78}, + rotation=90), + Rectangle( + extent={{-50,8},{50,-8}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-160,-78}, + rotation=90), + Rectangle( + extent={{-2,32},{2,-32}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-120,-108}, + rotation=-90), + Ellipse( + extent={{-136,-92},{-104,-124}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,8},{-10,-8},{10,-8},{0,8}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-128,-48}, + rotation=-90), + Polygon( + points={{-8,0},{8,10},{8,-10},{-8,0}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-112,-48}, + rotation=360), + Rectangle( + extent={{-2,8},{2,-8}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-96,-48}, + rotation=-90), + Line(points={{-134,-100},{-112,-94}}, color={0,0,0}), + Rectangle( + extent={{-2,8},{2,-8}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-144,-48}, + rotation=-90), + Line(points={{-134,-116},{-112,-122}}, color={0,0,0}), + Rectangle( + extent={{-180,140},{-60,20}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-50,8},{50,-8}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-80,82}, + rotation=90), + Rectangle( + extent={{-50,8},{50,-8}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-160,82}, + rotation=90), + Rectangle( + extent={{-2,32},{2,-32}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-120,52}, + rotation=-90), + Ellipse( + extent={{-136,68},{-104,36}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,8},{-10,-8},{10,-8},{0,8}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-128,112}, + rotation=-90), + Polygon( + points={{-8,0},{8,10},{8,-10},{-8,0}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-112,112}, + rotation=360), + Rectangle( + extent={{-2,8},{2,-8}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-96,112}, + rotation=-90), + Line(points={{-134,60},{-112,66}}, color={0,0,0}), + Rectangle( + extent={{-2,8},{2,-8}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={-144,112}, + rotation=-90), + Line(points={{-134,44},{-112,38}}, color={0,0,0})}), + Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-300,-300},{300,300}})), + Documentation(info=" +

                      +This partial class provides a standard interface for chilled water plant templates. +

                      +

                      +The following modeling assumptions and limitations are considered. +

                      +
                        +
                      • +The chillers are assumed to be of the same type as defined +by the enumeration + +Buildings.Templates.Components.Types.Chiller. +
                      • +
                      • +The number of installed chillers is supposed to be equal +to the number of chillers operating at design conditions. +The same holds true for CW and CHW pump groups. +
                      • +
                      • +Variable speed primary CHW pumps are controlled to the same speed, +whether they are in a dedicated or headered arrangement. +
                      • +
                      • +Variable speed CW pumps are controlled to different speeds +if they are in a dedicated arrangement. +Otherwise they are controlled to the same speed. +
                      • +
                      • +A plant with a WSE requires variable speed CW pumps that must be +in a headered arrangement. +
                      • +
                      • +To allow for a WSE, the plant must have water-cooled chillers. +
                      • +
                      +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end PartialChillerPlant; diff --git a/Buildings/Templates/Plants/Chillers/Interfaces/package.mo b/Buildings/Templates/Plants/Chillers/Interfaces/package.mo new file mode 100644 index 00000000000..01a0588a1aa --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Interfaces/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.Plants.Chillers; +package Interfaces "Interface classes" + extends Modelica.Icons.InterfacesPackage; + +annotation (Documentation(info=" +

                      +This package contains interface classes. +

                      +")); +end Interfaces; diff --git a/Buildings/Templates/Plants/Chillers/Interfaces/package.order b/Buildings/Templates/Plants/Chillers/Interfaces/package.order new file mode 100644 index 00000000000..7359757daed --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Interfaces/package.order @@ -0,0 +1,3 @@ +Bus +PartialChilledWaterLoop +PartialChillerPlant diff --git a/Buildings/Templates/Plants/Chillers/Types.mo b/Buildings/Templates/Plants/Chillers/Types.mo new file mode 100644 index 00000000000..8977326c606 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Types.mo @@ -0,0 +1,55 @@ +within Buildings.Templates.Plants.Chillers; +package Types "Package with type definitions" + extends Modelica.Icons.TypesPackage; + type ChillerArrangement = enumeration( + Parallel + "Parallel chillers", + Series + "Series chillers") + "Enumeration to configure the chiller arrangement"; + type ChillerCompressor = enumeration( + ConstantSpeed "Constant speed centrifugal", + VariableSpeed "Variable speed centrifugal", + PositiveDisplacement "Positive displacement (screw or scroll)") + "Enumeration to specify the type of compressor"; + type ChillerLiftControl = enumeration( + None "No head pressure control (e.g. magnetic bearing chiller)", + BuiltIn "Head pressure control built into chiller’s controller (AO available)", + External "Head pressure control by BAS") + "Enumeration to specify the type of head pressure control"; + type Controller = enumeration( + G36 "Guideline 36 controller", + OpenLoop "Open loop") + "Enumeration to specify the plant controller"; + type CoolerFanSpeedControl = enumeration( + ReturnTemperature "Condenser water return temperature control", + SupplyTemperature "Condenser water supply temperature control") + "Enumeration to specify the cooler fan speed control"; + type Distribution = enumeration( + Constant1Only "Constant primary-only", + Variable1Only "Variable primary-only", + Constant1Variable2 "Constant primary - Variable secondary centralized", + Variable1And2 "Variable primary - Variable secondary centralized", + Variable1And2Distributed "Variable primary - Variable secondary distributed") + "Enumeration to specify the type of CHW distribution system"; + type Economizer = enumeration( + None "No waterside economizer", + HeatExchangerWithPump "Heat exchanger with pump for CHW flow control", + HeatExchangerWithValve "Heat exchanger with bypass valve for CHW flow control") + "Enumeration to configure the WSE"; + type PrimaryOverflowMeasurement = enumeration( + FlowDecoupler "Flow meter in the decoupler", + FlowDifference "Primary and secondary loop flow meters", + TemperatureSupplySensor "Delta-T with single CHWST sensor measuring combined flow of all chillers", + TemperatureChillerSensor "Delta-T with weighted average of CHWST of all chillers proven on") + "Enumeration to configure the sensors for primary CHW pump control in variable primary-variable secondary plants"; + type SensorLocation = enumeration( + Return "Sensor in the return line", + Supply "Sensor in the supply line") + "Enumeration to specify the sensor location"; + annotation (Documentation(info=" +

                      +This package contains type definitions. +

                      +")); +end Types; diff --git a/Buildings/Templates/Plants/Chillers/Validation/AirCooledOpenLoop.mo b/Buildings/Templates/Plants/Chillers/Validation/AirCooledOpenLoop.mo new file mode 100644 index 00000000000..6ede4bdaac9 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Validation/AirCooledOpenLoop.mo @@ -0,0 +1,47 @@ +within Buildings.Templates.Plants.Chillers.Validation; +model AirCooledOpenLoop + "Validation of air-cooled chiller plant template with open-loop controls" + extends Buildings.Templates.Plants.Chillers.Validation.WaterCooledOpenLoop( + redeclare Buildings.Templates.Plants.Chillers.Validation.UserProject.Data.AllSystemsAirCooled datAll, + redeclare Buildings.Templates.Plants.Chillers.AirCooled pla( + redeclare package MediumCon = MediumAir, + typArrChi_select=Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel, + typArrPumChiWatPri_select=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, + typDisChiWat=Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only, + chi(typValChiWatChiIso_select=Buildings.Templates.Components.Types.Valve.TwoWayModulating, + typValConWatChiIso_select=Buildings.Templates.Components.Types.Valve.TwoWayModulating))); + + replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium"; + + annotation ( + experiment( + StartTime=19612800, + StopTime=19615000, + Tolerance=1e-06), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Validation/AirCooledOpenLoop.mos" + "Simulate and plot"), + Documentation(revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +", info=" +

                      +This is a validation model for the air-cooled chiller plant model + +Buildings.Templates.Plants.Chillers.AirCooled +with open-loop controls. +

                      +

                      +It is intended to check that the plant model is well-defined for +various plant configurations. +However, due to the open-loop controls a correct physical behavior +is not expected. +

                      +")); +end AirCooledOpenLoop; diff --git a/Buildings/Templates/Plants/Chillers/Validation/UserProject/AirHandlerControlPoints.mo b/Buildings/Templates/Plants/Chillers/Validation/UserProject/AirHandlerControlPoints.mo new file mode 100644 index 00000000000..4b8a8822277 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Validation/UserProject/AirHandlerControlPoints.mo @@ -0,0 +1,39 @@ +within Buildings.Templates.Plants.Chillers.Validation.UserProject; +block AirHandlerControlPoints "Emulation of VAV box control points" + extends Modelica.Blocks.Icons.Block; + + Buildings.Templates.AirHandlersFans.Interfaces.Bus bus + "AHU control bus" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,0}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,0}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant reqResChiWat(k=0) + "CHW reset request" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant reqPlaChiWat(k=1) + "CHW plant request" + annotation (Placement(transformation(extent={{-10,-50},{10,-30}}))); +equation + connect(reqResChiWat.y, bus.reqResChiWat) annotation (Line(points={{12,0},{ + 100,0}}, color={255,127,0}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(reqPlaChiWat.y, bus.reqPlaChiWat) annotation (Line(points={{12,-40},{ + 80,-40},{80,0},{100,0}}, color={255,127,0}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + annotation (Documentation(info=" +

                      +This class generates signals typically provided by the AHU controller. +It is aimed for validation purposes only. +

                      +")); +end AirHandlerControlPoints; diff --git a/Buildings/Templates/Plants/Chillers/Validation/UserProject/Data/AllSystemsAirCooled.mo b/Buildings/Templates/Plants/Chillers/Validation/UserProject/Data/AllSystemsAirCooled.mo new file mode 100644 index 00000000000..8eaa7ee374e --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Validation/UserProject/Data/AllSystemsAirCooled.mo @@ -0,0 +1,89 @@ +within Buildings.Templates.Plants.Chillers.Validation.UserProject.Data; +class AllSystemsAirCooled + "Design and operating parameters for testing purposes" + extends Buildings.Templates.Data.AllSystems( + sysUni=Buildings.Templates.Types.Units.SI, + stdEne=Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1, + stdVen=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1, + ashCliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_3B); + + parameter Buildings.Templates.Plants.Chillers.Data.ChillerPlant pla( + chi( + COPChi_nominal=fill(Buildings.Templates.Data.Defaults.COPChiAirCoo, pla.cfg.nChi), + dpChiWatChi_nominal=fill(Buildings.Templates.Data.Defaults.dpChiWatChi, + pla.cfg.nChi), + TOut_nominal=Buildings.Templates.Data.Defaults.TOutChi, + redeclare + Buildings.Fluid.Chillers.Data.ElectricReformulatedEIR.ReformEIRChiller_Carrier_19XR_742kW_5_42COP_VSD + perChi), + ctl( + TChiWatChiSup_nominal=fill(Buildings.Templates.Data.Defaults.TChiWatSup, + pla.cfg.nChi), + dpChiWatLocSet_min=Buildings.Templates.Data.Defaults.dpChiWatSet_min, + dpChiWatRemSet_min=fill(Buildings.Templates.Data.Defaults.dpChiWatSet_min, + pla.cfg.nSenDpChiWatRem), + VChiWatChi_flow_nominal=pla.ctl.capChi_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq + ./ (Buildings.Templates.Data.Defaults.TChiWatRet .- pla.ctl.TChiWatChiSup_nominal) + /pla.cfg.rhoChiWat_default, + VChiWatChi_flow_min=0.3*pla.ctl.VChiWatChi_flow_nominal, + VConWatChi_flow_nominal=pla.ctl.capChi_nominal*(1 + 1/Buildings.Templates.Data.Defaults.COPChiWatCoo) + /Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/(Buildings.Templates.Data.Defaults.TConWatRet + - Buildings.Templates.Data.Defaults.TConWatSup)/pla.cfg.rhoCon_default, + dTLifChi_min=fill(Buildings.Templates.Data.Defaults.dTLifChi_min, pla.cfg.nChi), + dTLifChi_nominal=pla.ctl.TConWatRetChi_nominal .- pla.ctl.TChiWatChiSup_nominal, + capChi_nominal=fill(1E6, pla.cfg.nChi), + VChiWatPri_flow_nominal=sum(pla.ctl.VChiWatChi_flow_nominal), + VChiWatSec_flow_nominal={1.1*pla.ctl.VChiWatPri_flow_nominal}, + capUnlChi_min=0.15*pla.ctl.capChi_nominal, + dTAppEco_nominal=Buildings.Templates.Data.Defaults.TChiWatEcoLvg - + Buildings.Templates.Data.Defaults.TConWatEcoEnt, + TWetBulCooEnt_nominal=Buildings.Templates.Data.Defaults.TWetBulTowEnt, + dTAppCoo_nominal=Buildings.Templates.Data.Defaults.TConWatSup - Buildings.Templates.Data.Defaults.TWetBulTowEnt, + VChiWatEco_flow_nominal=sum(pla.ctl.VChiWatChi_flow_nominal[1:2]), + VConWatEco_flow_nominal=sum(pla.ctl.VConWatChi_flow_nominal[1:2]), + dpChiWatEco_nominal=Buildings.Templates.Data.Defaults.dpChiWatEco, + hLevAlaCoo_max=0.3, + hLevAlaCoo_min=0.05, + hLevCoo_min=0.1, + hLevCoo_max=0.2, + yPumConWatSta_nominal=fill(1, pla.ctl.nSta), + yValConWatChiIso_min=0, + yPumConWat_min=0.1, + yPumChiWatEco_nominal=1.0, + yPumChiWatPriSta_nominal=fill(1, pla.ctl.nSta), + yPumChiWatPriSta_min=fill(0.3, pla.ctl.nSta), + yPumChiWatPri_min=0.1, + yPumChiWatSec_min=0.1, + yFanCoo_min=0, + sta=if pla.cfg.typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None + then [0,0,0; 0,0,1; 1,0,0; 1,0,1; 1,1,0; 1,1,1] else [0,0; 1,0; 1,1], + TOutChiWatLck=250, + TConWatRetChi_nominal=fill(Buildings.Templates.Data.Defaults.TConWatRet, + pla.cfg.nChi), + TConWatSupChi_nominal=fill(Buildings.Templates.Data.Defaults.TConWatSup, + pla.cfg.nChi), + dpChiWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, + pla.cfg.nSenDpChiWatRem), + dpChiWatLocSet_max=Buildings.Templates.Data.Defaults.dpChiWatLocSet_max), + pumChiWatPri(dp_nominal=fill((if pla.cfg.typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + then max(pla.chi.dpChiWatChi_nominal) else sum(pla.chi.dpChiWatChi_nominal)) + *1.5, pla.cfg.nPumChiWatPri) + fill((if pla.cfg.typDisChiWat == + Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only + or pla.cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only + then pla.ctl.dpChiWatLocSet_max else 0), pla.cfg.nChi)), + pumChiWatSec(dp_nominal=fill(pla.ctl.dpChiWatLocSet_max, pla.cfg.nPumChiWatSec)), + eco( + cap_nominal=0.6*sum(pla.ctl.capChi_nominal[1:2]), + TChiWatEnt_nominal=Buildings.Templates.Data.Defaults.TChiWatEcoEnt, + TConWatEnt_nominal=Buildings.Templates.Data.Defaults.TConWatEcoEnt, + dpChiWat_nominal=Buildings.Templates.Data.Defaults.dpChiWatEco, + dpConWat_nominal=Buildings.Templates.Data.Defaults.dpConWatEco, + dpPumChiWat_nominal=Buildings.Templates.Data.Defaults.dpChiWatEco)) + "CHW plant parameters"; + annotation (Documentation(info=" +

                      +This class provides system parameters for the validation +of air-cooled chiller plant models. +

                      +")); +end AllSystemsAirCooled; diff --git a/Buildings/Templates/Plants/Chillers/Validation/UserProject/Data/AllSystemsWaterCooled.mo b/Buildings/Templates/Plants/Chillers/Validation/UserProject/Data/AllSystemsWaterCooled.mo new file mode 100644 index 00000000000..fe21829f5ed --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Validation/UserProject/Data/AllSystemsWaterCooled.mo @@ -0,0 +1,104 @@ +within Buildings.Templates.Plants.Chillers.Validation.UserProject.Data; +class AllSystemsWaterCooled + "Design and operating parameters for testing purposes" + extends Buildings.Templates.Data.AllSystems( + sysUni=Buildings.Templates.Types.Units.SI, + stdEne=Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1, + stdVen=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1, + ashCliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_3B); + + parameter Buildings.Templates.Plants.Chillers.Data.ChillerPlant pla( + chi( + COPChi_nominal=fill(Buildings.Templates.Data.Defaults.COPChiWatCoo, pla.cfg.nChi), + dpChiWatChi_nominal=fill(Buildings.Templates.Data.Defaults.dpChiWatChi, + pla.cfg.nChi), + dpConChi_nominal=fill(Buildings.Templates.Data.Defaults.dpConWatChi, pla.cfg.nChi), + redeclare + Fluid.Chillers.Data.ElectricReformulatedEIR.ReformEIRChiller_Trane_CVHE_1442kW_6_61COP_VSD + perChi), + ctl( + TChiWatChiSup_nominal=fill(Buildings.Templates.Data.Defaults.TChiWatSup, + pla.cfg.nChi), + dpChiWatLocSet_min=Buildings.Templates.Data.Defaults.dpChiWatSet_min, + dpChiWatRemSet_min=fill(Buildings.Templates.Data.Defaults.dpChiWatSet_min, + pla.cfg.nSenDpChiWatRem), + VChiWatChi_flow_nominal=pla.ctl.capChi_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq + ./ (Buildings.Templates.Data.Defaults.TChiWatRet .- pla.ctl.TChiWatChiSup_nominal) + /pla.cfg.rhoChiWat_default, + VChiWatChi_flow_min=0.3*pla.ctl.VChiWatChi_flow_nominal, + VConWatChi_flow_nominal=pla.ctl.capChi_nominal*(1 + 1/Buildings.Templates.Data.Defaults.COPChiWatCoo) + /Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/(Buildings.Templates.Data.Defaults.TConWatRet + - Buildings.Templates.Data.Defaults.TConWatSup)/pla.cfg.rhoCon_default, + dTLifChi_min=fill(Buildings.Templates.Data.Defaults.dTLifChi_min, pla.cfg.nChi), + dTLifChi_nominal=pla.ctl.TConWatRetChi_nominal .- pla.ctl.TChiWatChiSup_nominal, + capChi_nominal=fill(1E6, pla.cfg.nChi), + VChiWatPri_flow_nominal=sum(pla.ctl.VChiWatChi_flow_nominal), + VChiWatSec_flow_nominal={1.1*pla.ctl.VChiWatPri_flow_nominal}, + capUnlChi_min=0.15*pla.ctl.capChi_nominal, + dTAppEco_nominal=Buildings.Templates.Data.Defaults.TChiWatEcoLvg - + Buildings.Templates.Data.Defaults.TConWatEcoEnt, + TWetBulCooEnt_nominal=Buildings.Templates.Data.Defaults.TWetBulTowEnt, + dTAppCoo_nominal=Buildings.Templates.Data.Defaults.TConWatSup - Buildings.Templates.Data.Defaults.TWetBulTowEnt, + VChiWatEco_flow_nominal=sum(pla.ctl.VChiWatChi_flow_nominal[1:2]), + VConWatEco_flow_nominal=sum(pla.ctl.VConWatChi_flow_nominal[1:2]), + dpChiWatEco_nominal=Buildings.Templates.Data.Defaults.dpChiWatEco, + hLevAlaCoo_max=0.3, + hLevAlaCoo_min=0.05, + hLevCoo_min=0.1, + hLevCoo_max=0.2, + yPumConWatSta_nominal=fill(1, pla.ctl.nSta), + yValConWatChiIso_min=0, + yPumConWat_min=0.1, + yPumChiWatEco_nominal=1.0, + yPumChiWatPriSta_nominal=fill(1, pla.ctl.nSta), + yPumChiWatPriSta_min=fill(0.3, pla.ctl.nSta), + yPumChiWatPri_min=0.1, + yPumChiWatSec_min=0.1, + yFanCoo_min=0, + sta=if pla.cfg.typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None + then [0,0,0; 0,0,1; 1,0,0; 1,0,1; 1,1,0; 1,1,1] else [0,0; 1,0; 1,1], + staCoo=if pla.cfg.typEco <> Buildings.Templates.Plants.Chillers.Types.Economizer.None + then {0,1,1,2,2,2} else {0,1,2}, + TOutChiWatLck=250, + TConWatRetChi_nominal=fill(Buildings.Templates.Data.Defaults.TConWatRet, + pla.cfg.nChi), + TConWatSupChi_nominal=fill(Buildings.Templates.Data.Defaults.TConWatSup, + pla.cfg.nChi), + dpChiWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, + pla.cfg.nSenDpChiWatRem), + dpChiWatLocSet_max=Buildings.Templates.Data.Defaults.dpChiWatLocSet_max), + pumChiWatPri(dp_nominal=fill((if pla.cfg.typArrChi == Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel + then max(pla.chi.dpChiWatChi_nominal) else sum(pla.chi.dpChiWatChi_nominal)) + *1.5, pla.cfg.nPumChiWatPri) + fill((if pla.cfg.typDisChiWat == + Buildings.Templates.Plants.Chillers.Types.Distribution.Constant1Only + or pla.cfg.typDisChiWat == Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only + then pla.ctl.dpChiWatLocSet_max else 0), pla.cfg.nChi)), + pumChiWatSec(dp_nominal=fill(pla.ctl.dpChiWatLocSet_max, pla.cfg.nPumChiWatSec)), + coo( + mAirCoo_flow_nominal=pla.coo.mConWatCoo_flow_nominal/Buildings.Templates.Data.Defaults.ratMFloConWatByMFloAirTow, + TAirEnt_nominal=Buildings.Templates.Data.Defaults.TOutChi, + PFanCoo_nominal=Buildings.Templates.Data.Defaults.ratPFanByMFloConWatTow* + pla.coo.mConWatCoo_flow_nominal, + dpConWatFriCoo_nominal=fill(if pla.cfg.typCoo == Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen + then Buildings.Templates.Data.Defaults.dpConWatFriTow else Buildings.Templates.Data.Defaults.dpConWatTowClo, + pla.cfg.nCoo), + dpConWatStaCoo_nominal=fill(if pla.cfg.typCoo == Buildings.Templates.Components.Types.Cooler.CoolingTowerOpen + then Buildings.Templates.Data.Defaults.dpConWatStaTow else 0, pla.cfg.nCoo)), + pumConWat(dp_nominal=1.5*(pla.chi.dpConChi_nominal + pla.coo.dpConWatFriCoo_nominal + + pla.coo.dpConWatStaCoo_nominal)), + eco( + cap_nominal=0.6*sum(pla.ctl.capChi_nominal[1:2]), + TChiWatEnt_nominal=Buildings.Templates.Data.Defaults.TChiWatEcoEnt, + TConWatEnt_nominal=Buildings.Templates.Data.Defaults.TConWatEcoEnt, + dpChiWat_nominal=Buildings.Templates.Data.Defaults.dpChiWatEco, + dpConWat_nominal=Buildings.Templates.Data.Defaults.dpConWatEco, + dpPumChiWat_nominal=Buildings.Templates.Data.Defaults.dpChiWatEco)) + "CHW plant parameters" + annotation (Placement(transformation(extent={{-10,-8},{10,12}}))); + annotation (Documentation(info=" +

                      +This class provides system parameters for the validation +of water-cooled chiller plant models. +

                      +")); +end AllSystemsWaterCooled; diff --git a/Buildings/Templates/Plants/Chillers/Validation/UserProject/Data/package.mo b/Buildings/Templates/Plants/Chillers/Validation/UserProject/Data/package.mo new file mode 100644 index 00000000000..ce647c5facb --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Validation/UserProject/Data/package.mo @@ -0,0 +1,11 @@ +within Buildings.Templates.Plants.Chillers.Validation.UserProject; +package Data "Records for design and operating parameters" +extends Modelica.Icons.MaterialPropertiesPackage; + +annotation (Documentation(info=" +

                      +This package provides design and operating parameters +that are used for validation purposes. +

                      +")); +end Data; diff --git a/Buildings/Templates/Plants/Chillers/Validation/UserProject/Data/package.order b/Buildings/Templates/Plants/Chillers/Validation/UserProject/Data/package.order new file mode 100644 index 00000000000..51091d4f086 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Validation/UserProject/Data/package.order @@ -0,0 +1,2 @@ +AllSystemsAirCooled +AllSystemsWaterCooled diff --git a/Buildings/Templates/Plants/Chillers/Validation/UserProject/DistributionControlPoints.mo b/Buildings/Templates/Plants/Chillers/Validation/UserProject/DistributionControlPoints.mo new file mode 100644 index 00000000000..28ca9704af4 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Validation/UserProject/DistributionControlPoints.mo @@ -0,0 +1,35 @@ +within Buildings.Templates.Plants.Chillers.Validation.UserProject; +block DistributionControlPoints + "Emulation of control points from CHW distribution system" + extends Modelica.Blocks.Icons.Block; + + parameter Integer nSenDpChiWatRem + "Number of remote CHW differential pressure sensors used for CHW pump speed control" + annotation (Evaluate=true, Dialog(group="Configuration")); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWatRem[nSenDpChiWatRem]( + each k=Buildings.Templates.Data.Defaults.dpChiWatRemSet_max) + "CHW differential pressure used for CHW pump speed control" + annotation (Placement(transformation(extent={{-8,-10},{12,10}}))); + Plants.Chillers.Interfaces.Bus bus "CHW plant control bus" annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,0}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={100,0}))); +equation + connect(dpChiWatRem.y, bus.dpChiWatRem) annotation (Line(points={{14,0},{100, + 0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + annotation (Documentation(info=" +

                      +This class generates signals typically yielded by +sensors from the CHW distribution system. +It is aimed for validation purposes only. +

                      +")); +end DistributionControlPoints; diff --git a/Buildings/Templates/Plants/Chillers/Validation/UserProject/package.mo b/Buildings/Templates/Plants/Chillers/Validation/UserProject/package.mo new file mode 100644 index 00000000000..93e059891df --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Validation/UserProject/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.Plants.Chillers.Validation; +package UserProject "Package of user classes generated from templates" + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +

                      +This package contains classes used for validation purposes. +

                      +")); +end UserProject; diff --git a/Buildings/Templates/Plants/Chillers/Validation/UserProject/package.order b/Buildings/Templates/Plants/Chillers/Validation/UserProject/package.order new file mode 100644 index 00000000000..499769a9367 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Validation/UserProject/package.order @@ -0,0 +1,3 @@ +AirHandlerControlPoints +DistributionControlPoints +Data diff --git a/Buildings/Templates/Plants/Chillers/Validation/WaterCooled.mo b/Buildings/Templates/Plants/Chillers/Validation/WaterCooled.mo new file mode 100644 index 00000000000..95a496b1dcd --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Validation/WaterCooled.mo @@ -0,0 +1,255 @@ +within Buildings.Templates.Plants.Chillers.Validation; +model WaterCooled "Validation of water-cooled chiller plant template" + extends Modelica.Icons.Example; + replaceable package Medium=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Main medium (common for CHW and CW)"; + parameter + Buildings.Templates.Plants.Chillers.Validation.UserProject.Data.AllSystemsWaterCooled + datAll(pla(final cfg=pla.cfg)) "Plant parameters" + annotation (Placement(transformation(extent={{160,160},{180,180}}))); + parameter Boolean allowFlowReversal=true + "= true to allow flow reversal, false restricts to design direction (port_a -> port_b)" + annotation (Dialog(tab="Assumptions"), Evaluate=true); + 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.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={-170,-60}))); + Buildings.Fluid.HeatExchangers.Heater_T loaChiWat( + 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, + QMax_flow=pla.cap_nominal) + "CHW system system approximated by prescribed return temperature" + annotation (Placement(transformation(extent={{70,-70},{90,-50}}))); + Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage valDisChiWat( + redeclare final package Medium=Medium, + m_flow_nominal=pla.mChiWat_flow_nominal, + dpValve_nominal=3E4, + dpFixed_nominal=datAll.pla.ctl.dpChiWatRemSet_max[1] - 3E4) + "Distribution system approximated by variable flow resistance" + annotation (Placement(transformation(extent={{110,-70},{130,-50}}))); + Buildings.Templates.Plants.Chillers.WaterCooled pla( + redeclare final package MediumChiWat = Medium, + redeclare replaceable package MediumCon = Medium, + nChi=2, + nAirHan=1, + final energyDynamics=energyDynamics, + final dat=datAll.pla, + typArrPumConWat_select=Buildings.Templates.Components.Types.PumpArrangement.Headered, + have_pumConWatVar_select=true, + chi( + have_senTChiWatChiSup_select=true, + have_senTChiWatChiRet=true, + have_senTConWatChiSup=true, + have_senTConWatChiRet_select=true, + typValConWatChiIso_select=Buildings.Templates.Components.Types.Valve.TwoWayModulating), + redeclare replaceable + Buildings.Templates.Plants.Chillers.Components.CoolerGroups.CoolingTowerOpen + coo, + redeclare replaceable + Buildings.Templates.Plants.Chillers.Components.Economizers.None eco, + redeclare final Buildings.Templates.Plants.Chillers.Components.Controls.G36 + ctl(typCtlHea=Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.BuiltIn, + typCtlFanCoo=Buildings.Templates.Plants.Chillers.Types.CoolerFanSpeedControl.SupplyTemperature)) + "Chiller plant" + annotation (Placement(transformation(extent={{-80,-118},{-40,-78}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TAirSup(k=293.15, y(final + unit="K", displayUnit="degC")) + "Placeholder signal for request generator" + annotation (Placement(transformation(extent={{-180,150},{-160,170}}))); + Fluid.Sensors.RelativePressure dpChiWatRem[1]( + redeclare each final package Medium=Medium) + "CHW differential pressure at one remote location" + annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=-90, + origin={60,-100}))); + Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.PlantRequests reqPlaRes(final + heaCoi=Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.None, final + cooCoi=Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased) + "Plant and reset request" + annotation (Placement(transformation(extent={{110,128},{90,148}}))); + AirHandlersFans.Interfaces.Bus busAirHan + "AHU control bus" + annotation (Placement(transformation(extent={{-60,120},{-20,160}}), + iconTransformation(extent={{-340,-140},{-300,-100}}))); + HeatPumps.Interfaces.Bus busPla "Plant control bus" annotation (Placement( + transformation(extent={{-100,-60},{-60,-20}}), iconTransformation( + extent={{-370,-70},{-330,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ratFlo( + table=[ + 0, 0; + 5, 0; + 7, 0; + 12, 0.2; + 16, 1; + 22, 0.1; + 24, 0], + timeScale=3600) "Source signal for CHW flow ratio" + annotation (Placement(transformation(extent={{-180,90},{-160,110}}))); + Buildings.Controls.OBC.CDL.Reals.PID ctlEquZon( + k=0.1, + Ti=60, + final reverseActing=true) "Zone equipment controller" + annotation (Placement(transformation(extent={{90,90},{110,110}}))); + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter norFlo(k=1/pla.mChiWat_flow_nominal) + "Normalize flow rate" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={180,0}))); + Fluid.Sensors.MassFlowRate mChiWat_flow( + redeclare final package Medium=Medium) + "CHW mass flow rate" + annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=-90, + origin={160,-100}))); + Buildings.Controls.OBC.CDL.Reals.AddParameter TChiWatRet( + p=pla.TChiWatRet_nominal - pla.TChiWatSup_nominal) + "Prescribed CHW return temperature" + annotation (Placement(transformation(extent={{-128,10},{-108,30}}))); + Buildings.Controls.OBC.CDL.Reals.Min min1 + "Limit prescribed CHWRT" + annotation (Placement(transformation(extent={{-90,30},{-70,50}}))); + Buildings.Controls.OBC.CDL.Integers.Multiply mulInt[2] + "Importance multiplier" + annotation (Placement(transformation(extent={{10,130},{-10,150}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant cst[2]( + each k=10) "Request multiplier factor" + annotation (Placement(transformation(extent={{110,170},{90,190}}))); + Buildings.Fluid.FixedResistances.PressureDrop pipChiWat( + redeclare final package Medium=Medium, + final m_flow_nominal=pla.mChiWat_flow_nominal, + final dp_nominal=Buildings.Templates.Data.Defaults.dpChiWatLocSet_max - max(datAll.pla.ctl.dpChiWatRemSet_max)) + "Piping" + annotation (Placement(transformation(extent={{10,-150},{-10,-130}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( + k=293.15) + "Constant limiting prescribed return temperature" + annotation (Placement(transformation(extent={{-180,30},{-160,50}}))); +equation + connect(mulInt[1].y, busAirHan.reqResChiWat) + annotation (Line(points={{-12,140},{-40,140}},color={255,127,0})); + connect(mulInt[2].y, busAirHan.reqPlaChiWat) + annotation (Line(points={{-12,140},{-40,140}},color={255,127,0})); + connect(weaDat.weaBus, pla.busWea) + annotation (Line(points={{-160,-60},{-60,-60},{-60,-78}},color={255,204,51},thickness=0.5)); + connect(loaChiWat.port_b, valDisChiWat.port_a) + annotation (Line(points={{90,-60},{110,-60}},color={0,127,255})); + connect(loaChiWat.port_a, dpChiWatRem[1].port_a) + annotation (Line(points={{70,-60},{60,-60},{60,-90}},color={0,127,255})); + connect(TAirSup.y, reqPlaRes.TAirSup) annotation (Line(points={{-158,160},{ + 120,160},{120,146},{112,146}}, color={0,0,127})); + connect(TAirSup.y, reqPlaRes.TAirSupSet) annotation (Line(points={{-158,160}, + {120,160},{120,141},{112,141}}, color={0,0,127})); + connect(busAirHan, pla.busAirHan[1]) + annotation (Line(points={{-40,140},{-40,-84}},color={255,204,51},thickness=0.5)); + connect(pla.bus, busPla) + annotation (Line(points={{-80,-88},{-80,-40}},color={255,204,51},thickness=0.5)); + connect(valDisChiWat.y_actual, reqPlaRes.uCooCoiSet) + annotation (Line(points={{125,-53},{140,-53},{140,135},{112,135}}, color={0,0,127})); + connect(valDisChiWat.port_b, mChiWat_flow.port_a) + annotation (Line(points={{130,-60},{160,-60},{160,-90}},color={0,127,255})); + connect(mChiWat_flow.port_b, dpChiWatRem[1].port_b) + annotation (Line(points={{160,-110},{160,-140},{60,-140},{60,-110}},color={0,127,255})); + connect(busPla.TChiWatPriSup, TChiWatRet.u) + annotation (Line(points={{-80,-40},{-140,-40},{-140,20},{-130,20}},color={255,204,51},thickness=0.5)); + connect(min1.y, loaChiWat.TSet) + annotation (Line(points={{-68,40},{60,40},{60,-52},{68,-52}},color={0,0,127})); + connect(cst.y, mulInt.u1) + annotation (Line(points={{88,180},{60,180},{60,146},{12,146}}, + color={255,127,0})); + connect(mChiWat_flow.port_b, pipChiWat.port_a) + annotation (Line(points={{160,-110},{160,-140},{10,-140}}, + color={0,127,255})); + connect(dpChiWatRem.p_rel, busPla.dpChiWatRem) + annotation (Line(points={{51,-100},{40.5,-100},{40.5,-40},{-80,-40}}, + color={0,0,127}), + Text(string="%second",index=1,extent={{-6,3},{-6,3}},horizontalAlignment=TextAlignment.Right)); + connect(reqPlaRes.yChiWatResReq, mulInt[1].u2) annotation (Line(points={{88,146}, + {80,146},{80,134},{12,134}},color={255,127,0})); + connect(reqPlaRes.yChiPlaReq, mulInt[2].u2) annotation (Line(points={{88,141}, + {80,141},{80,134},{12,134}},color={255,127,0})); + connect(ratFlo.y[1], ctlEquZon.u_s) + annotation (Line(points={{-158,100},{88,100}}, color={0,0,127})); + connect(mChiWat_flow.m_flow, norFlo.u) + annotation (Line(points={{171,-100},{180,-100},{180,-12}}, + color={0,0,127})); + connect(norFlo.y, ctlEquZon.u_m) annotation (Line(points={{180,12},{180,80},{100, + 80},{100,88}}, color={0,0,127})); + connect(ctlEquZon.y, valDisChiWat.y) + annotation (Line(points={{112,100},{120,100},{120,-48}}, color={0,0,127})); + connect(con.y, min1.u1) annotation (Line(points={{-158,40},{-100,40},{-100,46}, + {-92,46}}, color={0,0,127})); + connect(TChiWatRet.y, min1.u2) annotation (Line(points={{-106,20},{-100,20},{-100, + 34},{-92,34}}, color={0,0,127})); + connect(pla.port_a, pipChiWat.port_b) annotation (Line(points={{-39.8,-108},{-20, + -108},{-20,-140},{-10,-140}}, color={0,127,255})); + connect(pla.port_b, loaChiWat.port_a) annotation (Line(points={{-39.8,-98},{-20, + -98},{-20,-60},{70,-60}}, color={0,127,255})); + annotation ( + __Dymola_Commands( + file= + "modelica://Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Validation/WaterCooled.mos" + "Simulate and plot"), + experiment( + Tolerance=1e-6, + StopTime=86400.0), + Documentation( + info=" +

                      +This model validates + +Buildings.Templates.Plants.Chillers.WaterCooled +by simulating a 24-hour period during which the cooling loads reach +their peak value. +

                      +

                      +Two equally sized chillers are modeled, which can all be lead/lag alternated. +A unique aggregated load is modeled on the CHW loop by means of a heating +component controlled to maintain a constant ΔT, +and a modulating valve controlled to track a prescribed flow rate. +An importance multiplier of 10 is applied to the plant requests +and reset requests generated from the valve position. +

                      +

                      +Advanced equipment and control options can be modified via the parameter +dialog of the plant component. +

                      +

                      +Simulating this model shows how the plant responds to a varying load by +

                      +
                        +
                      • +staging or unstaging the chillers, +
                      • +
                      • +rotating lead/lag alternate equipment to ensure even wear, +
                      • +
                      • +resetting the supply temperature and remote differential pressure +in the CHW loop based on the valve position, +
                      • +
                      • +staging and controlling the primary pumps to meet the +remote differential pressure setpoint. +
                      • +
                      +", + revisions=" +
                        +
                      • +XXXX, 2025, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +"), + Diagram( + coordinateSystem( + extent={{-200,-200},{200,200}}))); +end WaterCooled; diff --git a/Buildings/Templates/Plants/Chillers/Validation/WaterCooledOpenLoop.mo b/Buildings/Templates/Plants/Chillers/Validation/WaterCooledOpenLoop.mo new file mode 100644 index 00000000000..a87a2ee311c --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Validation/WaterCooledOpenLoop.mo @@ -0,0 +1,134 @@ +within Buildings.Templates.Plants.Chillers.Validation; +model WaterCooledOpenLoop + "Validation of water-cooled chiller plant template with open-loop controls" + 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"; + + replaceable parameter + Buildings.Templates.Plants.Chillers.Validation.UserProject.Data.AllSystemsWaterCooled + datAll(pla(cfg=pla.cfg)) + "Design and operating parameters" + annotation (Placement(transformation(extent={{70,70},{90,90}}))); + + 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")); + + replaceable Buildings.Templates.Plants.Chillers.WaterCooled pla( + typArrPumConWat_select=Buildings.Templates.Components.Types.PumpArrangement.Headered, + have_pumConWatVar_select=true, + ctl( + typCtlHea=Buildings.Templates.Plants.Chillers.Types.ChillerLiftControl.BuiltIn, + typCtlFanCoo=Buildings.Templates.Plants.Chillers.Types.CoolerFanSpeedControl.SupplyTemperature, + have_senLevCoo=false), + chi( + typValConWatChiIso_select=Buildings.Templates.Components.Types.Valve.TwoWayModulating), + redeclare replaceable + Buildings.Templates.Plants.Chillers.Components.CoolerGroups.CoolingTowerOpen + coo, + redeclare replaceable + Buildings.Templates.Plants.Chillers.Components.Economizers.None eco) + constrainedby Buildings.Templates.Plants.Chillers.Interfaces.PartialChilledWaterLoop( + redeclare final package MediumChiWat = MediumChiWat, + redeclare replaceable package MediumCon = MediumConWat, + nChi=2, + chi( + have_senTChiWatChiSup_select=true, + have_senTChiWatChiRet=true, + have_senTConWatChiSup=true, + have_senTConWatChiRet_select=true), + final energyDynamics=energyDynamics, + dat=datAll.pla) + "CHW plant" + annotation (Placement(transformation(extent={{-60,-30},{-20,10}}))); + + Fluid.Sources.PropertySource_T proSou(use_T_in=true, + redeclare final package Medium=MediumChiWat) + "Boundary conditions for CHW distribution system" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=90, + origin={80,-20}))); + + Buildings.Fluid.FixedResistances.PressureDrop res( + redeclare final package Medium = MediumChiWat, + m_flow_nominal=pla.mChiWat_flow_nominal, + dp_nominal=datAll.pla.ctl.dpChiWatLocSet_max) + "Flow resistance of CHW distribution system" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + Buildings.BoundaryConditions.WeatherData.ReaderTMY3 weaDat( + filNam=Modelica.Utilities.Files.loadResource( + "modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) + "Weather data" + annotation (Placement(transformation(extent={{-90,70},{-70,90}}))); + + Fluid.Sensors.TemperatureTwoPort TChiWatRet( + redeclare final package Medium =MediumChiWat, + final m_flow_nominal=sum(datAll.pla.chi.mChiWatChi_flow_nominal)) + "CHW return temperature" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={20,-40}))); + Fluid.Sensors.VolumeFlowRate VChiWat_flow( + redeclare final package Medium =MediumChiWat, + final m_flow_nominal=sum(datAll.pla.chi.mChiWatChi_flow_nominal)) + "CHW volume flow rate" + annotation (Placement(transformation(extent={{60,-50},{40,-30}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatRetPre(k=pla.TChiWatRet_nominal) + "Prescribed CHW return temperatue" + annotation (Placement(transformation(extent={{-90,30},{-70,50}}))); +equation + connect(weaDat.weaBus,pla. busWea) annotation (Line( + points={{-70,80},{-40,80},{-40,10}}, + color={255,204,51}, + thickness=0.5)); + connect(pla.port_b, res.port_a) + annotation (Line(points={{-19.8,-10},{0,-10},{0,0},{20,0}}, color={0,127,255})); + connect(pla.port_a, TChiWatRet.port_b) annotation (Line(points={{-19.8,-20},{ + 0,-20},{0,-40},{10,-40}}, color={0,127,255})); + connect(TChiWatRet.port_a, VChiWat_flow.port_b) + annotation (Line(points={{30,-40},{40,-40}}, color={0,127,255})); + connect(res.port_b, proSou.port_a) + annotation (Line(points={{40,0},{80,0},{80,-10}}, color={0,127,255})); + connect(VChiWat_flow.port_a, proSou.port_b) + annotation (Line(points={{60,-40},{80,-40},{80,-30}}, color={0,127,255})); + connect(TChiWatRetPre.y, proSou.T_in) annotation (Line(points={{-68,40},{60,40}, + {60,-16},{68,-16}}, color={0,0,127})); + annotation ( + experiment( + StartTime=19612800, + StopTime=19615000, + Tolerance=1e-06), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Templates/Plants/Chillers/Validation/WaterCooledOpenLoop.mos" + "Simulate and plot"), + Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +", info=" +

                      +This is a validation model for the water-cooled chiller plant model + +Buildings.Templates.Plants.Chillers.WaterCooled +with open-loop controls. +

                      +

                      +It is intended to check that the plant model is well-defined for +various plant configurations. +However, due to the open-loop controls a correct physical behavior +is not expected. For instance, the coolers are commanded at maximum +speed which may yield freezing conditions in the CW loop. +

                      +")); +end WaterCooledOpenLoop; diff --git a/Buildings/Templates/Plants/Chillers/Validation/package.mo b/Buildings/Templates/Plants/Chillers/Validation/package.mo new file mode 100644 index 00000000000..47e01071316 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Validation/package.mo @@ -0,0 +1,17 @@ +within Buildings.Templates.Plants.Chillers; +package Validation "Package with validation models" +extends Modelica.Icons.ExamplesPackage; + + annotation (Documentation(info=" +

                      +This package contains models validating the templates within + +Buildings.Templates.Plants.Chillers +for various system configurations. +

                      +

                      +The models also illustrate parameter propagation from a top-level +HVAC system record. +

                      +")); +end Validation; diff --git a/Buildings/Templates/Plants/Chillers/Validation/package.order b/Buildings/Templates/Plants/Chillers/Validation/package.order new file mode 100644 index 00000000000..56fe0185c10 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/Validation/package.order @@ -0,0 +1,4 @@ +AirCooledOpenLoop +WaterCooled +WaterCooledOpenLoop +UserProject diff --git a/Buildings/Templates/Plants/Chillers/WaterCooled.mo b/Buildings/Templates/Plants/Chillers/WaterCooled.mo new file mode 100644 index 00000000000..5baeac17480 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/WaterCooled.mo @@ -0,0 +1,318 @@ +within Buildings.Templates.Plants.Chillers; +model WaterCooled "Water-cooled chiller plant" + /* FIXME: Add comment for the following bindings and make them final after testing. + typArrChi_select + typDisChiWat + typArrPumChiWatPri_select + have_pumChiWatPriVar_select + chi(typValChiWatChiIso_select + typArrPumConWat_select + */ + extends + Buildings.Templates.Plants.Chillers.Interfaces.PartialChilledWaterLoop( + redeclare replaceable package MediumCon=Buildings.Media.Water, + final typChi=Buildings.Templates.Components.Types.Chiller.WaterCooled, + final typCoo=coo.typCoo, + final typValCooInlIso=coo.typValCooInlIso, + final typValCooOutIso=coo.typValCooOutIso, + typArrChi_select=Buildings.Templates.Plants.Chillers.Types.ChillerArrangement.Parallel, + typDisChiWat=Buildings.Templates.Plants.Chillers.Types.Distribution.Variable1Only, + typArrPumChiWatPri_select=Buildings.Templates.Components.Types.PumpArrangement.Headered, + have_pumChiWatPriVar_select=false, + chi(typValChiWatChiIso_select=Buildings.Templates.Components.Types.Valve.TwoWayModulating), + typArrPumConWat_select=Buildings.Templates.Components.Types.PumpArrangement.Headered); + + // Coolers + replaceable Buildings.Templates.Plants.Chillers.Components.CoolerGroups.CoolingTowerOpen + coo constrainedby + Buildings.Templates.Plants.Chillers.Components.Interfaces.PartialCoolerGroup( + redeclare final package MediumConWat = MediumCon, + final have_varCom=true, + final nCoo=nCoo, + final dat=dat.coo, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + final text_flip=true) + "Coolers" + annotation (Dialog(group="Coolers"), Placement(transformation(extent={{-118,34}, + {-282,94}}))); + + // CW loop + Buildings.Templates.Components.Routing.SingleToMultiple inlPumConWat( + redeclare final package Medium=MediumCon, + final nPorts=nPumConWat, + final m_flow_nominal=mCon_flow_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + icon_dy=intChi.icon_dy, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + "CW pumps inlet manifold" + annotation (Placement(transformation(extent={{-110,-202},{-90,-182}}))); + Buildings.Templates.Components.Pumps.Multiple pumConWat( + redeclare final package Medium=MediumCon, + final nPum=nPumConWat, + final have_var=have_pumConWatVar, + final have_varCom=have_pumConWatVarCom, + final dat=dat.pumConWat, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + icon_dy=intChi.icon_dy) + "CW pumps" + annotation (Placement(transformation(extent={{-90,-202},{-70,-182}}))); + Fluid.Sources.Boundary_pT bouConWat( + redeclare final package Medium = MediumCon, + p=200000, + nPorts=1) + "CW pressure boundary condition" + annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-100,-250}))); + Buildings.Templates.Components.Sensors.Temperature TConWatRet( + redeclare final package Medium = MediumCon, + final m_flow_nominal=mCon_flow_nominal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Return) + "CW return temperature (from chillers to coolers)" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-80,40}))); + Buildings.Templates.Components.Sensors.Temperature TConWatSup( + redeclare final package Medium = MediumCon, + final m_flow_nominal=mCon_flow_nominal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.InWell, + icon_pipe=Buildings.Templates.Components.Types.IntegrationPoint.Supply) + "CW supply temperature (from coolers to chillers)" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={-160,-192}))); + +equation + /* Control point connection - start */ + connect(bus, coo.bus); + connect(bus.pumConWat, pumConWat.bus); + connect(TConWatRet.y, bus.TConWatSup); + connect(TConWatSup.y, bus.TConWatRet); + /* Control point connection - stop */ + connect(inlPumConWat.ports_b, pumConWat.ports_a) + annotation (Line( + points={{-90,-192},{-90,-192}}, + color={0,0,0}, + thickness=0.5)); + connect(busWea, coo.busWea) annotation (Line( + points={{0,280},{-170,280},{-170,94}}, + color={255,204,51}, + thickness=0.5)); + connect(inlPumConWat.port_a, bouConWat.ports[1]) + annotation (Line( + points={{-110,-192},{-110,-212},{-100,-212},{-100,-240}}, + color={0,127,255}, + visible=viewDiagramAll)); + connect(pumConWat.ports_b, inlConChi.ports_a) + annotation (Line( + points={{-70,-192},{-70,-192}}, + color={0,0,0}, + thickness=0.5)); + connect(outConChi.port_b, TConWatRet.port_b) annotation (Line( + points={{-60,0},{-60,40},{-70,40}}, + color={0,0,0}, + thickness=0.5, + pattern=LinePattern.Dash)); + connect(TConWatRet.port_a, coo.port_a) annotation (Line( + points={{-90,40},{-140,40},{-140,64},{-190,64}}, + color={0,0,0}, + thickness=0.5, + pattern=LinePattern.Dash)); + connect(coo.port_b,TConWatSup. port_b) annotation (Line(points={{-210,64},{-210, + -192},{-170,-192}}, color={0,0,0}, + thickness=0.5)); + connect(TConWatSup.port_a, inlPumConWat.port_a) + annotation (Line(points={{-150,-192},{-110,-192}}, color={0,0,0}, + thickness=0.5)); + annotation (Documentation(info=" +

                      +This template represents a chilled water plant with water-cooled compression chillers. +

                      +

                      +The table below lists all available equipment configurations. +The first option (shown in bold) represents the default plant configuration. +Options shown in gray italics are not currently +supported by the plant controller + +Buildings.Controls.OBC.ASHRAE.PrimarySystem.ChillerPlant.Controller +and cannot be selected. +The user may refer to ASHRAE (2021) for further details. +

                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      Configuration parameterOptionsNotes
                      Chiller arrangement +Parallel chillers
                      +Series chillers +
                      Chiller head pressure control +No head pressure control (e.g. magnetic bearing chiller)
                      +Head pressure control built into chiller’s controller (AO available)
                      +Head pressure control by BAS +
                      No default option is provided: the user must select the suitable +option.
                      +Currently, the template ony supports plant configurations where +all chillers have the same head pressure control. +
                      Chiller CHW isolation valve +Two-way modulating valve
                      +Two-way two-position valve
                      +No valve +
                      +If the primary CHW pumps are dedicated, the option with no isolation valve +is automatically selected.
                      +If the primary CHW pumps are headered, the choice between +two-way modulating valves and two-way two-position valves is possible. +A modulating valve is recommended on primary-only variable flow systems +to allow for slow changes in flow during chiller staging. +Sometimes electric valve timing may be sufficiently slow that two-position +valves can provide stable performance. +Two-position valves are acceptable on primary-secondary systems. +
                      Chiller CW isolation valve +No valve
                      +Two-way modulating valve
                      +Two-way modulating valve +
                      +If the CW pumps are dedicated, the option with no isolation valve +is automatically selected.
                      +

                      +This raises the question of chiller head pressure control +in case of constant speed CW pumps that are dedicated.
                      +

                      +CW isolation valves may be two-position for chillers that do not require +head pressure control or for plants with variable speed condenser +pumps but no waterside economizer. +
                      CHW distribution +Variable primary-only
                      +Constant primary-only
                      +Constant primary-variable secondary
                      +Variable primary-variable secondary with centralized secondary pumps
                      +Variable primary-variable secondary with distributed secondary pumps +
                      +Constant primary-only systems are typically encountered when +only one or two very large air handlers are served by the plant.
                      +Variable primary-variable secondary with centralized secondary pumps +refers to configurations with a single group of secondary pumps that +is typically integrated into the plant.
                      +Variable secondary with distributed secondary pumps refers to configurations +with multiple secondary loops, each loop being served by a dedicated group +of secondary pumps. +
                      Primary CHW pump arrangement +Headered
                      +Dedicated +
                      +Headered pumps are required (and automatically selected) for configurations with +
                        +
                      • series chillers, or
                      • +
                      • waterside economizer.
                      • +
                      +
                      Type of primary CHW pumps for constant flow configurations +Constant speed pumps
                      +Variable speed pumps operated at a constant speed +
                      +Variable speed pumps operated at a constant speed most commonly applies +to constant flow primary-only plants, for example, a plant serving +only one or two very large air handlers. +
                      Coolers +Open-circuit cooling towers in parallel + +Currently, only open-circuit cooling towers in parallel are supported. +
                      Cooler inlet and outlet isolation valves +Two-way two-position valve
                      +No valve +
                      +
                      CW pump arrangement +Headered
                      +Dedicated +
                      +Headered pumps are required (and automatically selected) for configurations with +waterside economizer. +
                      Type of CW pumps +Constant speed pumps
                      +Variable speed pumps +
                      +Variable speed pumps are required (and automatically selected) for configurations with +waterside economizer. +
                      Waterside economizer +No waterside economizer
                      +Heat exchanger with pump for CHW flow control
                      +Heat exchanger with bypass valve for CHW flow control +
                      Controller +ASHRAE Guideline 36 controller +An open loop controller is also available for validation purposes only.
                      +

                      References

                      +
                        +
                      • +ASHRAE, 2021. Guideline 36-2021, High-Performance Sequences of Operation +for HVAC Systems. Atlanta, GA. +
                      • +
                      +", revisions=" +
                        +
                      • +November 18, 2022, by Antoine Gautier:
                        +First implementation. +
                      • +
                      +")); +end WaterCooled; diff --git a/Buildings/Templates/Plants/Chillers/package.mo b/Buildings/Templates/Plants/Chillers/package.mo new file mode 100644 index 00000000000..1eca4b88cb6 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/package.mo @@ -0,0 +1,8 @@ +within Buildings.Templates.Plants; +package Chillers "Chilled water plants" +annotation (Documentation(info=" +

                      +This package contains templates for chilled water plants. +

                      +")); +end Chillers; diff --git a/Buildings/Templates/Plants/Chillers/package.order b/Buildings/Templates/Plants/Chillers/package.order new file mode 100644 index 00000000000..6945af2ace8 --- /dev/null +++ b/Buildings/Templates/Plants/Chillers/package.order @@ -0,0 +1,8 @@ +AirCooled +WaterCooled +Components +Configuration +Data +Types +Validation +Interfaces diff --git a/Buildings/Templates/Plants/Controls/Pumps/Generic/StagingHeaderedDeltaP.mo b/Buildings/Templates/Plants/Controls/Pumps/Generic/StagingHeaderedDeltaP.mo index c10f638340e..f105fa5d98a 100644 --- a/Buildings/Templates/Plants/Controls/Pumps/Generic/StagingHeaderedDeltaP.mo +++ b/Buildings/Templates/Plants/Controls/Pumps/Generic/StagingHeaderedDeltaP.mo @@ -325,7 +325,7 @@ equation Documentation( info="

                      -Pumps are staged as a function of the ratio ratV_flow +Pumps are staged as a function of the flow ratio FR of current volume flow rate V_flow to design volume flow rate V_flow_nominal, the number of operating pumps nPum_actual diff --git a/Buildings/Templates/Plants/HeatPumps/Components/Data/HeatPumpGroup.mo b/Buildings/Templates/Plants/HeatPumps/Components/Data/HeatPumpGroup.mo index 61b988302c3..94144a23516 100644 --- a/Buildings/Templates/Plants/HeatPumps/Components/Data/HeatPumpGroup.mo +++ b/Buildings/Templates/Plants/HeatPumps/Components/Data/HeatPumpGroup.mo @@ -23,7 +23,8 @@ record HeatPumpGroup Dialog(group="Configuration", enable=false)); // Default fluid properties - parameter Modelica.Units.SI.SpecificHeatCapacity cpHeaWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq + parameter Modelica.Units.SI.SpecificHeatCapacity cpHeaWat_default= + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq "HW default specific heat capacity" annotation (Dialog(group="Configuration", enable=false)); @@ -37,7 +38,8 @@ record HeatPumpGroup cpHeaWat_default "CHW default specific heat capacity"; parameter Modelica.Units.SI.SpecificHeatCapacity cpSou_default=if typ == - Buildings.Templates.Components.Types.HeatPump.AirToWater then Buildings.Utilities.Psychrometrics.Constants.cpAir + Buildings.Templates.Components.Types.HeatPump.AirToWater then + Buildings.Utilities.Psychrometrics.Constants.cpAir else Buildings.Utilities.Psychrometrics.Constants.cpWatLiq "Source fluid default specific heat capacity" annotation (Dialog(group="Configuration", @@ -114,7 +116,7 @@ record HeatPumpGroup enable=typ==Buildings.Templates.Components.Types.HeatPump.WaterToWater)); final parameter Modelica.Units.SI.MassFlowRate mSouHeaHp_flow_nominal=if typ == Buildings.Templates.Components.Types.HeatPump.WaterToWater then mSouWwHeaHp_flow_nominal - else Buildings.Templates.Data.Defaults.mAirFloByCapChi * abs(capHeaHp_nominal) + else Buildings.Templates.Data.Defaults.ratMFloAirByCapChi * abs(capHeaHp_nominal) "Source fluid mass flow rate in heating mode - Each heat pump" annotation (Evaluate=true); final parameter Modelica.Units.SI.PressureDifference dpSouHeaHp_nominal=if typ == @@ -136,7 +138,7 @@ record HeatPumpGroup enable=typ==Buildings.Templates.Components.Types.HeatPump.WaterToWater and is_rev)); final parameter Modelica.Units.SI.MassFlowRate mSouCooHp_flow_nominal=if typ == Buildings.Templates.Components.Types.HeatPump.WaterToWater then mSouWwCooHp_flow_nominal - else Buildings.Templates.Data.Defaults.mAirFloByCapChi * abs(capCooHp_nominal) + else Buildings.Templates.Data.Defaults.ratMFloAirByCapChi * abs(capCooHp_nominal) "Source fluid mass flow rate in cooling mode - Each heat pump" annotation (Evaluate=true); final parameter Modelica.Units.SI.PressureDifference dpSouCooHp_nominal= @@ -173,7 +175,7 @@ record HeatPumpGroup defaultComponentName="datHp", Documentation(info="

                      -This record provides the set of parameters for heat pump group models +This record provides the set of parameters for heat pump group models that can be found within Buildings.Templates.Plants.HeatPumps.Components.HeatPumpGroups. diff --git a/Buildings/Templates/Plants/HeatPumps/Components/Interfaces/PartialHeatPumpGroup.mo b/Buildings/Templates/Plants/HeatPumps/Components/Interfaces/PartialHeatPumpGroup.mo index 556187326a5..5c8ba7ff24f 100644 --- a/Buildings/Templates/Plants/HeatPumps/Components/Interfaces/PartialHeatPumpGroup.mo +++ b/Buildings/Templates/Plants/HeatPumps/Components/Interfaces/PartialHeatPumpGroup.mo @@ -214,16 +214,20 @@ model PartialHeatPumpGroup "Interface for heat pump group" parameter Boolean show_T=false "= true, if actual temperature at port is computed" annotation (Dialog(tab="Advanced",group="Diagnostics"),HideResult=true); - MediumHeaWat.ThermodynamicState sta_aChiHeaWat[nHp]=MediumHeaWat.setState_phX(ports_aChiHeaWat.p, noEvent(actualStream(ports_aChiHeaWat.h_outflow)), noEvent(actualStream(ports_aChiHeaWat.Xi_outflow))) + MediumHeaWat.ThermodynamicState sta_aChiHeaWat[nHp]=MediumHeaWat.setState_phX( + ports_aChiHeaWat.p, noEvent(actualStream(ports_aChiHeaWat.h_outflow)), noEvent(actualStream(ports_aChiHeaWat.Xi_outflow))) if show_T "CHW/HW medium properties in port_aChiHeaWat"; - MediumHeaWat.ThermodynamicState sta_bChiHeaWat[nHp]=MediumHeaWat.setState_phX(ports_bChiHeaWat.p, noEvent(actualStream(ports_bChiHeaWat.h_outflow)), noEvent(actualStream(ports_bChiHeaWat.Xi_outflow))) + MediumHeaWat.ThermodynamicState sta_bChiHeaWat[nHp]=MediumHeaWat.setState_phX( + ports_bChiHeaWat.p, noEvent(actualStream(ports_bChiHeaWat.h_outflow)), noEvent(actualStream(ports_bChiHeaWat.Xi_outflow))) if show_T "CHW/HW medium properties in port_bChiHeaWat"; - MediumSou.ThermodynamicState sta_aSou[nHp]=MediumSou.setState_phX(ports_aSou.p, noEvent(actualStream(ports_aSou.h_outflow)), noEvent(actualStream(ports_aSou.Xi_outflow))) + MediumSou.ThermodynamicState sta_aSou[nHp]=MediumSou.setState_phX( + ports_aSou.p, noEvent(actualStream(ports_aSou.h_outflow)), noEvent(actualStream(ports_aSou.Xi_outflow))) if show_T "Source medium properties in port_aSou"; - MediumSou.ThermodynamicState sta_bSou[nHp]=MediumSou.setState_phX(ports_bSou.p, noEvent(actualStream(ports_bSou.h_outflow)), noEvent(actualStream(ports_bSou.Xi_outflow))) + MediumSou.ThermodynamicState sta_bSou[nHp]=MediumSou.setState_phX( + ports_bSou.p, noEvent(actualStream(ports_bSou.h_outflow)), noEvent(actualStream(ports_bSou.Xi_outflow))) if show_T "Source medium properties in port_bSou"; protected diff --git a/Buildings/Templates/Plants/HeatPumps/Components/ValvesIsolation.mo b/Buildings/Templates/Plants/HeatPumps/Components/ValvesIsolation.mo index 79ddf2dddcf..a1f1e42c5d5 100644 --- a/Buildings/Templates/Plants/HeatPumps/Components/ValvesIsolation.mo +++ b/Buildings/Templates/Plants/HeatPumps/Components/ValvesIsolation.mo @@ -150,17 +150,17 @@ model ValvesIsolation "Time needed to open or close valve" annotation (__ctrlFlow(enable=false), Dialog(tab="Dynamics",group="Time needed to open or close valve", - enable=use_strokeTime and have_valHpInlIso or have_valHpOutIso)); + enable=use_strokeTime and (have_valHpInlIso or have_valHpOutIso))); parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput "Type of initialization (no init/steady state/initial state/initial output)" annotation (__ctrlFlow(enable=false), Dialog(tab="Dynamics",group="Time needed to open or close valve", - enable=use_strokeTime and have_valHpInlIso or have_valHpOutIso)); + enable=use_strokeTime and (have_valHpInlIso or have_valHpOutIso))); parameter Real y_start=1 "Initial position of actuator" annotation (__ctrlFlow(enable=false), Dialog(tab="Dynamics",group="Time needed to open or close valve", - enable=use_strokeTime and have_valHpInlIso or have_valHpOutIso)); + enable=use_strokeTime and (have_valHpInlIso or have_valHpOutIso))); parameter Boolean from_dp=true "= true, use m_flow = f(dp) else dp = f(m_flow)" annotation (Evaluate=true, diff --git a/Buildings/Templates/Plants/HeatPumps/Interfaces/PartialHeatPumpPlant.mo b/Buildings/Templates/Plants/HeatPumps/Interfaces/PartialHeatPumpPlant.mo index d80f9b844a8..1e998c4a865 100644 --- a/Buildings/Templates/Plants/HeatPumps/Interfaces/PartialHeatPumpPlant.mo +++ b/Buildings/Templates/Plants/HeatPumps/Interfaces/PartialHeatPumpPlant.mo @@ -353,8 +353,7 @@ partial model PartialHeatPumpPlant final parameter Modelica.Units.SI.HeatFlowRate capHea_nominal=if have_heaWat then abs(dat.hp.capHeaHp_nominal) * nHp else 0 "Heating capacity - All units"; - final parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal= - capHea_nominal + final parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal=capHea_nominal "Heating heat flow rate - All units"; final parameter Modelica.Units.SI.Temperature THeaWatSup_nominal=dat.ctl.THeaWatSup_nominal "Maximum HW supply temperature"; @@ -374,8 +373,7 @@ partial model PartialHeatPumpPlant final parameter Modelica.Units.SI.HeatFlowRate capCoo_nominal=if have_chiWat then abs(dat.hp.capCooHp_nominal) * nHp else 0 "Cooling capacity - All units"; - final parameter Modelica.Units.SI.HeatFlowRate QCoo_flow_nominal=- - capCoo_nominal + final parameter Modelica.Units.SI.HeatFlowRate QCoo_flow_nominal=-capCoo_nominal "Cooling heat flow rate - All units"; final parameter Modelica.Units.SI.Temperature TChiWatSup_nominal=dat.ctl.TChiWatSup_nominal "Minimum CHW supply temperature"; diff --git a/Buildings/Templates/Plants/HeatPumps/Validation/AirToWater.mo b/Buildings/Templates/Plants/HeatPumps/Validation/AirToWater.mo index 99a7aaf4f5f..2d822810e88 100644 --- a/Buildings/Templates/Plants/HeatPumps/Validation/AirToWater.mo +++ b/Buildings/Templates/Plants/HeatPumps/Validation/AirToWater.mo @@ -11,8 +11,7 @@ model AirToWater Dialog(group="Configuration")); inner parameter UserProject.Data.AllSystems datAll( pla( - final cfg=pla.cfg)) - "Plant parameters" + final cfg=pla.cfg)) "Plant parameters" annotation (Placement(transformation(extent={{160,160},{180,180}}))); parameter Boolean allowFlowReversal=true "= true to allow flow reversal, false restricts to design direction (port_a -> port_b)" @@ -107,8 +106,7 @@ model AirToWater "AHU control bus" annotation (Placement(transformation(extent={{-60,120},{-20,160}}), iconTransformation(extent={{-340,-140},{-300,-100}}))); - Interfaces.Bus busPla - "Plant control bus" + Interfaces.Bus busPla "Plant control bus" annotation (Placement(transformation(extent={{-100,-60},{-60,-20}}), iconTransformation(extent={{-370,-70},{-330,-30}}))); Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ratFlo( @@ -167,8 +165,7 @@ model AirToWater "Importance multiplier" annotation (Placement(transformation(extent={{0,130},{-20,150}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant cst[4]( - each k=10) - "Constant" + each k=10) "Request multiplier factor" annotation (Placement(transformation(extent={{40,170},{20,190}}))); Buildings.Fluid.FixedResistances.PressureDrop pipHeaWat( redeclare final package Medium=Medium, @@ -319,7 +316,7 @@ Three equally sized heat pumps are modeled, which can all be lead/lag alternated A heat recovery chiller is included (pla.have_hrc_select=true) and connected to the HW and CHW return pipes (sidestream integration). A unique aggregated load is modeled on each loop by means of a cooling or heating -component controlled to maintain a constant ΔT +component controlled to maintain a constant ΔT, and a modulating valve controlled to track a prescribed flow rate. An importance multiplier of 10 is applied to the plant requests and reset requests generated from the valve position. diff --git a/Buildings/Templates/Plants/package.order b/Buildings/Templates/Plants/package.order index fd79608553d..637b37e2275 100644 --- a/Buildings/Templates/Plants/package.order +++ b/Buildings/Templates/Plants/package.order @@ -1,2 +1,4 @@ +Boilers +Chillers Controls HeatPumps diff --git a/Buildings/Templates/UsersGuide.mo b/Buildings/Templates/UsersGuide.mo index e556264e84b..06dff430993 100644 --- a/Buildings/Templates/UsersGuide.mo +++ b/Buildings/Templates/UsersGuide.mo @@ -53,13 +53,17 @@ The following abbreviations are used in that package.
                      AHUAir handling unit AOAnalog output (integer or real) CHWChilled water +CTCooling tower CWCondenser water DHWDomestic hot water DIDigital input (Boolean) DODigital output (Boolean) DOASDedicated outdoor air system DPDifferential pressure -HHWHeating hot water +FCUFan coil unit +DPDifferential pressure +HW or HHWHot water (heating) +MSMotor starter OAOutdoor air VAVVariable air volume VFDVariable frequency drive @@ -96,11 +100,11 @@ or a terminal unit (refer to Buildings.Templates.UsersGuide.Conventions for the definition of a system). A template is a self-contained model that can be reconfigured -by redeclaring some of its components or modifying some +by redeclaring some of its components or modifying some structural parameters. Such configuration does not require any further modification of the template. -In particular, all connect clauses between replaceable components +In particular, all connect clauses between replaceable components are resolved internally without user intervention. The same applies to sensors that are required for a specific control option and instantiated only when that option is selected. @@ -144,22 +148,22 @@ that originate from the zone equipment controller. If the controller selected for the zone equipment does not generate such requests, the simulation model will be singular. Selecting controllers from the same reference—e.g., -ASHRAE (2021)—is the safest way +ASHRAE (2021)—is the safest way to ensure consistency throughout the HVAC system model.

                      Model parameters

                      -Each template contains an instance dat of a record class that +Each template contains an instance dat of a record class that contains all design and operating parameters for parameterizing the subcomponents of the template. -For example, the multiple-zone VAV template +For example, the multiple-zone VAV template Buildings.Templates.AirHandlersFans.VAVMultiZone contains an instance of the record class Buildings.Templates.AirHandlersFans.Data.VAVMultiZone which contains the parameters for configuring the heating coil component, -as an instance of the record class +as an instance of the record class Buildings.Templates.Components.Data.Coil. All design and operating parameters should be assigned through this record instance @@ -170,22 +174,22 @@ In addition to these parameters, the record class also contains the configuratio parameters that define the system layout and control options. These configuration parameters are bound to the values that are assigned via the template's parameter dialog. -In this way, only the set of parameters needed for the particular system layout +In this way, only the set of parameters needed for the particular system layout for which the template is configured is displayed in the parameter dialog. Note that these configuration parameters are disabled in the record class -to avoid any modification by the user and preserve the bindings with the +to avoid any modification by the user and preserve the bindings with the template parameters.

                      -When creating a model for a complete HVAC system with multiple instances of +When creating a model for a complete HVAC system with multiple instances of different templates, the class -Buildings.Templates.Data.AllSystems +Buildings.Templates.Data.AllSystems. can be used at the top level of the model to assign all design and operating parameters. -This class allows the use of Modelica outer components to retrieve the configuration +This class allows the use of Modelica outer components to retrieve the configuration parameter values for each template instance based on the instance name. Thus, it is the avatar in the modeling environment of an HVAC project datasheet. -The validation models within +The validation models within Buildings.Templates.AirHandlersFans.Validation illustrate the use of this class. diff --git a/Buildings/UsersGuide/ReleaseNotes/Version_11_1_0.mo b/Buildings/UsersGuide/ReleaseNotes/Version_11_1_0.mo index 573dc76ddc3..22b9b848213 100644 --- a/Buildings/UsersGuide/ReleaseNotes/Version_11_1_0.mo +++ b/Buildings/UsersGuide/ReleaseNotes/Version_11_1_0.mo @@ -37,6 +37,14 @@ The following new components have been added to existing libraries:

                      + + + + +
                      Buildings.Controls.OBC.ASHRAE +
                      Buildings.Controls.OBC.ASHRAE.PrimarySystem + Created chilled plant sequences based on ASHRAE G36. +
                      xxx