Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.MinimumFlowBypass

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
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.MinimumFlowBypass.Controller Controller Controller for chilled water minimum flow bypass valve
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.MinimumFlowBypass.FlowSetpoint FlowSetpoint Chilled water minimum flow setpoint for primary-only plants
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.MinimumFlowBypass.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.MinimumFlowBypass.Controller Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.MinimumFlowBypass.Controller

Controller for chilled water minimum flow bypass valve

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.MinimumFlowBypass.Controller

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

TypeNameDefaultDescription
IntegernChi2Total number of chillers
RealminFloSet[nChi] Minimum chilled water flow through each chiller [m3/s]
Controller
SimpleControllercontrollerTypeBuildings.Controls.OBC.CDL.T...Type of controller
Realk1Gain of controller
RealTi0.5Time constant of integrator block [s]
RealTd0Time constant of derivative block [s]
RealyMax1Upper limit of output
RealyMin0.1Lower limit of output

Connectors

TypeNameDescription
input BooleanInputuChiWatPumMaximum status feedback of all the chilled water pumps: true means at least one pump is proven on
input RealInputVChiWat_flowMeasured chilled water flow rate through chillers [m3/s]
input RealInputVChiWatSet_flowChiller water minimum flow setpoint [m3/s]
output RealOutputyValPosChilled water minimum flow bypass valve position [1]

Modelica definition

block Controller "Controller for chilled water minimum flow bypass valve" parameter Integer nChi=2 "Total number of chillers"; parameter Real minFloSet[nChi]( final min=fill(0,nChi), final unit=fill("m3/s",nChi), quantity=fill("VolumeFlowRate",nChi)) "Minimum chilled water flow through each chiller"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real k=1 "Gain of controller"; parameter Real Ti( final unit="s", final quantity="Time")=0.5 "Time constant of integrator block"; parameter Real Td( final unit="s", final quantity="Time")=0 "Time constant of derivative block"; parameter Real yMax=1 "Upper limit of output"; parameter Real yMin=0.1 "Lower limit of output"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum "Maximum status feedback of all the chilled water pumps: true means at least one pump is proven on"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( final min=0, final unit="m3/s", quantity="VolumeFlowRate") "Measured chilled water flow rate through chillers"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWatSet_flow( final min=0, final unit="m3/s", quantity="VolumeFlowRate") "Chiller water minimum flow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValPos( final min=0, final max=1, final unit="1") "Chilled water minimum flow bypass valve position"; 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) "Bypass valve position PI controller"; protected Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFlo[nChi]( final k=minFloSet) "Minimum bypass flow rate at each stage"; Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum( final nin=nChi) "Sum of minimum chilled water flow of all chillers"; Buildings.Controls.OBC.CDL.Reals.Divide div "Normalized minimum flow setpoint"; Buildings.Controls.OBC.CDL.Reals.Divide div1 "Normalized minimum bypass flow "; Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant opeVal( final k=1) "Valve open"; 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;

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.MinimumFlowBypass.FlowSetpoint Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.MinimumFlowBypass.FlowSetpoint

Chilled water minimum flow setpoint for primary-only plants

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.MinimumFlowBypass.FlowSetpoint

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:

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

TypeNameDefaultDescription
IntegernChi3Total number of chillers
Booleanhave_parChitrueFlag: true means that the plant has parallel chillers
RealbyPasSetTim300Time constant for resetting minimum bypass flow [s]
RealminFloSet[nChi]{0.005,0.005,0.005}Minimum chilled water flow through each chiller [m3/s]
RealmaxFloSet[nChi]{0.025,0.025,0.025}Maximum chilled water flow through each chiller [m3/s]

Connectors

TypeNameDescription
input BooleanInputuStaUpStage up logical signal
input BooleanInputuUpsDevStaResetting status of upstream device (in staging up or down process) before reset minimum chilled water flow setpoint
input BooleanInputuChi[nChi]Chiller status: true=ON
input IntegerInputnexEnaChiIndex of next chiller to be enabled
input IntegerInputnexDisChiIndex of next chiller to be disabled
input BooleanInputuSubChaIndicate if upstream device has been reset in the sub-process. This input is used when the stage change needs chiller on-off
input BooleanInputuOnOffIndicate if the stage change requires one chiller to be enabled while another is disabled
input BooleanInputuStaDowStage down logical signal
output RealOutputyChiWatMinFloSetChilled water minimum flow setpoint [m3/s]
output BooleanOutputyChaSetTrue: it is in the setpoint changing process

Modelica definition

block FlowSetpoint "Chilled water minimum flow setpoint for primary-only plants" parameter Integer nChi = 3 "Total number of chillers"; parameter Boolean have_parChi=true "Flag: true means that the plant has parallel chillers"; parameter Real byPasSetTim( final unit="s", final quantity="Time")=300 "Time constant for resetting minimum bypass flow"; parameter Real minFloSet[nChi]( final unit=fill("m3/s",nChi), final quantity=fill("VolumeFlowRate",nChi), displayUnit=fill("m3/s",nChi)) = {0.005, 0.005, 0.005} "Minimum chilled water flow through each chiller"; parameter Real maxFloSet[nChi]( final unit=fill("m3/s",nChi), final quantity=fill("VolumeFlowRate",nChi), displayUnit=fill("m3/s",nChi)) = {0.025, 0.025, 0.025} "Maximum chilled water flow through each chiller"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaUp "Stage up logical signal"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uUpsDevSta "Resetting status of upstream device (in staging up or down process) before reset minimum chilled water flow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] "Chiller status: true=ON"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexEnaChi "Index of next chiller to be enabled"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nexDisChi "Index of next chiller to be disabled"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSubCha "Indicate if upstream device has been reset in the sub-process. This input is used when the stage change needs chiller on-off"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOnOff "Indicate if the stage change requires one chiller to be enabled while another is disabled"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uStaDow "Stage down logical signal"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatMinFloSet( final quantity="VolumeFlowRate", final unit="m3/s", final min=0) "Chilled water minimum flow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yChaSet "True: it is in the setpoint changing process"; protected final parameter Integer chiInd[nChi]={i for i in 1:nChi} "Chiller index, {1,2,...,n}"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3( final k=byPasSetTim) "Duration time to change old setpoint to new setpoint"; Buildings.Controls.OBC.CDL.Reals.Line oneMorSet "Minimum flow setpoint when adding one more chiller"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2(final k=0) "Constant zero"; Buildings.Controls.OBC.CDL.Logical.Timer tim(final t=byPasSetTim) "Time after suppress chiller demand"; Buildings.Controls.OBC.CDL.Reals.Line oneLeSet "Minimum flow setpoint when disabling one chiller"; Buildings.Controls.OBC.CDL.Logical.Timer tim1(final t=byPasSetTim) "Time after suppress chiller demand"; Buildings.Controls.OBC.CDL.Reals.Switch dowSet "Minimum flow chilled water flow setpoint when there is stage-down command"; Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not"; Buildings.Controls.OBC.CDL.Reals.Switch byPasSet1 "Minimum flow chilled water flow setpoint"; Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and"; Buildings.Controls.OBC.CDL.Logical.And and3 "Logical and"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFlo[nChi]( final k=minFloSet) "Minimum chilled water flow through each chiller"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxFlo[nChi]( final k=maxFloSet) "Maximum chilled water flow through each chiller"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer[nChi]( final k=fill(0,nChi)) "Constant zero"; Buildings.Controls.OBC.CDL.Reals.Divide floRat[nChi] "Flow rate ratio through each chiller"; Buildings.Controls.OBC.CDL.Routing.RealExtractor nexChiRat(final nin=nChi) if have_parChi "Flow rate ratio of next enabling chiller"; Buildings.Controls.OBC.CDL.Routing.RealExtractor nexChiMaxFlo(final nin=nChi) if have_parChi "Maximum flow rate of next enabling chiller"; Buildings.Controls.OBC.CDL.Reals.Max max if have_parChi "Maximum flow rate ratio of operating chillers after one chiller being enabled"; Buildings.Controls.OBC.CDL.Reals.Add add2 if have_parChi "Sum of maximum chilled water flow rate setpoint of operating chillers after one chiller being enabled"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt[nChi]( final k=chiInd) "Chiller index vector"; Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep( final nout=nChi) "Replicate integer input"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu[nChi] "Check equality of two integer inputs"; Buildings.Controls.OBC.CDL.Logical.Xor xor[nChi] "Outputs true if exactly one input is true"; Buildings.Controls.OBC.CDL.Reals.Switch swi3[nChi] if have_parChi "Flow rate ratio of operating chiller"; Buildings.Controls.OBC.CDL.Reals.Switch swi4[nChi] if have_parChi "Maximum flow rate of operating chiller"; Buildings.Controls.OBC.CDL.Reals.Multiply pro2 if have_parChi "Chilled water flow setpoint after disabling next chiller"; Buildings.Controls.OBC.CDL.Reals.Max max1 if not have_parChi "Largest minimum flow rate setpoint of operating chillers after one chiller being enabled"; Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum1(final nin=nChi) if have_parChi "Sum of maximum chilled water flow rate setpoint of operating chillers after one chiller being disabled"; Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax1(final nin=nChi) if not have_parChi "Largest minimum flow rate setpoint of operating chillers"; Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax2(final nin=nChi) if have_parChi "Maximum flow rate ratio of operating chillers after one chiller being disabled"; Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax3(final nin=nChi) if not have_parChi "Largest minimum flow rate setpoint of operating chillers after one chiller being disabled"; Buildings.Controls.OBC.CDL.Reals.Switch swi5[nChi] if not have_parChi "Minimum flow rate of operating chiller"; Buildings.Controls.OBC.CDL.Routing.RealExtractor nexChiMinFlo(final nin=nChi) if not have_parChi "Minimum flow rate of next enabling chiller"; Buildings.Controls.OBC.CDL.Reals.Switch swi6[nChi] if not have_parChi "Minimum flow rate of operating chiller"; Buildings.Controls.OBC.CDL.Logical.Or or2 "Logical and"; Buildings.Controls.OBC.CDL.Reals.Switch swi9[nChi] if have_parChi "Flow rate ratio of operating chiller"; Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax4( final nin=nChi) if have_parChi "Maximum flow rate ratio of operating chillers"; Buildings.Controls.OBC.CDL.Reals.Switch swi10[nChi] if have_parChi "Maximum flow rate of operating chiller"; Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum2( final nin=nChi) if have_parChi "Sum of maximum chilled water flow rate setpoint of operating chillers"; Buildings.Controls.OBC.CDL.Reals.Multiply pro3 if have_parChi "Chilled water flow setpoint for current operating chillers"; Buildings.Controls.OBC.CDL.Reals.Switch swi11[nChi] if have_parChi "Maximum flow rate of operating chiller"; Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum3( final nin=nChi) if have_parChi "Sum of maximum chilled water flow rate setpoint of operating chillers"; Buildings.Controls.OBC.CDL.Reals.Switch swi12[nChi] if have_parChi "Flow rate ratio of operating chiller"; Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax5(final nin=nChi) if have_parChi "Maximum flow rate ratio of operating chillers"; Buildings.Controls.OBC.CDL.Reals.Multiply pro4 if have_parChi "Chilled water flow setpoint for current operating chillers"; Buildings.Controls.OBC.CDL.Reals.Multiply pro1 if have_parChi "Chilled water flow setpoint for current operating chillers"; Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax6( final nin=nChi) if not have_parChi "Largest minimum flow rate setpoint of operating chillers"; Buildings.Controls.OBC.CDL.Reals.Switch swi1[nChi] if not have_parChi "Minimum flow rate of operating chiller"; Buildings.Controls.OBC.CDL.Reals.Switch byPasSet2 "Minimum flow chilled water flow setpoint"; Buildings.Controls.OBC.CDL.Reals.Switch upSet "Minimum flow chilled water flow setpoint when there is stage-up command"; Buildings.Controls.OBC.CDL.Logical.Timer tim2(final t=byPasSetTim) "Time after suppress chiller demand"; Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and"; Buildings.Controls.OBC.CDL.Reals.Line oneMorSet1 "Minimum flow setpoint when adding one more chiller"; Buildings.Controls.OBC.CDL.Reals.Switch byPasSet4 "Minimum flow chilled water flow setpoint"; Buildings.Controls.OBC.CDL.Reals.Switch chaSet "Minimum flow chilled water flow setpoint when there is stage-change command"; Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not"; Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and"; Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam[nChi] "Hold the chiller status when there is any stage change"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChi] "Boolean to real"; Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( final nout=nChi) "Replicate boolean input"; Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greEquThr[nChi]( final t=fill(0.5, nChi)) "Convert real to boolean"; Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold intGreEquThr( final t=1) "Check if index is in the range"; Buildings.Controls.OBC.CDL.Integers.LessEqualThreshold intLesEquThr( final t=nChi) "Check if index is in the range"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1( final k=1) "Dummy index so the extractor will not have out of range index"; Buildings.Controls.OBC.CDL.Logical.And and5 "Check if index is in the range"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Convert boolean to real"; Buildings.Controls.OBC.CDL.Integers.Switch intSwi "Valid index"; Buildings.Controls.OBC.CDL.Reals.Multiply mul3 if not have_parChi "Ensure zero output when the index is out of range"; Buildings.Controls.OBC.CDL.Reals.Multiply mul1[2] if have_parChi "Ensure zero output when the index is out of range"; Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaScaRep( final nout=3) "Replicate real input"; Buildings.Controls.OBC.CDL.Logical.Or or1 "True: if it is time to change the setpoint"; Buildings.Controls.OBC.CDL.Logical.Or or3 "True: if it is time to change the setpoint"; Buildings.Controls.OBC.CDL.Logical.Or or4 "Check if the setpoint has been changed"; Buildings.Controls.OBC.CDL.Logical.Or or5 "True: the setpoint has been changed"; Buildings.Controls.OBC.CDL.Logical.Edge edg "True: the setpoint has been changed"; Buildings.Controls.OBC.CDL.Logical.Not notChaSet "True: if it is not time to change the setpoint"; Buildings.Controls.OBC.CDL.Logical.Switch logSwi "Setpoint being set"; Buildings.Controls.OBC.CDL.Logical.Latch lat "Check if the setpoint is being changed"; Buildings.Controls.OBC.CDL.Logical.Edge staChaSet "Start changing the setpoint"; Buildings.Controls.OBC.CDL.Logical.Not chaSetPro "True: it is in the setpoint changing process"; Buildings.Controls.OBC.CDL.Reals.Switch byPasSet3 "Minimum flow chilled water flow setpoint"; Buildings.Controls.OBC.CDL.Logical.Latch inStaCha "In stage changing process"; Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam1 "Setpoint at the moment when ending stage change"; Buildings.Controls.OBC.CDL.Logical.FallingEdge endSta "End staging change"; 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;