Sequences for controlling chilled water minimum flow bypass valve
Information
This package contains chilled water minimum flow bypass valve control sequences.
The implementation is based on section 5.20.8, in ASHRAE Guideline 36-2021.
Package Content
| Name |
Description |
Controller
|
Controller for chilled water minimum flow bypass valve |
FlowSetpoint
|
Chilled water minimum flow setpoint for primary-only plants |
Validation
|
Collection of validation models |
Controller for chilled water minimum flow bypass valve
Information
Block that controls chilled water minimum flow for primary-only
plants with a minimum flow bypass valve, according to ASHRAE Guideline 36-2021,
section 5.20.8 Chilled water minimum flow bypass valve.
The minimum chilled water flow setpoint VChiWatSet_flow is specified by
the block
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.MinimumFlowBypass.FlowSetpoint.
When any chilled water pump is proven on (uChiWatPum = true),
the bypass valve PID loop shall be enabled. Otherwise, the valve shall be opened 100%.
When enabled, the bypass valve loop shall be biased to start with the valve
100% open.
Parameters
| Type | Name | Default | Description |
| Integer | nChi | 2 | Total number of chillers |
| Real | minFloSet[nChi] | | Minimum chilled water flow through each chiller [m3/s] |
| Controller |
| SimpleController | controllerType | Buildings.Controls.OBC.CDL.T... | Type of controller |
| Real | k | 1 | Gain of controller |
| Real | Ti | 0.5 | Time constant of integrator block [s] |
| Real | Td | 0 | Time constant of derivative block [s] |
| Real | yMax | 1 | Upper limit of output |
| Real | yMin | 0.1 | Lower limit of output |
Connectors
| Type | Name | Description |
| input BooleanInput | uChiWatPum | Maximum status feedback of all the chilled water pumps: true means at least one pump is proven on |
| input RealInput | VChiWat_flow | Measured chilled water flow rate through chillers [m3/s] |
| input RealInput | VChiWatSet_flow | Chiller water minimum flow setpoint [m3/s] |
| output RealOutput | yValPos | Chilled water minimum flow bypass valve position [1] |
Modelica definition
block Controller
parameter Integer nChi=2 ;
parameter Real minFloSet[nChi](
final min=
fill(0,nChi),
final unit=
fill("m3/s",nChi),
quantity=
fill("VolumeFlowRate",nChi))
;
parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType=
Buildings.Controls.OBC.CDL.Types.SimpleController.PI
;
parameter Real k=1 ;
parameter Real Ti(
final unit="s",
final quantity="Time")=0.5 ;
parameter Real Td(
final unit="s",
final quantity="Time")=0 ;
parameter Real yMax=1 ;
parameter Real yMin=0.1 ;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow(
final min=0,
final unit="m3/s",
quantity="VolumeFlowRate")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWatSet_flow(
final min=0,
final unit="m3/s",
quantity="VolumeFlowRate") ;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValPos(
final min=0,
final max=1,
final unit="1") ;
Buildings.Controls.OBC.Utilities.PIDWithEnable valPos(
final controllerType=controllerType,
final k=k,
final Ti=Ti,
final Td=Td,
final yMax=yMax,
final yMin=yMin,
final y_reset=1) ;
protected
Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFlo[nChi](
final k=minFloSet) ;
Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum(
final nin=nChi)
;
Buildings.Controls.OBC.CDL.Reals.Divide div
;
Buildings.Controls.OBC.CDL.Reals.Divide div1
;
Buildings.Controls.OBC.CDL.Reals.Switch swi ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant opeVal(
final k=1) ;
equation
connect(minFlo.y, mulSum.u);
connect(VChiWat_flow, div1.u1);
connect(mulSum.y, div1.u2);
connect(mulSum.y, div.u2);
connect(div1.y, valPos.u_m);
connect(div.y, valPos.u_s);
connect(uChiWatPum, swi.u2);
connect(opeVal.y, swi.u3);
connect(swi.y, yValPos);
connect(div.u1, VChiWatSet_flow);
connect(valPos.y, swi.u1);
connect(uChiWatPum, valPos.uEna);
end Controller;
Chilled water minimum flow setpoint for primary-only plants
Information
Block that outputs chilled water minimum flow setpoint for primary-only
plants with a minimum flow bypass valve,
according to ASHRAE Guideline 36-2021,
section 5.20.8 Chilled water minimum flow bypass valve.
1. For plants with parallel chillers, the bypass valve shall modulate to maintain minimum
flow as measured by the chilled water flow meter at a setpoint that ensures minimum
flow through all operating chillers, as follows:
-
For the operating chillers in current stage, identify the chiller with the
highest ratio of
minFloSet to maxFloSet.
-
Calculate the minimum flow setpoint as the highest ratio multiplied by the sum
of
maxFloSet for the operating chillers.
| Chiller |
Minimum flow |
Maximum flow |
| 1 |
minFloSet[1] |
maxFloSet[1] |
| 2 |
minFloSet[2] |
maxFloSet[2] |
| ... |
... |
... |
2. For plants with series chillers, the bypass valve shall modulate to maintain minimum
flow as measured by the chilled water flow meter at a setpoint equal to the largest
minFloSet of the operating chillers in current stage.
3. If there is any stage change requiring a chiller on and another chiller off,
the minimum flow setpoint shall temporarily change to account for the
minFloSet of both the chiller to be enabled and to be disabled
before starting the newly enabled chiller.
Note that when there is a stage change requiring a change in the
minimum flow setpoint, the change should be slowly.
For example, this could be accomplished by resetting the setpoint X GPM/second,
where X = (NewSetpoint - OldSetpoint) / byPasSetTim.
Parameters
| Type | Name | Default | Description |
| Integer | nChi | 3 | Total number of chillers |
| Boolean | have_parChi | true | Flag: true means that the plant has parallel chillers |
| Real | byPasSetTim | 300 | Time constant for resetting minimum bypass flow [s] |
| Real | minFloSet[nChi] | {0.005,0.005,0.005} | Minimum chilled water flow through each chiller [m3/s] |
| Real | maxFloSet[nChi] | {0.025,0.025,0.025} | Maximum chilled water flow through each chiller [m3/s] |
Connectors
| Type | Name | Description |
| input BooleanInput | uStaUp | Stage up logical signal |
| input BooleanInput | uUpsDevSta | Resetting status of upstream device (in staging up or down process) before reset minimum chilled water flow setpoint |
| input BooleanInput | uChi[nChi] | Chiller status: true=ON |
| input IntegerInput | nexEnaChi | Index of next chiller to be enabled |
| input IntegerInput | nexDisChi | Index of next chiller to be disabled |
| input BooleanInput | uSubCha | Indicate if upstream device has been reset in the sub-process. This input is used when the stage change needs chiller on-off |
| input BooleanInput | uOnOff | Indicate if the stage change requires one chiller to be enabled while another is disabled |
| input BooleanInput | uStaDow | Stage down logical signal |
| output RealOutput | yChiWatMinFloSet | Chilled water minimum flow setpoint [m3/s] |
| output BooleanOutput | yChaSet | True: it is in the setpoint changing process |
Modelica definition
block FlowSetpoint
parameter Integer nChi = 3
;
parameter Boolean have_parChi=true
;
parameter Real byPasSetTim(
final unit="s",
final quantity="Time")=300
;
parameter Real minFloSet[nChi](
final unit=
fill("m3/s",nChi),
final quantity=
fill("VolumeFlowRate",nChi),
displayUnit=
fill("m3/s",nChi)) = {0.005, 0.005, 0.005}
;
parameter Real maxFloSet[nChi](
final unit=
fill("m3/s",nChi),
final quantity=
fill("VolumeFlowRate",nChi),
displayUnit=
fill("m3/s",nChi)) = {0.025, 0.025, 0.025}
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaUp
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uUpsDevSta
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi]
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexEnaChi
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexDisChi
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSubCha
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOnOff
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaDow
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatMinFloSet(
final quantity="VolumeFlowRate",
final unit="m3/s",
final min=0)
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChaSet
;
protected
final parameter Integer chiInd[nChi]={i
for i
in 1:nChi}
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3(
final k=byPasSetTim)
;
Buildings.Controls.OBC.CDL.Reals.Line oneMorSet
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2(
final k=0)
;
Buildings.Controls.OBC.CDL.Logical.Timer tim(
final t=byPasSetTim)
;
Buildings.Controls.OBC.CDL.Reals.Line oneLeSet
;
Buildings.Controls.OBC.CDL.Logical.Timer tim1(
final t=byPasSetTim)
;
Buildings.Controls.OBC.CDL.Reals.Switch dowSet
;
Buildings.Controls.OBC.CDL.Logical.Not not2 ;
Buildings.Controls.OBC.CDL.Reals.Switch byPasSet1
;
Buildings.Controls.OBC.CDL.Logical.And and1 ;
Buildings.Controls.OBC.CDL.Logical.And and3 ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFlo[nChi](
final k=minFloSet)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxFlo[nChi](
final k=maxFloSet)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer[nChi](
final k=
fill(0,nChi)) ;
Buildings.Controls.OBC.CDL.Reals.Divide floRat[nChi]
;
Buildings.Controls.OBC.CDL.Routing.RealExtractor nexChiRat(
final nin=nChi)
if have_parChi
;
Buildings.Controls.OBC.CDL.Routing.RealExtractor nexChiMaxFlo(
final nin=nChi)
if have_parChi ;
Buildings.Controls.OBC.CDL.Reals.Max max
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Add add2
if have_parChi
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt[nChi](
final k=chiInd) ;
Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep(
final nout=nChi) ;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu[nChi] ;
Buildings.Controls.OBC.CDL.Logical.Xor xor[nChi] ;
Buildings.Controls.OBC.CDL.Reals.Switch swi3[nChi]
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Switch swi4[nChi]
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Multiply pro2
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Max max1
if not have_parChi
;
Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum1(
final nin=nChi)
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax1(
final nin=nChi)
if not have_parChi
;
Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax2(
final nin=nChi)
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax3(
final nin=nChi)
if not have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Switch swi5[nChi]
if not have_parChi
;
Buildings.Controls.OBC.CDL.Routing.RealExtractor nexChiMinFlo(
final nin=nChi)
if not have_parChi ;
Buildings.Controls.OBC.CDL.Reals.Switch swi6[nChi]
if not have_parChi
;
Buildings.Controls.OBC.CDL.Logical.Or or2 ;
Buildings.Controls.OBC.CDL.Reals.Switch swi9[nChi]
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax4(
final nin=nChi)
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Switch swi10[nChi]
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum2(
final nin=nChi)
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Multiply pro3
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Switch swi11[nChi]
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum3(
final nin=nChi)
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Switch swi12[nChi]
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax5(
final nin=nChi)
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Multiply pro4
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Multiply pro1
if have_parChi
;
Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax6(
final nin=nChi)
if not have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Switch swi1[nChi]
if not have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Switch byPasSet2
;
Buildings.Controls.OBC.CDL.Reals.Switch upSet
;
Buildings.Controls.OBC.CDL.Logical.Timer tim2(
final t=byPasSetTim)
;
Buildings.Controls.OBC.CDL.Logical.And and2 ;
Buildings.Controls.OBC.CDL.Reals.Line oneMorSet1
;
Buildings.Controls.OBC.CDL.Reals.Switch byPasSet4
;
Buildings.Controls.OBC.CDL.Reals.Switch chaSet
;
Buildings.Controls.OBC.CDL.Logical.Not not1 ;
Buildings.Controls.OBC.CDL.Logical.And and4 ;
Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam[nChi]
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChi] ;
Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep(
final nout=nChi) ;
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greEquThr[nChi](
final t=
fill(0.5, nChi))
;
Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold intGreEquThr(
final t=1)
;
Buildings.Controls.OBC.CDL.Integers.LessEqualThreshold intLesEquThr(
final t=nChi)
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1(
final k=1)
;
Buildings.Controls.OBC.CDL.Logical.And and5
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1
;
Buildings.Controls.OBC.CDL.Integers.Switch intSwi ;
Buildings.Controls.OBC.CDL.Reals.Multiply mul3
if not have_parChi
;
Buildings.Controls.OBC.CDL.Reals.Multiply mul1[2]
if have_parChi
;
Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaScaRep(
final nout=3)
;
Buildings.Controls.OBC.CDL.Logical.Or or1
;
Buildings.Controls.OBC.CDL.Logical.Or or3
;
Buildings.Controls.OBC.CDL.Logical.Or or4
;
Buildings.Controls.OBC.CDL.Logical.Or or5
;
Buildings.Controls.OBC.CDL.Logical.Edge edg
;
Buildings.Controls.OBC.CDL.Logical.Not notChaSet
;
Buildings.Controls.OBC.CDL.Logical.Switch logSwi
;
Buildings.Controls.OBC.CDL.Logical.Latch lat
;
Buildings.Controls.OBC.CDL.Logical.Edge staChaSet
;
Buildings.Controls.OBC.CDL.Logical.Not chaSetPro
;
Buildings.Controls.OBC.CDL.Reals.Switch byPasSet3
;
Buildings.Controls.OBC.CDL.Logical.Latch inStaCha
;
Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam1
;
Buildings.Controls.OBC.CDL.Logical.FallingEdge endSta
;
equation
connect(uStaDow, not2.u);
connect(and1.y, tim.u);
connect(uStaDow, and3.u1);
connect(and3.y, tim1.u);
connect(minFlo.y, floRat.u1);
connect(maxFlo.y, floRat.u2);
connect(nexDisChi, intRep.u);
connect(conInt.y, intEqu.u1);
connect(intRep.y, intEqu.u2);
connect(intEqu.y, xor.u1);
connect(xor.y, swi3.u2);
connect(xor.y, swi4.u2);
connect(multiMax2.y, pro2.u1);
connect(mulSum1.y, pro2.u2);
connect(swi3.y, multiMax2.u);
connect(swi4.y, mulSum1.u);
connect(swi5.y, multiMax1.u);
connect(swi6.y, multiMax3.u);
connect(multiMax1.y, max1.u1);
connect(xor.y, swi6.u2);
connect(uStaDow, or2.u2);
connect(uStaUp, or2.u1);
connect(booToRea.y, triSam.u);
connect(or2.y, booRep.u);
connect(booRep.y, triSam.trigger);
connect(uChi, booToRea.u);
connect(uChi, swi9.u2);
connect(uChi, swi10.u2);
connect(floRat.y, swi9.u1);
connect(swi9.y, multiMax4.u);
connect(maxFlo.y, swi10.u1);
connect(zer.y, swi9.u3);
connect(zer.y, swi10.u3);
connect(swi10.y, mulSum2.u);
connect(multiMax4.y, pro3.u1);
connect(mulSum2.y, pro3.u2);
connect(floRat.y, swi12.u1);
connect(triSam.y, greEquThr.u);
connect(greEquThr.y, swi12.u2);
connect(greEquThr.y, swi11.u2);
connect(zer.y, swi12.u3);
connect(maxFlo.y, swi11.u1);
connect(zer.y, swi11.u3);
connect(swi12.y, multiMax5.u);
connect(swi11.y, mulSum3.u);
connect(multiMax5.y, pro4.u1);
connect(mulSum3.y, pro4.u2);
connect(multiMax5.y, max.u1);
connect(mulSum3.y, add2.u1);
connect(max.y, pro1.u1);
connect(add2.y, pro1.u2);
connect(maxFlo.y, nexChiMaxFlo.u);
connect(greEquThr.y, xor.u2);
connect(floRat.y, swi3.u1);
connect(zer.y, swi3.u3);
connect(zer.y, swi4.u3);
connect(maxFlo.y, swi4.u1);
connect(uChi, swi1.u2);
connect(greEquThr.y, swi5.u2);
connect(swi1.y, multiMax6.u);
connect(zer.y, swi1.u3);
connect(zer.y, swi5.u3);
connect(maxFlo.y, swi1.u1);
connect(maxFlo.y, swi5.u1);
connect(maxFlo.y, nexChiMinFlo.u);
connect(maxFlo.y, swi6.u1);
connect(zer.y, swi6.u3);
connect(uUpsDevSta, and1.u2);
connect(uStaUp, and1.u1);
connect(con2.y, oneMorSet.x1);
connect(pro4.y, oneMorSet.f1);
connect(con3.y, oneMorSet.x2);
connect(pro1.y, oneMorSet.f2);
connect(tim.y, oneMorSet.u);
connect(con2.y, oneLeSet.x1);
connect(pro4.y, oneLeSet.f1);
connect(con3.y, oneLeSet.x2);
connect(pro2.y, oneLeSet.f2);
connect(oneMorSet.y, byPasSet2.u3);
connect(pro3.y, byPasSet2.u1);
connect(uSubCha, byPasSet2.u2);
connect(uOnOff, upSet.u2);
connect(byPasSet2.y, upSet.u1);
connect(oneMorSet.y, upSet.u3);
connect(uStaDow, and2.u2);
connect(uSubCha, and2.u1);
connect(and2.y, tim2.u);
connect(con2.y, oneMorSet1.x1);
connect(pro4.y, oneMorSet1.f1);
connect(con3.y, oneMorSet1.x2);
connect(pro1.y, oneMorSet1.f2);
connect(tim2.y, oneMorSet1.u);
connect(oneMorSet1.y, byPasSet4.u3);
connect(uUpsDevSta, byPasSet4.u2);
connect(pro3.y, byPasSet4.u1);
connect(uOnOff, dowSet.u2);
connect(byPasSet4.y, dowSet.u1);
connect(uUpsDevSta, and3.u2);
connect(tim1.y, oneLeSet.u);
connect(oneLeSet.y, dowSet.u3);
connect(dowSet.y, chaSet.u3);
connect(upSet.y, chaSet.u1);
connect(uStaUp, chaSet.u2);
connect(not1.y, and4.u1);
connect(and4.y, byPasSet1.u2);
connect(not2.y, and4.u2);
connect(chaSet.y, byPasSet1.u3);
connect(pro3.y, byPasSet1.u1);
connect(uStaUp, not1.u);
connect(multiMax1.y, oneMorSet.f1);
connect(multiMax1.y, oneMorSet1.f1);
connect(max1.y, oneMorSet.f2);
connect(max1.y, oneMorSet1.f2);
connect(multiMax3.y, oneLeSet.f2);
connect(multiMax6.y, byPasSet2.u1);
connect(multiMax6.y, byPasSet4.u1);
connect(multiMax6.y, byPasSet1.u1);
connect(multiMax1.y, oneLeSet.f1);
connect(floRat.y, nexChiRat.u);
connect(conInt1.y, intSwi.u3);
connect(and5.y, booToRea1.u);
connect(and5.y, intSwi.u2);
connect(intGreEquThr.y, and5.u1);
connect(intLesEquThr.y, and5.u2);
connect(nexEnaChi, intGreEquThr.u);
connect(nexEnaChi, intSwi.u1);
connect(nexEnaChi, intLesEquThr.u);
connect(intSwi.y, nexChiMinFlo.index);
connect(intSwi.y, nexChiMaxFlo.index);
connect(intSwi.y, nexChiRat.index);
connect(booToRea1.y, reaScaRep.u);
connect(mul3.y, max1.u2);
connect(reaScaRep.y[3], mul3.u1);
connect(reaScaRep.y[1], mul1[1].u2);
connect(reaScaRep.y[2], mul1[2].u2);
connect(nexChiMaxFlo.y, mul1[2].u1);
connect(nexChiRat.y, mul1[1].u1);
connect(mul1[1].y, max.u2);
connect(mul1[2].y, add2.u2);
connect(nexChiMinFlo.y, mul3.u2);
connect(and2.y, or1.u1);
connect(and3.y, or1.u2);
connect(tim2.passed, or4.u1);
connect(tim1.passed, or4.u2);
connect(or1.y, or3.u1);
connect(or4.y, or5.u1);
connect(and1.y, or3.u2);
connect(tim.passed, or5.u2);
connect(or5.y, edg.u);
connect(or3.y, logSwi.u2);
connect(edg.y, logSwi.u1);
connect(or3.y, notChaSet.u);
connect(notChaSet.y, logSwi.u3);
connect(or3.y, staChaSet.u);
connect(staChaSet.y, lat.clr);
connect(lat.y, chaSetPro.u);
connect(chaSetPro.y, yChaSet);
connect(byPasSet1.y, byPasSet3.u1);
connect(inStaCha.y, byPasSet3.u2);
connect(or2.y, inStaCha.u);
connect(byPasSet1.y, triSam1.u);
connect(endSta.y, triSam1.trigger);
connect(or2.y, endSta.u);
connect(endSta.y, inStaCha.clr);
connect(triSam1.y, byPasSet3.u3);
connect(byPasSet1.y, yChiWatMinFloSet);
connect(logSwi.y, lat.u);
end FlowSetpoint;