diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/CondensationControl.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/CondensationControl.mo
new file mode 100644
index 00000000000..db9b361dc15
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/CondensationControl.mo
@@ -0,0 +1,238 @@
+within Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints;
+block CondensationControl
+ "Sequence to calculate setpoint limits for condensation control in non-condesing boilers"
+
+ parameter Boolean have_priOnl = false
+ "True: Primary-only plant; False: Primary-secondary plant";
+
+ parameter Boolean have_varPriPum = true
+ "True: Variable speed pumps in primary loop; False: Constant speed pumps in primary loop"
+ annotation(Evaluate=true,Dialog(enable=(not have_priOnl)));
+
+ parameter Integer nSta=5
+ "Number of stages";
+
+ parameter Real TRetSet(
+ final unit="K",
+ final displayUnit="K",
+ final quantity="ThermodynamicTemperature") = 60
+ "Minimum hot water return temperature for optimal non-condensing boiler performance";
+
+ parameter Real TRetMinAll(
+ final unit="K",
+ final displayUnit="K",
+ final quantity="ThermodynamicTemperature") = 57.2
+ "Minimum allowed hot water return temperature for non-condensing boiler";
+
+ parameter Real minSecPumSpe(
+ final unit="1",
+ final displayUnit="1",
+ final min=0,
+ final max=1) = 0
+ "Minimum secondary pump speed";
+
+ parameter Real minPriPumSpeSta[nSta](
+ final unit="1",
+ final displayUnit="1",
+ final min=0,
+ final max=1) = {0,0,0,0,0}
+ "Vector of minimum primary pump speed for each stage";
+
+ Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uCurSta
+ "Current stage"
+ annotation (Placement(transformation(extent={{-140,-20},{-100,20}}),
+ iconTransformation(extent={{-140,-20},{-100,20}})));
+
+ Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uStaTyp[nSta]
+ "Stage type vector"
+ annotation (Placement(transformation(extent={{-140,-90},{-100,-50}}),
+ iconTransformation(extent={{-140,-80},{-100,-40}})));
+
+ Buildings.Controls.OBC.CDL.Interfaces.RealInput THotWatRet(
+ final unit="K",
+ final displayUnit="K",
+ final quantity="ThermodynamicTemperature")
+ "Measured hot water return temperature"
+ annotation (Placement(transformation(extent={{-140,50},{-100,90}}),
+ iconTransformation(extent={{-140,40},{-100,80}})));
+
+ Buildings.Controls.OBC.CDL.Interfaces.RealOutput yMinBypValPos(
+ final unit="1",
+ final displayUnit="1",
+ final min=0,
+ final max=1) if have_priOnl
+ "Minimum allowed setpoint of bypass valve position"
+ annotation (Placement(transformation(extent={{100,30},{140,70}}),
+ iconTransformation(extent={{100,40},{140,80}})));
+
+ Buildings.Controls.OBC.CDL.Interfaces.RealOutput yMinPriPumSpe(
+ final unit="1",
+ final displayUnit="1",
+ final min=0,
+ final max=1) if (have_varPriPum and not have_priOnl)
+ "Minimum allowed primary pump speed"
+ annotation (Placement(transformation(extent={{100,-20},{140,20}}),
+ iconTransformation(extent={{100,-20},{140,20}})));
+
+ Buildings.Controls.OBC.CDL.Interfaces.RealOutput yMaxSecPumSpe(
+ final unit="1",
+ final displayUnit="1",
+ final min=0,
+ final max=1) if not have_priOnl
+ "Maximum allowed secondary pump speed"
+ annotation (Placement(transformation(extent={{100,-70},{140,-30}}),
+ iconTransformation(extent={{100,-80},{140,-40}})));
+
+protected
+ Buildings.Controls.OBC.CDL.Logical.Switch swi
+ "Pass 0 regulation signal if stage type is not non-condensing"
+ annotation (Placement(transformation(extent={{-50,40},{-30,60}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(
+ final k=0)
+ "Zero source"
+ annotation (Placement(transformation(extent={{-90,20},{-70,40}})));
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.ProportionalRegulator proReg(
+ final TRetSet=TRetSet,
+ final TRetMinAll=TRetMinAll)
+ "Proportional regulator"
+ annotation (Placement(transformation(extent={{-90,60},{-70,80}})));
+
+ Buildings.Controls.OBC.CDL.Routing.RealExtractor extIndSig(
+ final nin=nSta)
+ "Identify stage type for current stage"
+ annotation (Placement(transformation(extent={{-50,-80},{-30,-60}})));
+
+ Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea[nSta]
+ "Integer to Real conversion"
+ annotation (Placement(transformation(extent={{-90,-80},{-70,-60}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(
+ final threshold=Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.Types.BoilerTypes.condensingBoiler)
+ "Identify if current stage is condensing type or non-condensing type"
+ annotation (Placement(transformation(extent={{-10,-80},{10,-60}})));
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.PumpSpeedLimits pumSpeLim(
+ final have_varPriPum=have_varPriPum,
+ final nSta=nSta,
+ final minSecPumSpe=minSecPumSpe,
+ final minPriPumSpeSta=minPriPumSpeSta) if not have_priOnl
+ "Block to calculate pump speed limits"
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+
+equation
+ connect(THotWatRet, proReg.THotWatRet)
+ annotation (Line(points={{-120,70},{-92,70}},
+ color={0,0,127}));
+
+ connect(yMinBypValPos, yMinBypValPos)
+ annotation (Line(points={{120,50},{120,50}}, color={0,0,127}));
+
+ connect(uStaTyp, intToRea.u)
+ annotation (Line(points={{-120,-70},{-92,-70}},
+ color={255,127,0}));
+
+ connect(intToRea.y, extIndSig.u)
+ annotation (Line(points={{-68,-70},{-52,-70}},
+ color={0,0,127}));
+
+ connect(uCurSta, extIndSig.index) annotation (Line(points={{-120,0},{-60,0},{-60,
+ -90},{-40,-90},{-40,-82}},
+ color={255,127,0}));
+
+ connect(extIndSig.y, greThr.u)
+ annotation (Line(points={{-28,-70},{-12,-70}},
+ color={0,0,127}));
+
+ connect(proReg.yRegSig, swi.u1) annotation (Line(points={{-68,70},{-60,70},{-60,
+ 58},{-52,58}}, color={0,0,127}));
+ connect(greThr.y, swi.u2) annotation (Line(points={{12,-70},{20,-70},{20,-50},
+ {-56,-50},{-56,50},{-52,50}}, color={255,0,255}));
+ connect(swi.y, yMinBypValPos) annotation (Line(points={{-28,50},{120,50}},
+ color={0,0,127}));
+ connect(con.y, swi.u3) annotation (Line(points={{-68,30},{-60,30},{-60,42},{-52,
+ 42}}, color={0,0,127}));
+ connect(swi.y, pumSpeLim.uRegSig) annotation (Line(points={{-28,50},{-20,50},{
+ -20,-5},{-12,-5}}, color={0,0,127}));
+ connect(uCurSta, pumSpeLim.uCurSta) annotation (Line(points={{-120,0},{-60,0},
+ {-60,5},{-12,5}}, color={255,127,0}));
+ connect(pumSpeLim.yMinPriPumSpe, yMinPriPumSpe)
+ annotation (Line(points={{12,5},{30,5},{30,0},{120,0}},color={0,0,127}));
+ connect(pumSpeLim.yMaxSecPumSpe, yMaxSecPumSpe) annotation (Line(points={{12,-5},
+ {30,-5},{30,-50},{120,-50}}, color={0,0,127}));
+ annotation (defaultComponentName=
+ "conSet",
+ Icon(graphics={
+ Rectangle(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,0},
+ fillColor={255,255,255},
+ fillPattern=FillPattern.Solid,
+ lineThickness=0.1),
+ 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}},
+ lineColor={0,0,255},
+ textString="%name"),
+ Ellipse(
+ extent={{-80,80},{80,-80}},
+ lineColor={28,108,200},
+ fillColor={170,255,213},
+ fillPattern=FillPattern.Solid)},
+ coordinateSystem(
+ preserveAspectRatio=false,
+ extent={{-100,-100},{100,100}})),
+ Diagram(
+ coordinateSystem(preserveAspectRatio=false,
+ extent={{-100,-100},{100,100}})),
+ Documentation(
+ info="
+
+ Block that generates condensation control setpoints according to ASHRAE RP-1711,
+ March, 2020 draft, section 5.3.5.
+
+
+ The sequence calculates the condensation control setpoints for minimum bypass
+ valve position yMinBypValPos
, minimum primary pump speed yMinPriPumSpe
+ and maximum secondary pump speed yMaxSecPumSpe
using the following calculations:
+
+ -
+ Block
proReg
implemented in the class
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.ProportionalRegulator
+ uses the measured hot water return temperature THotWatRet
to generate a regulation signal with P-only control loop.
+
+ -
+ The regulation signal is used as is for
yMinBypValPos
.
+
+ -
+ The regulation signal is used by block
pumSpeLim
implemented in the class
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.PumpSpeedLimits
+ to generate the pump speed limits yMinPriPumSpe
and yMaxSecPumSpe
.
+
+
+
+
+
+ Validation plot generated from model
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Validation.CondensationControl.
+
+ ",
+ revisions="
+
+ -
+ May 18, 2020, by Karthik Devaprasad:
+ First implementation.
+
+
+ "));
+end CondensationControl;
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/ProportionalRegulator.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/ProportionalRegulator.mo
new file mode 100644
index 00000000000..7c8695e3da4
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/ProportionalRegulator.mo
@@ -0,0 +1,128 @@
+within Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences;
+block ProportionalRegulator
+ "Sequence to calculate regulation signal with measured return temperature as input"
+
+ parameter Real TRetSet(
+ final unit="K",
+ final displayUnit="K",
+ final quantity="ThermodynamicTemperature") = 60
+ "Minimum hot water return temperature for optimal non-condensing boiler performance";
+
+ parameter Real TRetMinAll(
+ final unit="K",
+ final displayUnit="K",
+ final quantity="ThermodynamicTemperature") = 57.2
+ "Minimum allowed hot water return temperature for non-condensing boiler";
+
+ Buildings.Controls.OBC.CDL.Interfaces.RealInput THotWatRet(
+ final unit="K",
+ final displayUnit="K",
+ final quantity="ThermodynamicTemperature")
+ "Measured hot water return temperature"
+ annotation (Placement(transformation(extent={{-140,-20},{-100,20}}),
+ iconTransformation(extent={{-140,-20},{-100,20}})));
+
+ Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRegSig(
+ final unit="1",
+ final displayUnit="1",
+ final min=0,
+ final max=1)
+ "Regulation signal from P-only loop for condensation control"
+ annotation (Placement(transformation(extent={{100,-20},{140,20}}),
+ iconTransformation(extent={{100,-20},{140,20}})));
+
+protected
+ Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar(
+ final p=TRetSet,
+ final k=-1)
+ "Compare hot water return temperature and minimum return temperature"
+ annotation (Placement(transformation(extent={{-60,-10},{-40,10}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Limiter lim(
+ final uMax=TRetSet - TRetMinAll,
+ final uMin=0)
+ "Limit input for calculating control signal"
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Gain gai(
+ final k=1/(TRetSet - TRetMinAll))
+ "Calculate control signal"
+ annotation (Placement(transformation(extent={{40,-10},{60,10}})));
+
+equation
+ connect(addPar.u, THotWatRet)
+ annotation (Line(points={{-62,0},{-120,0}}, color={0,0,127}));
+
+ connect(lim.u, addPar.y)
+ annotation (Line(points={{-12,0},{-38,0}}, color={0,0,127}));
+
+ connect(lim.y, gai.u)
+ annotation (Line(points={{12,0},{38,0}}, color={0,0,127}));
+
+ connect(gai.y, yRegSig)
+ annotation (Line(points={{62,0},{120,0}}, color={0,0,127}));
+
+ annotation (defaultComponentName=
+ "proReg",
+ Icon(graphics={
+ Rectangle(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,0},
+ fillColor={255,255,255},
+ fillPattern=FillPattern.Solid,
+ lineThickness=0.1),
+ 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}},
+ lineColor={0,0,255},
+ textString="%name"),
+ Ellipse(
+ extent={{-80,80},{80,-80}},
+ lineColor={28,108,200},
+ fillColor={170,255,213},
+ fillPattern=FillPattern.Solid)},
+ coordinateSystem(
+ preserveAspectRatio=false,
+ extent={{-100,-100},{100,100}})),
+ Diagram(
+ coordinateSystem(preserveAspectRatio=false,
+ extent={{-100,-100},{100,100}})),
+ Documentation(
+ info="
+
+ Block that generates proportional regulation signal for condensation control
+ in non-condensing boilers according to RP-1711, March, 2020 draft, section
+ 5.3.5.
+
+
+ The minimum bypass valve position yProReg
is calculated
+ as follows:
+
+ The measured hot-water return temperature THotWatRet
is compared
+ to the minimum hot water return temperature for optimal operation TRetSet
,
+ with the output yProReg
varying linearly from 0% at
+ TRetSet
to 100% at TRetMinAll
.
+
+
+
+
+ Validation plot generated from model
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.Validation.ProportionalRegulator.
+
+ ",
+ revisions="
+
+ -
+ July 21, 2020, by Karthik Devaprasad:
+ First implementation.
+
+
+ "));
+end ProportionalRegulator;
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/PumpSpeedLimits.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/PumpSpeedLimits.mo
new file mode 100644
index 00000000000..10433a0f7ac
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/PumpSpeedLimits.mo
@@ -0,0 +1,263 @@
+within Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences;
+block PumpSpeedLimits
+ "Sequence to calculate pump speed limits from regulation signal"
+
+ parameter Boolean have_varPriPum = true
+ "True: Variable speed pumps in primary loop; False: Constant speed pumps in primary loop";
+
+ parameter Integer nSta = 5
+ "Number of stages"
+ annotation(Evaluate=true,Dialog(enable=have_varPriPum));
+
+ parameter Real minSecPumSpe(
+ final unit="1",
+ final displayUnit="1",
+ final min=0,
+ final max=1) = 0
+ "Minimum secondary pump speed";
+
+ parameter Real minPriPumSpeSta[nSta](
+ final unit="1",
+ final displayUnit="1",
+ final min=0,
+ final max=1) = {0,0,0,0,0}
+ "Vector of minimum primary pump speed for each stage"
+ annotation(Evaluate=true,Dialog(enable=have_varPriPum));
+
+ Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uCurSta if have_varPriPum
+ "Current stage"
+ annotation (Placement(transformation(extent={{-140,30},{-100,70}}),
+ iconTransformation(extent={{-140,30},{-100,70}})));
+
+ Buildings.Controls.OBC.CDL.Interfaces.RealInput uRegSig(
+ final unit="K",
+ final displayUnit="K",
+ final quantity="ThermodynamicTemperature")
+ "Regulation signal from proportional regulator"
+ annotation (Placement(transformation(extent={{-140,-20},{-100,20}}),
+ iconTransformation(extent={{-140,-70},{-100,-30}})));
+
+ Buildings.Controls.OBC.CDL.Interfaces.RealOutput yMinPriPumSpe(
+ final unit="1",
+ final displayUnit="1",
+ final min=0,
+ final max=1) if have_varPriPum
+ "Minimum allowed primary pump speed"
+ annotation (Placement(transformation(extent={{100,10},{140,50}}),
+ iconTransformation(extent={{100,30},{140,70}})));
+
+ Buildings.Controls.OBC.CDL.Interfaces.RealOutput yMaxSecPumSpe(
+ final unit="1",
+ final displayUnit="1",
+ final min=0,
+ final max=1)
+ "Maximum allowed secondary pump speed"
+ annotation (Placement(transformation(extent={{100,-20},{140,20}}),
+ iconTransformation(extent={{100,-70},{140,-30}})));
+
+protected
+ Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar2(
+ final p=-0.5,
+ final k=1) if have_varPriPum
+ "Extract secondary pump signal from regulation signal"
+ annotation (Placement(transformation(extent={{-60,-10},{-40,10}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Limiter lim1(
+ final uMax=0.5,
+ final uMin=0) if have_varPriPum
+ "Limit signal between 0 and 0.5"
+ annotation (Placement(transformation(extent={{-30,-10},{-10,10}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Gain gai1(
+ final k=2) if have_varPriPum
+ "Multiply signal by 2"
+ annotation (Placement(transformation(extent={{0,-10},{20,10}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar3(
+ final p=1,
+ final k=(minSecPumSpe - 1)) if have_varPriPum
+ "Generate secondary pump setpoint signal from regulation signal"
+ annotation (Placement(transformation(extent={{30,-10},{50,10}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar(
+ final p=1,
+ final k=(minSecPumSpe - 1)) if not have_varPriPum
+ "Generate secondary pump setpoint signal from regulation signal"
+ annotation (Placement(transformation(extent={{30,-50},{50,-30}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Limiter lim2(
+ final uMax=1,
+ final uMin=0) if not have_varPriPum
+ "Limit signal between 0 and 1"
+ annotation (Placement(transformation(extent={{-30,-50},{-10,-30}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Limiter lim(
+ final uMax=0.5,
+ final uMin=0) if have_varPriPum
+ "Limit signal between 0 and 0.5"
+ annotation (Placement(transformation(extent={{-60,20},{-40,40}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Gain gai(
+ final k=2) if have_varPriPum
+ "Multiply signal by 2"
+ annotation (Placement(transformation(extent={{-30,20},{-10,40}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Product pro if have_varPriPum
+ "Normalize regulation signal in terms of pump speed"
+ annotation (Placement(transformation(extent={{0,20},{20,40}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Add add2 if have_varPriPum
+ "Add minimum pump speed value to normalized regulation signal"
+ annotation (Placement(transformation(extent={{30,20},{50,40}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1(
+ final p=1,
+ final k=-1) if have_varPriPum
+ "Subtract minimum primary pump speed from 1"
+ annotation (Placement(transformation(extent={{-30,70},{-10,90}})));
+
+ Buildings.Controls.OBC.CDL.Routing.RealExtractor extIndSig1(
+ final nin=nSta) if have_varPriPum
+ "Identify minimum primary pump speed for current stage"
+ annotation (Placement(transformation(extent={{-60,70},{-40,90}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con2[nSta](
+ final k=minPriPumSpeSta) if have_varPriPum
+ "Source signal for B-MinPriPumpSpdStage"
+ annotation (Placement(transformation(extent={{-90,70},{-70,90}})));
+
+equation
+
+ connect(uRegSig, addPar2.u) annotation (Line(points={{-120,0},{-62,0}},
+ color={0,0,127}));
+
+ connect(addPar2.y, lim1.u)
+ annotation (Line(points={{-38,0},{-32,0}}, color={0,0,127}));
+
+ connect(lim1.y, gai1.u)
+ annotation (Line(points={{-8,0},{-2,0}}, color={0,0,127}));
+
+ connect(gai1.y, addPar3.u)
+ annotation (Line(points={{22,0},{28,0}}, color={0,0,127}));
+
+ connect(addPar3.y, yMaxSecPumSpe) annotation (Line(points={{52,0},{120,0}},
+ color={0,0,127}));
+
+ connect(addPar.y, yMaxSecPumSpe) annotation (Line(points={{52,-40},{70,-40},{70,
+ 0},{120,0}}, color={0,0,127}));
+
+ connect(uRegSig, lim2.u) annotation (Line(points={{-120,0},{-90,0},{-90,-40},{
+ -32,-40}}, color={0,0,127}));
+
+ connect(lim2.y, addPar.u)
+ annotation (Line(points={{-8,-40},{28,-40}},color={0,0,127}));
+
+ connect(uRegSig, lim.u) annotation (Line(points={{-120,0},{-90,0},{-90,30},{-62,
+ 30}}, color={0,0,127}));
+
+ connect(lim.y, gai.u)
+ annotation (Line(points={{-38,30},{-32,30}}, color={0,0,127}));
+
+ connect(con2.y, extIndSig1.u)
+ annotation (Line(points={{-68,80},{-62,80}}, color={0,0,127}));
+
+ connect(add2.u2, pro.y) annotation (Line(points={{28,24},{26,24},{26,30},{22,30}},
+ color={0,0,127}));
+
+ connect(gai.y, pro.u2) annotation (Line(points={{-8,30},{-6,30},{-6,24},{-2,24}},
+ color={0,0,127}));
+
+ connect(extIndSig1.y, addPar1.u)
+ annotation (Line(points={{-38,80},{-32,80}}, color={0,0,127}));
+
+ connect(uCurSta, extIndSig1.index)
+ annotation (Line(points={{-120,50},{-50,50},{-50,68}}, color={255,127,0}));
+
+ connect(add2.y, yMinPriPumSpe)
+ annotation (Line(points={{52,30},{120,30}}, color={0,0,127}));
+
+ connect(addPar1.y, pro.u1) annotation (Line(points={{-8,80},{-6,80},{-6,36},{
+ -2,36}}, color={0,0,127}));
+ connect(extIndSig1.y, add2.u1) annotation (Line(points={{-38,80},{-36,80},{
+ -36,60},{26,60},{26,36},{28,36}}, color={0,0,127}));
+ annotation (defaultComponentName="pumSpeLim",
+ Icon(graphics={
+ Rectangle(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,0},
+ fillColor={255,255,255},
+ fillPattern=FillPattern.Solid,
+ lineThickness=0.1),
+ 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}},
+ lineColor={0,0,255},
+ textString="%name"),
+ Ellipse(
+ extent={{-80,80},{80,-80}},
+ lineColor={28,108,200},
+ fillColor={170,255,213},
+ fillPattern=FillPattern.Solid)},
+ coordinateSystem(
+ preserveAspectRatio=false,
+ extent={{-100,-100},{100,100}})),
+ Diagram(
+ coordinateSystem(preserveAspectRatio=false,
+ extent={{-100,-100},{100,100}})),
+ Documentation(
+ info="
+
+ Block that generates pump speed limits for condensation control
+ in non-condensing boilers according to RP-1711, March, 2020 draft, sections
+ 5.3.5.3, 5.3.5.4, 5.3.5.5 and 5.3.5.6.
+
+
+ The maximum allowed secondary pump speed yMaxSecPumSpe
is calculated
+ as follows:
+
+ -
+ if the primary pumps are constant speed
have_varPriPum=false
,
+ yMaxSecPumSpe
is reset from 100% pump speed at 0% of regulation
+ signal uRegSig
to minimum pump speed minSecPumSpe
+ at 100% of uRegSig
.
+
+ -
+ if the primary pumps are variable speed
have_varPriPum=true
,
+ yMaxSecPumSpe
is reset from 100% pump speed at 50% of uRegSig
+ to minSecPumSpe
at 100% of uRegSig
.
+
+
+
+
+ If have_varPriPum=true
, the minimum allowed primary pump speed
+ yMinPriPumSpe
is calculated as follows:
+
+ -
+
yMinPriPumSpe
is reset from minPriPumSpeSta
at 0%
+ of uRegSig
to 100% pump speed at 100% of uRegSig
.
+
+
+
+
+
+
+ Validation plot generated from model
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.Validation.PumpSpeedLimits.
+
+ ",
+ revisions="
+
+ -
+ July 22, 2020, by Karthik Devaprasad:
+ First implementation.
+
+
+ "));
+end PumpSpeedLimits;
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/ProportionalRegulator.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/ProportionalRegulator.mo
new file mode 100644
index 00000000000..266d5451f24
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/ProportionalRegulator.mo
@@ -0,0 +1,58 @@
+within Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.Validation;
+model ProportionalRegulator
+ "Validation model for ProportionalRegulator sequence"
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.ProportionalRegulator
+ proReg(
+ final TRetSet=60,
+ final TRetMinAll=57.2)
+ "Test model for ProportionalRegulator"
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+
+protected
+ Buildings.Controls.OBC.CDL.Continuous.Sources.Sine sin(
+ final amplitude=5,
+ final freqHz=1/60,
+ final offset=60)
+ "Sine input"
+ annotation (Placement(transformation(extent={{-50,-10},{-30,10}})));
+
+equation
+ connect(sin.y, proReg.THotWatRet)
+ annotation (Line(points={{-28,0},{-12,0}}, color={0,0,127}));
+
+ annotation (
+ 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)),
+ experiment(
+ StopTime=60,
+ Interval=1,
+ Tolerance=1e-06),
+ __Dymola_Commands(file="./Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/ProportionalRegulator.mos"
+ "Simulate and plot"),
+ Documentation(info="
+
+ This example validates
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.ProportionalRegulator.
+
+ ", revisions="
+
+ -
+ July 21, 2020, by Karthik Devaprasad:
+ First implementation.
+
+
+ "));
+end ProportionalRegulator;
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/PumpSpeedLimits.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/PumpSpeedLimits.mo
new file mode 100644
index 00000000000..361b18c0455
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/PumpSpeedLimits.mo
@@ -0,0 +1,78 @@
+within Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.Validation;
+model PumpSpeedLimits
+ "Validation model for PumpSpeedLimits sequence"
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.PumpSpeedLimits
+ pumSpeLim(
+ final have_varPriPum=true,
+ final nSta=1,
+ final minSecPumSpe=0.1,
+ final minPriPumSpeSta={0.2})
+ "Testing scenario with variable primary pumps"
+ annotation (Placement(transformation(extent={{10,10},{30,30}})));
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.PumpSpeedLimits
+ pumSpeLim1(
+ final have_varPriPum=false,
+ final nSta=1,
+ final minSecPumSpe=0.1,
+ final minPriPumSpeSta={0.2})
+ "Testing scenario with fixed-speed primary pumps"
+ annotation (Placement(transformation(extent={{10,-30},{30,-10}})));
+
+protected
+ Buildings.Controls.OBC.CDL.Continuous.Sources.Sine sin(
+ final amplitude=0.6,
+ final freqHz=1/60,
+ final offset=0.50)
+ "Sine input"
+ annotation (Placement(transformation(extent={{-30,-30},{-10,-10}})));
+
+ Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(
+ final k=1)
+ "Constant Integer source"
+ annotation (Placement(transformation(extent={{-30,10},{-10,30}})));
+
+equation
+ connect(conInt.y, pumSpeLim.uCurSta) annotation (Line(points={{-8,20},{0,20},
+ {0,25},{8,25}}, color={255,127,0}));
+ connect(sin.y, pumSpeLim.uRegSig) annotation (Line(points={{-8,-20},{0,-20},{
+ 0,15},{8,15}}, color={0,0,127}));
+ connect(sin.y, pumSpeLim1.uRegSig) annotation (Line(points={{-8,-20},{0,-20},
+ {0,-25},{8,-25}}, color={0,0,127}));
+ annotation (
+ 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)),
+ experiment(
+ StopTime=60,
+ Interval=1,
+ Tolerance=1e-06),
+ __Dymola_Commands(file="./Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/PumpSpeedLimits.mos"
+ "Simulate and plot"),
+ Documentation(info="
+
+ This example validates
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.PumpSpeedLimits.
+
+ ", revisions="
+
+ -
+ July 22, 2020, by Karthik Devaprasad:
+ First implementation.
+
+
+ "));
+end PumpSpeedLimits;
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/package.mo
new file mode 100644
index 00000000000..6eff51d8f77
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/package.mo
@@ -0,0 +1,40 @@
+within Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences;
+package Validation "Collection of validation models"
+
+
+
+
+annotation (Icon(graphics={
+ Rectangle(
+ lineColor={200,200,200},
+ fillColor={248,248,248},
+ fillPattern=FillPattern.HorizontalCylinder,
+ extent={{-100,-100},{100,100}},
+ radius=25.0),
+ Rectangle(
+ lineColor={128,128,128},
+ extent={{-100,-100},{100,100}},
+ radius=25.0),
+ Polygon(
+ origin={8,14},
+ 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}})}),
+ Documentation(info="
+
+ This package contains validation models for the classes in
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.CondensationControl.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/BoilerPlant/SetPoints/Subsequences/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/package.order
new file mode 100644
index 00000000000..d5ec19c87d3
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/package.order
@@ -0,0 +1,2 @@
+ProportionalRegulator
+PumpSpeedLimits
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/package.mo
new file mode 100644
index 00000000000..1008f1f94b3
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/package.mo
@@ -0,0 +1,46 @@
+within Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints;
+package Subsequences "Subsequences for setpoint calculations"
+
+
+
+
+annotation(Icon(graphics={
+ Rectangle(
+ lineColor={200,200,200},
+ fillColor={248,248,248},
+ fillPattern=FillPattern.HorizontalCylinder,
+ extent={{-100,-100},{100,100}},
+ radius=25.0),
+ Rectangle(
+ lineColor={128,128,128},
+ extent={{-100,-100},{100,100}},
+ radius=25.0),
+ Ellipse(
+ origin={10,10},
+ fillColor={76,76,76},
+ pattern=LinePattern.None,
+ fillPattern=FillPattern.Solid,
+ extent={{-80.0,-80.0},{-20.0,-20.0}}),
+ Ellipse(
+ origin={10,10},
+ pattern=LinePattern.None,
+ fillPattern=FillPattern.Solid,
+ extent={{0.0,-80.0},{60.0,-20.0}}),
+ Ellipse(
+ origin={10,10},
+ fillColor={128,128,128},
+ pattern=LinePattern.None,
+ fillPattern=FillPattern.Solid,
+ extent={{0.0,0.0},{60.0,60.0}}),
+ Ellipse(
+ origin={10,10},
+ lineColor={128,128,128},
+ fillColor={255,255,255},
+ fillPattern=FillPattern.Solid,
+ extent={{-80.0,0.0},{-20.0,60.0}})}),
+ Documentation(info="
+
+ This package contains control subsequences for setpoint calculations.
+
+ "));
+end Subsequences;
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/package.order
new file mode 100644
index 00000000000..4ef1857ac5c
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/package.order
@@ -0,0 +1,3 @@
+ProportionalRegulator
+PumpSpeedLimits
+Validation
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Validation/CondensationControl.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Validation/CondensationControl.mo
new file mode 100644
index 00000000000..b56fe7f52ca
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Validation/CondensationControl.mo
@@ -0,0 +1,197 @@
+within Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Validation;
+model CondensationControl
+ "Validation model for CondensationControl sequence"
+
+ parameter Integer nSta=1
+ "Number of stages";
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.CondensationControl
+ conSet(
+ final have_priOnl=true,
+ final have_varPriPum=false,
+ final nSta=nSta,
+ final TRetSet=60,
+ final TRetMinAll=57.2,
+ final minSecPumSpe=0.1,
+ final minPriPumSpeSta={0.2})
+ "Setpoint generation for primary-only plant"
+ annotation (Placement(transformation(extent={{-40,40},{-20,60}})));
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.CondensationControl
+ conSet1(
+ final have_priOnl=false,
+ final have_varPriPum=true,
+ final nSta=1,
+ final TRetSet=60,
+ final TRetMinAll=57.2,
+ final minSecPumSpe=0.1,
+ final minPriPumSpeSta={0.2})
+ "Setpoint generation for primary-secondary plant with variable speed primary loop pumps"
+ annotation (Placement(transformation(extent={{60,40},{80,60}})));
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.CondensationControl
+ conSet2(
+ final have_priOnl=false,
+ final have_varPriPum=false,
+ final nSta=1,
+ final TRetSet=60,
+ final TRetMinAll=57.2,
+ final minSecPumSpe=0.1,
+ final minPriPumSpeSta={0.2})
+ "Setpoint generation for primary-secondary plant with constant speed primary loop pumps"
+ annotation (Placement(transformation(extent={{-40,-60},{-20,-40}})));
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.CondensationControl
+ conSet3(
+ final have_priOnl=false,
+ final have_varPriPum=true,
+ final nSta=1,
+ final TRetSet=60,
+ final TRetMinAll=57.2,
+ final minSecPumSpe=0.1,
+ final minPriPumSpeSta={0.2})
+ "Setpoint generation when only condensing boilers are operating"
+ annotation (Placement(transformation(extent={{60,-60},{80,-40}})));
+
+protected
+ Buildings.Controls.OBC.CDL.Continuous.Sources.Sine sin(
+ final amplitude=5,
+ final freqHz=1/60,
+ final offset=60)
+ "Sine input"
+ annotation (Placement(transformation(extent={{-80,70},{-60,90}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Sources.Sine sin1(
+ final amplitude=5,
+ final freqHz=1/60,
+ final offset=60)
+ "Sine input"
+ annotation (Placement(transformation(extent={{20,70},{40,90}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Sources.Sine sin2(
+ final amplitude=5,
+ final freqHz=1/60,
+ final offset=60)
+ "Sine input"
+ annotation (Placement(transformation(extent={{-80,-30},{-60,-10}})));
+
+ Buildings.Controls.OBC.CDL.Continuous.Sources.Sine sin3(
+ final amplitude=5,
+ final freqHz=1/60,
+ final offset=60)
+ "Sine input"
+ annotation (Placement(transformation(extent={{20,-30},{40,-10}})));
+
+ Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(
+ final k=1)
+ "Constant Integer source"
+ annotation (Placement(transformation(extent={{-80,40},{-60,60}})));
+
+ Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1(
+ final k=1)
+ "Constant Integer source"
+ annotation (Placement(transformation(extent={{20,40},{40,60}})));
+
+ Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt2(
+ final k=1)
+ "Constant Integer source"
+ annotation (Placement(transformation(extent={{-80,-60},{-60,-40}})));
+
+ Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt3(
+ final k=1)
+ "Constant Integer source"
+ annotation (Placement(transformation(extent={{20,-60},{40,-40}})));
+
+ Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt4[nSta](
+ final k={2})
+ "Stage type vector source"
+ annotation (Placement(transformation(extent={{-80,10},{-60,30}})));
+
+ Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt5[nSta](
+ final k={2})
+ "Stage type vector source"
+ annotation (Placement(transformation(extent={{20,10},{40,30}})));
+
+ Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt6[nSta](
+ final k={2})
+ "Stage type vector source"
+ annotation (Placement(transformation(extent={{-80,-90},{-60,-70}})));
+
+ Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt7[nSta](
+ final k={1})
+ "Stage type vector source"
+ annotation (Placement(transformation(extent={{20,-90},{40,-70}})));
+
+equation
+ connect(sin.y, conSet.THotWatRet) annotation (Line(points={{-58,80},{-50,80},{
+ -50,56},{-42,56}}, color={0,0,127}));
+
+ connect(sin2.y, conSet2.THotWatRet) annotation (Line(points={{-58,-20},{-50,-20},
+ {-50,-44},{-42,-44}}, color={0,0,127}));
+
+ connect(sin3.y, conSet3.THotWatRet) annotation (Line(points={{42,-20},{50,-20},
+ {50,-44},{58,-44}}, color={0,0,127}));
+
+ connect(conInt.y, conSet.uCurSta)
+ annotation (Line(points={{-58,50},{-42,50}}, color={255,127,0}));
+
+ connect(conInt1.y, conSet1.uCurSta)
+ annotation (Line(points={{42,50},{58,50}}, color={255,127,0}));
+
+ connect(conInt2.y, conSet2.uCurSta)
+ annotation (Line(points={{-58,-50},{-42,-50}}, color={255,127,0}));
+
+ connect(conInt3.y, conSet3.uCurSta)
+ annotation (Line(points={{42,-50},{58,-50}}, color={255,127,0}));
+
+ connect(conInt4.y, conSet.uStaTyp) annotation (Line(points={{-58,20},{-50,20},
+ {-50,44},{-42,44}}, color={255,127,0}));
+
+ connect(conInt5.y, conSet1.uStaTyp) annotation (Line(points={{42,20},{50,20},{
+ 50,44},{58,44}}, color={255,127,0}));
+
+ connect(conInt6.y, conSet2.uStaTyp) annotation (Line(points={{-58,-80},{-50,-80},
+ {-50,-56},{-42,-56}}, color={255,127,0}));
+
+ connect(conInt7.y, conSet3.uStaTyp) annotation (Line(points={{42,-80},{50,-80},
+ {50,-56},{58,-56}}, color={255,127,0}));
+
+ connect(sin1.y, conSet1.THotWatRet) annotation (Line(points={{42,80},{50,80},
+ {50,56},{58,56}}, color={0,0,127}));
+
+ annotation (
+ 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)),
+ experiment(
+ StopTime=60,
+ Interval=1,
+ Tolerance=1e-06),
+ __Dymola_Commands(file="./Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Validation/CondensationControl.mos"
+ "Simulate and plot"),
+ Documentation(info="
+
+ This example validates
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.CondensationControl.
+
+ ", revisions="
+
+ -
+ May 7, 2020, by Karthik Devaprasad:
+ First implementation.
+
+
+ "));
+end CondensationControl;
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Validation/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Validation/package.mo
new file mode 100644
index 00000000000..b546e2c19c4
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Validation/package.mo
@@ -0,0 +1,37 @@
+within Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints;
+package Validation "Collection of validation models"
+
+ annotation (Icon(graphics={
+ Rectangle(
+ lineColor={200,200,200},
+ fillColor={248,248,248},
+ fillPattern=FillPattern.HorizontalCylinder,
+ extent={{-100,-100},{100,100}},
+ radius=25.0),
+ Rectangle(
+ lineColor={128,128,128},
+ extent={{-100,-100},{100,100}},
+ radius=25.0),
+ Polygon(
+ origin={8,14},
+ 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}})}),
+ Documentation(info="
+
+ This package contains validation models for the classes in
+
+ Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.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/BoilerPlant/SetPoints/Validation/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Validation/package.order
new file mode 100644
index 00000000000..75158156278
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Validation/package.order
@@ -0,0 +1 @@
+CondensationControl
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/package.mo
new file mode 100644
index 00000000000..c7648f7c66c
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/package.mo
@@ -0,0 +1,26 @@
+within Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant;
+package SetPoints
+
+
+
+annotation (Icon(graphics={
+ Rectangle(
+ lineColor={200,200,200},
+ fillColor={248,248,248},
+ fillPattern=FillPattern.HorizontalCylinder,
+ extent={{-100,-100},{100,100}},
+ radius=25.0),
+ Rectangle(
+ lineColor={128,128,128},
+ extent={{-100,-100},{100,100}},
+ radius=25.0),
+ Text(
+ extent={{-100,100},{100,-100}},
+ lineColor={0,0,0},
+ textString="S")}),
+ Documentation(info="
+
+ This package contains boiler plant setpoint control sequences. The implementation
+ is based on sections 5.3.4, 5.3.5, and 5.3.8 in ASHRAE RP-1711, Draft on March 23, 2020.
+"));
+end SetPoints;
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/package.order
new file mode 100644
index 00000000000..8e9eb8ceb10
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/package.order
@@ -0,0 +1,3 @@
+CondensationControl
+Subsequences
+Validation
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/Types/BoilerTypes.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/Types/BoilerTypes.mo
new file mode 100644
index 00000000000..047306d5093
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/Types/BoilerTypes.mo
@@ -0,0 +1,39 @@
+within Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.Types;
+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;
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/Types/package.mo b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/Types/package.mo
new file mode 100644
index 00000000000..848584bd0e1
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/Types/package.mo
@@ -0,0 +1,46 @@
+within Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant;
+package Types "Package with type definitions for boiler plants"
+annotation (Documentation(info="
+
+ This package provides type definitions used in boiler plant control sequences.
+
+ ",
+ 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),
+ 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/BoilerPlant/Types/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/Types/package.order
new file mode 100644
index 00000000000..ffa2ca5ac4e
--- /dev/null
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/Types/package.order
@@ -0,0 +1 @@
+BoilerTypes
diff --git a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/package.order b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/package.order
index 8470d611953..9faad8541e7 100644
--- a/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/package.order
+++ b/Buildings/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/package.order
@@ -1 +1,3 @@
Generic
+SetPoints
+Types
diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/CondensationControl.png b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/CondensationControl.png
new file mode 100644
index 00000000000..69a47734826
Binary files /dev/null and b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/CondensationControl.png differ
diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/ProportionalRegulator.png b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/ProportionalRegulator.png
new file mode 100644
index 00000000000..5357f2411de
Binary files /dev/null and b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/ProportionalRegulator.png differ
diff --git a/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/PumpSpeedLimits.png b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/PumpSpeedLimits.png
new file mode 100644
index 00000000000..7cd58042832
Binary files /dev/null and b/Buildings/Resources/Images/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/PumpSpeedLimits.png differ
diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_BoilerPlant_SetPoints_Subsequences_Validation_ProportionalRegulator.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_BoilerPlant_SetPoints_Subsequences_Validation_ProportionalRegulator.txt
new file mode 100644
index 00000000000..4fe09db5501
--- /dev/null
+++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_BoilerPlant_SetPoints_Subsequences_Validation_ProportionalRegulator.txt
@@ -0,0 +1,12 @@
+last-generated=2020-07-28
+statistics-simulation=
+{
+ "linear": " ",
+ "nonlinear": " ",
+ "numerical Jacobians": "0"
+}
+proReg.THotWatRet=[6e+01, 6.031395338719434e+01, 6.062666699791529e+01, 6.093690493172229e+01, 6.124345011635225e+01, 6.154508590698242e+01, 6.184062199455361e+01, 6.212889489600248e+01, 6.240876761238084e+01, 6.267913432656856e+01, 6.293892669677734e+01, 6.318711856854804e+01, 6.342273719394728e+01, 6.36448439863515e+01, 6.385256589172698e+01, 6.404508209228516e+01, 6.422164143243162e+01, 6.438153080927931e+01, 6.452413173181651e+01, 6.464888007725384e+01, 6.475527954101562e+01, 6.484291834511325e+01, 6.491143800637415e+01, 6.496057127592938e+01, 6.499013520414874e+01, 6.5e+01, 6.499013520414874e+01, 6.496057133664694e+01, 6.491143791096262e+01, 6.484291834511325e+01, 6.475527954101562e+01, 6.464888007725384e+01, 6.452413194273326e+01, 6.438153056711249e+01, 6.422164143243162e+01, 6.404508209228516e+01, 6.385256589172698e+01, 6.364484432678538e+01, 6.342273682865402e+01, 6.318711837558766e+01, 6.293892669677734e+01, 6.267913453686079e+01, 6.240876804905079e+01, 6.212889444339827e+01, 6.184062176207599e+01, 6.154508590698242e+01, 6.124345035793387e+01, 6.093690529915541e+01, 6.062666662607115e+01, 6.031395320023773e+01, 6e+01, 5.968604679976227e+01, 5.937333337392885e+01, 5.906309470084459e+01, 5.875655061027085e+01, 5.845491409301758e+01, 5.815937731079125e+01, 5.787110555660749e+01, 5.759123195094367e+01, 5.732086630833415e+01, 5.706107330322266e+01, 5.681288085734748e+01, 5.657726317135063e+01, 5.635515567321031e+01, 5.614743474770793e+01, 5.595491409301758e+01, 5.577836185033084e+01, 5.561846561824184e+01, 5.547586424259106e+01, 5.535111647921241e+01, 5.524471664428711e+01, 5.515708522487409e+01, 5.508856208903862e+01, 5.50394248486793e+01, 5.500986486232791e+01, 5.5e+01, 5.500986486232791e+01, 5.50394248486793e+01, 5.508856208903862e+01, 5.515708522487409e+01, 5.524471664428711e+01, 5.535111647921241e+01, 5.547586424259106e+01, 5.561846561824184e+01, 5.577836185033084e+01, 5.595491409301758e+01, 5.614743474770793e+01, 5.635515567321031e+01, 5.657726317135063e+01, 5.681288085734748e+01, 5.706107330322266e+01, 5.732086630833415e+01, 5.759123195094367e+01, 5.787110555660749e+01, 5.815937731079125e+01, 5.845491409301758e+01, 5.875655061027085e+01, 5.906309470083836e+01, 5.937333337393515e+01, 5.968604580335164e+01, 6e+01]
+proReg.TRetMinAll=[5.720000076293945e+01, 5.720000076293945e+01]
+proReg.TRetSet=[6e+01, 6e+01]
+time=[0e+00, 6e+01]
+proReg.yRegSig=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.121258545000747e-01, 2.238092049047075e-01, 3.346096186817693e-01, 4.440888080573288e-01, 5.518160462379456e-01, 6.573655271364933e-01, 7.603200571442347e-01, 8.602745586775219e-01, 9.56833299525521e-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, 9.56833299525521e-01, 8.602745586775219e-01, 7.603200571442347e-01, 6.573655271364933e-01, 5.518160462379456e-01, 4.440888080573288e-01, 3.346096186839947e-01, 2.23809204902456e-01, 1.121262103688644e-01, 0e+00]
diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_BoilerPlant_SetPoints_Subsequences_Validation_PumpSpeedLimits.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_BoilerPlant_SetPoints_Subsequences_Validation_PumpSpeedLimits.txt
new file mode 100644
index 00000000000..9e45323f19f
--- /dev/null
+++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_BoilerPlant_SetPoints_Subsequences_Validation_PumpSpeedLimits.txt
@@ -0,0 +1,13 @@
+last-generated=2020-07-28
+statistics-simulation=
+{
+ "linear": " ",
+ "nonlinear": " ",
+ "numerical Jacobians": "0"
+}
+pumSpeLim.uRegSig=[5e-01, 5.376743063275602e-01, 5.751999586875818e-01, 6.124287873097954e-01, 6.492139042898054e-01, 6.8541020154953e-01, 7.208747323296468e-01, 7.554676044810981e-01, 7.890521778586632e-01, 8.214960643519617e-01, 8.526711463928223e-01, 8.824543998870947e-01, 9.107282844602312e-01, 9.373811400799414e-01, 9.623079451542254e-01, 9.85410213470459e-01, 1.006596790695478e+00, 1.025784021362792e+00, 1.042896265581281e+00, 1.057865866761343e+00, 1.070633888244629e+00, 1.081149929615895e+00, 1.089372398640726e+00, 1.095268843981518e+00, 1.098816038532798e+00, 1.100000023841858e+00, 1.098816038532798e+00, 1.095268851266722e+00, 1.089372387190819e+00, 1.081149929615895e+00, 1.070633888244629e+00, 1.057865866761343e+00, 1.042896290888783e+00, 1.025783992298341e+00, 1.006596790695478e+00, 9.85410213470459e-01, 9.623079451542255e-01, 9.373811809328643e-01, 9.107282406264587e-01, 8.824543767307744e-01, 8.526711463928223e-01, 8.214960895872719e-01, 7.890522302575496e-01, 7.55467550168306e-01, 7.208747044322431e-01, 6.8541020154953e-01, 6.492139332802072e-01, 6.124288314000645e-01, 5.751999140672519e-01, 5.376742838934061e-01, 5e-01, 4.623257161065939e-01, 4.248001157350704e-01, 3.87571168599746e-01, 3.50786153101801e-01, 3.1458979845047e-01, 2.791251843125982e-01, 2.445324647334521e-01, 2.109477548408135e-01, 1.785039969352783e-01, 1.473288536071777e-01, 1.175455312213626e-01, 8.927177427530836e-02, 6.261878926443756e-02, 3.769211667953461e-02, 1.458980329334736e-02, -6.596806097009087e-03, -2.578398484762625e-02, -4.289624991143087e-02, -5.786585575377606e-02, -7.06339105963707e-02, -8.114992172763209e-02, -8.937234248742505e-02, -9.526882891559166e-02, -9.88160305571644e-02, -1.000000014901161e-01, -9.88160305571644e-02, -9.526882891559166e-02, -8.937234248742505e-02, -8.114992172763209e-02, -7.06339105963707e-02, -5.786585575377606e-02, -4.289624991143087e-02, -2.578398484762625e-02, -6.596806097009087e-03, 1.458980329334736e-02, 3.769211667953461e-02, 6.261878926443756e-02, 8.927177427530837e-02, 1.175455312213626e-01, 1.473288536071777e-01, 1.785039969352783e-01, 2.109477548408135e-01, 2.445324647334521e-01, 2.791251843125982e-01, 3.1458979845047e-01, 3.50786153101801e-01, 3.875711685989983e-01, 4.248001157358269e-01, 4.623255965346502e-01, 5e-01]
+time=[0e+00, 6e+01]
+pumSpeLim.yMaxSecPumSpe=[1e+00, 9.321862486103893e-01, 8.646401220460734e-01, 7.976281590004913e-01, 7.314149245947008e-01, 6.662616729736328e-01, 6.024254460439057e-01, 5.401583715385546e-01, 4.797060381312496e-01, 4.213070662851041e-01, 3.651919364929199e-01, 3.115820802032627e-01, 2.606891237343517e-01, 2.127138971922284e-01, 1.678456689201477e-01, 1.262616515159607e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.262616515159607e-01, 1.678456689201476e-01, 2.127138236571237e-01, 2.606892026352748e-01, 3.115821218845871e-01, 3.651919364929199e-01, 4.213070208617254e-01, 4.797059438135384e-01, 5.401584693012391e-01, 6.024254962591375e-01, 6.662616729736328e-01, 7.314148724121766e-01, 7.976280796377228e-01, 8.646402023627381e-01, 9.321862889918311e-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]
+pumSpeLim.yMinPriPumSpe=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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.397211457706639e-01, 8.796801732553353e-01, 8.201138816805983e-01, 7.612578568838105e-01, 7.033436894416809e-01, 6.466002829796829e-01, 5.912519793359312e-01, 5.375164077453775e-01, 4.856064129776871e-01, 4.357261657714844e-01, 3.880728499544076e-01, 3.42834826919716e-01, 3.001900687836025e-01, 2.603073807270183e-01, 2.233436852693558e-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.233436852693558e-01, 2.603073807270183e-01, 3.001900687836025e-01, 3.42834826919716e-01, 3.880728499544076e-01, 4.357261657714844e-01, 4.856064129776871e-01, 5.375164077453775e-01, 5.912519793359312e-01, 6.466002829796829e-01, 7.033436894416809e-01, 7.612578568838105e-01, 8.201138816794019e-01, 8.796801732565458e-01, 9.397209544555919e-01, 1e+00]
+pumSpeLim1.uRegSig=[5e-01, 5.376743063275602e-01, 5.751999586875818e-01, 6.124287873097954e-01, 6.492139042898054e-01, 6.8541020154953e-01, 7.208747323296468e-01, 7.554676044810981e-01, 7.890521778586632e-01, 8.214960643519617e-01, 8.526711463928223e-01, 8.824543998870947e-01, 9.107282844602312e-01, 9.373811400799414e-01, 9.623079451542254e-01, 9.85410213470459e-01, 1.006596790695478e+00, 1.025784021362792e+00, 1.042896265581281e+00, 1.057865866761343e+00, 1.070633888244629e+00, 1.081149929615895e+00, 1.089372398640726e+00, 1.095268843981518e+00, 1.098816038532798e+00, 1.100000023841858e+00, 1.098816038532798e+00, 1.095268851266722e+00, 1.089372387190819e+00, 1.081149929615895e+00, 1.070633888244629e+00, 1.057865866761343e+00, 1.042896290888783e+00, 1.025783992298341e+00, 1.006596790695478e+00, 9.85410213470459e-01, 9.623079451542255e-01, 9.373811809328643e-01, 9.107282406264587e-01, 8.824543767307744e-01, 8.526711463928223e-01, 8.214960895872719e-01, 7.890522302575496e-01, 7.55467550168306e-01, 7.208747044322431e-01, 6.8541020154953e-01, 6.492139332802072e-01, 6.124288314000645e-01, 5.751999140672519e-01, 5.376742838934061e-01, 5e-01, 4.623257161065939e-01, 4.248001157350704e-01, 3.87571168599746e-01, 3.50786153101801e-01, 3.1458979845047e-01, 2.791251843125982e-01, 2.445324647334521e-01, 2.109477548408135e-01, 1.785039969352783e-01, 1.473288536071777e-01, 1.175455312213626e-01, 8.927177427530836e-02, 6.261878926443756e-02, 3.769211667953461e-02, 1.458980329334736e-02, -6.596806097009087e-03, -2.578398484762625e-02, -4.289624991143087e-02, -5.786585575377606e-02, -7.06339105963707e-02, -8.114992172763209e-02, -8.937234248742505e-02, -9.526882891559166e-02, -9.88160305571644e-02, -1.000000014901161e-01, -9.88160305571644e-02, -9.526882891559166e-02, -8.937234248742505e-02, -8.114992172763209e-02, -7.06339105963707e-02, -5.786585575377606e-02, -4.289624991143087e-02, -2.578398484762625e-02, -6.596806097009087e-03, 1.458980329334736e-02, 3.769211667953461e-02, 6.261878926443756e-02, 8.927177427530837e-02, 1.175455312213626e-01, 1.473288536071777e-01, 1.785039969352783e-01, 2.109477548408135e-01, 2.445324647334521e-01, 2.791251843125982e-01, 3.1458979845047e-01, 3.50786153101801e-01, 3.875711685989983e-01, 4.248001157358269e-01, 4.623255965346502e-01, 5e-01]
+pumSpeLim1.yMaxSecPumSpe=[5.50000011920929e-01, 5.160931362261295e-01, 4.823200431416433e-01, 4.488140914211746e-01, 4.157074742182557e-01, 3.83130818605423e-01, 3.512127349428818e-01, 3.200791678878839e-01, 2.898530160853926e-01, 2.606535301623198e-01, 2.325959652662277e-01, 2.057910371213991e-01, 1.803445588869436e-01, 1.563569530664507e-01, 1.339228314798416e-01, 1.131308227777481e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.131308227777481e-01, 1.339228314798415e-01, 1.563569162989102e-01, 1.803445983374052e-01, 2.057910579620613e-01, 2.325959652662277e-01, 2.606535074506778e-01, 2.898529689265369e-01, 3.200792167692261e-01, 3.512127600504977e-01, 3.83130818605423e-01, 4.157074481270173e-01, 4.488140517397903e-01, 4.823200832999756e-01, 5.160931564169392e-01, 5.50000011920929e-01, 5.839068674249187e-01, 6.176799107393705e-01, 6.511859721020675e-01, 6.842924711488864e-01, 7.168691754341125e-01, 7.487873639204914e-01, 7.799207772696869e-01, 8.101470251135973e-01, 8.39346395307991e-01, 8.67404043674469e-01, 8.942090338218825e-01, 9.196554106026941e-01, 9.436430628401198e-01, 9.660770934985775e-01, 9.868691563606262e-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, 9.868691563606262e-01, 9.660770934985775e-01, 9.436430628401198e-01, 9.196554106026941e-01, 8.942090338218825e-01, 8.67404043674469e-01, 8.39346395307991e-01, 8.101470251135973e-01, 7.799207772696869e-01, 7.487873639204914e-01, 7.168691754341125e-01, 6.842924711488864e-01, 6.511859721027405e-01, 6.176799107386896e-01, 5.839069750397059e-01, 5.50000011920929e-01]
diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_BoilerPlant_SetPoints_Validation_CondensationControl.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_BoilerPlant_SetPoints_Validation_CondensationControl.txt
new file mode 100644
index 00000000000..17fceb6bc73
--- /dev/null
+++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_ASHRAE_PrimarySystem_BoilerPlant_SetPoints_Validation_CondensationControl.txt
@@ -0,0 +1,24 @@
+last-generated=2020-07-28
+statistics-simulation=
+{
+ "linear": " ",
+ "nonlinear": " ",
+ "numerical Jacobians": "0"
+}
+conSet.THotWatRet=[6e+01, 6.031395338719434e+01, 6.062666699791529e+01, 6.093690493172229e+01, 6.124345011635225e+01, 6.154508590698242e+01, 6.184062199455361e+01, 6.212889489600248e+01, 6.240876761238084e+01, 6.267913432656856e+01, 6.293892669677734e+01, 6.318711856854804e+01, 6.342273719394728e+01, 6.36448439863515e+01, 6.385256589172698e+01, 6.404508209228516e+01, 6.422164143243162e+01, 6.438153080927931e+01, 6.452413173181651e+01, 6.464888007725384e+01, 6.475527954101562e+01, 6.484291834511325e+01, 6.491143800637415e+01, 6.496057127592938e+01, 6.499013520414874e+01, 6.5e+01, 6.499013520414874e+01, 6.496057133664694e+01, 6.491143791096262e+01, 6.484291834511325e+01, 6.475527954101562e+01, 6.464888007725384e+01, 6.452413194273326e+01, 6.438153056711249e+01, 6.422164143243162e+01, 6.404508209228516e+01, 6.385256589172698e+01, 6.364484432678538e+01, 6.342273682865402e+01, 6.318711837558766e+01, 6.293892669677734e+01, 6.267913453686079e+01, 6.240876804905079e+01, 6.212889444339827e+01, 6.184062176207599e+01, 6.154508590698242e+01, 6.124345035793387e+01, 6.093690529915541e+01, 6.062666662607115e+01, 6.031395320023773e+01, 6e+01, 5.968604679976227e+01, 5.937333337392885e+01, 5.906309470084459e+01, 5.875655061027085e+01, 5.845491409301758e+01, 5.815937731079125e+01, 5.787110555660749e+01, 5.759123195094367e+01, 5.732086630833415e+01, 5.706107330322266e+01, 5.681288085734748e+01, 5.657726317135063e+01, 5.635515567321031e+01, 5.614743474770793e+01, 5.595491409301758e+01, 5.577836185033084e+01, 5.561846561824184e+01, 5.547586424259106e+01, 5.535111647921241e+01, 5.524471664428711e+01, 5.515708522487409e+01, 5.508856208903862e+01, 5.50394248486793e+01, 5.500986486232791e+01, 5.5e+01, 5.500986486232791e+01, 5.50394248486793e+01, 5.508856208903862e+01, 5.515708522487409e+01, 5.524471664428711e+01, 5.535111647921241e+01, 5.547586424259106e+01, 5.561846561824184e+01, 5.577836185033084e+01, 5.595491409301758e+01, 5.614743474770793e+01, 5.635515567321031e+01, 5.657726317135063e+01, 5.681288085734748e+01, 5.706107330322266e+01, 5.732086630833415e+01, 5.759123195094367e+01, 5.787110555660749e+01, 5.815937731079125e+01, 5.845491409301758e+01, 5.875655061027085e+01, 5.906309470083836e+01, 5.937333337393515e+01, 5.968604580335164e+01, 6e+01]
+conSet.TRetSet=[6e+01, 6e+01]
+conSet.TRetMinAll=[5.720000076293945e+01, 5.720000076293945e+01]
+time=[0e+00, 6e+01]
+conSet.yMinBypValPos=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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.121258545000747e-01, 2.238092049047075e-01, 3.346096186817693e-01, 4.440888080573288e-01, 5.518160462379456e-01, 6.573655271364933e-01, 7.603200571442347e-01, 8.602745586775219e-01, 9.56833299525521e-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, 9.56833299525521e-01, 8.602745586775219e-01, 7.603200571442347e-01, 6.573655271364933e-01, 5.518160462379456e-01, 4.440888080573288e-01, 3.346096186839947e-01, 2.23809204902456e-01, 1.121262103688644e-01, 0e+00]
+conSet1.TRetMinAll=[5.720000076293945e+01, 5.720000076293945e+01]
+conSet1.THotWatRet=[6e+01, 6.031395338719434e+01, 6.062666699791529e+01, 6.093690493172229e+01, 6.124345011635225e+01, 6.154508590698242e+01, 6.184062199455361e+01, 6.212889489600248e+01, 6.240876761238084e+01, 6.267913432656856e+01, 6.293892669677734e+01, 6.318711856854804e+01, 6.342273719394728e+01, 6.36448439863515e+01, 6.385256589172698e+01, 6.404508209228516e+01, 6.422164143243162e+01, 6.438153080927931e+01, 6.452413173181651e+01, 6.464888007725384e+01, 6.475527954101562e+01, 6.484291834511325e+01, 6.491143800637415e+01, 6.496057127592938e+01, 6.499013520414874e+01, 6.5e+01, 6.499013520414874e+01, 6.496057133664694e+01, 6.491143791096262e+01, 6.484291834511325e+01, 6.475527954101562e+01, 6.464888007725384e+01, 6.452413194273326e+01, 6.438153056711249e+01, 6.422164143243162e+01, 6.404508209228516e+01, 6.385256589172698e+01, 6.364484432678538e+01, 6.342273682865402e+01, 6.318711837558766e+01, 6.293892669677734e+01, 6.267913453686079e+01, 6.240876804905079e+01, 6.212889444339827e+01, 6.184062176207599e+01, 6.154508590698242e+01, 6.124345035793387e+01, 6.093690529915541e+01, 6.062666662607115e+01, 6.031395320023773e+01, 6e+01, 5.968604679976227e+01, 5.937333337392885e+01, 5.906309470084459e+01, 5.875655061027085e+01, 5.845491409301758e+01, 5.815937731079125e+01, 5.787110555660749e+01, 5.759123195094367e+01, 5.732086630833415e+01, 5.706107330322266e+01, 5.681288085734748e+01, 5.657726317135063e+01, 5.635515567321031e+01, 5.614743474770793e+01, 5.595491409301758e+01, 5.577836185033084e+01, 5.561846561824184e+01, 5.547586424259106e+01, 5.535111647921241e+01, 5.524471664428711e+01, 5.515708522487409e+01, 5.508856208903862e+01, 5.50394248486793e+01, 5.500986486232791e+01, 5.5e+01, 5.500986486232791e+01, 5.50394248486793e+01, 5.508856208903862e+01, 5.515708522487409e+01, 5.524471664428711e+01, 5.535111647921241e+01, 5.547586424259106e+01, 5.561846561824184e+01, 5.577836185033084e+01, 5.595491409301758e+01, 5.614743474770793e+01, 5.635515567321031e+01, 5.657726317135063e+01, 5.681288085734748e+01, 5.706107330322266e+01, 5.732086630833415e+01, 5.759123195094367e+01, 5.787110555660749e+01, 5.815937731079125e+01, 5.845491409301758e+01, 5.875655061027085e+01, 5.906309470083836e+01, 5.937333337393515e+01, 5.968604580335164e+01, 6e+01]
+conSet1.TRetSet=[6e+01, 6e+01]
+conSet1.yMinPriPumSpe=[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, 3.794013612396172e-01, 5.580947516891626e-01, 7.353753898909825e-01, 9.105421048125034e-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, 9.105421048125034e-01, 7.353753898945432e-01, 5.580947516855602e-01, 3.794019306298702e-01, 2.000000029802322e-01]
+conSet1.yMaxSecPumSpe=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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.067310690879822e-01, 7.1674203923308e-01, 5.314239209820839e-01, 3.515058301428306e-01, 1.777000161514881e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.777000161514881e-01, 3.515058301428306e-01, 5.314239209820839e-01, 7.1674203923308e-01, 9.067310690879822e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00]
+conSet2.THotWatRet=[6e+01, 6.031395338719434e+01, 6.062666699791529e+01, 6.093690493172229e+01, 6.124345011635225e+01, 6.154508590698242e+01, 6.184062199455361e+01, 6.212889489600248e+01, 6.240876761238084e+01, 6.267913432656856e+01, 6.293892669677734e+01, 6.318711856854804e+01, 6.342273719394728e+01, 6.36448439863515e+01, 6.385256589172698e+01, 6.404508209228516e+01, 6.422164143243162e+01, 6.438153080927931e+01, 6.452413173181651e+01, 6.464888007725384e+01, 6.475527954101562e+01, 6.484291834511325e+01, 6.491143800637415e+01, 6.496057127592938e+01, 6.499013520414874e+01, 6.5e+01, 6.499013520414874e+01, 6.496057133664694e+01, 6.491143791096262e+01, 6.484291834511325e+01, 6.475527954101562e+01, 6.464888007725384e+01, 6.452413194273326e+01, 6.438153056711249e+01, 6.422164143243162e+01, 6.404508209228516e+01, 6.385256589172698e+01, 6.364484432678538e+01, 6.342273682865402e+01, 6.318711837558766e+01, 6.293892669677734e+01, 6.267913453686079e+01, 6.240876804905079e+01, 6.212889444339827e+01, 6.184062176207599e+01, 6.154508590698242e+01, 6.124345035793387e+01, 6.093690529915541e+01, 6.062666662607115e+01, 6.031395320023773e+01, 6e+01, 5.968604679976227e+01, 5.937333337392885e+01, 5.906309470084459e+01, 5.875655061027085e+01, 5.845491409301758e+01, 5.815937731079125e+01, 5.787110555660749e+01, 5.759123195094367e+01, 5.732086630833415e+01, 5.706107330322266e+01, 5.681288085734748e+01, 5.657726317135063e+01, 5.635515567321031e+01, 5.614743474770793e+01, 5.595491409301758e+01, 5.577836185033084e+01, 5.561846561824184e+01, 5.547586424259106e+01, 5.535111647921241e+01, 5.524471664428711e+01, 5.515708522487409e+01, 5.508856208903862e+01, 5.50394248486793e+01, 5.500986486232791e+01, 5.5e+01, 5.500986486232791e+01, 5.50394248486793e+01, 5.508856208903862e+01, 5.515708522487409e+01, 5.524471664428711e+01, 5.535111647921241e+01, 5.547586424259106e+01, 5.561846561824184e+01, 5.577836185033084e+01, 5.595491409301758e+01, 5.614743474770793e+01, 5.635515567321031e+01, 5.657726317135063e+01, 5.681288085734748e+01, 5.706107330322266e+01, 5.732086630833415e+01, 5.759123195094367e+01, 5.787110555660749e+01, 5.815937731079125e+01, 5.845491409301758e+01, 5.875655061027085e+01, 5.906309470083836e+01, 5.937333337393515e+01, 5.968604580335164e+01, 6e+01]
+conSet2.yMaxSecPumSpe=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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.990867182839553e-01, 7.985717140956565e-01, 6.988513402060428e-01, 6.003200518871953e-01, 5.033655166625977e-01, 4.083710017355255e-01, 3.157119724117814e-01, 2.257529120911831e-01, 1.388500125460924e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.388500125460924e-01, 2.257529120911831e-01, 3.157119724117814e-01, 4.083710017355255e-01, 5.033655166625977e-01, 6.003200518871953e-01, 6.988513402040398e-01, 7.985717140976829e-01, 8.990863980026129e-01, 1e+00]
+conSet3.TRetMinAll=[5.720000076293945e+01, 5.720000076293945e+01]
+conSet3.THotWatRet=[6e+01, 6.031395338719434e+01, 6.062666699791529e+01, 6.093690493172229e+01, 6.124345011635225e+01, 6.154508590698242e+01, 6.184062199455361e+01, 6.212889489600248e+01, 6.240876761238084e+01, 6.267913432656856e+01, 6.293892669677734e+01, 6.318711856854804e+01, 6.342273719394728e+01, 6.36448439863515e+01, 6.385256589172698e+01, 6.404508209228516e+01, 6.422164143243162e+01, 6.438153080927931e+01, 6.452413173181651e+01, 6.464888007725384e+01, 6.475527954101562e+01, 6.484291834511325e+01, 6.491143800637415e+01, 6.496057127592938e+01, 6.499013520414874e+01, 6.5e+01, 6.499013520414874e+01, 6.496057133664694e+01, 6.491143791096262e+01, 6.484291834511325e+01, 6.475527954101562e+01, 6.464888007725384e+01, 6.452413194273326e+01, 6.438153056711249e+01, 6.422164143243162e+01, 6.404508209228516e+01, 6.385256589172698e+01, 6.364484432678538e+01, 6.342273682865402e+01, 6.318711837558766e+01, 6.293892669677734e+01, 6.267913453686079e+01, 6.240876804905079e+01, 6.212889444339827e+01, 6.184062176207599e+01, 6.154508590698242e+01, 6.124345035793387e+01, 6.093690529915541e+01, 6.062666662607115e+01, 6.031395320023773e+01, 6e+01, 5.968604679976227e+01, 5.937333337392885e+01, 5.906309470084459e+01, 5.875655061027085e+01, 5.845491409301758e+01, 5.815937731079125e+01, 5.787110555660749e+01, 5.759123195094367e+01, 5.732086630833415e+01, 5.706107330322266e+01, 5.681288085734748e+01, 5.657726317135063e+01, 5.635515567321031e+01, 5.614743474770793e+01, 5.595491409301758e+01, 5.577836185033084e+01, 5.561846561824184e+01, 5.547586424259106e+01, 5.535111647921241e+01, 5.524471664428711e+01, 5.515708522487409e+01, 5.508856208903862e+01, 5.50394248486793e+01, 5.500986486232791e+01, 5.5e+01, 5.500986486232791e+01, 5.50394248486793e+01, 5.508856208903862e+01, 5.515708522487409e+01, 5.524471664428711e+01, 5.535111647921241e+01, 5.547586424259106e+01, 5.561846561824184e+01, 5.577836185033084e+01, 5.595491409301758e+01, 5.614743474770793e+01, 5.635515567321031e+01, 5.657726317135063e+01, 5.681288085734748e+01, 5.706107330322266e+01, 5.732086630833415e+01, 5.759123195094367e+01, 5.787110555660749e+01, 5.815937731079125e+01, 5.845491409301758e+01, 5.875655061027085e+01, 5.906309470083836e+01, 5.937333337393515e+01, 5.968604580335164e+01, 6e+01]
+conSet3.TRetSet=[6e+01, 6e+01]
+conSet3.yMinPriPumSpe=[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, 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]
+conSet3.yMaxSecPumSpe=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 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/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/ProportionalRegulator.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/ProportionalRegulator.mos
new file mode 100644
index 00000000000..4226d0dddb0
--- /dev/null
+++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/ProportionalRegulator.mos
@@ -0,0 +1,4 @@
+simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.Validation.ProportionalRegulator", startTime=0,tolerance=1e-6, stopTime=60, method="dassl", resultFile="ProportionalRegulator");
+
+createPlot(id=1, position={0, 0, 1545, 978}, y={"proReg.THotWatRet", "proReg.TRetSet", "proReg.TRetMinAll"}, range={0.0, 60.0, 54.0, 66.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}});
+createPlot(id=1, position={0, 0, 1545, 486}, y={"proReg.yRegSig"}, range={0.0, 60.0, -0.1, 1.1}, autoscale=false, grid=true, subPlot=2, colors={{28,108,200}});
diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/PumpSpeedLimits.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/PumpSpeedLimits.mos
new file mode 100644
index 00000000000..72412f5e490
--- /dev/null
+++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Subsequences/Validation/PumpSpeedLimits.mos
@@ -0,0 +1,8 @@
+simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.Validation.PumpSpeedLimits", startTime=0,tolerance=1e-6, stopTime=60, method="dassl", resultFile="PumpSpeedLimits");
+
+createPlot(id=1, position={0, 0, 1545, 978}, y={"pumSpeLim.uRegSig"}, range={0.0, 60.0, 54.0, 66.0}, grid=true, colors={{28,108,200}});
+createPlot(id=1, position={0, 0, 1545, 329}, y={"pumSpeLim.yMaxSecPumSpe"}, range={0.0, 60.0, -0.1, 1.1}, autoscale=false, grid=true, subPlot=2, colors={{28,108,200}});
+createPlot(id=1, position={0, 0, 1545, 329}, y={"pumSpeLim.yMinPriPumSpe"}, range={0.0, 60.0, -0.1, 1.1}, autoscale=false, grid=true, subPlot=3, colors={{28,108,200}});
+
+createPlot(id=2, position={0, 0, 1545, 978}, y={"pumSpeLim1.uRegSig"}, range={0.0, 60.0, 54.0, 66.0}, grid=true, colors={{28,108,200}});
+createPlot(id=2, position={0, 0, 1545, 486}, y={"pumSpeLim1.yMaxSecPumSpe"}, range={0.0, 60.0, -0.1, 1.1}, autoscale=false, grid=true, subPlot=2, colors={{28,108,200}});
diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Validation/CondensationControl.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Validation/CondensationControl.mos
new file mode 100644
index 00000000000..f2c1d5d3bcf
--- /dev/null
+++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/PrimarySystem/BoilerPlant/SetPoints/Validation/CondensationControl.mos
@@ -0,0 +1,15 @@
+simulateModel("Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Validation.CondensationControl", startTime=0,tolerance=1e-6, stopTime=60, method="dassl", resultFile="CondensationControl");
+
+createPlot(id=1, position={0, 0, 1545, 978}, y={"conSet.THotWatRet", "conSet.TRetSet", "conSet.TRetMinAll"}, range={0.0, 60.0, 54.0, 66.0}, autoscale=false, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}});
+createPlot(id=1, position={0, 0, 1545, 496}, y={"conSet.yMinBypValPos"}, range={0.0, 60.0, 0.0, 1.2000000000000002}, autoscale=false, grid=true, subPlot=2, colors={{28,108,200}});
+
+createPlot(id=2, position={0, 0, 1545, 978}, y={"conSet1.THotWatRet", "conSet1.TRetSet", "conSet1.TRetMinAll"}, range={0.0, 60.0, 54.0, 66.0}, autoscale=false, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}});
+createPlot(id=2, position={0, 0, 1545, 322}, y={"conSet1.yMinPriPumSpe"}, range={0.0, 60.0, 0.1, 1.1}, autoscale=false, grid=true, subPlot=2, colors={{28,108,200}});
+createPlot(id=2, position={0, 0, 1545, 323}, y={"conSet1.yMaxSecPumSpe"}, range={0.0, 60.0, 0.0, 1.2000000000000002}, autoscale=false, grid=true, subPlot=3, colors={{28,108,200}});
+
+createPlot(id=3, position={0, 0, 1545, 978}, y={"conSet2.THotWatRet", "conSet1.TRetSet", "conSet1.TRetMinAll"}, range={0.0, 60.0, 54.0, 66.0}, autoscale=false, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}});
+createPlot(id=3, position={0, 0, 1545, 496}, y={"conSet2.yMaxSecPumSpe"}, range={0.0, 60.0, 0.0, 1.2000000000000002}, autoscale=false, grid=true, subPlot=2, colors={{28,108,200}});
+
+createPlot(id=4, position={0, 0, 1545, 978}, y={"conSet3.THotWatRet", "conSet3.TRetSet", "conSet3.TRetMinAll"}, range={0.0, 60.0, 54.0, 66.0}, autoscale=false, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}});
+createPlot(id=4, position={0, 0, 1545, 322}, y={"conSet3.yMinPriPumSpe"}, range={0.0, 60.0, 0.1, 1.1}, autoscale=false, grid=true, subPlot=2, colors={{28,108,200}});
+createPlot(id=4, position={0, 0, 1545, 323}, y={"conSet3.yMaxSecPumSpe"}, range={0.0, 60.0, 0.0, 1.2000000000000002}, autoscale=false, grid=true, subPlot=3, colors={{28,108,200}});
diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.Validation.ProportionalRegulator.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.Validation.ProportionalRegulator.mos
new file mode 100644
index 00000000000..6a6cd56ac5d
--- /dev/null
+++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.Validation.ProportionalRegulator.mos
@@ -0,0 +1,7 @@
+compareVars :=
+ {
+ "proReg.THotWatRet",
+ "proReg.TRetSet",
+ "proReg.TRetMinAll",
+ "proReg.yRegSig"
+ };
diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.Validation.PumpSpeedLimits.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.Validation.PumpSpeedLimits.mos
new file mode 100644
index 00000000000..e5ab2a8eca9
--- /dev/null
+++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Subsequences.Validation.PumpSpeedLimits.mos
@@ -0,0 +1,8 @@
+compareVars :=
+ {
+ "pumSpeLim.uRegSig",
+ "pumSpeLim.yMaxSecPumSpe",
+ "pumSpeLim.yMinPriPumSpe",
+ "pumSpeLim1.uRegSig",
+ "pumSpeLim1.yMaxSecPumSpe"
+ };
diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Validation.CondensationControl.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Validation.CondensationControl.mos
new file mode 100644
index 00000000000..f4ebc5a6cdd
--- /dev/null
+++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.ASHRAE.PrimarySystem.BoilerPlant.SetPoints.Validation.CondensationControl.mos
@@ -0,0 +1,21 @@
+compareVars :=
+ {
+ "conSet.THotWatRet",
+ "conSet.TRetSet",
+ "conSet.TRetMinAll",
+ "conSet.yMinBypValPos",
+ "conSet1.THotWatRet",
+ "conSet1.TRetSet",
+ "conSet1.TRetMinAll",
+ "conSet1.yMinPriPumSpe",
+ "conSet1.yMaxSecPumSpe",
+ "conSet2.THotWatRet",
+ "conSet1.TRetSet",
+ "conSet1.TRetMinAll",
+ "conSet2.yMaxSecPumSpe",
+ "conSet3.THotWatRet",
+ "conSet3.TRetSet",
+ "conSet3.TRetMinAll",
+ "conSet3.yMinPriPumSpe",
+ "conSet3.yMaxSecPumSpe"
+ };