diff --git a/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Controller.mo b/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Controller.mo index f2aff3454e3..eff83156050 100644 --- a/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Controller.mo @@ -17,34 +17,6 @@ block Controller parameter Boolean have_occSen "Set to true if zones have occupancy sensor"; - parameter Real TZonHeaOn( - final unit="K", - displayUnit="degC", - final quantity="ThermodynamicTemperature")=293.15 - "Heating setpoint during on" - annotation (Dialog(group="Zone setpoints")); - - parameter Real TZonHeaOff( - final unit="K", - displayUnit="degC", - final quantity="ThermodynamicTemperature")=285.15 - "Heating setpoint during off" - annotation (Dialog(group="Zone setpoints")); - - parameter Real TZonCooOn( - final unit="K", - displayUnit="degC", - final quantity="ThermodynamicTemperature")=297.15 - "Cooling setpoint during on" - annotation (Dialog(group="Zone setpoints")); - - parameter Real TZonCooOff( - final unit="K", - displayUnit="degC", - final quantity="ThermodynamicTemperature")=303.15 - "Cooling setpoint during off" - annotation (Dialog(group="Zone setpoints")); - parameter Real heaDea( final unit="1", displayUnit="1")=0.05 @@ -156,28 +128,28 @@ block Controller enable=controllerTypeCooCoi == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or controllerTypeCooCoi == Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); - parameter Real cooPerMin( + parameter Real uCooFan_min( final min=0, final max=1, final unit="1")=0.5 "Cooling loop signal limit at which supply air temperature is at minimum and fan speed starts to be modified" annotation (Dialog(tab="Supply air setpoints")); - parameter Real heaPerMin( + parameter Real uHeaFan_min( final min=0, final max=1, final unit="1")=0.5 "Heating loop signal limit at which supply air temperature is at maximum and fan speed starts to be modified" annotation (Dialog(tab="Supply air setpoints")); - parameter Real TSupSetMax( + parameter Real TSupSet_max( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") "Maximum supply air temperature for heating" annotation (Dialog(tab="Supply air setpoints",group="Temperature limits")); - parameter Real TSupSetMin( + parameter Real TSupSet_min( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") @@ -190,100 +162,100 @@ block Controller "Deadband mode fan speed" annotation (Dialog(tab="Supply air setpoints",group="Fan speed")); - parameter Real heaPerMaxFanSpe( + parameter Real uHeaFan_max( final min=0, final max=1, final unit="1")=1 "Maximum heating loop signal at which fan speed is modified" annotation (Dialog(tab="Supply air setpoints",group="Fan speed - Heating")); - parameter Real heaSpeMax( + parameter Real heaSpe_max( final min=0, final max=1, final unit="1") "Maximum fan speed for heating" annotation (Dialog(tab="Supply air setpoints",group="Fan speed - Heating")); - parameter Real heaSpeMin( + parameter Real heaSpe_min( final min=0, final max=1, final unit="1") "Minimum fan speed for heating" annotation (Dialog(tab="Supply air setpoints",group="Fan speed - Heating")); - parameter Real cooPerMaxFanSpe( + parameter Real uCooFan_max( final min=0, final max=1, final unit="1")=1 "Maximum cooling loop signal at which fan speed is modified" annotation (Dialog(tab="Supply air setpoints",group="Fan speed - Cooling")); - parameter Real cooSpeMax( + parameter Real cooSpe_max( final min=0, final max=1, final unit="1") = 1 "Maximum fan speed for cooling" annotation (Dialog(tab="Supply air setpoints",group="Fan speed - Cooling")); - parameter Real cooSpeMin( + parameter Real cooSpe_min( final min=0, final max=1, final unit="1") "Minimum fan speed for cooling" annotation (Dialog(tab="Supply air setpoints",group="Fan speed - Cooling")); - parameter Boolean cooAdj=false - "Flag, set to true if both cooling and heating setpoint are adjustable separately" - annotation (Dialog(tab="Adjust temperature setpoint", group="General")); - - parameter Boolean heaAdj=false - "Flag, set to true if heating setpoint is adjustable" + parameter Boolean have_locAdj=false + "Flag, set to true if both cooling and heating setpoint are adjustable through a single common knob" annotation (Dialog(tab="Adjust temperature setpoint", group="General")); - parameter Boolean sinAdj=false - "Flag, set to true if both cooling and heating setpoint are adjustable through a single common knob" + parameter Boolean sepAdj=false + "True: cooling and heating setpoint can be adjusted separately" annotation (Dialog(tab="Adjust temperature setpoint", group="General")); parameter Boolean ignDemLim=false "Flag, set to true to exempt individual zone from demand limit setpoint adjustment" annotation (Dialog(tab="Adjust temperature setpoint", group="General")); - parameter Real TZonCooOnMax( + parameter Real bouLim=1 + "Threshold of temperature difference for indicating the end of setback or setup mode" + annotation (Dialog(tab="Adjust temperature setpoint", group="Advanced")); + + parameter Real TActCoo_max( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=300.15 "Maximum cooling setpoint during on" annotation (Dialog(tab="Adjust temperature setpoint", group="Limits")); - parameter Real TZonCooOnMin( + parameter Real TActCoo_min( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=295.15 "Minimum cooling setpoint during on" annotation (Dialog(tab="Adjust temperature setpoint", group="Limits")); - parameter Real TZonHeaOnMax( + parameter Real TActHea_max( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=295.15 "Maximum heating setpoint during on" annotation (Dialog(tab="Adjust temperature setpoint", group="Limits")); - parameter Real TZonHeaOnMin( + parameter Real TActHea_min( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=291.15 "Minimum heating setpoint during on" annotation (Dialog(tab="Adjust temperature setpoint", group="Limits")); - parameter Real TZonCooSetWinOpe( + parameter Real TWinOpeCooSet( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=322.15 "Cooling setpoint when window is open" annotation (Dialog(tab="Adjust temperature setpoint", group="Limits")); - parameter Real TZonHeaSetWinOpe( + parameter Real TWinOpeHeaSet( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=277.15 @@ -469,102 +441,133 @@ block Controller Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOcc "Current occupancy period, true if it is in occupant period" - annotation (Placement(transformation(extent={{-240,50},{-200,90}}), - iconTransformation(extent={{-240,60},{-200,100}}))); + annotation (Placement(transformation(extent={{-260,50},{-220,90}}), + iconTransformation(extent={{-240,140},{-200,180}}))); Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWin if have_winSen "Window status, true if open, false if closed" - annotation (Placement(transformation(extent={{-240,-170},{-200,-130}}), - iconTransformation(extent={{-240,-220},{-200,-180}}))); + annotation (Placement(transformation(extent={{-260,-320},{-220,-280}}), + iconTransformation(extent={{-240,-300},{-200,-260}}))); Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uFan "Fan proven on signal" - annotation (Placement(transformation(extent={{-240,-140},{-200,-100}}), - iconTransformation(extent={{-240,-180},{-200,-140}}))); + annotation (Placement(transformation(extent={{-260,-290},{-220,-250}}), + iconTransformation(extent={{-240,-260},{-200,-220}}))); Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uCooDemLimLev "Cooling demand limit level" - annotation (Placement(transformation(extent={{-240,20},{-200,60}}), - iconTransformation(extent={{-240,20},{-200,60}}))); + annotation (Placement(transformation(extent={{-260,20},{-220,60}}), + iconTransformation(extent={{-240,100},{-200,140}}))); Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uHeaDemLimLev "Heating demand limit level" - annotation (Placement(transformation(extent={{-240,-10},{-200,30}}), - iconTransformation(extent={{-240,-20},{-200,20}}))); + annotation (Placement(transformation(extent={{-260,-10},{-220,30}}), + iconTransformation(extent={{-240,60},{-200,100}}))); Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nOcc if have_occSen "Number of occupants" - annotation (Placement(transformation(extent={{-240,-110},{-200,-70}}), - iconTransformation(extent={{-240,-140},{-200,-100}}))); + annotation (Placement(transformation(extent={{-260,-260},{-220,-220}}), + iconTransformation(extent={{-240,-220},{-200,-180}}))); Buildings.Controls.OBC.CDL.Interfaces.RealInput warUpTim( final unit="s", displayUnit="min", final quantity="Time") "Warm-up time retrieved from optimal warm-up block" - annotation (Placement(transformation(extent={{-240,170},{-200,210}}), - iconTransformation(extent={{-240,260},{-200,300}}))); + annotation (Placement(transformation(extent={{-260,170},{-220,210}}), + iconTransformation(extent={{-240,340},{-200,380}}))); Buildings.Controls.OBC.CDL.Interfaces.RealInput cooDowTim( final unit="s", displayUnit="min", final quantity="Time") "Cool-down time retrieved from optimal cool-down block" - annotation (Placement(transformation(extent={{-240,200},{-200,240}}), - iconTransformation(extent={{-240,220},{-200,260}}))); + annotation (Placement(transformation(extent={{-260,200},{-220,240}}), + iconTransformation(extent={{-240,300},{-200,340}}))); Buildings.Controls.OBC.CDL.Interfaces.RealInput tNexOcc( final unit="s", displayUnit="min", final quantity="Time") "Time to next occupied period" - annotation (Placement(transformation(extent={{-240,140},{-200,180}}), - iconTransformation(extent={{-240,180},{-200,220}}))); + annotation (Placement(transformation(extent={{-260,140},{-220,180}}), + iconTransformation(extent={{-240,260},{-200,300}}))); Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon( final unit="K", displayUnit="degC", - final quantity="ThermodynamicTemperature") - "Measured zone temperatures" - annotation (Placement(transformation(extent={{-240,-70},{-200,-30}}), - iconTransformation(extent={{-240,-100},{-200,-60}}))); + final quantity="ThermodynamicTemperature") "Measured zone temperatures" + annotation (Placement(transformation(extent={{-260,-70},{-220,-30}}), + iconTransformation(extent={{-240,-20},{-200,20}}))); Buildings.Controls.OBC.CDL.Interfaces.RealInput TSup( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") "Measured supply air temperature" - annotation (Placement(transformation(extent={{-240,-40},{-200,0}}), - iconTransformation(extent={{-240,-60},{-200,-20}}))); + annotation (Placement(transformation(extent={{-260,-40},{-220,0}}), + iconTransformation(extent={{-240,20},{-200,60}}))); - Buildings.Controls.OBC.CDL.Interfaces.RealInput setAdj( + Buildings.Controls.OBC.CDL.Interfaces.RealInput cooSetAdj( final unit="K", displayUnit="degC", - final quantity="TemperatureDifference") if cooAdj or sinAdj - "Setpoint adjustment value" - annotation (Placement(transformation(extent={{-240,110},{-200,150}}), - iconTransformation(extent={{-240,140},{-200,180}}))); + final quantity="TemperatureDifference") if cooAdj or have_locAdj + "Cooling setpoint adjustment value" + annotation (Placement(transformation(extent={{-260,110},{-220,150}}), + iconTransformation(extent={{-240,220},{-200,260}}))); Buildings.Controls.OBC.CDL.Interfaces.RealInput heaSetAdj( final unit="K", displayUnit="degC", final quantity="TemperatureDifference") if heaAdj "Heating setpoint adjustment value" - annotation (Placement(transformation(extent={{-240,80},{-200,120}}), - iconTransformation(extent={{-240,100},{-200,140}}))); + annotation (Placement(transformation(extent={{-260,80},{-220,120}}), + iconTransformation(extent={{-240,180},{-200,220}}))); Buildings.Controls.OBC.CDL.Interfaces.RealInput uHeaCoi( final unit="1", displayUnit="1") if have_hotWatCoi "Measured heating coil control action" - annotation (Placement(transformation(extent={{-240,-220},{-200,-180}}), - iconTransformation(extent={{-240,-260},{-200,-220}}))); + annotation (Placement(transformation(extent={{-260,-360},{-220,-320}}), + iconTransformation(extent={{-240,-340},{-200,-300}}))); Buildings.Controls.OBC.CDL.Interfaces.RealInput uCooCoi( final unit="1", displayUnit="1") if have_cooCoi "Measured cooling coil control action" - annotation (Placement(transformation(extent={{-240,-260},{-200,-220}}), - iconTransformation(extent={{-240,-300},{-200,-260}}))); + annotation (Placement(transformation(extent={{-260,-400},{-220,-360}}), + iconTransformation(extent={{-240,-380},{-200,-340}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TOccHeaSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Occupied heating setpoint temperature" + annotation (Placement(transformation(extent={{-260,-100},{-220,-60}}), + iconTransformation(extent={{-240,-60},{-200,-20}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TOccCooSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Occupied cooling setpoint temperature" + annotation (Placement(transformation(extent={{-260,-140},{-220,-100}}), + iconTransformation(extent={{-240,-100},{-200,-60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TUnoHeaSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Unoccupied heating setpoint temperature" + annotation (Placement(transformation(extent={{-260,-180},{-220,-140}}), + iconTransformation(extent={{-240,-140},{-200,-100}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TUnoCooSet( + final unit="K", + displayUnit="degC", + final quantity="ThermodynamicTemperature") + "Unoccupied cooling setpoint temperature" + annotation (Placement(transformation(extent={{-260,-220},{-220,-180}}), + iconTransformation(extent={{-240,-180},{-200,-140}}))); Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yFan "Fan enable signal" @@ -574,30 +577,30 @@ block Controller Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yChiWatResReq if have_cooCoi "Chilled water reset request" annotation (Placement(transformation(extent={{200,-120},{240,-80}}), - iconTransformation(extent={{200,-100},{240,-60}}))); + iconTransformation(extent={{200,-100},{240,-60}}))); Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yChiPlaReq if have_cooCoi "Chiller plant requests" annotation (Placement(transformation(extent={{200,-160},{240,-120}}), - iconTransformation(extent={{200,-140},{240,-100}}))); + iconTransformation(extent={{200,-140},{240,-100}}))); Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHotWatResReq if have_hotWatCoi "Hot water reset requests" annotation (Placement(transformation(extent={{200,-200},{240,-160}}), - iconTransformation(extent={{200,-180},{240,-140}}))); + iconTransformation(extent={{200,-180},{240,-140}}))); Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHotWatPlaReq if have_hotWatCoi "Hot water plant requests" annotation (Placement(transformation(extent={{200,-240},{240,-200}}), - iconTransformation(extent={{200,-220},{240,-180}}))); + iconTransformation(extent={{200,-220},{240,-180}}))); - Buildings.Controls.OBC.CDL.Interfaces.RealOutput TAirSupSet( + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupSet( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") - "Supply air temperature setpoint" - annotation (Placement(transformation(extent={{200,-40},{240,0}}), - iconTransformation(extent={{200,-60},{240,-20}}))); + "Supply air temperature setpoint" annotation (Placement(transformation( + extent={{200,-40},{240,0}}), iconTransformation(extent={{200,-60},{ + 240,-20}}))); Buildings.Controls.OBC.CDL.Interfaces.RealOutput yFanSpe( final min=0, @@ -643,31 +646,27 @@ block Controller modSetPoi( final have_winSen=have_winSen, final have_occSen=have_occSen, - final THeaSetOcc=TZonHeaOn, - final THeaSetUno=TZonHeaOff, - final TCooSetOcc=TZonCooOn, - final TCooSetUno=TZonCooOff, - final cooAdj=cooAdj, - final heaAdj=heaAdj, - final sinAdj=sinAdj, + final sepAdj=sepAdj, + final TActCoo_max=TActCoo_max, + final TActCoo_min=TActCoo_min, + final TActHea_max=TActHea_max, + final TActHea_min=TActHea_min, + final TWinOpeCooSet=TWinOpeCooSet, + final TWinOpeHeaSet=TWinOpeHeaSet, + final have_locAdj=have_locAdj, final ignDemLim=ignDemLim, - final TZonCooOnMax=TZonCooOnMax, - final TZonCooOnMin=TZonCooOnMin, - final TZonHeaOnMax=TZonHeaOnMax, - final TZonHeaOnMin=TZonHeaOnMin, - final TZonCooSetWinOpe=TZonCooSetWinOpe, - final TZonHeaSetWinOpe=TZonHeaSetWinOpe, final incTSetDem_1=incTSetDem_1, final incTSetDem_2=incTSetDem_2, final incTSetDem_3=incTSetDem_3, final decTSetDem_1=decTSetDem_1, final decTSetDem_2=decTSetDem_2, final decTSetDem_3=decTSetDem_3, + final bouLim=bouLim, final uLow=uLow, final uHigh=uHigh, - preWarCooTim=preWarCooTim) + final preWarCooTim=preWarCooTim) "Zone setpoint and operation mode" - annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); + annotation (Placement(transformation(extent={{-140,150},{-120,190}}))); Buildings.Controls.OBC.CDL.Continuous.PIDWithReset cooPI( final reverseActing=false, @@ -676,7 +675,7 @@ block Controller final Ti=TiCoo, final Td=TdCoo) "Zone cooling control signal" - annotation (Placement(transformation(extent={{-40,150},{-20,170}}))); + annotation (Placement(transformation(extent={{-40,156},{-20,176}}))); Buildings.Controls.OBC.CDL.Continuous.PIDWithReset heaPI( final controllerType=controllerTypeHea, @@ -690,11 +689,19 @@ protected final parameter Boolean have_heaCoi = have_hotWatCoi or have_eleHeaCoi "Does the fan coil unit have a heating coil?"; + final parameter Boolean cooAdj=sepAdj + "Flag, set to true if both cooling and heating setpoint are adjustable separately" + annotation (Dialog(tab="Adjust temperature setpoint", group="General")); + + final parameter Boolean heaAdj=sepAdj + "Flag, set to true if heating setpoint is adjustable" + annotation (Dialog(tab="Adjust temperature setpoint", group="General")); + Buildings.Controls.OBC.ASHRAE.FanCoilUnit.Subsequences.PlantRequests fcuPlaReq( final have_hotWatCoi=have_hotWatCoi, final have_chiWatCoi=have_cooCoi, - final cooSpeMax=cooSpeMax, - final heaSpeMax=heaSpeMax, + final cooSpe_max=cooSpe_max, + final heaSpe_max=heaSpe_max, final chiWatPlaReqLim0=chiWatPlaReqLim0, final chiWatResReqLim0=chiWatResReqLim0, final chiWatPlaReqLim1=chiWatPlaReqLim1, @@ -718,20 +725,20 @@ protected Buildings.Controls.OBC.CDL.Integers.Sources.Constant unOccMod( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.unoccupied) "Unoccupied mode" - annotation (Placement(transformation(extent={{-160,-180},{-140,-160}}))); + annotation (Placement(transformation(extent={{-160,-330},{-140,-310}}))); Buildings.Controls.OBC.CDL.Integers.Equal isUnOcc "Check if current operation mode is unoccupied mode" - annotation (Placement(transformation(extent={{-100,-180},{-80,-160}}))); + annotation (Placement(transformation(extent={{-100,-330},{-80,-310}}))); Buildings.Controls.OBC.CDL.Logical.Not isOcc "If in unoccupied mode, switch off" - annotation (Placement(transformation(extent={{-70,-180},{-50,-160}}))); + annotation (Placement(transformation(extent={{-70,-330},{-50,-310}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant win( final k=false) if not have_winSen "Window status" - annotation (Placement(transformation(extent={{-180,-80},{-160,-60}}))); + annotation (Placement(transformation(extent={{-198,-230},{-178,-210}}))); Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold havOcc( final t=1) if have_occSen @@ -741,10 +748,10 @@ protected Buildings.Controls.OBC.ASHRAE.FanCoilUnit.Subsequences.SupplyAirTemperature TSupAir( final have_cooCoi=have_cooCoi, final have_heaCoi=have_heaCoi, - final THeaSupAirMax=TSupSetMax, - final TCooSupAirMin=TSupSetMin, - final heaPerMax=heaPerMin, - final cooPerMax=cooPerMin, + final TSupSet_max=TSupSet_max, + final uHea_max=uHeaFan_min, + final TSupSet_min=TSupSet_min, + final uCoo_max=uCooFan_min, final heaDea=heaDea, final cooDea=cooDea, final controllerTypeCooCoi=controllerTypeCooCoi, @@ -757,20 +764,20 @@ protected final TdHeaCoi=TdHeaCoi, final deaHysLim=deaHysLim) "Supply air temperature setpoint controller" - annotation (Placement(transformation(extent={{100,-2},{120,22}}))); + annotation (Placement(transformation(extent={{102,0},{122,24}}))); Buildings.Controls.OBC.ASHRAE.FanCoilUnit.Subsequences.FanSpeed fanSpe( final have_cooCoi=have_cooCoi, final have_heaCoi=have_heaCoi, final deaSpe=deaSpe, - final heaSpeMin=heaSpeMin, - final heaPerMin=heaPerMin, - final heaSpeMax=heaSpeMax, - final heaPerMax=heaPerMaxFanSpe, - final cooSpeMin=cooSpeMin, - final cooPerMin=cooPerMin, - final cooSpeMax=cooSpeMax, - final cooPerMax=cooPerMaxFanSpe, + final heaSpe_min=heaSpe_min, + final uHea_min=uHeaFan_min, + final heaSpe_max=heaSpe_max, + final uHea_max=uHeaFan_max, + final cooSpe_min=cooSpe_min, + final uCoo_min=uCooFan_min, + final cooSpe_max=cooSpe_max, + final uCoo_max=uCooFan_max, final heaDea=heaDea, final cooDea=cooDea, final deaHysLim=deaHysLim) @@ -780,80 +787,79 @@ protected equation assert((not (have_hotWatCoi and have_eleHeaCoi)), "One of have_hotWatCoi and have_eleHeaCoi has to be set to false"); - connect(unOccMod.y, isUnOcc.u2) annotation (Line(points={{-138,-170},{-120,-170}, - {-120,-178},{-102,-178}}, color={255,127,0})); + connect(unOccMod.y, isUnOcc.u2) annotation (Line(points={{-138,-320},{-120,-320}, + {-120,-328},{-102,-328}}, color={255,127,0})); connect(isUnOcc.y, isOcc.u) - annotation (Line(points={{-78,-170},{-72,-170}}, color={255,0,255})); + annotation (Line(points={{-78,-320},{-72,-320}}, color={255,0,255})); - connect(TZon, cooPI.u_m) annotation (Line(points={{-220,-50},{-30,-50},{-30,148}}, + connect(TZon, cooPI.u_m) annotation (Line(points={{-240,-50},{-30,-50},{-30,154}}, color={0,0,127})); - connect(isOcc.y, heaPI.trigger) annotation (Line(points={{-48,-170},{-36,-170}, + connect(isOcc.y, heaPI.trigger) annotation (Line(points={{-48,-320},{-36,-320}, {-36,84},{-76,84},{-76,208}}, color={255,0,255})); - connect(isOcc.y, cooPI.trigger) annotation (Line(points={{-48,-170},{-36,-170}, - {-36,148}}, color={255,0,255})); + connect(isOcc.y, cooPI.trigger) annotation (Line(points={{-48,-320},{-36,-320}, + {-36,154}}, color={255,0,255})); - connect(TZon, heaPI.u_m) annotation (Line(points={{-220,-50},{-70,-50},{-70,208}}, + connect(TZon, heaPI.u_m) annotation (Line(points={{-240,-50},{-70,-50},{-70,208}}, color={0,0,127})); - connect(modSetPoi.TZonHeaSet, heaPI.u_s) annotation (Line(points={{-118,152},{ - -100,152},{-100,220},{-82,220}}, color={0,0,127})); + connect(modSetPoi.THeaSet, heaPI.u_s) annotation (Line(points={{-118,162},{-100, + 162},{-100,220},{-82,220}}, color={0,0,127})); - connect(modSetPoi.TZonHeaSet, TZonHeaSet) annotation (Line(points={{-118,152}, - {-54,152},{-54,120},{220,120}}, color={0,0,127})); + connect(modSetPoi.THeaSet, TZonHeaSet) annotation (Line(points={{-118,162},{-54, + 162},{-54,120},{220,120}}, color={0,0,127})); - connect(modSetPoi.TZonCooSet, cooPI.u_s) annotation (Line(points={{-118,160}, - {-42,160}},color={0,0,127})); + connect(modSetPoi.TCooSet, cooPI.u_s) annotation (Line(points={{-118,170},{-50, + 170},{-50,166},{-42,166}}, + color={0,0,127})); - connect(modSetPoi.TZonCooSet, TZonCooSet) annotation (Line(points={{-118,160}, - {-50,160},{-50,80},{220,80}}, color={0,0,127})); + connect(modSetPoi.TCooSet, TZonCooSet) annotation (Line(points={{-118,170},{-50, + 170},{-50,80},{220,80}}, color={0,0,127})); - connect(TZon, modSetPoi.TZon) annotation (Line(points={{-220,-50},{-168,-50}, - {-168,165},{-142,165}},color={0,0,127})); + connect(TZon, modSetPoi.TZon) annotation (Line(points={{-240,-50},{-188,-50},{ + -188,180},{-142,180}}, color={0,0,127})); - connect(tNexOcc, modSetPoi.tNexOcc) annotation (Line(points={{-220,160},{-182, - 160},{-182,158},{-142,158}}, + connect(tNexOcc, modSetPoi.tNexOcc) annotation (Line(points={{-240,160},{-216, + 160},{-216,166},{-142,166}}, color={0,0,127})); - connect(uOcc, modSetPoi.uOcc) annotation (Line(points={{-220,70},{-174,70},{-174, - 162},{-142,162}}, color={255,0,255})); + connect(uOcc, modSetPoi.u1Occ) annotation (Line(points={{-240,70},{-194,70},{-194, + 168},{-142,168}}, color={255,0,255})); - connect(modSetPoi.yOpeMod, isUnOcc.u1) annotation (Line(points={{-118,164},{ - -110,164},{-110,-170},{-102,-170}}, - color={255,127,0})); + connect(modSetPoi.yOpeMod, isUnOcc.u1) annotation (Line(points={{-118,178},{-110, + 178},{-110,-320},{-102,-320}}, color={255,127,0})); - connect(win.y, modSetPoi.uWin) annotation (Line(points={{-158,-70},{-150,-70}, - {-150,166},{-142,166}}, color={255,0,255})); + connect(win.y, modSetPoi.u1Win) annotation (Line(points={{-176,-220},{-150,-220}, + {-150,183},{-142,183}}, color={255,0,255})); - connect(uWin, modSetPoi.uWin) annotation (Line(points={{-220,-150},{-150,-150}, - {-150,166},{-142,166}},color={255,0,255})); + connect(uWin, modSetPoi.u1Win) annotation (Line(points={{-240,-300},{-158,-300}, + {-158,183},{-142,183}},color={255,0,255})); - connect(havOcc.y, modSetPoi.uOccSen) annotation (Line(points={{-78,60},{-60,60}, - {-60,112},{-180,112},{-180,154},{-142,154}}, color={255,0,255})); + connect(havOcc.y, modSetPoi.u1OccSen) annotation (Line(points={{-78,60},{-60,60}, + {-60,112},{-180,112},{-180,156},{-142,156}}, color={255,0,255})); - connect(modSetPoi.warUpTim, warUpTim) annotation (Line(points={{-142,168},{-180, - 168},{-180,190},{-220,190}}, color={0,0,127})); + connect(modSetPoi.warUpTim, warUpTim) annotation (Line(points={{-142,186},{-200, + 186},{-200,190},{-240,190}}, color={0,0,127})); - connect(modSetPoi.cooDowTim, cooDowTim) annotation (Line(points={{-142,169},{ - -174,169},{-174,220},{-220,220}}, - color={0,0,127})); + connect(modSetPoi.cooDowTim, cooDowTim) annotation (Line(points={{-142,188},{-194, + 188},{-194,220},{-240,220}}, color={0,0,127})); connect(modSetPoi.uCooDemLimLev, uCooDemLimLev) annotation (Line(points={{-142, - 152},{-162,152},{-162,40},{-220,40}}, color={255,127,0})); + 154},{-182,154},{-182,40},{-240,40}}, color={255,127,0})); connect(modSetPoi.uHeaDemLimLev, uHeaDemLimLev) annotation (Line(points={{-142, - 151},{-156,151},{-156,10},{-220,10}}, color={255,127,0})); + 152},{-176,152},{-176,10},{-240,10}}, color={255,127,0})); - connect(TSupAir.yCooCoi, yCooCoi) annotation (Line(points={{122,4},{160,4},{160, + connect(TSupAir.yCooCoi, yCooCoi) annotation (Line(points={{124,6},{160,6},{160, -60},{220,-60}}, color={0,0,127})); - connect(TSupAir.yHeaCoi, yHeaCoi) annotation (Line(points={{122,16},{160,16},{ + connect(TSupAir.yHeaCoi, yHeaCoi) annotation (Line(points={{124,18},{160,18},{ 160,20},{220,20}}, color={0,0,127})); - connect(TSupAir.TAirSupSet, TAirSupSet) annotation (Line(points={{122,10},{180, - 10},{180,-20},{220,-20}}, color={0,0,127})); + connect(TSupAir.TSupSet, TSupSet) annotation (Line(points={{124,12},{180,12}, + {180,-20},{220,-20}}, color={0,0,127})); connect(fanSpe.yFanSpe, yFanSpe) annotation (Line(points={{142,178},{160,178}, {160,160},{220,160}}, color={0,0,127})); @@ -861,58 +867,58 @@ equation connect(fanSpe.yFan, yFan) annotation (Line(points={{142,182},{160,182},{160,200}, {220,200}}, color={255,0,255})); - connect(modSetPoi.yOpeMod, fanSpe.opeMod) annotation (Line(points={{-118,164}, - {-60,164},{-60,180},{20,180},{20,186},{118,186}}, color={255,127,0})); + connect(modSetPoi.yOpeMod, fanSpe.opeMod) annotation (Line(points={{-118,178}, + {-60,178},{-60,186},{118,186}}, color={255,127,0})); - connect(TSup, TSupAir.TAirSup) annotation (Line(points={{-220,-20},{-60,-20},{ - -60,8},{98,8}}, color={0,0,127})); + connect(TSup, TSupAir.TAirSup) annotation (Line(points={{-240,-20},{-80,-20},{ + -80,10},{100,10}}, + color={0,0,127})); - connect(uFan, fanSpe.uFanPro) annotation (Line(points={{-220,-120},{28,-120},{ - 28,182},{118,182}}, color={255,0,255})); + connect(uFan, fanSpe.uFanPro) annotation (Line(points={{-240,-270},{8,-270},{8, + 182},{118,182}}, color={255,0,255})); connect(heaPI.y, fanSpe.uHea) annotation (Line(points={{-58,220},{0,220},{0,178}, {118,178}}, color={0,0,127})); - connect(cooPI.y, fanSpe.uCoo) annotation (Line(points={{-18,160},{20,160},{20, + connect(cooPI.y, fanSpe.uCoo) annotation (Line(points={{-18,166},{20,166},{20, 174},{118,174}}, color={0,0,127})); - connect(modSetPoi.TZonCooSet, TSupAir.TZonSetCoo) annotation (Line(points={{-118, - 160},{-50,160},{-50,0},{98,0}}, color={0,0,127})); + connect(modSetPoi.TCooSet, TSupAir.TZonSetCoo) annotation (Line(points={{-118, + 170},{-50,170},{-50,2},{100,2}}, color={0,0,127})); - connect(modSetPoi.TZonHeaSet, TSupAir.TZonSetHea) annotation (Line(points={{-118, - 152},{-54,152},{-54,16},{98,16}}, color={0,0,127})); + connect(modSetPoi.THeaSet, TSupAir.TZonSetHea) annotation (Line(points={{-118, + 162},{-54,162},{-54,18},{100,18}}, color={0,0,127})); - connect(cooPI.y, TSupAir.uCoo) annotation (Line(points={{-18,160},{20,160},{20, - 4},{98,4}}, color={0,0,127})); + connect(cooPI.y, TSupAir.uCoo) annotation (Line(points={{-18,166},{20,166},{20, + 6},{100,6}}, color={0,0,127})); - connect(heaPI.y, TSupAir.uHea) annotation (Line(points={{-58,220},{0,220},{0,12}, - {98,12}}, color={0,0,127})); + connect(heaPI.y, TSupAir.uHea) annotation (Line(points={{-58,220},{0,220},{0,14}, + {100,14}}, color={0,0,127})); connect(TZonHeaSet, TZonHeaSet) annotation (Line(points={{220,120},{220,120}}, color={0,0,127})); - connect(uFan, TSupAir.uFan) annotation (Line(points={{-220,-120},{28,-120},{28, - 20},{98,20}}, color={255,0,255})); + connect(uFan, TSupAir.uFan) annotation (Line(points={{-240,-270},{8,-270},{8,22}, + {100,22}}, color={255,0,255})); - connect(nOcc, havOcc.u) annotation (Line(points={{-220,-90},{-120,-90},{-120,60}, - {-102,60}}, color={255,127,0})); + connect(nOcc, havOcc.u) annotation (Line(points={{-240,-240},{-140,-240},{-140, + 60},{-102,60}}, + color={255,127,0})); - connect(setAdj, modSetPoi.setAdj) annotation (Line(points={{-220,130},{-184, - 130},{-184,156.5},{-142,156.5}}, - color={0,0,127})); + connect(cooSetAdj, modSetPoi.cooSetAdj) annotation (Line(points={{-240,130},{-212, + 130},{-212,161},{-142,161}}, color={0,0,127})); - connect(heaSetAdj, modSetPoi.heaSetAdj) annotation (Line(points={{-220,100},{ - -152,100},{-152,154.5},{-142,154.5}}, - color={0,0,127})); + connect(heaSetAdj, modSetPoi.heaSetAdj) annotation (Line(points={{-240,100},{-172, + 100},{-172,159},{-142,159}}, color={0,0,127})); - connect(TSup, fcuPlaReq.TAirSup) annotation (Line(points={{-220,-20},{-60,-20}, - {-60,-86},{98,-86}}, color={0,0,127})); + connect(TSup, fcuPlaReq.TAirSup) annotation (Line(points={{-240,-20},{-80,-20}, + {-80,-86},{98,-86}}, color={0,0,127})); - connect(uCooCoi, fcuPlaReq.uCooCoi_actual) annotation (Line(points={{-220,-240}, - {80,-240},{80,-93.8},{98,-93.8}}, color={0,0,127})); + connect(uCooCoi, fcuPlaReq.uCooCoi_actual) annotation (Line(points={{-240,-380}, + {60,-380},{60,-93.8},{98,-93.8}}, color={0,0,127})); - connect(uHeaCoi, fcuPlaReq.uHeaCoi_actual) annotation (Line(points={{-220,-200}, - {90,-200},{90,-98},{98,-98}}, color={0,0,127})); + connect(uHeaCoi, fcuPlaReq.uHeaCoi_actual) annotation (Line(points={{-240,-340}, + {70,-340},{70,-98},{98,-98}}, color={0,0,127})); connect(fcuPlaReq.yChiWatResReq, yChiWatResReq) annotation (Line(points={{122,-84}, {160,-84},{160,-100},{220,-100}}, color={255,127,0})); @@ -926,50 +932,58 @@ equation connect(fcuPlaReq.yHotWatPlaReq, yHotWatPlaReq) annotation (Line(points={{122,-96}, {144,-96},{144,-220},{220,-220}}, color={255,127,0})); - connect(TSupAir.TAirSupSet, fcuPlaReq.TSupSet) annotation (Line(points={{122,10}, - {130,10},{130,-70},{94,-70},{94,-90},{98,-90}}, color={0,0,127})); + connect(TSupAir.TSupSet, fcuPlaReq.TSupSet) annotation (Line(points={{124,12}, + {130,12},{130,-70},{94,-70},{94,-90},{98,-90}}, color={0,0,127})); connect(fanSpe.yFanSpe, fcuPlaReq.uFanSpe) annotation (Line(points={{142,178}, {150,178},{150,-60},{90,-60},{90,-82},{98,-82}}, color={0,0, 127})); + connect(TOccHeaSet, modSetPoi.TOccHeaSet) annotation (Line(points={{-240,-80}, + {-164,-80},{-164,177},{-142,177}}, color={0,0,127})); + connect(TOccCooSet, modSetPoi.TOccCooSet) annotation (Line(points={{-240,-120}, + {-168,-120},{-168,175},{-142,175}}, color={0,0,127})); + connect(TUnoHeaSet, modSetPoi.TUnoHeaSet) annotation (Line(points={{-240,-160}, + {-200,-160},{-200,173},{-142,173}}, color={0,0,127})); + connect(TUnoCooSet, modSetPoi.TUnoCooSet) annotation (Line(points={{-240,-200}, + {-206,-200},{-206,171},{-142,171}}, color={0,0,127})); annotation (defaultComponentName="conFCU", - Icon(coordinateSystem(preserveAspectRatio=false, extent={{-200,-300},{200,300}}), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-200,-380},{200,380}}), graphics={Rectangle( - extent={{-200,-300},{200,300}}, + extent={{-200,-380},{200,380}}, lineColor={0,0,127}, fillColor={255,255,255}, fillPattern=FillPattern.Solid), Text( - extent={{-200,380},{200,300}}, + extent={{-200,460},{200,380}}, textString="%name", textColor={0,0,255}), Text( - extent={{-196,216},{-134,188}}, + extent={{-196,296},{-134,268}}, textColor={0,0,127}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, textString="tNexOcc"), Text( - extent={{-200,-68},{-156,-88}}, + extent={{-200,12},{-156,-8}}, textColor={0,0,127}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, textString="TZon"), Text( - extent={{-200,92},{-154,72}}, + extent={{-200,172},{-154,152}}, textColor={255,0,255}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, textString="uOcc"), Text( - extent={{-200,-28},{-152,-50}}, + extent={{-200,52},{-152,30}}, textColor={0,0,127}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, textString="TSup"), Text( - extent={{-198,-132},{-152,-104}}, + extent={{-198,-212},{-152,-184}}, textColor={244,125,35}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, @@ -977,7 +991,7 @@ annotation (defaultComponentName="conFCU", visible=have_occSen), Text( visible=have_winSen, - extent={{-198,-186},{-154,-208}}, + extent={{-198,-266},{-154,-288}}, textColor={255,0,255}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, @@ -987,7 +1001,7 @@ annotation (defaultComponentName="conFCU", textColor={0,0,127}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, - textString="TAirSup"), + textString="TSupSet"), Text( extent={{150,174},{198,150}}, textColor={0,0,127}, @@ -1021,31 +1035,31 @@ annotation (defaultComponentName="conFCU", textString="yCooCoi", visible=have_cooCoi), Text( - extent={{-194,298},{-120,266}}, + extent={{-194,378},{-120,346}}, textColor={0,0,127}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, textString="warUpTim"), Text( - extent={{-194,258},{-114,226}}, + extent={{-194,338},{-114,306}}, textColor={0,0,127}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, textString="cooDowTim"), Text( - extent={{-194,54},{-82,32}}, + extent={{-194,134},{-82,112}}, textColor={255,127,0}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, textString="uCooDemLimLev"), Text( - extent={{-194,12},{-82,-10}}, + extent={{-194,92},{-82,70}}, textColor={255,127,0}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, textString="uHeaDemLimLev"), Text( - extent={{-202,-150},{-156,-170}}, + extent={{-202,-230},{-156,-250}}, textColor={255,0,255}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, @@ -1062,7 +1076,7 @@ annotation (defaultComponentName="conFCU", fillColor={0,0,0}, fillPattern=FillPattern.Solid, textString="setAdj", - visible=cooAdj or sinAdj), + visible=cooAdj or have_locAdj), Text( extent={{-196,134},{-134,106}}, textColor={0,0,127}, @@ -1071,14 +1085,14 @@ annotation (defaultComponentName="conFCU", textString="heaSetAdj", visible=heaAdj), Text( - extent={{-196,-228},{-148,-250}}, + extent={{-196,-308},{-148,-330}}, textColor={0,0,127}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, textString="uHeaCoi", visible=have_hotWatCoi), Text( - extent={{-196,-268},{-148,-290}}, + extent={{-196,-348},{-148,-370}}, textColor={0,0,127}, fillColor={0,0,0}, fillPattern=FillPattern.Solid, @@ -1111,9 +1125,45 @@ annotation (defaultComponentName="conFCU", fillColor={0,0,0}, fillPattern=FillPattern.Solid, textString="yHotWatPlaReq", - visible=have_hotWatCoi)}), + visible=have_hotWatCoi), + Text( + extent={{-196,-26},{-104,-54}}, + textColor={0,0,127}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="TOccHeaSet"), + Text( + extent={{-194,-68},{-98,-92}}, + textColor={0,0,127}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="TOccCooSet"), + Text( + extent={{-194,-108},{-98,-130}}, + textColor={0,0,127}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="TUnoHeaSet"), + Text( + extent={{-200,-148},{-94,-170}}, + textColor={0,0,127}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="TUnoCooSet"), + Text( + extent={{-196,256},{-124,228}}, + textColor={0,0,127}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="cooSetAdj"), + Text( + extent={{-196,214},{-124,186}}, + textColor={0,0,127}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="heaSetAdj")}), Diagram(coordinateSystem( - preserveAspectRatio=false, extent={{-200,-260},{200,240}})), + preserveAspectRatio=false, extent={{-220,-400},{200,240}})), Documentation(info="
Block for fan coil unit control. It outputs supply fan enable signal and speed signal, diff --git a/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Subsequences/SupplyAirTemperature.mo b/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Subsequences/SupplyAirTemperature.mo index 490811e2f50..028742ab321 100644 --- a/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Subsequences/SupplyAirTemperature.mo +++ b/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Subsequences/SupplyAirTemperature.mo @@ -15,7 +15,7 @@ block SupplyAirTemperature annotation(Dialog(group="Heating loop parameters", enable = have_heaCoi)); - parameter Real THeaSupAirMax( + parameter Real TSupSet_max( final unit="K", displayUnit="degC") = 273.15 + 32 "Supply air temperature setpoint at maximum heating loop signal" @@ -36,7 +36,7 @@ block SupplyAirTemperature annotation(Dialog(group="Cooling loop parameters", enable = have_cooCoi)); - parameter Real TCooSupAirMin( + parameter Real TSupSet_min( final unit="K", displayUnit="degC") = 273.15+12.8 "Supply air temperature setpoint at maximum cooling loop signal" @@ -148,23 +148,23 @@ block SupplyAirTemperature Buildings.Controls.OBC.CDL.Interfaces.RealInput TAirSup( final unit="K", displayUnit="K", - quantity="ThermodynamicTemperature") + final quantity="ThermodynamicTemperature") "Measured supply air temperature" annotation (Placement(transformation(extent={{-160,-20},{-120,20}}), iconTransformation(extent={{-140,-40},{-100,0}}))); - Buildings.Controls.OBC.CDL.Interfaces.RealInput TZonHeaSet( + Buildings.Controls.OBC.CDL.Interfaces.RealInput TZonSetHea( final unit="K", displayUnit="K", - quantity="ThermodynamicTemperature") if have_heaCoi + final quantity="ThermodynamicTemperature") if have_heaCoi "Zone heating temperature setpoint" annotation (Placement(transformation(extent={{-160,60},{-120,100}}), iconTransformation(extent={{-140,40},{-100,80}}))); - Buildings.Controls.OBC.CDL.Interfaces.RealInput TZonCooSet( + Buildings.Controls.OBC.CDL.Interfaces.RealInput TZonSetCoo( final unit="K", displayUnit="K", - quantity="ThermodynamicTemperature") if have_cooCoi + final quantity="ThermodynamicTemperature") if have_cooCoi "Zone cooling temperature setpoint" annotation (Placement(transformation(extent={{-160,-140},{-120,-100}}), iconTransformation(extent={{-140,-120},{-100,-80}}))); @@ -186,10 +186,10 @@ block SupplyAirTemperature Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupSet( final unit="K", displayUnit="K", - quantity="ThermodynamicTemperature") + final quantity="ThermodynamicTemperature") "Supply air temperature setpoint" annotation (Placement(transformation(extent={{120,-20},{160,20}}), - iconTransformation(extent={{100,-20},{140,20}}))); + iconTransformation(extent={{100,-20},{140,20}}))); protected Buildings.Controls.OBC.CDL.Continuous.Switch swiDeaCoo @@ -212,22 +212,22 @@ protected "Convert cooling loop signal to supply air temperature setpoint" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conTHeaSupAirMax( - final k=THeaSupAirMax) + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conTSupSet_max( + final k=TSupSet_max) "Maximum heating supply air temperature setpoint limit signal" annotation (Placement(transformation(extent={{-110,90},{-90,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conuHea_min( + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conUHea_min( final k=uHea_min) "Minimum heating loop signal support point" annotation (Placement(transformation(extent={{-110,10},{-90,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conTCooSupAirMin( - final k=TCooSupAirMin) + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conTSupSet_min( + final k=TSupSet_min) "Minimum cooling supply air temperature setpoint limit signal" annotation (Placement(transformation(extent={{-110,-30},{-90,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conuCoo_min( + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conUCoo_min( final k=uCoo_min) "Minimum cooling loop signal support point" annotation (Placement(transformation(extent={{-110,-70},{-90,-50}}))); @@ -285,12 +285,12 @@ protected "Output cooling coil signal only when fan is proven on" annotation (Placement(transformation(extent={{90,-70},{110,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conuHea_max( + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conUHea_max( final k=uHea_max) "Maximum heating loop signal support point" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conuCoo_max( + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conUCoo_max( final k=uCoo_max) "Maximum cooling loop signal support point" annotation (Placement(transformation(extent={{-110,-110},{-90,-90}}))); @@ -352,16 +352,16 @@ equation connect(swiDeaCoo.y, conPIDCoo.u_s) annotation (Line(points={{22,-20},{36,-20}, {36,-60},{38,-60}}, color={0,0,127})); - connect(conTHeaSupAirMax.y, linTHeaSupAir.f2) annotation (Line(points={{-88,100}, + connect(conTSupSet_max.y, linTHeaSupAir.f2) annotation (Line(points={{-88,100}, {-80,100},{-80,52},{-62,52}}, color={0,0,127})); - connect(conTCooSupAirMin.y, linTCooSupAir.f2) annotation (Line(points={{-88,-20}, + connect(conTSupSet_min.y, linTCooSupAir.f2) annotation (Line(points={{-88,-20}, {-70,-20},{-70,-68},{-62,-68}}, color={0,0,127})); - connect(TZonHeaSet, linTHeaSupAir.f1) annotation (Line(points={{-140,80},{-74, + connect(TZonSetHea, linTHeaSupAir.f1) annotation (Line(points={{-140,80},{-74, 80},{-74,64},{-62,64}}, color={0,0,127})); - connect(TZonCooSet, linTCooSupAir.f1) annotation (Line(points={{-140,-120},{-64, + connect(TZonSetCoo, linTCooSupAir.f1) annotation (Line(points={{-140,-120},{-64, -120},{-64,-56},{-62,-56}}, color={0,0,127})); connect(TAirSup, swiDeaHea.u3) annotation (Line(points={{-140,0},{-30,0},{-30, @@ -373,8 +373,8 @@ equation connect(conZerCooMod.y, linTCooSupAir.f1) annotation (Line(points={{-78,-140}, {-66,-140},{-66,-56},{-62,-56}}, color={0,0,127})); - connect(swiDeaCoo.y, TSupSet) annotation (Line(points={{22,-20},{36,-20},{36, - 0},{140,0}}, color={0,0,127})); + connect(swiDeaCoo.y, TSupSet) annotation (Line(points={{22,-20},{36,-20},{36,0}, + {140,0}}, color={0,0,127})); connect(uFan, booToRea2.u) annotation (Line(points={{-140,140},{58,140}}, color={255,0,255})); @@ -386,13 +386,13 @@ equation {140,-60}}, color={0,0,127})); connect(booToRea2.y, mul3.u1) annotation (Line(points={{82,140},{86,140},{86,-54}, {88,-54}}, color={0,0,127})); - connect(conuHea_max.y, linTHeaSupAir.x2) annotation (Line(points={{-58,20},{-52, + connect(conUHea_max.y, linTHeaSupAir.x2) annotation (Line(points={{-58,20},{-52, 20},{-52,40},{-68,40},{-68,56},{-62,56}}, color={0,0,127})); - connect(conuHea_min.y, linTHeaSupAir.x1) annotation (Line(points={{-88,20},{-84, + connect(conUHea_min.y, linTHeaSupAir.x1) annotation (Line(points={{-88,20},{-84, 20},{-84,68},{-62,68}}, color={0,0,127})); - connect(conuCoo_min.y, linTCooSupAir.x1) annotation (Line(points={{-88,-60},{ + connect(conUCoo_min.y, linTCooSupAir.x1) annotation (Line(points={{-88,-60},{ -86,-60},{-86,-52},{-62,-52}}, color={0,0,127})); - connect(conuCoo_max.y, linTCooSupAir.x2) annotation (Line(points={{-88,-100}, + connect(conUCoo_max.y, linTCooSupAir.x2) annotation (Line(points={{-88,-100}, {-80,-100},{-80,-64},{-62,-64}}, color={0,0,127})); connect(conPIDCoo.y, swiCooCoi.u1) annotation (Line(points={{62,-60},{66,-60}, {66,-92},{68,-92}}, color={0,0,127})); diff --git a/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Subsequences/Validation/SupplyAirTemperature.mo b/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Subsequences/Validation/SupplyAirTemperature.mo index 3c95ee98789..df6a4248675 100644 --- a/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Subsequences/Validation/SupplyAirTemperature.mo +++ b/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Subsequences/Validation/SupplyAirTemperature.mo @@ -140,22 +140,22 @@ equation annotation (Line(points={{62,70},{70,70},{70,70},{78,70}}, color={0,0,127})); - connect(con.y, TSupAir.TZonHeaSet) annotation (Line(points={{-68,130},{-56, + connect(con.y,TSupAir.TZonSetHea) annotation (Line(points={{-68,130},{-56, 130},{-56,78},{-52,78}}, color={0,0,127})); - connect(con1.y, TSupAir.TZonCooSet) annotation (Line(points={{-68,10},{-56,10}, + connect(con1.y,TSupAir.TZonSetCoo) annotation (Line(points={{-68,10},{-56,10}, {-56,62},{-52,62}}, color={0,0,127})); - connect(con2.y, TSupAir1.TZonHeaSet) annotation (Line(points={{62,130},{72, + connect(con2.y,TSupAir1.TZonSetHea) annotation (Line(points={{62,130},{72, 130},{72,78},{78,78}}, color={0,0,127})); - connect(con3.y, TSupAir1.TZonCooSet) annotation (Line(points={{62,10},{72,10}, + connect(con3.y,TSupAir1.TZonSetCoo) annotation (Line(points={{62,10},{72,10}, {72,62},{78,62}}, color={0,0,127})); - connect(con4.y, TSupAir2.TZonHeaSet) annotation (Line(points={{-68,-30},{-56, + connect(con4.y,TSupAir2.TZonSetHea) annotation (Line(points={{-68,-30},{-56, -30},{-56,-82},{-52,-82}}, color={0,0,127})); - connect(con6.y, TSupAir3.TZonCooSet) annotation (Line(points={{42,-120},{54, + connect(con6.y,TSupAir3.TZonSetCoo) annotation (Line(points={{42,-120},{54, -120},{54,-78},{58,-78}}, color={0,0,127})); connect(con5.y, TSupAir.uHea) annotation (Line(points={{-68,100},{-60,100},{ diff --git a/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Validation/Controller.mo index 379eb2845f2..d81cd125daa 100644 --- a/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Validation/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/FanCoilUnit/Validation/Controller.mo @@ -1,6 +1,7 @@ within Buildings.Controls.OBC.ASHRAE.FanCoilUnit.Validation; model Controller "Validation of the top-level controller" + Buildings.Controls.OBC.ASHRAE.FanCoilUnit.Controller conFCU( final have_hotWatCoi=true, final have_eleHeaCoi=false, @@ -9,12 +10,12 @@ model Controller final controllerTypeCoo=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final controllerTypeHea=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final have_occSen=true, - final TSupSetMax=297.15, - final TSupSetMin=285.15, - final have_cooCoi=true, - final heaSpeMax=0.6, - final heaSpeMin=0.2, - final cooSpeMin=0.2) + final TSupSet_max=297.15, + final TSupSet_min=285.15, + final heaSpe_max=0.6, + final heaSpe_min=0.2, + final cooSpe_min=0.2, + final have_cooCoi=true) "Validate the heating case" annotation (Placement(transformation(extent={{20,76},{60,136}}))); @@ -27,12 +28,12 @@ model Controller final controllerTypeCoo=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final controllerTypeHea=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final have_occSen=false, - final TSupSetMax=297.15, - final TSupSetMin=285.15, + final TSupSet_max=297.15, + final TSupSet_min=285.15, final have_cooCoi=true, - final heaSpeMax=0.6, - final heaSpeMin=0.2, - final cooSpeMin=0.2) + final heaSpe_max=0.6, + final heaSpe_min=0.2, + final cooSpe_min=0.2) "Validate the cooling case" annotation (Placement(transformation(extent={{20,0},{60,60}}))); @@ -45,12 +46,12 @@ model Controller final controllerTypeCoo=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final controllerTypeHea=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final have_occSen=true, - final TSupSetMax=297.15, - final TSupSetMin=285.15, + final TSupSet_max=297.15, + final TSupSet_min=285.15, final have_cooCoi=true, - final heaSpeMax=0.6, - final heaSpeMin=0.2, - final cooSpeMin=0.2) + final heaSpe_max=0.6, + final heaSpe_min=0.2, + final cooSpe_min=0.2) "Validate the cooling case" annotation (Placement(transformation(extent={{20,-78},{60,-18}}))); @@ -63,16 +64,36 @@ model Controller final controllerTypeCoo=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final controllerTypeHea=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final have_occSen=false, - final TSupSetMax=297.15, - final TSupSetMin=285.15, + final TSupSet_max=297.15, + final TSupSet_min=285.15, final have_cooCoi=true, - final heaSpeMax=0.6, - final heaSpeMin=0.2, - final cooSpeMin=0.2) + final heaSpe_max=0.6, + final heaSpe_min=0.2, + final cooSpe_min=0.2) "Validate the cooling case" annotation (Placement(transformation(extent={{20,-154},{60,-94}}))); protected + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOccHeaSet( + final k=293.15) + "Occupied heating setpoint temperature" + annotation (Placement(transformation(extent={{-160,130},{-140,150}}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOccCooSet( + final k=297.15) + "Occupied cooling setpoint temperature" + annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TUnoHeaSet( + final k=285.15) + "Unoccupied heating setpoint temperature" + annotation (Placement(transformation(extent={{-80,130},{-60,150}}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TUnoCooSet( + final k=303.15) + "Unoccupied cooling setpoint temperature" + annotation (Placement(transformation(extent={{-40,130},{-20,150}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TZon( final duration=86400, final height=6, @@ -89,11 +110,11 @@ protected Buildings.Controls.OBC.CDL.Integers.Sources.Constant nOcc( final k=2) "Number of occupants" - annotation (Placement(transformation(extent={{-150,-10},{-130,10}}))); + annotation (Placement(transformation(extent={{-160,-10},{-140,10}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant win(final k=false) "Window status" - annotation (Placement(transformation(extent={{-120,-130},{-100,-110}}))); + annotation (Placement(transformation(extent={{-180,-150},{-160,-130}}))); Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TZon1( final duration=86400, @@ -122,151 +143,219 @@ protected Buildings.Controls.OBC.CDL.Integers.Sources.Constant demLim( final k=0) "Cooling and heating demand imit level" - annotation (Placement(transformation(extent={{-150,-110},{-130,-90}}))); + annotation (Placement(transformation(extent={{-180,-110},{-160,-90}}))); Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooWarTim( final k=0) "Cooldown and warm-up time" - annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); equation connect(TZon.y,conFCU. TZon) annotation (Line(points={{-158,80},{-20,80},{-20, - 98},{18,98}}, color={0,0,127})); + 106},{18,106}}, color={0,0,127})); connect(occSch.occupied,conFCU. uOcc) annotation (Line(points={{-99,48},{-74, - 48},{-74,114},{18,114}}, color={255,0,255})); + 48},{-74,118.632},{18,118.632}}, + color={255,0,255})); connect(occSch.tNexOcc,conFCU. tNexOcc) annotation (Line(points={{-99,60},{ - -80,60},{-80,126},{18,126}}, color={0,0,127})); + -80,60},{-80,128.105},{18,128.105}}, + color={0,0,127})); connect(TSup.y,conFCU. TSup) annotation (Line(points={{-158,40},{-140,40},{ - -140,102},{18,102}}, color={0,0,127})); + -140,109.158},{18,109.158}}, + color={0,0,127})); - connect(win.y,conFCU1. uWin) annotation (Line(points={{-98,-120},{0,-120},{0, - 10},{18,10}}, color={255,0,255})); + connect(win.y,conFCU1. uWin) annotation (Line(points={{-158,-140},{0,-140},{0, + 7.89474},{18,7.89474}}, + color={255,0,255})); connect(occSch.tNexOcc,conFCU1. tNexOcc) annotation (Line(points={{-99,60},{ - -20,60},{-20,50},{18,50}}, color={0,0,127})); + -20,60},{-20,52.1053},{18,52.1053}}, + color={0,0,127})); connect(occSch.occupied,conFCU1. uOcc) - annotation (Line(points={{-99,48},{-40,48},{-40,38},{18,38}}, + annotation (Line(points={{-99,48},{-40,48},{-40,42.6316},{18,42.6316}}, color={255,0,255})); - connect(TZon1.y,conFCU1. TZon) annotation (Line(points={{-158,-40},{-70,-40}, - {-70,22},{18,22}},color={0,0,127})); + connect(TZon1.y,conFCU1. TZon) annotation (Line(points={{-158,-40},{-70,-40},{ + -70,30},{18,30}}, color={0,0,127})); - connect(TSup1.y,conFCU1. TSup) annotation (Line(points={{-158,-70},{-84,-70}, - {-84,26},{18,26}}, color={0,0,127})); + connect(TSup1.y,conFCU1. TSup) annotation (Line(points={{-158,-70},{-84,-70},{ + -84,33.1579},{18,33.1579}}, color={0,0,127})); - connect(TSup1.y,conFCU2. TSup) annotation (Line(points={{-158,-70},{-84,-70}, - {-84,-52},{18,-52}}, color={0,0,127})); + connect(TSup1.y,conFCU2. TSup) annotation (Line(points={{-158,-70},{-84,-70},{ + -84,-44.8421},{18,-44.8421}}, color={0,0,127})); connect(occSch.occupied,conFCU2. uOcc) annotation (Line(points={{-99,48},{-74, - 48},{-74,-40},{18,-40}}, color={255,0,255})); + 48},{-74,-35.3684},{18,-35.3684}}, color={255,0,255})); connect(occSch.tNexOcc,conFCU2. tNexOcc) annotation (Line(points={{-99,60},{ - -80,60},{-80,-28},{18,-28}}, color={0,0,127})); + -80,60},{-80,-25.8947},{18,-25.8947}}, + color={0,0,127})); - connect(TZon1.y,conFCU2. TZon) annotation (Line(points={{-158,-40},{-70,-40}, - {-70,-56},{18,-56}},color={0,0,127})); + connect(TZon1.y,conFCU2. TZon) annotation (Line(points={{-158,-40},{-70,-40},{ + -70,-48},{18,-48}}, color={0,0,127})); - connect(win.y,conFCU3. uWin) annotation (Line(points={{-98,-120},{0,-120},{0, - -144},{18,-144}}, + connect(win.y,conFCU3. uWin) annotation (Line(points={{-158,-140},{0,-140},{0, + -146.105},{18,-146.105}}, color={255,0,255})); connect(occSch.occupied,conFCU3. uOcc) annotation (Line(points={{-99,48},{-74, - 48},{-74,-116},{18,-116}}, color={255,0,255})); + 48},{-74,-111.368},{18,-111.368}}, color={255,0,255})); connect(TSup1.y,conFCU3. TSup) annotation (Line(points={{-158,-70},{-84,-70}, - {-84,-128},{18,-128}}, color={0,0,127})); + {-84,-120.842},{18,-120.842}},color={0,0,127})); - connect(TZon1.y,conFCU3. TZon) annotation (Line(points={{-158,-40},{-70,-40}, - {-70,-132},{18,-132}}, + connect(TZon1.y,conFCU3. TZon) annotation (Line(points={{-158,-40},{-70,-40},{ + -70,-124},{18,-124}}, color={0,0,127})); connect(occSch.tNexOcc,conFCU3. tNexOcc) annotation (Line(points={{-99,60},{ - -80,60},{-80,-104},{18,-104}}, color={0,0,127})); + -80,60},{-80,-101.895},{18,-101.895}}, + color={0,0,127})); - connect(cooWarTim.y,conFCU. warUpTim) annotation (Line(points={{-98,20},{-14, - 20},{-14,134},{18,134}}, color={0,0,127})); + connect(cooWarTim.y,conFCU. warUpTim) annotation (Line(points={{-98,-20},{-14, + -20},{-14,134.421},{18,134.421}}, + color={0,0,127})); - connect(cooWarTim.y,conFCU. cooDowTim) annotation (Line(points={{-98,20},{-14, - 20},{-14,130},{18,130}}, color={0,0,127})); + connect(cooWarTim.y,conFCU. cooDowTim) annotation (Line(points={{-98,-20},{ + -14,-20},{-14,131.263},{18,131.263}}, + color={0,0,127})); - connect(cooWarTim.y,conFCU1. warUpTim) annotation (Line(points={{-98,20},{-14, - 20},{-14,58},{18,58}}, color={0,0,127})); + connect(cooWarTim.y,conFCU1. warUpTim) annotation (Line(points={{-98,-20},{ + -14,-20},{-14,58.4211},{18,58.4211}}, + color={0,0,127})); - connect(cooWarTim.y,conFCU1. cooDowTim) annotation (Line(points={{-98,20},{ - -14,20},{-14,54},{18,54}}, color={0,0,127})); + connect(cooWarTim.y,conFCU1. cooDowTim) annotation (Line(points={{-98,-20},{ + -14,-20},{-14,55.2632},{18,55.2632}}, + color={0,0,127})); - connect(cooWarTim.y,conFCU2. warUpTim) annotation (Line(points={{-98,20},{-14, - 20},{-14,-20},{18,-20}}, color={0,0,127})); + connect(cooWarTim.y,conFCU2. warUpTim) annotation (Line(points={{-98,-20},{ + -14,-20},{-14,-19.5789},{18,-19.5789}}, + color={0,0,127})); - connect(cooWarTim.y,conFCU2. cooDowTim) annotation (Line(points={{-98,20},{ - -14,20},{-14,-24},{18,-24}}, color={0,0,127})); + connect(cooWarTim.y,conFCU2. cooDowTim) annotation (Line(points={{-98,-20},{ + -14,-20},{-14,-22.7368},{18,-22.7368}}, + color={0,0,127})); - connect(cooWarTim.y,conFCU3. warUpTim) annotation (Line(points={{-98,20},{-14, - 20},{-14,-96},{18,-96}}, color={0,0,127})); + connect(cooWarTim.y,conFCU3. warUpTim) annotation (Line(points={{-98,-20},{ + -14,-20},{-14,-95.5789},{18,-95.5789}}, + color={0,0,127})); - connect(cooWarTim.y,conFCU3. cooDowTim) annotation (Line(points={{-98,20},{ - -14,20},{-14,-100},{18,-100}}, color={0,0,127})); + connect(cooWarTim.y,conFCU3. cooDowTim) annotation (Line(points={{-98,-20},{ + -14,-20},{-14,-98.7368},{18,-98.7368}}, + color={0,0,127})); - connect(demLim.y,conFCU3. uHeaDemLimLev) annotation (Line(points={{-128,-100}, - {-4,-100},{-4,-124},{18,-124}}, color={255,127,0})); + connect(demLim.y,conFCU3. uHeaDemLimLev) annotation (Line(points={{-158,-100}, + {-4,-100},{-4,-117.684},{18,-117.684}}, + color={255,127,0})); - connect(demLim.y,conFCU3. uCooDemLimLev) annotation (Line(points={{-128,-100}, - {-4,-100},{-4,-120},{18,-120}}, color={255,127,0})); + connect(demLim.y,conFCU3. uCooDemLimLev) annotation (Line(points={{-158,-100}, + {-4,-100},{-4,-114.526},{18,-114.526}}, + color={255,127,0})); - connect(demLim.y,conFCU2. uHeaDemLimLev) annotation (Line(points={{-128,-100}, - {-4,-100},{-4,-48},{18,-48}}, color={255,127,0})); + connect(demLim.y,conFCU2. uHeaDemLimLev) annotation (Line(points={{-158,-100}, + {-4,-100},{-4,-41.6842},{18,-41.6842}}, + color={255,127,0})); - connect(demLim.y,conFCU2. uCooDemLimLev) annotation (Line(points={{-128,-100}, - {-4,-100},{-4,-44},{18,-44}}, color={255,127,0})); + connect(demLim.y,conFCU2. uCooDemLimLev) annotation (Line(points={{-158,-100}, + {-4,-100},{-4,-38.5263},{18,-38.5263}}, + color={255,127,0})); - connect(demLim.y,conFCU1. uHeaDemLimLev) annotation (Line(points={{-128,-100}, - {-4,-100},{-4,30},{18,30}}, color={255,127,0})); + connect(demLim.y,conFCU1. uHeaDemLimLev) annotation (Line(points={{-158,-100}, + {-4,-100},{-4,36.3158},{18,36.3158}}, + color={255,127,0})); - connect(demLim.y,conFCU1. uCooDemLimLev) annotation (Line(points={{-128,-100}, - {-4,-100},{-4,34},{18,34}}, color={255,127,0})); + connect(demLim.y,conFCU1. uCooDemLimLev) annotation (Line(points={{-158,-100}, + {-4,-100},{-4,39.4737},{18,39.4737}}, + color={255,127,0})); - connect(demLim.y,conFCU. uCooDemLimLev) annotation (Line(points={{-128,-100}, - {-4,-100},{-4,110},{18,110}}, color={255,127,0})); + connect(demLim.y,conFCU. uCooDemLimLev) annotation (Line(points={{-158,-100}, + {-4,-100},{-4,115.474},{18,115.474}}, + color={255,127,0})); - connect(demLim.y,conFCU. uHeaDemLimLev) annotation (Line(points={{-128,-100}, - {-4,-100},{-4,106},{18,106}}, color={255,127,0})); + connect(demLim.y,conFCU. uHeaDemLimLev) annotation (Line(points={{-158,-100}, + {-4,-100},{-4,112.316},{18,112.316}}, + color={255,127,0})); - connect(nOcc.y, conFCU.nOcc) annotation (Line(points={{-128,0},{-10,0},{-10, - 94},{18,94}}, + connect(nOcc.y, conFCU.nOcc) annotation (Line(points={{-138,0},{-10,0},{-10, + 90.2105},{18,90.2105}}, color={255,127,0})); - connect(nOcc.y, conFCU2.nOcc) annotation (Line(points={{-128,0},{-10,0},{-10, - -60},{18,-60}}, + connect(nOcc.y, conFCU2.nOcc) annotation (Line(points={{-138,0},{-10,0},{-10, + -63.7895},{18,-63.7895}}, color={255,127,0})); - connect(conFCU.yFan, conFCU.uFan) annotation (Line(points={{62,126},{70,126}, - {70,74},{12,74},{12,90},{18,90}}, color={255,0,255})); - connect(conFCU1.yFan, conFCU1.uFan) annotation (Line(points={{62,50},{72,50}, - {72,-8},{12,-8},{12,14},{18,14}}, + connect(conFCU.yFan, conFCU.uFan) annotation (Line(points={{62,121.789},{70, + 121.789},{70,74},{12,74},{12,87.0526},{18,87.0526}}, + color={255,0,255})); + connect(conFCU1.yFan, conFCU1.uFan) annotation (Line(points={{62,45.7895},{72, + 45.7895},{72,-8},{12,-8},{12,11.0526},{18,11.0526}}, color={255,0,255})); - connect(conFCU2.yFan, conFCU2.uFan) annotation (Line(points={{62,-28},{72,-28}, - {72,-86},{12,-86},{12,-64},{18,-64}}, color={255,0,255})); - connect(conFCU3.yFan, conFCU3.uFan) annotation (Line(points={{62,-104},{72, - -104},{72,-160},{10,-160},{10,-140},{18,-140}}, + connect(conFCU2.yFan, conFCU2.uFan) annotation (Line(points={{62,-32.2105},{ + 72,-32.2105},{72,-86},{12,-86},{12,-66.9474},{18,-66.9474}}, + color={255,0,255})); + connect(conFCU3.yFan, conFCU3.uFan) annotation (Line(points={{62,-108.211},{ + 72,-108.211},{72,-160},{10,-160},{10,-142.947},{18,-142.947}}, color={255,0,255})); - connect(conFCU.yHeaCoi, conFCU.uHeaCoi) annotation (Line(points={{62,110},{68, - 110},{68,72},{14,72},{14,82},{18,82}}, color={0,0,127})); + connect(conFCU.yHeaCoi, conFCU.uHeaCoi) annotation (Line(points={{62,109.158}, + {68,109.158},{68,72},{14,72},{14,80.7368},{18,80.7368}}, + color={0,0,127})); connect(conFCU.yCooCoi, conFCU.uCooCoi) annotation (Line(points={{62,106},{66, - 106},{66,70},{16,70},{16,78},{18,78}}, color={0,0,127})); - connect(conFCU1.yHeaCoi, conFCU1.uHeaCoi) annotation (Line(points={{62,34},{ - 70,34},{70,-6},{14,-6},{14,6},{18,6}}, color={0,0,127})); - connect(conFCU1.yCooCoi, conFCU1.uCooCoi) annotation (Line(points={{62,30},{ - 68,30},{68,-4},{16,-4},{16,2},{18,2}}, color={0,0,127})); - connect(conFCU2.yHeaCoi, conFCU2.uHeaCoi) annotation (Line(points={{62,-44},{ - 70,-44},{70,-84},{14,-84},{14,-72},{18,-72}}, color={0,0,127})); + 106},{66,70},{16,70},{16,77.5789},{18,77.5789}}, + color={0,0,127})); + connect(conFCU1.yHeaCoi, conFCU1.uHeaCoi) annotation (Line(points={{62,33.1579}, + {70,33.1579},{70,-6},{14,-6},{14,4.73684},{18,4.73684}}, + color={0,0,127})); + connect(conFCU1.yCooCoi, conFCU1.uCooCoi) annotation (Line(points={{62,30},{68, + 30},{68,-4},{16,-4},{16,1.57895},{18,1.57895}}, + color={0,0,127})); + connect(conFCU2.yHeaCoi, conFCU2.uHeaCoi) annotation (Line(points={{62, + -44.8421},{70,-44.8421},{70,-84},{14,-84},{14,-73.2632},{18,-73.2632}}, + color={0,0,127})); connect(conFCU2.yCooCoi, conFCU2.uCooCoi) annotation (Line(points={{62,-48},{ - 68,-48},{68,-82},{16,-82},{16,-76},{18,-76}}, color={0,0,127})); - connect(conFCU3.yHeaCoi, conFCU3.uHeaCoi) annotation (Line(points={{62,-120}, - {70,-120},{70,-158},{12,-158},{12,-148},{18,-148}}, color={0,0,127})); + 68,-48},{68,-82},{16,-82},{16,-76.4211},{18,-76.4211}}, + color={0,0,127})); + connect(conFCU3.yHeaCoi, conFCU3.uHeaCoi) annotation (Line(points={{62, + -120.842},{70,-120.842},{70,-158},{12,-158},{12,-149.263},{18, + -149.263}}, color={0,0,127})); connect(conFCU3.yCooCoi, conFCU3.uCooCoi) annotation (Line(points={{62,-124}, - {68,-124},{68,-156},{14,-156},{14,-152},{18,-152}}, color={0,0,127})); + {68,-124},{68,-156},{14,-156},{14,-152.421},{18,-152.421}}, + color={0,0,127})); + connect(TOccHeaSet.y, conFCU.TOccHeaSet) annotation (Line(points={{-138,140}, + {-128,140},{-128,102.842},{18,102.842}},color={0,0,127})); + connect(TOccCooSet.y, conFCU.TOccCooSet) annotation (Line(points={{-98,140},{ + -88,140},{-88,99.6842},{18,99.6842}}, + color={0,0,127})); + connect(TUnoHeaSet.y, conFCU.TUnoHeaSet) annotation (Line(points={{-58,140},{ + -48,140},{-48,96.5263},{18,96.5263}}, + color={0,0,127})); + connect(TUnoCooSet.y, conFCU.TUnoCooSet) annotation (Line(points={{-18,140},{ + -8,140},{-8,93.3684},{18,93.3684}}, + color={0,0,127})); + connect(TOccHeaSet.y, conFCU1.TOccHeaSet) annotation (Line(points={{-138,140}, + {-128,140},{-128,26.8421},{18,26.8421}}, color={0,0,127})); + connect(TOccCooSet.y, conFCU1.TOccCooSet) annotation (Line(points={{-98,140}, + {-88,140},{-88,23.6842},{18,23.6842}},color={0,0,127})); + connect(TUnoHeaSet.y, conFCU1.TUnoHeaSet) annotation (Line(points={{-58,140}, + {-48,140},{-48,20.5263},{18,20.5263}},color={0,0,127})); + connect(TUnoCooSet.y, conFCU1.TUnoCooSet) annotation (Line(points={{-18,140}, + {-8,140},{-8,17.3684},{18,17.3684}},color={0,0,127})); + connect(TOccHeaSet.y, conFCU2.TOccHeaSet) annotation (Line(points={{-138,140}, + {-128,140},{-128,-51.1579},{18,-51.1579}}, color={0,0,127})); + connect(TOccCooSet.y, conFCU2.TOccCooSet) annotation (Line(points={{-98,140}, + {-88,140},{-88,-54.3158},{18,-54.3158}},color={0,0,127})); + connect(TUnoHeaSet.y, conFCU2.TUnoHeaSet) annotation (Line(points={{-58,140}, + {-48,140},{-48,-57.4737},{18,-57.4737}},color={0,0,127})); + connect(TUnoCooSet.y, conFCU2.TUnoCooSet) annotation (Line(points={{-18,140}, + {-8,140},{-8,-60.6316},{18,-60.6316}},color={0,0,127})); + connect(TOccHeaSet.y, conFCU3.TOccHeaSet) annotation (Line(points={{-138,140}, + {-128,140},{-128,-127.158},{18,-127.158}}, color={0,0,127})); + connect(TOccCooSet.y, conFCU3.TOccCooSet) annotation (Line(points={{-98,140}, + {-88,140},{-88,-130.316},{18,-130.316}},color={0,0,127})); + connect(TUnoHeaSet.y, conFCU3.TUnoHeaSet) annotation (Line(points={{-58,140}, + {-48,140},{-48,-133.474},{18,-133.474}},color={0,0,127})); + connect(TUnoCooSet.y, conFCU3.TUnoCooSet) annotation (Line(points={{-18,140}, + {-8,140},{-8,-136.632},{18,-136.632}},color={0,0,127})); annotation (experiment(StopTime=86400, Tolerance=1e-06), __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/FanCoilUnit/Validation/Controller.mos" "Simulate and plot"),