Name | Description |
---|---|
TwoRoomsWithStorage | Model of a hydronic heating system with energy storage |
This example demonstrates the implementation of a building that has the following properties:
roo1
has a south- and west-facing window, the room roo2
has a south- and
east-facing window.
The rooms are modeled as if they were in an intermediate floor, with the same temperature above and below
the room. The rooms share one common wall. The north facing wall is modeled as a partition wall, i.e., both
surfaces have the same boundary conditions.
Weather data are used from Chicago.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Type | Name | Default | Description |
---|---|---|---|
Integer | nRoo | 2 | Number of rooms |
Volume | VRoo | 4*6*3 | Volume of one room [m3] |
Power | Q_flow_nominal | 2200 | Nominal power of heating plant [W] |
Real | scaFacRad | 1.5 | Scaling factor to scale the power (and mass flow rate) of the radiator loop |
Temperature | TSup_nominal | 273.15 + 50 + 5 | Nominal supply temperature for radiators [K] |
Temperature | TRet_nominal | 273.15 + 40 + 5 | Nominal return temperature for radiators [K] |
Temperature | dTRad_nominal | TSup_nominal - TRet_nominal | Nominal temperature difference for radiator loop [K] |
Temperature | dTBoi_nominal | 20 | Nominal temperature difference for boiler loop [K] |
MassFlowRate | mRad_flow_nominal | scaFacRad*Q_flow_nominal/dTR... | Nominal mass flow rate of radiator loop [kg/s] |
MassFlowRate | mBoi_flow_nominal | scaFacRad*Q_flow_nominal/dTB... | Nominal mass flow rate of boiler loop [kg/s] |
Pressure | dpPip_nominal | 10000 | Pressure difference of pipe (without valve) [Pa] |
Pressure | dpVal_nominal | 1000 | Pressure difference of valve [Pa] |
Pressure | dpRoo_nominal | 6000 | Pressure difference of flow leg that serves a room [Pa] |
Pressure | dpThrWayVal_nominal | 6000 | Pressure difference of three-way valve [Pa] |
Pressure | dp_nominal | dpPip_nominal + dpVal_nomina... | Pressure difference of loop [Pa] |
Type | Name | Description |
---|---|---|
Bus | weaBus | Bus with weather data |
model TwoRoomsWithStorage "Model of a hydronic heating system with energy storage" extends Modelica.Icons.Example; package MediumA = Buildings.Media.GasesConstantDensity.SimpleAir "Medium model for air"; package Medium = Buildings.Media.ConstantPropertyLiquidWater "Medium model"; parameter Integer nRoo = 2 "Number of rooms"; parameter Modelica.SIunits.Volume VRoo = 4*6*3 "Volume of one room"; parameter Modelica.SIunits.Power Q_flow_nominal = 2200 "Nominal power of heating plant"; // Due to the night setback, in which the radiator do not provide heat input into the room, // we scale the design power of the radiator loop parameter Real scaFacRad = 1.5 "Scaling factor to scale the power (and mass flow rate) of the radiator loop"; parameter Modelica.SIunits.Temperature TSup_nominal=273.15 + 50 + 5 "Nominal supply temperature for radiators"; parameter Modelica.SIunits.Temperature TRet_nominal=273.15 + 40 + 5 "Nominal return temperature for radiators"; parameter Modelica.SIunits.Temperature dTRad_nominal = TSup_nominal-TRet_nominal "Nominal temperature difference for radiator loop"; parameter Modelica.SIunits.Temperature dTBoi_nominal = 20 "Nominal temperature difference for boiler loop"; parameter Modelica.SIunits.MassFlowRate mRad_flow_nominal = scaFacRad*Q_flow_nominal/dTRad_nominal/4200 "Nominal mass flow rate of radiator loop"; parameter Modelica.SIunits.MassFlowRate mBoi_flow_nominal = scaFacRad*Q_flow_nominal/dTBoi_nominal/4200 "Nominal mass flow rate of boiler loop"; parameter Modelica.SIunits.Pressure dpPip_nominal = 10000 "Pressure difference of pipe (without valve)"; parameter Modelica.SIunits.Pressure dpVal_nominal = 1000 "Pressure difference of valve"; parameter Modelica.SIunits.Pressure dpRoo_nominal = 6000 "Pressure difference of flow leg that serves a room"; parameter Modelica.SIunits.Pressure dpThrWayVal_nominal = 6000 "Pressure difference of three-way valve"; parameter Modelica.SIunits.Pressure dp_nominal = dpPip_nominal + dpVal_nominal + dpRoo_nominal "Pressure difference of loop"; // Room modelFluid.Movers.FlowMachine_y pumBoi( redeclare package Medium = Medium, pressure(V_flow=mBoi_flow_nominal/1000*{0.5, 1}, dp=dp_nominal*{2,1}), dynamicBalance=false); Fluid.Movers.FlowMachine_y pumRad( redeclare package Medium = Medium, pressure( V_flow=mRad_flow_nominal/1000*{0,2}, dp=5000*{2,0}), dynamicBalance=false) "Pump that serves the radiators"; HeatTransfer.Data.OpaqueConstructions.Insulation100Concrete200 matLayExt "Construction material for exterior walls"; HeatTransfer.Data.OpaqueConstructions.Brick120 matLayPar "Construction material for partition walls"; HeatTransfer.Data.OpaqueConstructions.Generic matLayFlo( material={ HeatTransfer.Data.Solids.Concrete(x=0.2), HeatTransfer.Data.Solids.InsulationBoard(x=0.15), HeatTransfer.Data.Solids.Concrete(x=0.05)}, final nLay=3) "Construction material for floor"; HeatTransfer.Data.GlazingSystems.DoubleClearAir13Clear glaSys( UFra=2, shade=Buildings.HeatTransfer.Data.Shades.Gray(), haveInteriorShade=false, haveExteriorShade=false) "Data record for the glazing system"; Rooms.MixedAir roo1( redeclare package Medium = MediumA, AFlo=6*4, hRoo=2.7, nConExt=0, nConExtWin=2, datConExtWin( layers={matLayExt, matLayExt}, A={4*3, 6*3}, glaSys={glaSys, glaSys}, AWin={3*2, 2*2}, each fFra=0.1, til={Buildings.HeatTransfer.Types.Tilt.Wall, Buildings.HeatTransfer.Types.Tilt.Wall}, azi={Buildings.HeatTransfer.Types.Azimuth.W, Buildings.HeatTransfer.Types.Azimuth.S}), nConPar=2, datConPar( layers={matLayFlo, matLayPar}, A={6*4, 6*3/2}, til={Buildings.HeatTransfer.Types.Tilt.Floor, Buildings.HeatTransfer.Types.Tilt.Wall}, azi={Buildings.HeatTransfer.Types.Azimuth.N, Buildings.HeatTransfer.Types.Azimuth.N}), nConBou=0, nSurBou=1, surBou( each A=4*3, each absIR=0.9, each absSol=0.9, each til=Buildings.HeatTransfer.Types.Tilt.Wall), energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, nPorts=3, linearizeRadiation=true, lat=0.73268921998722, extConMod=Buildings.HeatTransfer.Types.ExteriorConvection.Fixed) "Room model"; Rooms.MixedAir roo2( redeclare package Medium = MediumA, AFlo=6*4, hRoo=2.7, nConExt=0, nConExtWin=2, datConExtWin( layers={matLayExt, matLayExt}, A={4*3, 6*3}, glaSys={glaSys, glaSys}, AWin={2*2, 2*2}, each fFra=0.1, til={Buildings.HeatTransfer.Types.Tilt.Wall, Buildings.HeatTransfer.Types.Tilt.Wall}, azi={Buildings.HeatTransfer.Types.Azimuth.E, Buildings.HeatTransfer.Types.Azimuth.S}), nConPar=2, datConPar( layers={matLayFlo, matLayPar}, A={6*4, 6*3/2}, til={Buildings.HeatTransfer.Types.Tilt.Floor, Buildings.HeatTransfer.Types.Tilt.Wall}, azi={Buildings.HeatTransfer.Types.Azimuth.N, Buildings.HeatTransfer.Types.Azimuth.N}), nConBou=0, nSurBou=1, surBou( each A=4*3, each absIR=0.9, each absSol=0.9, each til=Buildings.HeatTransfer.Types.Tilt.Wall), energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, linearizeRadiation=true, nPorts=3, lat=0.73268921998722, extConMod=Buildings.HeatTransfer.Types.ExteriorConvection.Fixed) "Room model"; Buildings.Fluid.Boilers.BoilerPolynomial boi( a={0.9}, effCur=Buildings.Fluid.Types.EfficiencyCurves.Constant, redeclare package Medium = Medium, dp_nominal=3000, Q_flow_nominal=Q_flow_nominal, m_flow_nominal=mBoi_flow_nominal, T_start=293.15) "Boiler"; inner Modelica.Fluid.System system; Buildings.HeatTransfer.Sources.FixedTemperature TAmb(T=288.15) "Ambient temperature in boiler room"; Buildings.Fluid.FixedResistances.FixedResistanceDpM resSup( redeclare package Medium = Medium, dp_nominal=dpPip_nominal, m_flow_nominal=mRad_flow_nominal) "Pressure drop of supply and return pipe"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TRoo2; Modelica.Blocks.Sources.Constant dpSet(k=dp_nominal) "Pressure set point"; Controls.Continuous.PIDHysteresisTimer conPum( Ti=60, yMax=1, eOn=1, k=0.1, Td=60, controllerType=Modelica.Blocks.Types.SimpleController.P, yMin=0.05) "Controller for pump"; Buildings.Fluid.Sensors.RelativePressure dpSen(redeclare package Medium = Medium); Fluid.Actuators.Valves.TwoWayEqualPercentage val2( redeclare package Medium = Medium, dp_nominal(displayUnit="Pa") = dpVal_nominal, Kv_SI=mRad_flow_nominal/nRoo/sqrt(dpVal_nominal), m_flow_nominal=mRad_flow_nominal/nRoo) "Radiator valve"; Controls.Continuous.LimPID conRoo2( yMax=1, yMin=0, Ti=60, Td=60, controllerType=Modelica.Blocks.Types.SimpleController.P, k=0.5) "Controller for room temperature"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TRoo1; Fluid.Actuators.Valves.TwoWayEqualPercentage val1( redeclare package Medium = Medium, dp_nominal(displayUnit="Pa") = dpVal_nominal, Kv_SI=mRad_flow_nominal/nRoo/sqrt(dpVal_nominal), m_flow_nominal=mRad_flow_nominal/nRoo) "Radiator valve"; Controls.Continuous.LimPID conRoo1( yMax=1, yMin=0, Ti=60, Td=60, controllerType=Modelica.Blocks.Types.SimpleController.P, k=0.5) "Controller for room temperature"; Fluid.HeatExchangers.Radiators.RadiatorEN442_2 rad1( redeclare package Medium = Medium, Q_flow_nominal=scaFacRad*Q_flow_nominal/nRoo, T_a_nominal=323.15, T_b_nominal=313.15) "Radiator"; Fluid.HeatExchangers.Radiators.RadiatorEN442_2 rad2( redeclare package Medium = Medium, Q_flow_nominal=scaFacRad*Q_flow_nominal/nRoo, T_a_nominal=323.15, T_b_nominal=313.15) "Radiator"; Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear thrWayVal( redeclare package Medium = Medium, dp_nominal=dpThrWayVal_nominal, l={0.01,0.01}, tau=10, m_flow_nominal=mRad_flow_nominal, dynamicBalance=false) "Three-way valve"; Controls.Continuous.LimPID conVal( yMax=1, yMin=0, initType=Modelica.Blocks.Types.InitPID.InitialState, xi_start=1, Td=60, Ti=5, controllerType=Modelica.Blocks.Types.SimpleController.P, k=10) "Controller for pump"; Fluid.Storage.Stratified tan( m_flow_nominal=mRad_flow_nominal, dIns=0.3, redeclare package Medium = Medium, hTan=2, nSeg=5, show_T=true, VTan=0.2, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Storage tank"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tanTemBot "Tank temperature"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tanTemTop "Tank temperature"; Modelica.Blocks.Logical.GreaterThreshold greThr(threshold=TSup_nominal + 5); Modelica.Blocks.Math.BooleanToReal booToReaPum "Signal converter for pump"; Buildings.Fluid.FixedResistances.FixedResistanceDpM res3( redeclare package Medium = Medium, dp_nominal=2000, m_flow_nominal=mBoi_flow_nominal); Buildings.Fluid.FixedResistances.FixedResistanceDpM res4( redeclare package Medium = Medium, dp_nominal=100, m_flow_nominal=mRad_flow_nominal); Modelica.Blocks.Logical.Greater lesThr; Fluid.Sensors.TemperatureTwoPort temSup( redeclare package Medium = Medium, m_flow_nominal=mRad_flow_nominal); Fluid.Sensors.TemperatureTwoPort temRet( redeclare package Medium = Medium, m_flow_nominal=mRad_flow_nominal); Buildings.Controls.SetPoints.HotWaterTemperatureReset heaCha( dTOutHeaBal=0, use_TRoo_in=true, TSup_nominal=TSup_nominal, TRet_nominal=TRet_nominal, TOut_nominal=258.15); Controls.SetPoints.OccupancySchedule occSch1(occupancy=3600*{7,8,10,11,11.5, 15,19,21}) "Occupancy schedule"; Modelica.Blocks.Logical.Switch switch1; Modelica.Blocks.Sources.RealExpression occ1(y=1/6/4) "Heat gain if occupied in room 1"; Modelica.Blocks.Sources.Constant zer(k=0) "Outputs zero"; Controls.SetPoints.OccupancySchedule occSch2( firstEntryOccupied=false, occupancy=3600*{7,10,12,22}) "Occupancy schedule"; Modelica.Blocks.Logical.Switch switch2; Modelica.Blocks.Sources.RealExpression occ2(y=1/6/4) "Heat gain if occupied in room 2"; Buildings.Fluid.FixedResistances.FixedResistanceDpM resRoo1( redeclare package Medium = Medium, dp_nominal=dpRoo_nominal, m_flow_nominal=mRad_flow_nominal/nRoo) "Resistance of pipe leg that serves the room"; Buildings.Fluid.FixedResistances.FixedResistanceDpM resRoo2( redeclare package Medium = Medium, dp_nominal=dpRoo_nominal, m_flow_nominal=mRad_flow_nominal/nRoo) "Resistance of pipe leg that serves the room"; Controls.SetPoints.OccupancySchedule occSch "Occupancy schedule"; Modelica.Blocks.Logical.Switch swi "Switch to select set point"; Modelica.Blocks.Sources.Constant TRooNig(k=273.15 + 16) "Room temperature set point at night"; Modelica.Blocks.Sources.Constant TRooSet(k=273.15 + 21); Buildings.Utilities.Math.Max maxYVal(nin=2) "Maximum radiator valve position"; Modelica.Blocks.Logical.Hysteresis hysPum( uLow=0.01, uHigh=0.5) "Hysteresis for pump"; Modelica.Blocks.Logical.Switch swiPum "Pump switch"; Modelica.Blocks.Sources.Constant dpSetOff(k=0) "Pressure set point to switch pump off"; Buildings.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= "Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos") "File reader that reads weather data"; Buildings.BoundaryConditions.WeatherData.Bus weaBus "Bus with weather data"; Modelica.Blocks.Continuous.FirstOrder delRadPum(T=10) "Delay element for the transient response of the pump. This is needed to avoid an algebraic loop."; Modelica_StateGraph2.Step off( nOut=1, initialStep=true, use_activePort=false, nIn=1); Modelica_StateGraph2.Transition T1(use_conditionPort=true, use_firePort=false, delayedTransition=false); Modelica_StateGraph2.Step pumOn( nOut=1, use_activePort=true, nIn=1) "True if pump is on prior to switching furnace on"; Modelica_StateGraph2.Transition T2( use_conditionPort=true, use_firePort=false, delayedTransition=false); Buildings.Fluid.Sources.Outside out( redeclare package Medium = MediumA, use_C_in=false, nPorts=4) "Outside air conditions"; Buildings.Fluid.FixedResistances.FixedResistanceDpM dpFac4( from_dp=false, redeclare package Medium = MediumA, m_flow_nominal=6*4*3*1.2*0.3/3600, dp_nominal=10) "Pressure drop at facade"; HeatTransfer.Conduction.MultiLayer parWal(A=4*3, layers=matLayPar) "Partition wall between the two rooms"; Buildings.Fluid.FixedResistances.FixedResistanceDpM dpFac1( from_dp=false, redeclare package Medium = MediumA, m_flow_nominal=6*4*3*1.2*0.3/3600, dp_nominal=10) "Pressure drop at facade"; Fluid.HeatExchangers.ConstantEffectiveness hex( redeclare package Medium1 = MediumA, redeclare package Medium2 = MediumA, m1_flow_nominal=2*VRoo*1.2*0.3/3600, m2_flow_nominal=2*VRoo*1.2*0.3/3600, dp1_nominal=100, dp2_nominal=100, eps=0.9) "Heat recovery"; Fluid.Movers.FlowMachine_m_flow fanSup( redeclare package Medium = MediumA, dynamicBalance=false, m_flow_nominal=2*VRoo*1.2*0.37/3600) "Supply air fan"; Modelica.Blocks.Sources.Constant m_flow_out(k=2*VRoo*1.2*0.37/3600) "Outside air mass flow rate"; Fluid.Movers.FlowMachine_m_flow fanRet( redeclare package Medium = MediumA, dynamicBalance=false, m_flow_nominal=2*VRoo*1.2*0.37/3600) "Return air fan"; Airflow.Multizone.Orifice lea1(redeclare package Medium = MediumA, A=0.01^2) "Leakage of facade of room"; Airflow.Multizone.Orifice lea2(redeclare package Medium = MediumA, A=0.01^2) "Leakage of facade of room"; Modelica_StateGraph2.Transition T3(delayedTransition=true, waitTime=10); Modelica_StateGraph2.Step boiOn( nOut=1, use_activePort=true, nIn=1) "True if boiler is on prior"; Modelica_StateGraph2.Step pumOn2( nOut=1, use_activePort=true, nIn=1) "Pump runs for a few seconds after boiler switched off"; Modelica_StateGraph2.Transition T4(delayedTransition=true, waitTime=10); Modelica_StateGraph2.Blocks.MathBoolean.Or pumOnSig(nu=3) "Signal for pump being on"; Modelica.Blocks.Math.BooleanToReal booToReaBoi "Signal converter for boiler"; Modelica.Blocks.Math.MatrixGain gai1(K=[35; 70; 30]) "Gain to convert from occupancy (per person) to radiant, convective and latent heat in [W/m2] "; Modelica.Blocks.Math.MatrixGain gai2(K=[35; 70; 30]) "Gain to convert from occupancy (per person) to radiant, convective and latent heat in [W/m2] "; Modelica.Blocks.Sources.Constant dTThr(k=1) "Threshold to switch boiler off"; Modelica.Blocks.Math.Add add1(k2=-1); Modelica.Blocks.Sources.Constant TRooOff(k=273.15 - 5) "Low room temperature set point to switch heating off"; Modelica.Blocks.Logical.Switch swi1 "Switch to select set point"; Modelica.Blocks.Logical.OnOffController onOff(bandwidth=2) "On/off switch"; Modelica.Blocks.Continuous.FirstOrder aveTOut( T=24*3600, initType=Modelica.Blocks.Types.Init.SteadyState, y(unit="K")) "Integrated average of outside temperature"; Modelica.Blocks.Sources.Constant TOutSwi(k=16 + 293.15) "Outside air temperature to switch heating on or off"; Fluid.Sources.FixedBoundary bou(nPorts=1, redeclare package Medium = Medium) "Fixed boundary condition, needed to provide a pressure in the system"; equationconnect(TAmb.port,boi. heatPort); connect(pumRad.port_b, dpSen.port_a); connect(dpSen.port_b, pumRad.port_a); connect(val1.port_b, rad1.port_a); connect(val2.port_b, rad2.port_a); connect(conRoo1.y, val1.y); connect(conRoo2.y, val2.y); connect(pumRad.port_a, thrWayVal.port_2); connect(boi.port_b,pumBoi. port_a); connect(tan.heaPorVol[1], tanTemTop.port); connect(tanTemBot.port, tan.heaPorVol[tan.nSeg]); connect(pumBoi.port_b, res3.port_a); connect(res4.port_b, tan.port_b); connect(temSup.T, conVal.u_m); connect(heaCha.TSup, conVal.u_s); connect(tan.port_b, boi.port_a); connect(occSch1.occupied, switch1.u2); connect(occ1.y, switch1.u1); connect(zer.y, switch1.u3); connect(occSch2.occupied, switch2.u2); connect(occ2.y, switch2.u1); connect(zer.y, switch2.u3); connect(swi.y, conRoo1.u_s); connect(swi.y, conRoo2.u_s); connect(maxYVal.y, hysPum.u); connect(hysPum.y, swiPum.u2); connect(dpSet.y, swiPum.u1); connect(dpSetOff.y, swiPum.u3); connect(swiPum.y, conPum.u_s); connect(conRoo1.y, maxYVal.u[1]); connect(conRoo2.y, maxYVal.u[2]); connect(conVal.y, thrWayVal.y); connect(booToReaPum.y, pumBoi.y); connect(off.outPort[1], T1.inPort); connect(lesThr.y, T1.conditionPort); connect(greThr.y, T2.conditionPort); connect(rad1.heatPortCon, roo1.heaPorAir); connect(roo1.heaPorRad, rad1.heatPortRad); connect(roo1.heaPorAir, TRoo1.port); connect(weaBus, roo1.weaBus); connect(rad2.heatPortCon, roo2.heaPorAir); connect(rad2.heatPortRad, roo2.heaPorRad); connect(roo2.heaPorAir, TRoo2.port); connect(weaBus, roo2.weaBus); connect(roo1.surf_surBou[1], parWal.port_b); connect(parWal.port_a, roo2.surf_surBou[1]); connect(hex.port_b1, roo1.ports[1]); connect(roo1.ports[2], dpFac1.port_b); connect(dpFac1.port_a, hex.port_a2); connect(hex.port_b1, roo2.ports[1]); connect(dpFac4.port_b, roo2.ports[2]); connect(dpFac4.port_a, hex.port_a2); connect(fanSup.m_flow_in, m_flow_out.y); connect(fanSup.port_b, hex.port_a1); connect(fanRet.port_a, hex.port_b2); connect(out.ports[1], fanSup.port_a); connect(fanRet.port_b, out.ports[2]); connect(m_flow_out.y, fanRet.m_flow_in); connect(lea1.port_b, roo1.ports[3]); connect(lea1.port_a, out.ports[3]); connect(lea2.port_b, roo2.ports[3]); connect(lea2.port_a, out.ports[4]); connect(swi.y, heaCha.TRoo_in); connect(pumRad.port_b, temSup.port_a); connect(pumOn.outPort[1], T3.inPort); connect(T3.outPort, boiOn.inPort[1]); connect(boiOn.outPort[1], T2.inPort); connect(T1.outPort, pumOn.inPort[1]); connect(T2.outPort, pumOn2.inPort[1]); connect(pumOn2.outPort[1], T4.inPort); connect(T4.outPort, off.inPort[1]); connect(pumOn.activePort, pumOnSig.u[1]); connect(boiOn.activePort, pumOnSig.u[2]); connect(pumOn2.activePort, pumOnSig.u[3]); connect(boiOn.activePort, booToReaBoi.u); connect(booToReaPum.u, pumOnSig.y); connect(temRet.port_b, resSup.port_a); connect(resSup.port_b, res4.port_a); connect(resSup.port_b, thrWayVal.port_3); connect(weaBus.TDryBul, heaCha.TOut); connect(weaBus, out.weaBus); connect(switch1.y, gai1.u[1]); connect(gai1.y, roo1.qGai_flow); connect(switch2.y, gai2.u[1]); connect(gai2.y, roo2.qGai_flow); connect(heaCha.TSup, lesThr.u1); connect(booToReaBoi.y, boi.y); connect(tan.heaPorTop, TAmb.port); connect(TAmb.port, tan.heaPorSid); connect(TAmb.port, tan.heaPorBot); connect(add1.y, lesThr.u2); connect(tanTemTop.T, add1.u1); connect(dTThr.y, add1.u2); connect(tanTemBot.T, greThr.u); connect(rad1.port_b, resRoo1.port_a); connect(rad2.port_b, resRoo2.port_a); connect(temSup.port_b, val1.port_a); connect(resRoo1.port_b, temRet.port_a); connect(temSup.port_b, val2.port_a); connect(resRoo2.port_b, temRet.port_a); connect(TRooSet.y, swi1.u1); connect(swi1.u2, occSch.occupied); connect(TRooNig.y, swi1.u3); connect(aveTOut.y, onOff.u); connect(TOutSwi.y, onOff.reference); connect(swi1.y, swi.u1); connect(onOff.y, swi.u2); connect(TRooOff.y, swi.u3); connect(weaBus.TDryBul, aveTOut.u); connect(weaBus, weaDat.weaBus); connect(dpSen.p_rel, delRadPum.u); connect(res3.port_b, tan.port_a); connect(res3.port_b, thrWayVal.port_1); connect(conPum.y, pumRad.y); connect(TRoo1.T, conRoo1.u_m); connect(TRoo2.T, conRoo2.u_m); connect(bou.ports[1], boi.port_a); connect(delRadPum.y, conPum.u_m); end TwoRoomsWithStorage;