diff --git a/AixLib/Controls/HeatPump/BaseClasses/InverterControlledHP.mo b/AixLib/Controls/HeatPump/BaseClasses/InverterControlledHP.mo deleted file mode 100644 index ef8f180fcb..0000000000 --- a/AixLib/Controls/HeatPump/BaseClasses/InverterControlledHP.mo +++ /dev/null @@ -1,43 +0,0 @@ -within AixLib.Controls.HeatPump.BaseClasses; -model InverterControlledHP "Converter model for an inverter / speed controlled HP modulating between 0 and 1" - extends PartialTSetToNSet; - parameter Real hys "Hysteresis of controller"; - Modelica.Blocks.Logical.OnOffController onOffController(bandwidth=hys, - pre_y_start=false) "Hysteresis controller for set temperature" - annotation (Placement(transformation(extent={{-58,-6},{-30,22}}))); - Modelica.Blocks.Continuous.LimPID InverterControl( - final controllerType=Modelica.Blocks.Types.SimpleController.PI, - final k=k, - final Ti=Ti, - final yMax=1, - final yMin=0) - "PI-Control for a inverter controlled HP" - annotation (Placement(transformation(extent={{14,38},{34,58}}))); - parameter Real k=0.1 "Gain of controller" - annotation (Dialog(group="PI Values")); - parameter Modelica.Units.SI.Time Ti=30 "Time constant of Integrator block" - annotation (Dialog(group="PI Values")); -equation - connect(TSet, onOffController.reference) annotation (Line(points={{-116,60},{ - -77.5,60},{-77.5,16.4},{-60.8,16.4}}, - color={0,0,127})); - connect(InverterControl.y, swiNullHP.u1) - annotation (Line(points={{35,48},{52,48},{52,8},{64,8}}, color={0,0,127})); - connect(TSet, InverterControl.u_s) annotation (Line(points={{-116,60},{-43.5, - 60},{-43.5,48},{12,48}}, color={0,0,127})); - connect(TAct, onOffController.u) annotation (Line(points={{-116,-80},{-70,-80}, - {-70,-0.4},{-60.8,-0.4}},color={0,0,127})); - connect(TAct, InverterControl.u_m) annotation (Line(points={{-116,-80},{-70, - -80},{-70,32},{24,32},{24,36}}, - color={0,0,127})); - connect(onOffController.y, andHeaLim.u1) annotation (Line(points={{-28.6,8},{ - 24,8},{24,0},{36.8,0}}, color={255,0,255})); - annotation (Documentation(revisions=" -")); -end InverterControlledHP; diff --git a/AixLib/Controls/HeatPump/BaseClasses/OnOffHP.mo b/AixLib/Controls/HeatPump/BaseClasses/OnOffHP.mo deleted file mode 100644 index 8724a1352a..0000000000 --- a/AixLib/Controls/HeatPump/BaseClasses/OnOffHP.mo +++ /dev/null @@ -1,29 +0,0 @@ -within AixLib.Controls.HeatPump.BaseClasses; -model OnOffHP "Controller gives full speed or stop signal depending on temperature hysteresis" - extends AixLib.Controls.HeatPump.BaseClasses.PartialTSetToNSet; - parameter Real hys "Hysteresis of controller"; - Modelica.Blocks.Logical.OnOffController onOffController(bandwidth=hys, pre_y_start=false) "Hysteresis controller for set temperature" - annotation (Placement(transformation(extent={{-54,10},{-26,38}}))); - Modelica.Blocks.Sources.Constant conOne(final k=1.0) - "Constant one for on off heat pump" annotation (Placement(transformation(extent={{38,14},{50,26}}))); - -equation - connect(TSet, onOffController.reference) annotation (Line(points={{-116,60},{ - -85.5,60},{-85.5,32.4},{-56.8,32.4}}, color={0,0,127})); - connect(conOne.y, swiNullHP.u1) annotation (Line(points={{50.6,20},{58,20},{ - 58,8},{64,8}}, color={0,0,127})); - connect(TAct, onOffController.u) annotation (Line(points={{-116,-80},{-72,-80}, - {-72,15.6},{-56.8,15.6}}, color={0,0,127})); - connect(onOffController.y, andHeaLim.u1) annotation (Line(points={{-24.6,24}, - {5.7,24},{5.7,0},{36.8,0}}, color={255,0,255})); - annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)), - Documentation(revisions=" -")); -end OnOffHP; diff --git a/AixLib/Controls/HeatPump/BaseClasses/PartialHPController.mo b/AixLib/Controls/HeatPump/BaseClasses/PartialHPController.mo index b7b2114afe..116d9fc376 100644 --- a/AixLib/Controls/HeatPump/BaseClasses/PartialHPController.mo +++ b/AixLib/Controls/HeatPump/BaseClasses/PartialHPController.mo @@ -1,7 +1,7 @@ within AixLib.Controls.HeatPump.BaseClasses; partial model PartialHPController "Base class of a heat pump controller with bus interface" - AixLib.Controls.Interfaces.VapourCompressionMachineControlBus heatPumpControlBus + AixLib.Fluid.HeatPumps.ModularReversible.BaseClasses.RefrigerantMachineControlBus heatPumpControlBus annotation (Placement(transformation( extent={{-29.5,-29.5},{29.5,29.5}}, rotation=270, diff --git a/AixLib/Controls/HeatPump/BaseClasses/PartialTSetToNSet.mo b/AixLib/Controls/HeatPump/BaseClasses/PartialTSetToNSet.mo index 17265ce842..db9eff7569 100644 --- a/AixLib/Controls/HeatPump/BaseClasses/PartialTSetToNSet.mo +++ b/AixLib/Controls/HeatPump/BaseClasses/PartialTSetToNSet.mo @@ -5,18 +5,19 @@ partial model PartialTSetToNSet "True to choose a bivalent system" annotation(choices(checkBox=true)); // Heating limit temperature + parameter Boolean use_heaLim=true "=false to disable moving average heating limit" annotation (Dialog(group="Heating limit temperature")); parameter Modelica.Units.SI.Temperature T_heaLim=293.15 - "Heating limit temperature. If the filtered outdoor air temperature surpasses this threshold, the device will be shut down" - annotation (Dialog(group="Heating limit temperature")); + "Heating limit temperature. If the filtered outdoor air temperature surpasses this threshold, the device will be shut down" annotation(Dialog(group= + "Heating limit temperature", enable=use_heaLim)); parameter Modelica.Units.SI.Time movAveTime=300 - "Time span for building the average of the outdoor air temperature. Used for heating limit temperature" - annotation (Dialog(group="Heating limit temperature")); + "Time span for building the average of the outdoor air temperature. Used for heating limit temperature" annotation (Dialog(group= + "Heating limit temperature", enable=use_heaLim)); - AixLib.Utilities.Logical.SmoothSwitch swiNullHP "If HP is off, zero is passed" - annotation (Placement(transformation(extent={{66,-10},{86,10}}))); + Modelica.Blocks.Logical.Switch swiNullHP "If HP is off, zero is passed" + annotation (Placement(transformation(extent={{60,-20},{80,0}}))); Modelica.Blocks.Sources.Constant conZer(final k=0) "If an error occurs, the compressor speed is set to zero" - annotation (Placement(transformation(extent={{38,-24},{50,-12}}))); + annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); Modelica.Blocks.Interfaces.RealInput TSet( final quantity="ThermodynamicTemperature", final unit="K", @@ -24,15 +25,15 @@ partial model PartialTSetToNSet annotation (Placement(transformation(extent={{-132,44},{-100,76}}))); Modelica.Blocks.Interfaces.RealOutput nOut "Relative speed of compressor. From 0 to 1" annotation (Placement(transformation(extent={{100,-10},{120,10}}))); - AixLib.Controls.Interfaces.VapourCompressionMachineControlBus sigBusHP - annotation (Placement(transformation(extent={{-124,-42},{-90,-12}}))); + AixLib.Fluid.HeatPumps.ModularReversible.BaseClasses.RefrigerantMachineControlBus sigBusHP + annotation (Placement(transformation(extent={{-124,-46},{-90,-16}}))); Modelica.Blocks.Interfaces.RealOutput ySecHeaGen if use_secHeaGen "Relative power of second heat generator, from 0 to 1" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, - origin={12,-108}))); - Modelica.Blocks.Interfaces.RealInput TAct( + origin={0,-110}))); + Modelica.Blocks.Interfaces.RealInput TMea( final quantity="ThermodynamicTemperature", final unit="K", final displayUnit="degC") "Actual temperature, control variable" @@ -40,37 +41,41 @@ partial model PartialTSetToNSet extent={{16,16},{-16,-16}}, rotation=180, origin={-116,-80}))); - Utilities.Logical.SmoothSwitch swiNullsecHeaGen if use_secHeaGen + AixLib.Utilities.Logical.SmoothSwitch swiNullsecHeaGen if use_secHeaGen "If second heater is off, zero is passed" annotation (Placement( transformation( - extent={{8,-8},{-8,8}}, + extent={{10,-10},{-10,10}}, rotation=90, - origin={12,-84}))); - Utilities.Math.MovingAverage movAve(final aveTime=movAveTime) + origin={0,-70}))); + AixLib.Utilities.Math.MovingAverage movAve(final aveTime=movAveTime, final u_start=0) + if use_heaLim "Moving average to account for fluctuations in the outdoor air temperature" - annotation (Placement(transformation(extent={{-88,-34},{-76,-20}}))); + annotation (Placement(transformation(extent={{-92,-40},{-72,-20}}))); Modelica.Blocks.Logical.And andHeaLim "Check if control and heating limit temperature yield true to turn the device on" - annotation (Placement(transformation(extent={{38,-6},{50,6}}))); + annotation (Placement(transformation(extent={{20,-20},{40,0}}))); Modelica.Blocks.Logical.LessThreshold lessThreshold(final threshold= - T_heaLim) - annotation (Placement(transformation(extent={{-66,-34},{-52,-20}}))); + T_heaLim) if use_heaLim + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + Modelica.Blocks.Sources.BooleanConstant booleanConstant(final k=true) + if not use_heaLim + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); equation - connect(conZer.y, swiNullHP.u3) annotation (Line(points={{50.6,-18},{58,-18}, - {58,-8},{64,-8}}, color={0,0,127})); + connect(conZer.y, swiNullHP.u3) annotation (Line(points={{41,-40},{54,-40},{ + 54,-18},{58,-18}},color={0,0,127})); connect(swiNullHP.y, nOut) - annotation (Line(points={{87,0},{110,0}}, color={0,0,127})); + annotation (Line(points={{81,-10},{98,-10},{98,0},{110,0}}, + color={0,0,127})); connect(swiNullsecHeaGen.y, ySecHeaGen) - annotation (Line(points={{12,-92.8},{12,-108}}, - color={0,0,127})); - connect(conZer.y, swiNullsecHeaGen.u3) annotation (Line(points={{50.6,-18},{ - 70,-18},{70,-74.4},{18.4,-74.4}}, - color={0,0,127})); + annotation (Line(points={{-8.88178e-16,-81},{-8.88178e-16,-98},{0,-98},{0, + -110}}, color={0,0,127})); + connect(conZer.y, swiNullsecHeaGen.u3) annotation (Line(points={{41,-40},{70, + -40},{70,-58},{8,-58}}, color={0,0,127})); connect(sigBusHP.T_oda, movAve.u) annotation (Line( - points={{-107,-27},{-94,-27},{-94,-27},{-89.2,-27}}, + points={{-107,-31},{-94,-31},{-94,-30}}, color={255,204,51}, thickness=0.5), Text( string="%first", @@ -78,11 +83,14 @@ equation extent={{-3,-6},{-3,-6}}, horizontalAlignment=TextAlignment.Right)); connect(movAve.y, lessThreshold.u) - annotation (Line(points={{-75.4,-27},{-67.4,-27}}, color={0,0,127})); - connect(lessThreshold.y, andHeaLim.u2) annotation (Line(points={{-51.3,-27},{-26, - -27},{-26,-4.8},{36.8,-4.8}}, color={255,0,255})); + annotation (Line(points={{-71,-30},{-62,-30}}, color={0,0,127})); + connect(lessThreshold.y, andHeaLim.u2) annotation (Line(points={{-39,-30},{ + -26,-30},{-26,-18},{18,-18}}, color={255,0,255})); connect(andHeaLim.y, swiNullHP.u2) - annotation (Line(points={{50.6,0},{64,0}}, color={255,0,255})); + annotation (Line(points={{41,-10},{58,-10}}, + color={255,0,255})); + connect(booleanConstant.y, andHeaLim.u2) annotation (Line(points={{-39,-70},{ + -26,-70},{-26,-18},{18,-18}}, color={255,0,255})); annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ Rectangle( extent={{-100,100},{100,-100}}, diff --git a/AixLib/Controls/HeatPump/BaseClasses/package.order b/AixLib/Controls/HeatPump/BaseClasses/package.order index 512aff2f8b..2d55484766 100644 --- a/AixLib/Controls/HeatPump/BaseClasses/package.order +++ b/AixLib/Controls/HeatPump/BaseClasses/package.order @@ -1,4 +1,2 @@ -InverterControlledHP -OnOffHP PartialHPController PartialTSetToNSet diff --git a/AixLib/Controls/HeatPump/DefrostControl.mo b/AixLib/Controls/HeatPump/DefrostControl.mo new file mode 100644 index 0000000000..2153693c1a --- /dev/null +++ b/AixLib/Controls/HeatPump/DefrostControl.mo @@ -0,0 +1,179 @@ +within AixLib.Controls.HeatPump; +model DefrostControl + "Control block to ensure no frost limits heat flow at the evaporator" + parameter Real minIceFac "Minimal value above which no defrost is necessary"; + + parameter Real deltaIceFac = 0.1 "Bandwitdth for hystereses. If the icing factor is based on the duration of defrost, this value is necessary to avoid state-events."; + Modelica.Blocks.Interfaces.BooleanInput hea + annotation (Placement(transformation(extent={{-132,-36},{-100,-4}}))); + Modelica.Blocks.Interfaces.RealInput ySet + "Set value relative speed of compressor. Analog from 0 to 1" + annotation (Placement(transformation(extent={{-132,4},{-100,36}}))); + Utilities.Logical.SmoothSwitch swiErr + "If an error occurs, the value of the conZero block will be used(0)" + annotation (Placement(transformation(extent={{58,2},{78,22}}))); + Modelica.Blocks.Sources.Constant conOne(final k=1) + "If Defrost is enabled, HP runs at full power" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Modelica.Blocks.Interfaces.RealOutput yOut + "Relative speed of compressor. From 0 to 1" + annotation (Placement(transformation(extent={{100,10},{120,30}}))); + Modelica.Blocks.Interfaces.BooleanOutput heaOut + annotation (Placement(transformation(extent={{100,-30},{120,-10}}))); + Fluid.HeatPumps.ModularReversible.BaseClasses.RefrigerantMachineControlBus sigBus + annotation (Placement(transformation(extent={{-120,-76},{-92,-48}}))); + Modelica.Blocks.Logical.Hysteresis iceFacGreMinChi( + final uLow=minIceFac, + final uHigh=minIceFac + deltaIceFac, + final pre_y_start=true) + "Check if icing factor is greater than a boundary" annotation (Placement( + transformation( + extent={{-10.5,-10.5},{10.5,10.5}}, + rotation=0, + origin={-49.5,-61.5}))); + Modelica.Blocks.Logical.LogicalSwitch logicalSwitch + "If a chiller is used to defrost, mode will be false" + annotation (Placement(transformation(extent={{58,-42},{78,-22}}))); + Modelica.Blocks.Sources.BooleanConstant conTrueUseChi(final k=false) + "Set mode to false to simulate the defrost cycle" + annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); +equation + connect(conOne.y, swiErr.u3) annotation (Line(points={{21,0},{46,0},{46,4},{ + 56,4}}, color={0,0,127})); + connect(swiErr.y,yOut) annotation (Line(points={{79,12},{96,12},{96,20},{110, + 20}}, color={0,0,127})); + connect(ySet, swiErr.u1) annotation (Line(points={{-116,20},{56,20}}, + color={0,0,127})); + + connect(sigBus.iceFacMea, iceFacGreMinChi.u) annotation (Line( + points={{-106,-62},{-84.05,-62},{-84.05,-61.5},{-62.1,-61.5}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(iceFacGreMinChi.y, swiErr.u2) annotation (Line( + points={{-37.95,-61.5},{8,-61.5},{8,-32},{44,-32},{44,12},{56,12}}, + color={255,0,255})); + connect(logicalSwitch.y, heaOut) annotation (Line(points={{79,-32},{84,-32},{84, + -20},{110,-20}}, color={255,0,255})); + connect(hea, logicalSwitch.u1) annotation (Line(points={{-116,-20},{-32,-20},{ + -32,-24},{56,-24}}, color={255,0,255})); + connect(iceFacGreMinChi.y, logicalSwitch.u2) annotation (Line( + points={{-37.95,-61.5},{8,-61.5},{8,-32},{56,-32}}, + color={255,0,255})); + connect(conTrueUseChi.y, logicalSwitch.u3) annotation (Line( + points={{41,-70},{48,-70},{48,-40},{56,-40}}, + color={255,0,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,80}}), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={28,108,200}, + fillColor={255,255,170}, + fillPattern=FillPattern.Solid), + Line( + points={{-36,34},{-36,-6}}, + color={28,108,200}), + Line( + points={{0,20},{0,-20}}, + color={28,108,200}, + origin={-36,14}, + rotation=90), + Line( + points={{-14,14},{14,-14}}, + color={28,108,200}, + origin={-36,14}, + rotation=90), + Line( + points={{14,14},{-14,-14}}, + color={28,108,200}, + origin={-36,14}, + rotation=90), + Line( + points={{8,64},{8,24}}, + color={28,108,200}), + Line( + points={{0,20},{0,-20}}, + color={28,108,200}, + origin={8,44}, + rotation=90), + Line( + points={{-14,14},{14,-14}}, + color={28,108,200}, + origin={8,44}, + rotation=90), + Line( + points={{14,14},{-14,-14}}, + color={28,108,200}, + origin={8,44}, + rotation=90), + Line( + points={{-34,-22},{-34,-62}}, + color={28,108,200}), + Line( + points={{0,20},{0,-20}}, + color={28,108,200}, + origin={-34,-42}, + rotation=90), + Line( + points={{-14,14},{14,-14}}, + color={28,108,200}, + origin={-34,-42}, + rotation=90), + Line( + points={{14,14},{-14,-14}}, + color={28,108,200}, + origin={-34,-42}, + rotation=90), + Line( + points={{14,6},{14,-34}}, + color={28,108,200}), + Line( + points={{0,20},{0,-20}}, + color={28,108,200}, + origin={14,-14}, + rotation=90), + Line( + points={{-14,14},{14,-14}}, + color={28,108,200}, + origin={14,-14}, + rotation=90), + Line( + points={{14,14},{-14,-14}}, + color={28,108,200}, + origin={14,-14}, + rotation=90), + Text( + extent={{-104,100},{106,76}}, + lineColor={28,108,200}, + lineThickness=0.5, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}})), + Documentation(info="

+ Basic model for a defrost control. The icing factor is calculated in + the heat pump based on functions or other models. +

+

+ If a given lower boundary is surpassed, the mode of the heat pump + will be set to false(eq. Chilling) and the compressor speed is set to + 1 to make the defrost process as fast as possible. +

+ +")); +end DefrostControl; diff --git a/AixLib/Controls/HeatPump/Examples/HeatPumpController.mo b/AixLib/Controls/HeatPump/Examples/HeatPumpController.mo deleted file mode 100644 index 22ef9f3bbc..0000000000 --- a/AixLib/Controls/HeatPump/Examples/HeatPumpController.mo +++ /dev/null @@ -1,148 +0,0 @@ -within AixLib.Controls.HeatPump.Examples; -model HeatPumpController "Example for usage of heat pump controller" - extends Modelica.Icons.Example; - - HPControllerOnOff hPControllerOnOff(bandwidth=2) - "Simple on/off controller for a heat pump" - annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Modelica.Blocks.Interaction.Show.RealValue showN - "Shows the current value of the revolution speed" - annotation (Placement(transformation(extent={{60,60},{80,80}}))); - Modelica.Blocks.Interaction.Show.BooleanValue showOnOff - "Shows the current value of the on/off signal" - annotation (Placement(transformation(extent={{66,40},{86,60}}))); - AixLib.Controls.Interfaces.VapourCompressionMachineControlBus heatPumpControlBus - "Required to make the signals on the bus accessible" annotation (Placement( - transformation( - extent={{-10,-10},{10,10}}, - rotation=270, - origin={0,0}))); - Modelica.Blocks.Interaction.Show.BooleanValue showMode - "Shows the current value of the mode signal" - annotation (Placement(transformation(extent={{66,18},{86,38}}))); - Modelica.Blocks.Sources.RealExpression temperatureMeasurements[4](y={280,290, - 300,310}) "Represents temperature measurements in heat pump" - annotation (Placement(transformation( - extent={{-30,-10},{30,10}}, - rotation=0, - origin={-70,-76}))); - Modelica.Blocks.Sources.RealExpression massFlowRateMeasurements[2](y={0.5,1}) - "Represents mass flow rate measurements in heat pump" - annotation (Placement(transformation( - extent={{-30,-10},{30,10}}, - rotation=0, - origin={-70,-96}))); - Modelica.Blocks.Sources.Sine T_meas( - f=1/3600, - amplitude=6, - offset=310) "Generates the measured temperature" - annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); - Modelica.Blocks.Sources.Constant T_set(k=310) - "Provides the temperature set point" - annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); - Modelica.Blocks.Interaction.Show.RealValue showT_meas - "Shows the current value of the measured temperature" - annotation (Placement(transformation(extent={{-60,70},{-20,90}}))); - Modelica.Blocks.Interfaces.RealOutput output_T_meas( - final quantity="ThermodynamicTemperature", - final unit="K", - displayUnit="degC", - min=0) "Outputs the temperature measurement" - annotation (Placement(transformation(extent={{85,-75},{115,-45}}))); - Modelica.Blocks.Interfaces.BooleanOutput output_on - "Outputs the on/off signal" - annotation (Placement(transformation(extent={{86,-94},{114,-66}}))); -equation - connect(hPControllerOnOff.heatPumpControlBus, heatPumpControlBus) annotation ( - Line( - points={{-40.05,0.05},{-20.025,0.05},{-20.025,0},{0,0}}, - color={255,204,51}, - thickness=0.5), Text( - string="%second", - index=1, - extent={{6,3},{6,3}})); - connect(heatPumpControlBus.nSet, showN.numberPort) annotation (Line( - points={{0.05,-0.05},{20,-0.05},{20,70},{58.5,70}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}})); - connect(temperatureMeasurements[1].y, heatPumpControlBus.TEvaInMea) - annotation (Line(points={{-37,-76},{0.05,-76},{0.05,-0.05}}, - color={0,0,127}), Text( - index=1, - extent={{6,3},{6,3}})); - connect(temperatureMeasurements[2].y, heatPumpControlBus.TConInMea) - annotation (Line(points={{-37,-76},{0.05,-76},{0.05,-0.05}}, - color={0,0,127}), Text( - index=1, - extent={{6,3},{6,3}})); - connect(temperatureMeasurements[3].y, heatPumpControlBus.TEvaOutMea) - annotation (Line(points={{-37,-76},{0.05,-76},{0.05,-0.05}}, - color={0,0,127}), Text( - index=1, - extent={{6,3},{6,3}})); - connect(temperatureMeasurements[4].y, heatPumpControlBus.TConOutMea) - annotation (Line(points={{-37,-76},{0.05,-76},{0.05,-0.05}}, - color={0,0,127}), Text( - index=1, - extent={{6,3},{6,3}})); - connect(massFlowRateMeasurements[1].y, heatPumpControlBus.m_flowEvaMea) - annotation (Line(points={{-37,-96},{20,-96},{20,-0.05},{0.05,-0.05}}, - color={0,0,127}), Text( - index=1, - extent={{6,3},{6,3}})); - connect(massFlowRateMeasurements[2].y, heatPumpControlBus.m_flowConMea) - annotation (Line(points={{-37,-96},{0,-96},{0,-0.05},{0.05,-0.05}}, - color={0,0,127}), Text( - index=1, - extent={{6,3},{6,3}})); - connect(T_meas.y,showT_meas. numberPort) annotation (Line(points={{-79,30},{ - -66,30},{-66,80},{-63,80}}, color={0,0,127})); - connect(T_meas.y, output_T_meas) annotation (Line(points={{-79,30},{-74,30},{ - -74,-60},{100,-60}}, color={0,0,127})); - connect(heatPumpControlBus.modeSet, showMode.activePort) annotation (Line( - points={{0.05,-0.05},{10,-0.05},{20,-0.05},{20,28},{64.5,28}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}})); - connect(heatPumpControlBus.onOffMea, showOnOff.activePort) annotation (Line( - points={{0.05,-0.05},{20,-0.05},{20,50},{64.5,50}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}})); - connect(heatPumpControlBus.onOffMea, output_on) annotation (Line( - points={{0.05,-0.05},{20,-0.05},{20,-80},{100,-80}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}})); - connect(T_meas.y, hPControllerOnOff.TSet) annotation (Line(points={{-79,30},{ - -68,30},{-68,4},{-60,4}}, color={0,0,127})); - connect(T_set.y, hPControllerOnOff.TMea) annotation (Line(points={{-79,-30},{ - -68,-30},{-68,-4},{-60,-4}}, color={0,0,127})); - annotation (experiment(StopTime=10000, Interval=10), Documentation(info="

- This example can be used to test that AixLib.Controls.HeatPump.HPControllerOnOff - supplies all required signals as specified in AixLib.Controls.ControllerInterfaces.HeatPumpControlBus. - The generated signals are visualized using the Show package. The - temperature measurement is supplied by a sine block so that the - reaction of the controller can be tested. -

-

- The example also shows how to connect two models, typically a model - of a physical component and a controller, via the bus connector. The - temperatureMeasurements and the massFlowRateMeasurements are only - connected for demonstration purposes and are not required by the - controller. -

-")); -end HeatPumpController; diff --git a/AixLib/Controls/HeatPump/Examples/InverterControlledHeatPump.mo b/AixLib/Controls/HeatPump/Examples/InverterControlledHeatPump.mo new file mode 100644 index 0000000000..82fcaaec76 --- /dev/null +++ b/AixLib/Controls/HeatPump/Examples/InverterControlledHeatPump.mo @@ -0,0 +1,22 @@ +within AixLib.Controls.HeatPump.Examples; +model InverterControlledHeatPump + extends Modelica.Icons.Example; + extends PartialHeatPumpController(redeclare InverterControlledHP hPController( + bandwidth=2, + k=0.05, + Ti=100)); + +annotation(experiment(Tolerance=1e-6, StartTime=0, StopTime=10000), + Documentation(info="

+ Example for an inverter controlled heat pump. Play around with the PI + settings to see how they influence nSet depending on TSet and TMea. +

+", revisions=" +")); +end InverterControlledHeatPump; diff --git a/AixLib/Controls/HeatPump/Examples/PartialHeatPumpController.mo b/AixLib/Controls/HeatPump/Examples/PartialHeatPumpController.mo new file mode 100644 index 0000000000..ee8355541f --- /dev/null +++ b/AixLib/Controls/HeatPump/Examples/PartialHeatPumpController.mo @@ -0,0 +1,80 @@ +within AixLib.Controls.HeatPump.Examples; +partial model PartialHeatPumpController + "Example for usage of heat pump controller" + + AixLib.Fluid.HeatPumps.ModularReversible.BaseClasses.RefrigerantMachineControlBus heatPumpControlBus + "Required to make the signals on the bus accessible" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-56,-50}))); + Modelica.Blocks.Sources.Sine T_meas( + f=1/3600, + amplitude=6, + offset=310) "Generates the measured temperature" + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + Modelica.Blocks.Sources.Constant T_set(k=310) + "Provides the temperature set point" + annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); + Modelica.Blocks.Interfaces.RealOutput TMea( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC", + min=0) "Outputs the temperature measurement" + annotation (Placement(transformation(extent={{101,-75},{131,-45}}))); + replaceable BaseClasses.PartialTSetToNSet hPController constrainedby + BaseClasses.PartialTSetToNSet( + final use_secHeaGen=false, + use_heaLim=false, + T_heaLim=293.15, + movAveTime=300) annotation (Placement(transformation(extent={{-20,-20}, + {20,20}})), __Dymola_choicesAllMatching=true); + Modelica.Blocks.Interfaces.RealOutput TSet( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC", + min=0) "Outputs the temperature measurement" + annotation (Placement(transformation(extent={{101,-15},{131,15}}))); + Modelica.Blocks.Interfaces.RealOutput nSet + "Outputs the temperature measurement" + annotation (Placement(transformation(extent={{101,45},{131,75}}))); + Modelica.Blocks.Sources.Constant T_oda(k=273.15) + "Provides the temperature set point" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); +equation + connect(T_meas.y, TMea) annotation (Line(points={{-79,30},{-70,30},{-70,-60},{ + 116,-60}}, color={0,0,127})); + connect(hPController.TSet, T_set.y) annotation (Line(points={{-23.2,12},{-62,12}, + {-62,-30},{-79,-30}}, color={0,0,127})); + connect(hPController.TMea, T_meas.y) annotation (Line(points={{-23.2,-16},{-70, + -16},{-70,30},{-79,30}}, color={0,0,127})); + connect(nSet, hPController.nOut) annotation (Line(points={{116,60},{102,60},{102, + 58},{76,58},{76,0},{22,0}}, color={0,0,127})); + connect(T_oda.y, heatPumpControlBus.TOdaMea) annotation (Line(points={{-79,-70}, + {-56,-70},{-56,-50}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(heatPumpControlBus, hPController.sigBusHP) annotation (Line( + points={{-56,-50},{-36,-50},{-36,-6},{-21.4,-6},{-21.4,-6.2}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,-6},{-3,-6}}, + horizontalAlignment=TextAlignment.Right)); + connect(T_set.y, TSet) annotation (Line(points={{-79,-30},{86,-30},{86,0},{116, + 0}}, color={0,0,127})); + annotation (experiment(StopTime=10000, Interval=10), Documentation(info="

+ Partial example model for heat pump controls. +

+", revisions=" +")); +end PartialHeatPumpController; diff --git a/AixLib/Controls/HeatPump/Examples/TwoPointControlledHeatPump.mo b/AixLib/Controls/HeatPump/Examples/TwoPointControlledHeatPump.mo new file mode 100644 index 0000000000..3d2dc00e28 --- /dev/null +++ b/AixLib/Controls/HeatPump/Examples/TwoPointControlledHeatPump.mo @@ -0,0 +1,21 @@ +within AixLib.Controls.HeatPump.Examples; +model TwoPointControlledHeatPump + extends Modelica.Icons.Example; + extends PartialHeatPumpController(redeclare TwoPointControlledHP hPController( + bandwidth=2)); + +annotation(experiment(Tolerance=1e-6, StartTime=0, StopTime=10000), + Documentation(info="

+ Example for an two-point hysteresis controlled heat pump. Play around + with the bandwith settings to see how it influence nSet depending on + TSet and TMea. +

+", revisions=" +")); +end TwoPointControlledHeatPump; diff --git a/AixLib/Controls/HeatPump/Examples/package.order b/AixLib/Controls/HeatPump/Examples/package.order index 9919abdabb..4fc0a9ec45 100644 --- a/AixLib/Controls/HeatPump/Examples/package.order +++ b/AixLib/Controls/HeatPump/Examples/package.order @@ -1 +1,3 @@ -HeatPumpController +InverterControlledHeatPump +PartialHeatPumpController +TwoPointControlledHeatPump diff --git a/AixLib/Controls/HeatPump/HPControl.mo b/AixLib/Controls/HeatPump/HPControl.mo index 31fb87e379..46bd24c1ec 100644 --- a/AixLib/Controls/HeatPump/HPControl.mo +++ b/AixLib/Controls/HeatPump/HPControl.mo @@ -1,9 +1,10 @@ -within AixLib.Controls.HeatPump; +within AixLib.Controls.HeatPump; model HPControl "Control block which makes sure the desired temperature is supplied by the HP" //General replaceable model TSetToNSet = - AixLib.Controls.HeatPump.BaseClasses.PartialTSetToNSet constrainedby AixLib.Controls.HeatPump.BaseClasses.PartialTSetToNSet( + AixLib.Controls.HeatPump.BaseClasses.PartialTSetToNSet constrainedby + AixLib.Controls.HeatPump.BaseClasses.PartialTSetToNSet( final use_secHeaGen=use_secHeaGen) annotation(choicesAllMatching=true); parameter Boolean use_secHeaGen=false "True to choose a bivalent system" annotation(choices(checkBox=true)); @@ -15,8 +16,8 @@ model HPControl choice=false "Function", radioButtons=true)); replaceable function HeatingCurveFunction = - SetPoints.Functions.HeatingCurveFunction constrainedby SetPoints.Functions.PartialBaseFct - annotation (Dialog(group="Heating Curve - Data", enable = not use_tableData),choicesAllMatching=true); + SetPoints.Functions.HeatingCurveFunction constrainedby + SetPoints.Functions.PartialBaseFct annotation (Dialog(group="Heating Curve - Data", enable = not use_tableData),choicesAllMatching=true); parameter AixLib.DataBase.Boiler.DayNightMode.HeatingCurvesDayNightBaseDataDefinition heatingCurveRecord= @@ -60,9 +61,9 @@ model HPControl final zerTim=zerTim) if use_antLeg annotation (Placement(transformation(extent={{-26,-14},{14,26}}))); - Interfaces.VapourCompressionMachineControlBus sigBusHP + AixLib.Fluid.HeatPumps.ModularReversible.BaseClasses.RefrigerantMachineControlBus sigBusHP annotation (Placement(transformation(extent={{-116,-72},{-88,-44}}))); - Modelica.Blocks.Interfaces.RealOutput nOut + Modelica.Blocks.Interfaces.RealOutput yOut "Relative compressor speed" annotation (Placement(transformation(extent={{100,6},{128,34}}))); Modelica.Blocks.Interfaces.RealInput T_oda "Outdoor air temperature" annotation (Placement(transformation(extent={{-128,-14},{-100,14}}), @@ -70,24 +71,27 @@ model HPControl Modelica.Blocks.Interfaces.RealOutput ySecHeaGen if use_secHeaGen "Relative power of second heat generator, from 0 to 1" annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, + extent={{-17,-17},{17,17}}, rotation=-90, - origin={-4,-104}))); + origin={1,-117}), iconTransformation( + extent={{-14,-14},{14,14}}, + rotation=-90, + origin={-1.77636e-15,-108}))); Modelica.Blocks.Interfaces.RealOutput y_sou annotation (Placement(transformation(extent={{14,-14},{-14,14}}, rotation=90, - origin={-64,-100}))); + origin={-60,-114}))); Modelica.Blocks.Interfaces.RealOutput y_sin annotation (Placement(transformation( extent={{14,-14},{-14,14}}, rotation=90, - origin={56,-100}))); + origin={60,-114}))); Modelica.Blocks.Sources.Constant constHeating1(final k=1) "If you want to include chilling, please insert control blocks first" annotation (Placement(transformation(extent={{10,-10},{-10,10}}, rotation=90, origin={-12,-72}))); - SetPoints.HeatingCurve heatCurve( + AixLib.Controls.SetPoints.HeatingCurve heatCurve( final TOffset=0, final use_dynTRoom=false, final zerTim=zerTim, @@ -110,7 +114,7 @@ model HPControl Modelica.Blocks.Sources.BooleanConstant constHeating(final k=true) "If you want to include chilling, please insert control blocks first" annotation (Placement(transformation(extent={{82,-26},{94,-14}}))); - Modelica.Blocks.Interfaces.BooleanOutput modeOut + Modelica.Blocks.Interfaces.BooleanOutput hea "Heating mode" annotation (Placement(transformation(extent={{100,-34},{128,-6}}))); Modelica.Blocks.Interfaces.RealInput TSup "Supply temperature" annotation ( Placement(transformation(extent={{-128,46},{-100,74}}), @@ -118,8 +122,8 @@ model HPControl equation - connect(T_oda, sigBusHP.T_oda) annotation (Line(points={{-114,1.77636e-15},{-90, - 1.77636e-15},{-90,-57.93},{-101.93,-57.93}}, + connect(T_oda, sigBusHP.T_oda) annotation (Line(points={{-114,1.77636e-15},{ + -90,1.77636e-15},{-90,-58},{-102,-58}}, color={0,0,127}), Text( string="%second", index=1, @@ -137,11 +141,11 @@ equation color={0,0,127}, pattern=LinePattern.Dash)); - connect(ConvTSetToNSet.nOut, nOut) annotation (Line(points={{77.6,9},{88.8,9},{88.8,20}, + connect(ConvTSetToNSet.nOut,yOut) annotation (Line(points={{77.6,9},{88.8,9},{88.8,20}, {114,20}}, color={0,0,127})); connect(sigBusHP,ConvTSetToNSet. sigBusHP) annotation (Line( - points={{-102,-58},{24,-58},{24,4.41},{42.88,4.41}}, + points={{-102,-58},{24,-58},{24,3.73},{42.88,3.73}}, color={255,204,51}, thickness=0.5), Text( string="%first", @@ -157,27 +161,27 @@ equation points={{6.8,46},{26,46},{26,19.2},{41.44,19.2}}, color={0,0,127}, pattern=LinePattern.Dash)); - connect(modeOut, constHeating.y) annotation (Line(points={{114,-20},{94.6,-20}}, - color={255,0,255})); + connect(hea, constHeating.y) + annotation (Line(points={{114,-20},{94.6,-20}}, color={255,0,255})); connect(TSup, antiLegionella.TSupAct) annotation (Line(points={{-114,60},{-82, 60},{-82,6},{-30,6}}, color={0,0,127})); - connect(TSup,ConvTSetToNSet. TAct) annotation (Line(points={{-114,60},{-82,60},{-82,-22}, + connect(TSup,ConvTSetToNSet.TMea) annotation (Line(points={{-114,60},{-82,60},{-82,-22}, {30,-22},{30,-4.6},{41.44,-4.6}}, color={0,0,127})); connect(ConvTSetToNSet.ySecHeaGen, ySecHeaGen) annotation (Line( - points={{61.92,-9.36},{61.92,-14},{46,-14},{46,-44},{22,-44},{22,-90},{-4, - -90},{-4,-104}}, + points={{60,-9.7},{60,-12},{36,-12},{36,-88},{1,-88},{1,-117}}, color={0,0,127}, pattern=LinePattern.Dash)); connect(ySecHeaGen, ySecHeaGen) - annotation (Line(points={{-4,-104},{-4,-104}}, + annotation (Line(points={{1,-117},{1,-117}}, color={0,0,127})); connect(constHeating1.y, y_sou) - annotation (Line(points={{-12,-83},{-12,-84},{-64,-84},{-64,-100}}, + annotation (Line(points={{-12,-83},{-12,-96},{-60,-96},{-60,-114}}, color={0,0,127})); - connect(constHeating1.y, y_sin) annotation (Line(points={{-12,-83},{56,-83},{56, - -100}}, color={0,0,127})); + connect(constHeating1.y, y_sin) annotation (Line(points={{-12,-83},{-12,-92}, + {60,-92},{60,-114}}, + color={0,0,127})); annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100, -100},{100,80}}), graphics={ Rectangle( @@ -222,7 +226,7 @@ equation

Looking at the HeatPumpSystem, + \"modelica://AixLib.Obsolete.Year2024.Systems.HeatPumpSystems.HeatPumpSystem\">HeatPumpSystem, the task of the control block is also to control the pumps or fans and second heat generator if necessary.

diff --git a/AixLib/Controls/HeatPump/HPControllerOnOff.mo b/AixLib/Controls/HeatPump/HPControllerOnOff.mo deleted file mode 100644 index 0abd6a31c4..0000000000 --- a/AixLib/Controls/HeatPump/HPControllerOnOff.mo +++ /dev/null @@ -1,64 +0,0 @@ -within AixLib.Controls.HeatPump; -model HPControllerOnOff - "Simple on/off controller for heat pump model" - extends BaseClasses.PartialHPController; - - parameter Real bandwidth(start=0.1) "Bandwidth around reference signal"; - parameter Boolean pre_y_start=false "Value of pre(y) at initial time"; - - Modelica.Blocks.Sources.BooleanConstant mode "Dummy signal for unit mode, true: heat pump, false: chiller" - annotation (Placement(transformation(extent={{-12,-50},{8,-30}}))); - Modelica.Blocks.Logical.OnOffController onOffController(bandwidth=bandwidth, - pre_y_start=pre_y_start) "Generates the on/off signal depending on the temperature inputs" - annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Modelica.Blocks.Interfaces.RealInput TMea( - final quantity="ThermodynamicTemperature", - final unit="K", - displayUnit="degC", - min=0) "Temperature measurement" - annotation (Placement(transformation(extent={{-115,-55},{-85,-25}}))); - Modelica.Blocks.Interfaces.RealInput TSet( - final quantity="ThermodynamicTemperature", - final unit="K", - displayUnit="degC", - min=0) "Temperature set point" - annotation (Placement(transformation(extent={{-115,25},{-85,55}}))); - Modelica.Blocks.Math.BooleanToReal NOnOff(final realTrue=1, final realFalse=0) - "Convert boolean to real rotational speed of compressor" - annotation (Placement(transformation(extent={{22,-10},{42,10}}))); -equation - - connect(mode.y, heatPumpControlBus.modeSet) annotation (Line(points={{9,-40}, - {60,-40},{60,0.3525},{99.6475,0.3525}}, color={255,0,255}), Text( - string="%second", - index=1, - extent={{6,3},{6,3}}, - horizontalAlignment=TextAlignment.Left)); - connect(onOffController.y, NOnOff.u) - annotation (Line(points={{11,0},{20,0}}, color={255,0,255})); - connect(NOnOff.y, heatPumpControlBus.nSet) annotation (Line(points={{43,0},{ - 72,0},{72,0.3525},{99.6475,0.3525}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{6,3},{6,3}}, - horizontalAlignment=TextAlignment.Left)); - connect(TMea, onOffController.u) annotation (Line(points={{-100,-40},{-40,-40}, - {-40,-6},{-12,-6}}, color={0,0,127})); - connect(TSet, onOffController.reference) annotation (Line(points={{-100,40},{ - -40,40},{-40,6},{-12,6}}, color={0,0,127})); - annotation (Documentation(info="

- This model represents a simple controller for a heat pump. It is - based on the Modelica.Blocks.Logical.OnOffController - but includes further constant sources so that the AixLib.Controls.Interfaces.HeatPumpControlBus - can be used. -

-

- March 31, 2017, by Marc Baranski: -

-

- First implementation. -

-")); -end HPControllerOnOff; diff --git a/AixLib/Controls/HeatPump/InverterControlledHP.mo b/AixLib/Controls/HeatPump/InverterControlledHP.mo new file mode 100644 index 0000000000..55bf6d0a29 --- /dev/null +++ b/AixLib/Controls/HeatPump/InverterControlledHP.mo @@ -0,0 +1,49 @@ +within AixLib.Controls.HeatPump; +model InverterControlledHP + "Converter model for an inverter / speed controlled HP modulating between 0 and 1" + extends BaseClasses.PartialTSetToNSet; + parameter Real bandwidth "Bandwith of hysteresis of controller"; + parameter Real k "Gain of controller" + annotation (Dialog(group="PI Values")); + parameter Modelica.Units.SI.Time Ti "Time constant of Integrator block" + annotation (Dialog(group="PI Values")); + parameter Real yMin=0.2 "Minimal relative compressor speed" + annotation (Dialog(group="PI Values")); + + Modelica.Blocks.Logical.OnOffController onOffController(bandwidth=bandwidth, + pre_y_start=false) "Hysteresis controller for set temperature" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + Modelica.Blocks.Continuous.LimPID InverterControl( + final controllerType=Modelica.Blocks.Types.SimpleController.PI, + final k=k, + final Ti=Ti, + final yMax=1, + final yMin=yMin) + "PI-Control for a inverter controlled HP" + annotation (Placement(transformation(extent={{20,40},{40,60}}))); + +equation + connect(TSet, onOffController.reference) annotation (Line(points={{-116,60},{ + -77.5,60},{-77.5,36},{-62,36}}, color={0,0,127})); + connect(InverterControl.y, swiNullHP.u1) + annotation (Line(points={{41,50},{52,50},{52,-2},{58,-2}}, + color={0,0,127})); + connect(TSet, InverterControl.u_s) annotation (Line(points={{-116,60},{-43.5, + 60},{-43.5,50},{18,50}}, color={0,0,127})); + connect(TMea, onOffController.u) annotation (Line(points={{-116,-80},{-70,-80}, + {-70,24},{-62,24}}, color={0,0,127})); + connect(TMea, InverterControl.u_m) annotation (Line(points={{-116,-80},{-70, + -80},{-70,16},{30,16},{30,38}}, + color={0,0,127})); + connect(onOffController.y, andHeaLim.u1) annotation (Line(points={{-39,30},{ + -18,30},{-18,-10},{18,-10}}, + color={255,0,255})); + annotation (Documentation(revisions=" +")); +end InverterControlledHP; diff --git a/AixLib/Controls/HeatPump/TwoPointControlledHP.mo b/AixLib/Controls/HeatPump/TwoPointControlledHP.mo new file mode 100644 index 0000000000..00d61a2d9a --- /dev/null +++ b/AixLib/Controls/HeatPump/TwoPointControlledHP.mo @@ -0,0 +1,32 @@ +within AixLib.Controls.HeatPump; +model TwoPointControlledHP + "Controller gives full speed or stop signal depending on temperature hysteresis" + extends AixLib.Controls.HeatPump.BaseClasses.PartialTSetToNSet; + parameter Real bandwidth "Bandwith of hysteresis of controller"; + Modelica.Blocks.Logical.OnOffController onOffController(final bandwidth=bandwidth, + final pre_y_start=false) "Hysteresis controller for set temperature" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + Modelica.Blocks.Sources.Constant conOne(final k=1) + "Constant one for on off heat pump" annotation (Placement(transformation(extent={{20,20}, + {40,40}}))); + +equation + connect(TSet, onOffController.reference) annotation (Line(points={{-116,60},{ + -85.5,60},{-85.5,36},{-62,36}}, color={0,0,127})); + connect(conOne.y, swiNullHP.u1) annotation (Line(points={{41,30},{58,30},{58, + -2}}, color={0,0,127})); + connect(TMea, onOffController.u) annotation (Line(points={{-116,-80},{-72,-80}, + {-72,24},{-62,24}}, color={0,0,127})); + connect(onOffController.y, andHeaLim.u1) annotation (Line(points={{-39,30},{ + 5.7,30},{5.7,-10},{18,-10}},color={255,0,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" +")); +end TwoPointControlledHP; diff --git a/AixLib/Controls/HeatPump/package.order b/AixLib/Controls/HeatPump/package.order index 0b836450f0..8f14c23cfc 100644 --- a/AixLib/Controls/HeatPump/package.order +++ b/AixLib/Controls/HeatPump/package.order @@ -1,7 +1,8 @@ AntiLegionella +DefrostControl HPControl -HPControllerOnOff +InverterControlledHP +TwoPointControlledHP ModularHeatPumps -SafetyControls Examples BaseClasses diff --git a/AixLib/Controls/Interfaces/package.order b/AixLib/Controls/Interfaces/package.order index 8ef03cdfe1..b0874ca3c9 100644 --- a/AixLib/Controls/Interfaces/package.order +++ b/AixLib/Controls/Interfaces/package.order @@ -5,4 +5,3 @@ ModularCompressorControlBus ModularExpansionValveControlBus ModularHeatPumpControlBus ModularSensorControlBus -VapourCompressionMachineControlBus diff --git a/AixLib/DataBase/HeatPump/EN14511/package.mo b/AixLib/DataBase/HeatPump/EN14511/package.mo deleted file mode 100644 index e023ba6c04..0000000000 --- a/AixLib/DataBase/HeatPump/EN14511/package.mo +++ /dev/null @@ -1,10 +0,0 @@ -within AixLib.DataBase.HeatPump; -package EN14511 - - - - - - - -end EN14511; diff --git a/AixLib/DataBase/HeatPump/EN255/package.mo b/AixLib/DataBase/HeatPump/EN255/package.mo deleted file mode 100644 index 3a608ca0aa..0000000000 --- a/AixLib/DataBase/HeatPump/EN255/package.mo +++ /dev/null @@ -1,8 +0,0 @@ -within AixLib.DataBase.HeatPump; -package EN255 - - - - - -end EN255; diff --git a/AixLib/DataBase/package.order b/AixLib/DataBase/package.order index 95961bb866..170cef7150 100644 --- a/AixLib/DataBase/package.order +++ b/AixLib/DataBase/package.order @@ -1,8 +1,6 @@ ActiveWalls Boiler CHP -Chiller -HeatPump Media Pipes Pools diff --git a/AixLib/Electrical/PVSystem/BaseClasses/PartialIVCharacteristics.mo b/AixLib/Electrical/PVSystem/BaseClasses/PartialIVCharacteristics.mo new file mode 100644 index 0000000000..9957bd46f9 --- /dev/null +++ b/AixLib/Electrical/PVSystem/BaseClasses/PartialIVCharacteristics.mo @@ -0,0 +1,136 @@ +within AixLib.Electrical.PVSystem.BaseClasses; +partial model PartialIVCharacteristics +"Partial model for IV Characteristic of a PV module" + +replaceable parameter AixLib.DataBase.SolarElectric.PVBaseDataDefinition data +constrainedby AixLib.DataBase.SolarElectric.PVBaseDataDefinition +"PV Panel data definition" + annotation (choicesAllMatching); + +// Adjustable input parameters + +parameter Real n_mod(final quantity= + "NumberOfModules", final unit="1") "Number of connected PV modules" + annotation (); + + +// Parameters from module data sheet + +final parameter Modelica.Units.SI.Efficiency eta_0=data.eta_0 +"Efficiency under standard conditions"; + +final parameter Real n_ser=data.n_ser + "Number of cells connected in series on the PV panel"; + +final parameter Modelica.Units.SI.Area A_pan=data.A_pan +"Area of one Panel, must not be confused with area of the whole module"; + +final parameter Modelica.Units.SI.Area A_mod=data.A_mod +"Area of one module (housing)"; + +final parameter Modelica.Units.SI.Voltage V_oc0=data.V_oc0 +"Open circuit voltage under standard conditions"; + +final parameter Modelica.Units.SI.ElectricCurrent I_sc0=data.I_sc0 +"Short circuit current under standard conditions"; + +final parameter Modelica.Units.SI.Voltage V_mp0=data.V_mp0 +"MPP voltage under standard conditions"; + +final parameter Modelica.Units.SI.ElectricCurrent I_mp0=data.I_mp0 +"MPP current under standard conditions"; + +final parameter Modelica.Units.SI.Power P_Max=data.P_mp0*1.05 +"Maximal power of one PV module under standard conditions. P_MPP with 5 % tolerance. This is used to limit DCOutputPower."; + +final parameter Real TCoeff_Isc(unit = "A/K")=data.TCoeff_Isc + "Temperature coefficient for short circuit current, >0"; + +final parameter Real TCoeff_Voc(unit = "V/K")=data.TCoeff_Voc + "Temperature coefficient for open circuit voltage, <0"; + +final parameter Modelica.Units.SI.LinearTemperatureCoefficient alpha_Isc=data.alpha_Isc +"Normalized temperature coefficient for short circuit current, >0"; + +final parameter Modelica.Units.SI.LinearTemperatureCoefficient beta_Voc=data.beta_Voc +"Normalized temperature coefficient for open circuit voltage, <0"; + +final parameter Modelica.Units.SI.LinearTemperatureCoefficient gamma_Pmp=data.gamma_Pmp +"Normalized temperature coefficient for power at MPP"; + +final parameter Modelica.Units.SI.Temperature T_c0=25 + 273.15 +"Thermodynamic cell temperature under standard conditions"; + + +Modelica.Blocks.Interfaces.RealOutput DCOutputPower( +final quantity="Power", +final unit="W") +"DC output power of the PV array" +annotation(Placement( +transformation(extent={{100,50},{120,70}}), +iconTransformation(extent={{100,50},{120,70}}))); + + +Modelica.Blocks.Interfaces.RealOutput eta( +final quantity="Efficiency", +final unit="1", +min=0) +"Efficiency of the PV module under operating conditions" +annotation(Placement( +transformation(extent={{100,-70},{120,-50}}), +iconTransformation(extent={{100,-70},{120,-50}}))); + +Modelica.Blocks.Interfaces.RealInput T_c(final quantity= + "ThermodynamicTemperature", final unit="K") + "Cell temperature" + annotation (Placement(transformation(extent={{-140,20},{-100,60}}), iconTransformation(extent={{-140,20},{-100,60}}))); + +Modelica.Blocks.Interfaces.RealInput absRadRat(final unit= "1") + "Ratio of absorbed radiation under operating conditions to standard conditions" + annotation (Placement(transformation(extent={{-140,-60},{-100,-20}}), iconTransformation(extent={{-140,-60},{-100,-20}}))); + +Modelica.Blocks.Interfaces.RealInput radTil(final unit="W/m2") + "Total solar irradiance on the tilted surface" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}), iconTransformation(extent={{-140,-100},{-100, + -60}}))); + + +annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,100},{100,-100}}), + Line( + points={{-66,-64},{-66,88}}, + color={0,0,0}, + arrow={Arrow.None,Arrow.Filled}, + thickness=0.5), + Line( + points={{-66,-64},{64,-64}}, + color={0,0,0}, + arrow={Arrow.None,Arrow.Filled}, + thickness=0.5), + Text( + extent={{-72,80},{-102,68}}, + lineColor={0,0,0}, + lineThickness=0.5, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="I"), + Text( + extent={{80,-80},{50,-92}}, + lineColor={0,0,0}, + lineThickness=0.5, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="U"), + Line( + points={{-66,54},{-66,54},{-6,54},{12,50},{22,42},{32,28},{38,8},{42,-14}, + {44,-44},{44,-64}}, + color={0,0,0}, + thickness=0.5, + smooth=Smooth.Bezier)}), + Diagram(coordinateSystem(preserveAspectRatio=false))); + +end PartialIVCharacteristics; diff --git a/AixLib/Electrical/PVSystem/BaseClasses/package.mo b/AixLib/Electrical/PVSystem/BaseClasses/package.mo index 96769ede3d..8347a1e427 100644 --- a/AixLib/Electrical/PVSystem/BaseClasses/package.mo +++ b/AixLib/Electrical/PVSystem/BaseClasses/package.mo @@ -2,141 +2,4 @@ within AixLib.Electrical.PVSystem; package BaseClasses extends Modelica.Icons.BasesPackage; - - partial model PartialIVCharacteristics - "Partial model for IV Characteristic of a PV module" - - replaceable parameter AixLib.DataBase.SolarElectric.PVBaseDataDefinition data - constrainedby AixLib.DataBase.SolarElectric.PVBaseDataDefinition - "PV Panel data definition" - annotation (choicesAllMatching); - - // Adjustable input parameters - - parameter Real n_mod(final quantity= - "NumberOfModules", final unit="1") "Number of connected PV modules" - annotation (); - - - // Parameters from module data sheet - - final parameter Modelica.Units.SI.Efficiency eta_0=data.eta_0 - "Efficiency under standard conditions"; - - final parameter Real n_ser=data.n_ser - "Number of cells connected in series on the PV panel"; - - final parameter Modelica.Units.SI.Area A_pan=data.A_pan - "Area of one Panel, must not be confused with area of the whole module"; - - final parameter Modelica.Units.SI.Area A_mod=data.A_mod - "Area of one module (housing)"; - - final parameter Modelica.Units.SI.Voltage V_oc0=data.V_oc0 - "Open circuit voltage under standard conditions"; - - final parameter Modelica.Units.SI.ElectricCurrent I_sc0=data.I_sc0 - "Short circuit current under standard conditions"; - - final parameter Modelica.Units.SI.Voltage V_mp0=data.V_mp0 - "MPP voltage under standard conditions"; - - final parameter Modelica.Units.SI.ElectricCurrent I_mp0=data.I_mp0 - "MPP current under standard conditions"; - - final parameter Modelica.Units.SI.Power P_Max=data.P_mp0*1.05 - "Maximal power of one PV module under standard conditions. P_MPP with 5 % tolerance. This is used to limit DCOutputPower."; - - final parameter Real TCoeff_Isc(unit = "A/K")=data.TCoeff_Isc - "Temperature coefficient for short circuit current, >0"; - - final parameter Real TCoeff_Voc(unit = "V/K")=data.TCoeff_Voc - "Temperature coefficient for open circuit voltage, <0"; - - final parameter Modelica.Units.SI.LinearTemperatureCoefficient alpha_Isc=data.alpha_Isc - "Normalized temperature coefficient for short circuit current, >0"; - - final parameter Modelica.Units.SI.LinearTemperatureCoefficient beta_Voc=data.beta_Voc - "Normalized temperature coefficient for open circuit voltage, <0"; - - final parameter Modelica.Units.SI.LinearTemperatureCoefficient gamma_Pmp=data.gamma_Pmp - "Normalized temperature coefficient for power at MPP"; - - final parameter Modelica.Units.SI.Temperature T_c0=25 + 273.15 - "Thermodynamic cell temperature under standard conditions"; - - - Modelica.Blocks.Interfaces.RealOutput DCOutputPower( - final quantity="Power", - final unit="W") - "DC output power of the PV array" - annotation(Placement( - transformation(extent={{100,50},{120,70}}), - iconTransformation(extent={{100,50},{120,70}}))); - - - Modelica.Blocks.Interfaces.RealOutput eta( - final quantity="Efficiency", - final unit="1", - min=0) - "Efficiency of the PV module under operating conditions" - annotation(Placement( - transformation(extent={{100,-70},{120,-50}}), - iconTransformation(extent={{100,-70},{120,-50}}))); - - Modelica.Blocks.Interfaces.RealInput T_c(final quantity= - "ThermodynamicTemperature", final unit="K") - "Cell temperature" - annotation (Placement(transformation(extent={{-140,20},{-100,60}}), iconTransformation(extent={{-140,20},{-100,60}}))); - - Modelica.Blocks.Interfaces.RealInput absRadRat(final unit= "1") - "Ratio of absorbed radiation under operating conditions to standard conditions" - annotation (Placement(transformation(extent={{-140,-60},{-100,-20}}), iconTransformation(extent={{-140,-60},{-100,-20}}))); - - Modelica.Blocks.Interfaces.RealInput radTil(final unit="W/m2") - "Total solar irradiance on the tilted surface" - annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}), iconTransformation(extent={{-140,-100},{-100, - -60}}))); - - - annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle( - lineColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid, - extent={{-100,100},{100,-100}}), - Line( - points={{-66,-64},{-66,88}}, - color={0,0,0}, - arrow={Arrow.None,Arrow.Filled}, - thickness=0.5), - Line( - points={{-66,-64},{64,-64}}, - color={0,0,0}, - arrow={Arrow.None,Arrow.Filled}, - thickness=0.5), - Text( - extent={{-72,80},{-102,68}}, - lineColor={0,0,0}, - lineThickness=0.5, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid, - textString="I"), - Text( - extent={{80,-80},{50,-92}}, - lineColor={0,0,0}, - lineThickness=0.5, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid, - textString="U"), - Line( - points={{-66,54},{-66,54},{-6,54},{12,50},{22,42},{32,28},{38,8},{42,-14}, - {44,-44},{44,-64}}, - color={0,0,0}, - thickness=0.5, - smooth=Smooth.Bezier)}), - Diagram(coordinateSystem(preserveAspectRatio=false))); - end PartialIVCharacteristics; - - end BaseClasses; diff --git a/AixLib/Electrical/PVSystem/BaseClasses/package.order b/AixLib/Electrical/PVSystem/BaseClasses/package.order index 309d1d5092..2bdef224bc 100644 --- a/AixLib/Electrical/PVSystem/BaseClasses/package.order +++ b/AixLib/Electrical/PVSystem/BaseClasses/package.order @@ -4,4 +4,5 @@ CellTemperatureOpenRack IVCharacteristics5pAnalytical PVRadiationHorizontal PartialCellTemperature +PartialIVCharacteristics Wsimple diff --git a/AixLib/Fluid/BaseClasses/package.order b/AixLib/Fluid/BaseClasses/package.order index 9b1e2b66fd..942b2276fe 100644 --- a/AixLib/Fluid/BaseClasses/package.order +++ b/AixLib/Fluid/BaseClasses/package.order @@ -1,9 +1,7 @@ ActuatorFilter IndexMassFraction MassFlowRateMultiplier -PartialInnerCycle PartialResistance -PartialReversibleVapourCompressionMachine PartialThreeWayResistance FlowModels Validation diff --git a/AixLib/Fluid/Chillers/BaseClasses/package.order b/AixLib/Fluid/Chillers/BaseClasses/package.order index 263edf547e..fd1c3690d2 100644 --- a/AixLib/Fluid/Chillers/BaseClasses/package.order +++ b/AixLib/Fluid/Chillers/BaseClasses/package.order @@ -1,4 +1,3 @@ Carnot -InnerCycle_Chiller PartialCarnot_T PartialCarnot_y diff --git a/AixLib/Fluid/Chillers/Examples/package.order b/AixLib/Fluid/Chillers/Examples/package.order index 46b4532014..8f1741a553 100644 --- a/AixLib/Fluid/Chillers/Examples/package.order +++ b/AixLib/Fluid/Chillers/Examples/package.order @@ -1,3 +1,2 @@ Carnot_TEva Carnot_y -Chiller diff --git a/AixLib/Fluid/Chillers/package.order b/AixLib/Fluid/Chillers/package.order index 0e5718dd71..8b853202cb 100644 --- a/AixLib/Fluid/Chillers/package.order +++ b/AixLib/Fluid/Chillers/package.order @@ -1,6 +1,5 @@ Carnot_TEva Carnot_y -Chiller ModularReversible Examples Validation diff --git a/AixLib/Fluid/Examples/GeothermalHeatPump/BaseClasses/GeothermalHeatPumpBase.mo b/AixLib/Fluid/Examples/GeothermalHeatPump/BaseClasses/GeothermalHeatPumpBase.mo index f20ec93d99..bee26acfc8 100644 --- a/AixLib/Fluid/Examples/GeothermalHeatPump/BaseClasses/GeothermalHeatPumpBase.mo +++ b/AixLib/Fluid/Examples/GeothermalHeatPump/BaseClasses/GeothermalHeatPumpBase.mo @@ -4,7 +4,13 @@ partial model GeothermalHeatPumpBase replaceable package Medium = AixLib.Media.Water "Medium model used for hydronic components"; - + parameter Modelica.Fluid.Types.Dynamics energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation (Dialog(tab="Dynamics")); + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal_layer=0.5 + "Nominal mass flow rate in layers of storages"; + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal_HE=0.5 + "Nominal mass flow rate of heat exchanger layers of storages"; parameter Modelica.Units.SI.Temperature T_start_cold=300 "Initial temperature of cold components"; @@ -22,6 +28,7 @@ partial model GeothermalHeatPumpBase Storage.StorageDetailed coldStorage( redeclare package Medium = Medium, + energyDynamics=energyDynamics, redeclare package MediumHC1 = Medium, redeclare package MediumHC2 = Medium, m1_flow_nominal=m_flow_nominal_layer, @@ -90,9 +97,9 @@ partial model GeothermalHeatPumpBase extent={{-6,-7},{6,7}}, rotation=90, origin={-60,1}))); - Storage.StorageDetailed - heatStorage( + AixLib.Fluid.Storage.StorageDetailed heatStorage( redeclare package Medium = Medium, + energyDynamics=energyDynamics, redeclare package MediumHC1 = Medium, redeclare package MediumHC2 = Medium, m1_flow_nominal=m_flow_nominal_layer, @@ -114,7 +121,7 @@ partial model GeothermalHeatPumpBase hConOut=10, hConHC1=500) "Storage tank for buffering heat demand" annotation (Placement(transformation(extent={{24,-96},{52,-62}}))); - FixedResistances.PressureDrop resistanceHeatStorage( + AixLib.Fluid.FixedResistances.PressureDrop resistanceHeatStorage( redeclare package Medium = Medium, m_flow_nominal=0.5, dp_nominal=15000) "Resistance in condenser circuit" @@ -125,7 +132,7 @@ partial model GeothermalHeatPumpBase AixLib.Fluid.Sources.Boundary_pT geothField_sink1(redeclare package Medium = Medium, nPorts=2) "One of two sinks representing geothermal field" annotation (Placement(transformation(extent={{-158,20},{-146,32}}))); - FixedResistances.PressureDrop resistanceHeatConsumerFlow( + AixLib.Fluid.FixedResistances.PressureDrop resistanceHeatConsumerFlow( redeclare package Medium = Medium, m_flow_nominal=0.2, dp_nominal=10000) "Resistance in heat consumer flow line" @@ -133,9 +140,8 @@ partial model GeothermalHeatPumpBase extent={{-7,-7},{7,7}}, rotation=0, origin={87,-50}))); - Actuators.Valves.TwoWayQuickOpening - valveColdStorage(redeclare package Medium = - Medium, + AixLib.Fluid.Actuators.Valves.TwoWayQuickOpening valveColdStorage( + redeclare package Medium = Medium, m_flow_nominal=0.5, dpValve_nominal=5000) "Valve connecting cold storage to the evaporator of the heat pump" annotation (Placement( @@ -143,9 +149,8 @@ partial model GeothermalHeatPumpBase extent={{-6,7},{6,-7}}, rotation=180, origin={-52,38}))); - Actuators.Valves.TwoWayQuickOpening - valveHeatStorage(redeclare package Medium = - Medium, + AixLib.Fluid.Actuators.Valves.TwoWayQuickOpening valveHeatStorage( + redeclare package Medium = Medium, m_flow_nominal=0.5, dpValve_nominal=5000) "Valve connecting heat storage to the condenser of the heat pump" annotation (Placement( @@ -155,6 +160,7 @@ partial model GeothermalHeatPumpBase origin={-18,-63}))); AixLib.Fluid.Movers.FlowControlled_dp pumpColdConsumer( + energyDynamics=energyDynamics, m_flow_nominal=0.05, redeclare package Medium = Medium, addPowerToMedium=false, @@ -162,13 +168,14 @@ partial model GeothermalHeatPumpBase "Pump moving fluid from storage tank to cold consumers" annotation (Placement(transformation(extent={{58,-27},{72,-13}}))); AixLib.Fluid.Movers.FlowControlled_dp pumpHeatConsumer( + energyDynamics=energyDynamics, m_flow_nominal=0.05, redeclare package Medium = Medium, addPowerToMedium=false, T_start=T_start_hot) "Pump moving fluid from storage tank to heat consumers" annotation (Placement(transformation(extent={{58,-57},{72,-43}}))); - FixedResistances.PressureDrop resistanceColdConsumerReturn( + AixLib.Fluid.FixedResistances.PressureDrop resistanceColdConsumerReturn( redeclare package Medium = Medium, m_flow_nominal=0.2, dp_nominal=10000) "Resistance in cold consumer return line" @@ -176,7 +183,7 @@ partial model GeothermalHeatPumpBase extent={{-7,-7},{7,7}}, rotation=180, origin={87,32}))); - FixedResistances.PressureDrop resistanceHeatConsumerReturn( + AixLib.Fluid.FixedResistances.PressureDrop resistanceHeatConsumerReturn( redeclare package Medium = Medium, m_flow_nominal=0.2, dp_nominal=10000) "Resistance in heat consumer return line" @@ -185,6 +192,7 @@ partial model GeothermalHeatPumpBase rotation=180, origin={87,-106}))); AixLib.Fluid.Movers.FlowControlled_dp pumpCondenser( + energyDynamics=energyDynamics, m_flow_nominal=0.05, redeclare package Medium = Medium, addPowerToMedium=false, @@ -195,6 +203,7 @@ partial model GeothermalHeatPumpBase rotation=180, origin={-1,-98}))); AixLib.Fluid.Movers.FlowControlled_dp pumpEvaporator( + energyDynamics=energyDynamics, m_flow_nominal=0.05, redeclare package Medium = Medium, addPowerToMedium=false, @@ -205,6 +214,7 @@ partial model GeothermalHeatPumpBase rotation=180, origin={7,36}))); AixLib.Fluid.Movers.FlowControlled_dp pumpGeothermalSource( + energyDynamics=energyDynamics, m_flow_nominal=0.05, redeclare package Medium = Medium, addPowerToMedium=false, @@ -214,17 +224,50 @@ partial model GeothermalHeatPumpBase extent={{-7,-7},{7,7}}, rotation=0, origin={-89,-54}))); - Controls.Interfaces.VapourCompressionMachineControlBus heatPumpControlBus + HeatPumps.ModularReversible.BaseClasses.RefrigerantMachineControlBus + heatPumpControlBus annotation (Placement(transformation(extent={{-21,60},{20,98}}))); - HeatPumps.HeatPump heatPump(useBusConnectorOnly=true) annotation (Placement( - transformation( - extent={{-14,17},{14,-17}}, + AixLib.Fluid.HeatPumps.ModularReversible.Modular heatPump( + redeclare package MediumCon = Medium, + redeclare package MediumEva = Medium, + use_rev=false, + tauCon=0.005*heatPump.rhoCon/heatPump.mCon_flow_nominal, + dTCon_nominal=0, + tauEva=0.005*heatPump.rhoEva/heatPump.mEva_flow_nominal, + dpCon_nominal=0, + use_conCap=false, + CCon=0, + GConOut=0, + GConIns=0, + dTEva_nominal=0, + dpEva_nominal=0, + use_evaCap=false, + CEva=0, + GEvaOut=0, + GEvaIns=0, + use_intSafCtr=false, + energyDynamics=energyDynamics, + QHea_flow_nominal=12740, + redeclare model RefrigerantCycleHeatPumpHeating = + AixLib.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.TableData2D ( + redeclare + AixLib.Fluid.HeatPumps.ModularReversible.Data.TableData2D.EN255.Vitocal350BWH110 + datTab), + redeclare model RefrigerantCycleHeatPumpCooling = + AixLib.Fluid.Chillers.ModularReversible.RefrigerantCycle.BaseClasses.NoCooling, + mCon_flow_nominal=0.5, + mEva_flow_nominal=0.5, + TConHea_nominal=318.15, + TEvaHea_nominal=273.15, + TConCoo_nominal=273.15, + TEvaCoo_nominal=273.15, + use_busConOnl=true) annotation ( + Placement(transformation( + extent={{-10,10},{10,-10}}, rotation=90, - origin={-25,5.99998}))); - parameter Modelica.Units.SI.MassFlowRate m_flow_nominal_layer=0.5 - "Nominal mass flow rate in layers of storages"; - parameter Modelica.Units.SI.MassFlowRate m_flow_nominal_HE=0.5 - "Nominal mass flow rate of heat exchanger layers of storages"; + origin={-30,10}))); + + equation connect(resistanceGeothermalSource.port_b, valveHeatSink.port_a) annotation ( @@ -262,21 +305,22 @@ equation annotation (Line(points={{-96,-54},{-146,-54}}, color={0,127,255})); connect(resistanceHeatConsumerFlow.port_b, peaLoaDev.port_a) annotation ( Line(points={{94,-50},{102,-50},{108,-50}}, color={0,127,255})); - connect(heatPump.port_b1, geothField_sink1.ports[1]) annotation (Line(points={{-16.5, - 20},{-16,20},{-16,28},{-146,28},{-146,27.2}}, color={0,127,255})); - connect(valveHeatStorage.port_b, heatPump.port_a1) annotation (Line(points={{-18, - -57},{-18,-8.00001},{-16.5,-8.00001}}, color={0,127,255})); - connect(heatPump.port_b2, geothField_sink1.ports[2]) annotation (Line(points={ - {-33.5,-8.00001},{-88,-8.00001},{-88,24.8},{-146,24.8}}, color={0,127, + connect(heatPump.port_b1, geothField_sink1.ports[1]) annotation (Line(points={{-24,20}, + {-24,24},{-148,24},{-148,25.4},{-146,25.4}}, color={0,127,255})); + connect(valveHeatStorage.port_b, heatPump.port_a1) annotation (Line(points={{-18,-57}, + {-20,-57},{-20,0},{-24,0}}, color={0,127,255})); + connect(heatPump.port_b2, geothField_sink1.ports[2]) annotation (Line(points={{-36,0}, + {-36,-2},{-50,-2},{-50,26.6},{-146,26.6}}, color={0,127, 255})); - connect(heatPump.port_a2, valveHeatSource.port_b) annotation (Line(points={{-33.5, - 20},{-44,20},{-44,7},{-60,7}}, color={0,127,255})); - connect(heatPump.port_a2, valveColdStorage.port_b) annotation (Line(points={{-33.5, - 20},{-44,20},{-44,38},{-58,38}}, color={0,127,255})); - connect(valveHeatSink.port_b, heatPump.port_a1) annotation (Line(points={{-24, - -54},{-24,-56},{-16.5,-56},{-16.5,-8.00002}}, color={0,127,255})); + connect(heatPump.port_a2, valveHeatSource.port_b) annotation (Line(points={{-36,20}, + {-36,28},{-60,28},{-60,7}}, color={0,127,255})); + connect(heatPump.port_a2, valveColdStorage.port_b) annotation (Line(points={{-36,20}, + {-36,28},{-62,28},{-62,38},{-58,38}}, + color={0,127,255})); + connect(valveHeatSink.port_b, heatPump.port_a1) annotation (Line(points={{-24,-54}, + {-20,-54},{-20,0},{-24,0}}, color={0,127,255})); connect(heatPumpControlBus, heatPump.sigBus) annotation (Line( - points={{-0.5,79},{-0.5,-32},{-30.525,-32},{-30.525,-7.86002}}, + points={{-0.5,79},{-0.5,48},{-10,48},{-10,0.1},{-33.9,0.1}}, color={255,204,51}, thickness=0.5), Text( string="%first", @@ -289,8 +333,8 @@ equation annotation (Line(points={{33.1,20.17},{33.1,32},{80,32}}, color={0,127,255})); connect(pumpCondenser.port_a, heatStorage.portHC1Out) annotation (Line(points= {{6,-98},{16,-98},{16,-74.58},{23.825,-74.58}}, color={0,127,255})); - connect(heatPump.port_b1, heatStorage.portHC1In) annotation (Line(points={{ - -16.5,20},{8,20},{8,-69.31},{23.65,-69.31}}, color={0,127,255})); + connect(heatPump.port_b1, heatStorage.portHC1In) annotation (Line(points={{-24,20}, + {-24,26},{-6,26},{-6,-69.31},{23.65,-69.31}},color={0,127,255})); connect(heatStorage.fluidportTop2, pumpHeatConsumer.port_a) annotation (Line( points={{42.375,-61.83},{42.375,-50},{58,-50}}, color={0,127,255})); connect(resistanceHeatConsumerReturn.port_b, heatStorage.fluidportBottom2) @@ -298,8 +342,8 @@ equation 127,255})); connect(pumpEvaporator.port_a, coldStorage.portHC1Out) annotation (Line( points={{14,36},{16,36},{16,7.42},{23.825,7.42}}, color={0,127,255})); - connect(heatPump.port_b2, coldStorage.portHC1In) annotation (Line(points={{ - -33.5,-8.00002},{-33.5,-16},{14,-16},{14,12.69},{23.65,12.69}}, color + connect(heatPump.port_b2, coldStorage.portHC1In) annotation (Line(points={{-36,0}, + {-36,-2},{18,-2},{18,12.69},{23.65,12.69}}, color ={0,127,255})); annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-160, -120},{160,80}})), Icon(coordinateSystem( diff --git a/AixLib/Fluid/Examples/GeothermalHeatPump/BaseClasses/GeothermalHeatPumpControlledBase.mo b/AixLib/Fluid/Examples/GeothermalHeatPump/BaseClasses/GeothermalHeatPumpControlledBase.mo index 5031d542b6..217992db89 100644 --- a/AixLib/Fluid/Examples/GeothermalHeatPump/BaseClasses/GeothermalHeatPumpControlledBase.mo +++ b/AixLib/Fluid/Examples/GeothermalHeatPump/BaseClasses/GeothermalHeatPumpControlledBase.mo @@ -57,13 +57,8 @@ equation connect(getTStorageUpper.y, heatStorageTemperature) annotation (Line(points={ {-139,68},{-132,68},{-120,68},{-120,-88},{-100,-88},{-100,-120}}, color={0,0,127})); - connect(heatPumpPower, heatPumpControlBus.PelMea) annotation (Line(points={{-45.5, - -119.5},{-45.5,-80},{-110,-80},{-110,64},{-94,64},{-94,79.095},{-0.3975, - 79.095}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{-3,6},{-3,6}}, - horizontalAlignment=TextAlignment.Right)); + connect(heatPump.P, heatPumpPower) annotation (Line(points={{-30,21},{-30,30}, + {-100,30},{-100,-90},{-45.5,-90},{-45.5,-119.5}}, color={0,0,127})); annotation (experiment(StopTime=86400, Interval=10), Documentation(info="

Base class of an example demonstrating the use of a heat pump connected to two storages and a geothermal source. A replaceable diff --git a/AixLib/Fluid/Examples/GeothermalHeatPump/GeothermalHeatPump.mo b/AixLib/Fluid/Examples/GeothermalHeatPump/GeothermalHeatPump.mo index 94b155f3c3..34e08a98c9 100644 --- a/AixLib/Fluid/Examples/GeothermalHeatPump/GeothermalHeatPump.mo +++ b/AixLib/Fluid/Examples/GeothermalHeatPump/GeothermalHeatPump.mo @@ -1,54 +1,14 @@ -within AixLib.Fluid.Examples.GeothermalHeatPump; +within AixLib.Fluid.Examples.GeothermalHeatPump; model GeothermalHeatPump "Example of a geothermal heat pump system" extends Modelica.Icons.Example; - extends AixLib.Fluid.Examples.GeothermalHeatPump.BaseClasses.GeothermalHeatPumpControlledBase( - redeclare model PeakLoadDeviceModel= - AixLib.Fluid.Examples.GeothermalHeatPump.Components.BoilerStandAlone ( redeclare - package Medium = - Medium, energyDynamics=energyDynamics), - heatPump( - redeclare package Medium_con = Medium, - redeclare package Medium_eva = Medium, - use_rev=false, - use_autoCalc=false, - Q_useNominal=0, - use_refIne=false, - refIneFre_constant=0, - mFlow_conNominal=0.5, - VCon=0.005, - dpCon_nominal=0, - use_conCap=false, - CCon=0, - GConOut=0, - GConIns=0, - mFlow_evaNominal=0.5, - VEva=0.005, - dpEva_nominal=0, - use_evaCap=false, - CEva=0, - GEvaOut=0, - GEvaIns=0, - massDynamics=Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, - energyDynamics=energyDynamics, - redeclare model PerDataMainHP = - DataBase.HeatPump.PerformanceData.LookUpTable2D (dataTable= - AixLib.DataBase.HeatPump.EN255.Vitocal350BWH110()), - redeclare model PerDataRevHP = - DataBase.Chiller.PerformanceData.LookUpTable2D), - heatPumpControlBus.iceFacMea = 1, - heatStorage(energyDynamics=energyDynamics), - coldStorage(energyDynamics=energyDynamics), - pumpCondenser(energyDynamics=energyDynamics), - pumpGeothermalSource(energyDynamics=energyDynamics), - pumpEvaporator(energyDynamics=energyDynamics), - pumpColdConsumer(energyDynamics=energyDynamics), - pumpHeatConsumer(energyDynamics=energyDynamics)); + extends + AixLib.Fluid.Examples.GeothermalHeatPump.BaseClasses.GeothermalHeatPumpControlledBase( + redeclare model PeakLoadDeviceModel = + AixLib.Fluid.Examples.GeothermalHeatPump.Components.BoilerStandAlone ( + redeclare package Medium = Medium, energyDynamics=energyDynamics)); - parameter Modelica.Fluid.Types.Dynamics energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial - "Type of energy balance: dynamic (3 initialization options) or steady state" - annotation (Dialog(tab="Dynamics")); Sources.Boundary_pT coldConsumerFlow(redeclare package Medium = Medium, nPorts=1) annotation (Placement(transformation( extent={{-6,-6},{6,6}}, @@ -80,12 +40,18 @@ model GeothermalHeatPump "Example of a geothermal heat pump system" extent={{-6,-6},{6,6}}, rotation=180, origin={154,6}))); - Controls.HeatPump.HPControllerOnOff hPControllerOnOff(bandwidth=5) + Controls.HeatPump.TwoPointControlledHP + twoPointControlledHP( + use_secHeaGen=false, + use_heaLim=false, + T_heaLim=293.15, + movAveTime=300, + bandwidth=2) "Controls the temperature in the heat storage by switching the heat pump on or off" - annotation (Placement(transformation(extent={{-78,62},{-58,82}}))); + annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); Modelica.Blocks.Sources.Constant TStorageSet(k=273.15 + 45) "Set point of upper heat storage temperature" - annotation (Placement(transformation(extent={{-160,0},{-148,12}}))); + annotation (Placement(transformation(extent={{-120,70},{-110,80}}))); Control.geothermalFieldController geothermalFieldControllerCold( temperature_low=273.15 + 8, temperature_high=273.15 + 10) "Controls the heat exchange with the geothermal field and the heat storage" @@ -94,6 +60,8 @@ model GeothermalHeatPump "Example of a geothermal heat pump system" temperature_low=308.15, temperature_high=313.15) "Controls the heat exchange with the geothermal field and the heat storage" annotation (Placement(transformation(extent={{-100,-34},{-84,-18}}))); + Modelica.Blocks.Sources.BooleanConstant mode "Dummy signal for unit mode, true: heat pump, false: chiller" + annotation (Placement(transformation(extent={{-56,56},{-44,68}}))); equation connect(resistanceColdConsumerFlow.port_b,coldConsumerFlow. ports[1]) annotation (Line(points={{94,-20},{94,-20},{148,-20}}, color={0,127,255})); @@ -117,14 +85,6 @@ equation 0,127})); connect(peaLoaDev.port_b,heatConsumerFlow. ports[1]) annotation (Line( points={{120,-50},{120,-50},{148,-50}}, color={0,127,255})); - connect(hPControllerOnOff.heatPumpControlBus, heatPumpControlBus) annotation ( - Line( - points={{-58.05,72.05},{-44,72.05},{-44,79},{-0.5,79}}, - color={255,204,51}, - thickness=0.5), Text( - string="%second", - index=1, - extent={{6,3},{6,3}})); connect(peaLoaDev.chemicalEnergyFlowRate, chemicalEnergyFlowRate) annotation (Line(points={{112.77,-56.54},{112.77,-118},{-26,-118},{-26,-100}, {-71.5,-100},{-71.5,-119.5}}, color={0,0,127})); @@ -146,14 +106,42 @@ equation connect(geothermalFieldControllerHeat.valveOpening2, valveHeatStorage.y) annotation (Line(points={{-83.04,-30.8},{-56,-30.8},{-56,-63},{-26.4,-63}}, color={0,0,127})); - connect(valveHeatStorage.port_b, heatPump.port_a1) annotation (Line(points={{ - -18,-57},{-18,-8.00001},{-16.5,-8.00001},{-16.5,-8.00002}}, color={0, + connect(valveHeatStorage.port_b, heatPump.port_a1) annotation (Line(points={{-18,-57}, + {-18,-8.00001},{-24,-8.00001},{-24,0}}, color={0, 127,255})); - connect(TStorageSet.y, hPControllerOnOff.TSet) annotation (Line(points={{ - -147.4,6},{-130,6},{-130,76},{-78,76}}, color={0,0,127})); - connect(getTStorageUpper.y, hPControllerOnOff.TMea) - annotation (Line(points={{-139,68},{-78,68}}, color={0,0,127})); - annotation (experiment(Tolerance=1e-6, StartTime=0, Interval=500, StopTime=86400, __Dymola_Algorithm="Dassl"), __Dymola_Commands(file="modelica://AixLib/Resources/Scripts/Dymola/Fluid/Examples/GeothermalHeatPump.mos" + connect(TStorageSet.y, twoPointControlledHP.TSet) annotation (Line(points={{-109.5, + 75},{-98,75},{-98,76},{-81.6,76}}, color={0,0,127})); + connect(twoPointControlledHP.sigBusHP, heatPumpControlBus) annotation (Line( + points={{-80.7,66.9},{-84,66.9},{-84,86},{0,86},{0,79},{-0.5,79}}, + color={255,204,51}, + thickness=0.5), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(getTStorageUpper.y,twoPointControlledHP.TMea) annotation (Line( + points={{-139,68},{-138,68},{-138,62},{-81.6,62}}, color={0,0,127})); + connect(mode.y, heatPumpControlBus.hea) annotation (Line(points={{-43.4,62},{ + 0,62},{0,80},{-0.5,80},{-0.5,79}}, color={255,0,255}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(heatPump.P, heatPumpPower) annotation (Line(points={{-30,21},{-30,20}, + {-116,20},{-116,-88},{-45.5,-88},{-45.5,-119.5}}, color={0,0,127})); + connect(twoPointControlledHP.nOut, heatPumpControlBus.ySet) annotation (Line( + points={{-59,70},{0,70},{0,79},{-0.5,79}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,6},{6,6}}, + horizontalAlignment=TextAlignment.Left)); + connect(twoPointControlledHP.nOut, heatPumpControlBus.yMea) annotation (Line( + points={{-59,70},{-0.5,70},{-0.5,79}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + annotation (experiment(Tolerance=1e-6, StartTime=0, Interval=500, StopTime=86400, __Dymola_Algorithm="Dassl"), __Dymola_Commands(file="modelica://AixLib/Resources/Scripts/Dymola/Fluid/Examples/GeothermalHeatPump/GeothermalHeatPump.mos" "Simulate and plot"), Documentation(revisions="

-"), +"), __Dymola_LockedEditing="Model from IBPSA"); end SingleSplitRXM20R; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/StiebelEltron_WPL18.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/StiebelEltron_WPL18.mo new file mode 100644 index 0000000000..7937a7be68 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/StiebelEltron_WPL18.mo @@ -0,0 +1,37 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableData2D.EN14511; +record StiebelEltron_WPL18 "Stiebel Eltron WPL 18" + extends GenericAirToWater( + dpEva_nominal=0, + dpCon_nominal=0, + tabUppBou=[248.15, 338.15; 313.15, 338.15], + use_TConOutForOpeEnv=true, + use_TEvaOutForOpeEnv=false, + tabQCon_flow=[ + 0, 266.15, 275.15, 280.15, 283.15, 293.15; + 308.15, 9700, 11600, 13000, 14800, 16300; + 323.15, 10000, 11200, 12900, 16700, 17500], + tabPEle=[ + 0, 266.15, 275.15, 280.15, 283.15, 293.15; + 308.15, 3300, 3400, 3500, 3700, 3800; + 323.15, 4500, 4400, 4600, 5000, 5100], + mEva_flow_nominal=1, + mCon_flow_nominal=13000/4180/5, + use_TConOutForTab=true, + use_TEvaOutForTab=false, + devIde="StiebelEltron_WPL18"); + //These boundary-tables are not from the datasheet but default values. + + annotation(preferedView="text", DymolaStoredErrors, + Icon, + Documentation(revisions=" +", info=" +

+ According to data from WPZ Buchs, Swiss; EN14511 +

+")); +end StiebelEltron_WPL18; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/Vaillant_VWL_101.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/Vaillant_VWL_101.mo new file mode 100644 index 0000000000..25f1a82d74 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/Vaillant_VWL_101.mo @@ -0,0 +1,39 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableData2D.EN14511; +record Vaillant_VWL_101 "Vaillant VWL10-1" + extends GenericAirToWater( + dpEva_nominal=0, + dpCon_nominal=0, + tabUppBou=[248.15, 338.15; 313.15, 338.15], + use_TConOutForOpeEnv=true, + use_TEvaOutForOpeEnv=false, + tabQCon_flow=[ + 0, 258.15, 266.15, 275.15, 280.15; + 308.15, 5842, 7523, 9776, 10807; + 318.15, 5842, 7332, 9050, 10387; + 328.15, 5728, 7179, 9050, 10043], + tabPEle=[ + 0, 258.15, 266.15, 275.15, 280.15; + 308.15, 2138, 2177, 2444, 2444; + 318.15, 2558, 2673, 2864, 3055; + 328.15, 2902, 3131, 3360, 3513], + mEva_flow_nominal=1, + mCon_flow_nominal=9776/4180/5, + use_TConOutForTab=true, + use_TEvaOutForTab=false, + devIde="Vaillant_VWL_101"); + //These boundary-tables are not from the datasheet but default values. + + annotation(preferedView="text", DymolaStoredErrors, + Icon, + Documentation(revisions=" +", + info="

+ According to data from Vaillant data sheets; EN14511 +

+")); +end Vaillant_VWL_101; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/Vitocal251A08.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/Vitocal251A08.mo index 62d9e8f475..fc37166532 100644 --- a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/Vitocal251A08.mo +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/Vitocal251A08.mo @@ -48,6 +48,6 @@ Viessmann, Planungshandbuch. https://www.haustechnik-handrich.de/media/pdf/54/c4/14/vie-pa-z022164.pdf.

-"), +"), __Dymola_LockedEditing="Model from IBPSA"); end Vitocal251A08; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/WAMAK_WaterToWater_220kW.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/WAMAK_WaterToWater_220kW.mo index 82b6982e8a..caefb7d2a7 100644 --- a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/WAMAK_WaterToWater_220kW.mo +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/WAMAK_WaterToWater_220kW.mo @@ -86,6 +86,6 @@ https://products.wamak.eu/combine.php?&ampcoverpg&ampdescriptmrktadv& First implementation (see issue #1576) -"), +"), __Dymola_LockedEditing="Model from IBPSA"); end WAMAK_WaterToWater_220kW; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/package.order b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/package.order index a3063bac81..e7c2624e67 100644 --- a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/package.order +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN14511/package.order @@ -1,3 +1,10 @@ +AlphaInnotec_LW80MA +Dimplex_LA11AS +Ochsner_GMLW_19 +Ochsner_GMLW_19plus +Ochsner_GMSW_15plus SingleSplitRXM20R +StiebelEltron_WPL18 +Vaillant_VWL_101 Vitocal251A08 WAMAK_WaterToWater_220kW diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/AlphaInnotec_SW170I.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/AlphaInnotec_SW170I.mo new file mode 100644 index 0000000000..498ac7ac1d --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/AlphaInnotec_SW170I.mo @@ -0,0 +1,35 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableData2D.EN255; +record AlphaInnotec_SW170I "Alpha Innotec SW 170 I" + extends GenericAirToWater( + dpEva_nominal=0, + dpCon_nominal=0, + tabUppBou=[251.15,338.15; 318.15,338.15], + use_TConOutForOpeEnv=true, + use_TEvaOutForOpeEnv=false, + tabQCon_flow=[ + 0, 268.15, 273.15, 278.15; + 308.15, 14800, 17200, 19100; + 323.15, 14400, 16400, 18300], + tabPEle=[ + 0, 268.15, 273.15, 278.15; + 308.15, 3700, 3600, 3600; + 323.15, 5100, 5100, 5100], + mEva_flow_nominal=13600/3600/3, + mCon_flow_nominal=17200/4180/10, + use_TConOutForTab=true, + use_TEvaOutForTab=false, + devIde="AlphaInnotec_SW170I"); + + annotation(preferedView="text", DymolaStoredErrors, + Icon, + Documentation(info="

+ According to data from WPZ Buchs, Swiss; EN 255. +

+ +")); +end AlphaInnotec_SW170I; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/NibeFighter1140_15.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/NibeFighter1140_15.mo new file mode 100644 index 0000000000..ca07ca86d5 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/NibeFighter1140_15.mo @@ -0,0 +1,35 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableData2D.EN255; +record NibeFighter1140_15 "Nibe Fighter 1140-15" + extends GenericAirToWater( + dpEva_nominal=0, + dpCon_nominal=0, + tabUppBou=[238.15,338.15; 323.15,338.15], + use_TConOutForOpeEnv=true, + use_TEvaOutForOpeEnv=false, + tabQCon_flow=[ + 0, 268.15, 273.15, 275.15, 278.15, 283.15; + 308.15, 13260, 15420, 16350, 17730, 19930; + 328.15, 12560, 14490, 15330, 16590, 18900], + tabPEle=[ + 0, 268.15, 273.15, 275.15, 278.15, 283.15; + 308.15, 3360, 3380, 3380, 3390, 3400; + 328.15, 4830, 4910, 4940, 4990, 5050], + mEva_flow_nominal=(15420 - 3380)/3600/3, + mCon_flow_nominal=15420/4180/10, + use_TConOutForTab=true, + use_TEvaOutForTab=false, + devIde="NibeFighter1140_15"); + + annotation(preferedView="text", DymolaStoredErrors, + Icon, + Documentation(info="

+ According to manufacturer's data; EN 255. +

+ +")); +end NibeFighter1140_15; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/Vitocal350AWI114.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/Vitocal350AWI114.mo new file mode 100644 index 0000000000..ac1ee30143 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/Vitocal350AWI114.mo @@ -0,0 +1,39 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableData2D.EN255; +record Vitocal350AWI114 "Vitocal 350 AWI 114" + extends GenericAirToWater( + dpEva_nominal=0, + dpCon_nominal=0, + tabUppBou=[253.15,328.15; 268.15,338.15; 308.15,338.15], + use_TConOutForOpeEnv=true, + use_TEvaOutForOpeEnv=false, + tabQCon_flow=[ + 0, 253.15, 258.15, 263.15, 268.15, 273.15, 278.15, 283.15, 288.15, 293.15, 298.15, 303.15; + 308.15, 9204.5, 11136.4, 11477.3, 12215.9, 13863.6, 15056.8, 16931.8, 19090.9, 21250.0, 21477.3, 21761.4; + 323.15, 10795.5, 11988.6, 12215.9, 13068.2, 14545.5, 15681.8, 17613.6, 20284.1, 22500.0, 23181.8, 23863.6; + 338.15, 0, 12954.5, 13465.9, 14431.8, 15965.9, 17386.4, 19204.5, 21250.0, 22897.7, 23863.6, 24886.4], + tabPEle=[ + 0, 253.15, 258.15, 263.15, 268.15, 273.15, 278.15, 283.15, 288.15, 293.15, 298.15, 303.15; + 308.15, 3295.5, 3522.7, 3750.0, 3977.3, 4034.1, 4090.9, 4204.5, 4375.0, 4488.6, 4488.6, 4545.5; + 323.15, 4659.1, 4886.4, 5113.6, 5227.3, 5511.4, 5568.2, 5738.6, 5909.1, 6022.7, 6250.0, 6477.3; + 338.15, 0, 6875.0, 7159.1, 7500.0, 7727.3, 7897.7, 7954.5, 7954.5, 8181.8, 8409.1, 8579.5], + mEva_flow_nominal=1, + mCon_flow_nominal=15400/4180/10, + use_TConOutForTab=true, + use_TEvaOutForTab=false, + devIde="Vitocal350AWI114"); + + annotation(preferedView="text", DymolaStoredErrors, + Icon, + Documentation(info="

+ Data from manufacturer's data sheet (Viessmann). These exact curves + are given in the data sheet for measurement procedure according to EN + 255. +

+ +")); +end Vitocal350AWI114; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/Vitocal350BWH110.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/Vitocal350BWH110.mo new file mode 100644 index 0000000000..59dce110cf --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/Vitocal350BWH110.mo @@ -0,0 +1,41 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableData2D.EN255; +record Vitocal350BWH110 "Vitocal 350 BWH 110" + extends GenericAirToWater( + dpEva_nominal=0, + dpCon_nominal=0, + tabUppBou=[268.15,328.15; 298.15,328.15], + use_TConOutForOpeEnv=true, + use_TEvaOutForOpeEnv=false, + tabQCon_flow=[ + 0, 268.15, 273.15, 278.15, 283.15, 288.15; + 308.15, 9522, 11000, 12520, 14000, 15520; + 318.15, 11610, 12740, 13910, 15090, 16220; + 328.15, 11610, 12740, 13910, 15090, 16220; + 338.15, 11610, 12740, 13910, 15090, 16220], + tabPEle=[ + 0, 268.15, 273.15, 278.15, 283.15, 288.15; + 308.15, 2478, 2522, 2609, 2696, 2783; + 318.15, 3608, 3652, 3696, 3739, 3783; + 328.15, 4217, 4261, 4304, 4348, 4391; + 338.15, 5087, 5130, 5174, 5217, 5261], + mEva_flow_nominal=8400/3600/3, + mCon_flow_nominal=11000/4180/10, + use_TConOutForTab=true, + use_TEvaOutForTab=false, + devIde="Vitocal350BWH110"); + + annotation(preferedView="text", DymolaStoredErrors, + Icon, + Documentation(info="

+ Data from manufacturer's data sheet (Viessmann). These exact curves + are given in the data sheet for measurement procedure according to EN + 255. +

+ +")); +end Vitocal350BWH110; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/Vitocal350BWH113.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/Vitocal350BWH113.mo new file mode 100644 index 0000000000..b219cdc837 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/Vitocal350BWH113.mo @@ -0,0 +1,41 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableData2D.EN255; +record Vitocal350BWH113 "Vitocal 350 BWH 113" + extends GenericAirToWater( + dpEva_nominal=0, + dpCon_nominal=0, + tabUppBou=[268.15,328.15; 298.15,328.15], + use_TConOutForOpeEnv=true, + use_TEvaOutForOpeEnv=false, + tabQCon_flow=[ + 0, 268.15, 273.15, 278.15, 283.15, 288.15; + 308.15, 14500, 16292, 18042, 19750, 21583; + 318.15, 15708, 17167, 18583, 20083, 21583; + 328.15, 15708, 17167, 18583, 20083, 21583; + 338.15, 15708, 17167, 18583, 20083, 21583], + tabPEle=[ + 0, 268.15, 273.15, 278.15, 283.15, 288.15; + 308.15, 3750, 3750, 3750, 3750, 3833; + 318.15, 4833, 4917, 4958, 5042, 5125; + 328.15, 5583, 5667, 5750, 5833, 5958; + 338.15, 7000, 7125, 7250, 7417, 7583], + mEva_flow_nominal=12300/3600/3, + mCon_flow_nominal=16292/4180/10, + use_TConOutForTab=true, + use_TEvaOutForTab=false, + devIde="Vitocal350BWH113"); + + annotation(preferedView="text", DymolaStoredErrors, + Icon, + Documentation(info="

+ Data from manufacturer's data sheet (Viessmann). These exact curves + are given in the data sheet for measurement procedure according to EN + 255. +

+ +")); +end Vitocal350BWH113; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/package.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/package.mo new file mode 100644 index 0000000000..16defd93fd --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/package.mo @@ -0,0 +1,4 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableData2D; +package EN255 "Package for older EN255 data records" + +end EN255; diff --git a/AixLib/DataBase/HeatPump/EN255/package.order b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/package.order similarity index 100% rename from AixLib/DataBase/HeatPump/EN255/package.order rename to AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/EN255/package.order diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/Generic.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/Generic.mo index 0bef637e02..167c7832be 100644 --- a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/Generic.mo +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/Generic.mo @@ -89,6 +89,6 @@ https://www.beuth.de/de/norm/din-en-14511-1/298537524 -"),Icon, +"),Icon, __Dymola_LockedEditing="Model from IBPSA"); end Generic; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/GenericAirToWater.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/GenericAirToWater.mo index c4fd7a0d87..2b42e83bf2 100644 --- a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/GenericAirToWater.mo +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/GenericAirToWater.mo @@ -17,6 +17,6 @@ record GenericAirToWater AixLib.Fluid.HeatPumps.ModularReversible.AirToWaterTableData2D.

-"), +"), __Dymola_LockedEditing="Model from IBPSA"); end GenericAirToWater; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/GenericHeatPump.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/GenericHeatPump.mo index 508b2d2f56..4a156c38fc 100644 --- a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/GenericHeatPump.mo +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/GenericHeatPump.mo @@ -39,6 +39,6 @@ record GenericHeatPump "Partial heat pump data" -"),Icon, +"),Icon, __Dymola_LockedEditing="Model from IBPSA"); end GenericHeatPump; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/package.order b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/package.order index c031ee9a3f..0f8a195c5e 100644 --- a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/package.order +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableData2D/package.order @@ -2,3 +2,4 @@ Generic GenericAirToWater GenericHeatPump EN14511 +EN255 diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/Generic.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/Generic.mo new file mode 100644 index 0000000000..0a1d3a5f19 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/Generic.mo @@ -0,0 +1,30 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF; +record Generic + "Partial n-dimensional data of refrigerant machines" + parameter String devIde "Name of the device"; + parameter Integer nDim(min=1) "Number of table dimensions"; + parameter String filename "File name of sdf table data" + annotation (Dialog(loadSelector(filter="SDF Files (*.sdf);;All Files (*.*)", caption="Select SDF file"))); + parameter Real facGai[nDim]=fill(1, nDim) + "Additional factor for inputs, e.g. scale relative compressor speed to match values in sdf tables"; + + parameter String datasetPEle "Dataset name for electrical power" + annotation (Dialog(group="Electrical Power")); + parameter String dataUnitPEle "Data unit for electrical power" + annotation (Dialog(group="Electrical Power")); + parameter String scaleUnitsPEle[nDim] "Scale units for electrical power" + annotation (Dialog(group="Electrical Power")); + parameter Boolean use_TEvaOutForTab + "=true to use evaporator outlet temperature for table data, false for inlet"; + parameter Boolean use_TConOutForTab + "=true to use Useful outlet temperature for table data, false for inlet"; + parameter Integer outOrd[nDim]=1:nDim "Change order of inputs"; + annotation (Documentation(info=" +

+Record for n-dimensional performance data using SDF tables. +To scale the SI-based inputs from Modelica to possibly different +table inputs, use the scaleUnits parameters or +facGai. +

+")); +end Generic; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/GenericHeatPump.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/GenericHeatPump.mo new file mode 100644 index 0000000000..31ea7c9fb3 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/GenericHeatPump.mo @@ -0,0 +1,17 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF; +record GenericHeatPump "Partial n-dimensional heat pump data" + extends AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.Generic; + + parameter String datasetQCon_flow "Dataset name for useful heat flow rate" + annotation (Dialog(group="Condenser heat flow")); + parameter String dataUnitQCon_flow "Data unit for useful heat flow rate" + annotation (Dialog(group="Condenser heat flow")); + parameter String scaleUnitsQCon_flow[nDim] "Scale units for useful heat flow rate" + annotation (Dialog(group="Condenser heat flow")); + annotation (Documentation(info=" +

+ Record for n-dimensional heat pump performance data, enabling + a selection for heating only data. +

+")); +end GenericHeatPump; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/Generic.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/Generic.mo new file mode 100644 index 0000000000..cce7126eb9 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/Generic.mo @@ -0,0 +1,19 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D; +partial record Generic + "Partial record for three-dimensional data for heat pumps" + extends AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.GenericHeatPump(final nDim=3); + annotation (Documentation(info=" +

+ Data for three-dimensional performance data, assuming the following order: + (1) condenser temperature, (2) evaporator temperatur, + and (3) compressor speed. +

+

+ If your table data has a different order, e.g. + (1) evaporator temperature, + (2) condenser temperatur, and (3) compressor speed, + specify ourOrd={2, 1, 3} to map + your order to the one assumed in the model. +

+")); +end Generic; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/Generic.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/Generic.mo new file mode 100644 index 0000000000..d94515e7a0 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/Generic.mo @@ -0,0 +1,18 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy; +partial record Generic "Partial record for 3D VCLibPy data for heat pumps" + extends + AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.Generic( + final devIde="VCLib_" + flowsheet + "_" + refrigerant, + final scaleUnitsQCon_flow={"","K","K"}, + final dataUnitQCon_flow="W", + final datasetQCon_flow="/" + flowsheet + "/" + refrigerant + "/Q_con_outer", + final outOrd={3,1,2}, + final use_TConOutForTab=false, + final use_TEvaOutForTab=false, + final scaleUnitsPEle={"","K","K"}, + final dataUnitPEle="W", + final datasetPEle="/" + flowsheet + "/" + refrigerant + "/P_el", + final facGai=fill(1, nDim)); + parameter String flowsheet "Name of the flowsheet"; + parameter String refrigerant "Name of the fluid"; +end Generic; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibStandardPropane.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibStandardPropane.mo new file mode 100644 index 0000000000..a0d93511e2 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibStandardPropane.mo @@ -0,0 +1,8 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy; +record VCLibStandardPropane + "Map based on VCLib with Standard and Propane" + extends AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy.Generic( + refrigerant="Propane", + flowsheet="Standard", + filename="modelica://AixLib/Resources/Data/Fluid/HeatPumps/ModularReversible/Data/VCLibMap/Standard_Propane.sdf"); +end VCLibStandardPropane; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibStandardR134a.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibStandardR134a.mo new file mode 100644 index 0000000000..18f70723d7 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibStandardR134a.mo @@ -0,0 +1,8 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy; +record VCLibStandardR134a + "Map based on VCLib with Standard and R134a" + extends AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy.Generic( + refrigerant="R134a", + flowsheet="Standard", + filename="modelica://AixLib/Resources/Data/Fluid/HeatPumps/ModularReversible/Data/VCLibMap/Standard_R134a.sdf"); +end VCLibStandardR134a; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibStandardR152a.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibStandardR152a.mo new file mode 100644 index 0000000000..b66054b166 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibStandardR152a.mo @@ -0,0 +1,8 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy; +record VCLibStandardR152a + "Map based on VCLib with Standard and R152a" + extends AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy.Generic( + refrigerant="R152a", + flowsheet="Standard", + filename="modelica://AixLib/Resources/Data/Fluid/HeatPumps/ModularReversible/Data/VCLibMap/Standard_R152a.sdf"); +end VCLibStandardR152a; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibStandardR410A.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibStandardR410A.mo new file mode 100644 index 0000000000..ff4b044f87 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibStandardR410A.mo @@ -0,0 +1,8 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy; +record VCLibStandardR410A + "Map based on VCLib with Standard and R410A" + extends AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy.Generic( + refrigerant="R410A", + flowsheet="Standard", + filename="modelica://AixLib/Resources/Data/Fluid/HeatPumps/ModularReversible/Data/VCLibMap/Standard_R410A.sdf"); +end VCLibStandardR410A; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibVaporInjectionPhaseSeparatorPropane.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibVaporInjectionPhaseSeparatorPropane.mo new file mode 100644 index 0000000000..5807c6a6d5 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibVaporInjectionPhaseSeparatorPropane.mo @@ -0,0 +1,8 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy; +record VCLibVaporInjectionPhaseSeparatorPropane + "Map based on VCLib with VaporInjectionPhaseSeparator and Propane" + extends AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy.Generic( + refrigerant="Propane", + flowsheet="VaporInjectionPhaseSeparator", + filename="modelica://AixLib/Resources/Data/Fluid/HeatPumps/ModularReversible/Data/VCLibMap/VaporInjectionPhaseSeparator_Propane.sdf"); +end VCLibVaporInjectionPhaseSeparatorPropane; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibVaporInjectionPhaseSeparatorR134a.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibVaporInjectionPhaseSeparatorR134a.mo new file mode 100644 index 0000000000..c3ad8a9902 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibVaporInjectionPhaseSeparatorR134a.mo @@ -0,0 +1,8 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy; +record VCLibVaporInjectionPhaseSeparatorR134a + "Map based on VCLib with VaporInjectionPhaseSeparator and R134a" + extends AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy.Generic( + refrigerant="R134a", + flowsheet="VaporInjectionPhaseSeparator", + filename="modelica://AixLib/Resources/Data/Fluid/HeatPumps/ModularReversible/Data/VCLibMap/VaporInjectionPhaseSeparator_R134a.sdf"); +end VCLibVaporInjectionPhaseSeparatorR134a; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibVaporInjectionPhaseSeparatorR152a.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibVaporInjectionPhaseSeparatorR152a.mo new file mode 100644 index 0000000000..ec6195ef12 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibVaporInjectionPhaseSeparatorR152a.mo @@ -0,0 +1,8 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy; +record VCLibVaporInjectionPhaseSeparatorR152a + "Map based on VCLib with VaporInjectionPhaseSeparator and R152a" + extends AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy.Generic( + refrigerant="R152a", + flowsheet="VaporInjectionPhaseSeparator", + filename="modelica://AixLib/Resources/Data/Fluid/HeatPumps/ModularReversible/Data/VCLibMap/VaporInjectionPhaseSeparator_R152a.sdf"); +end VCLibVaporInjectionPhaseSeparatorR152a; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibVaporInjectionPhaseSeparatorR410A.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibVaporInjectionPhaseSeparatorR410A.mo new file mode 100644 index 0000000000..3e6de3c43e --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/VCLibVaporInjectionPhaseSeparatorR410A.mo @@ -0,0 +1,8 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy; +record VCLibVaporInjectionPhaseSeparatorR410A + "Map based on VCLib with VaporInjectionPhaseSeparator and R410A" + extends AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy.Generic( + refrigerant="R410A", + flowsheet="VaporInjectionPhaseSeparator", + filename="modelica://AixLib/Resources/Data/Fluid/HeatPumps/ModularReversible/Data/VCLibMap/VaporInjectionPhaseSeparator_R410A.sdf"); +end VCLibVaporInjectionPhaseSeparatorR410A; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/package.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/package.mo new file mode 100644 index 0000000000..1ef0bc86e9 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/package.mo @@ -0,0 +1,5 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D; +package VCLibPy "Package containing links to 3D-SDF tables generated by VCLibPy" + extends Modelica.Icons.MaterialPropertiesPackage; + +end VCLibPy; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/package.order b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/package.order new file mode 100644 index 0000000000..852748cbaf --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VCLibPy/package.order @@ -0,0 +1,9 @@ +Generic +VCLibStandardR410A +VCLibVaporInjectionPhaseSeparatorR410A +VCLibStandardR152a +VCLibVaporInjectionPhaseSeparatorR152a +VCLibStandardR134a +VCLibVaporInjectionPhaseSeparatorR134a +VCLibStandardPropane +VCLibVaporInjectionPhaseSeparatorPropane diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VZH088AG.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VZH088AG.mo new file mode 100644 index 0000000000..84103de798 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/VZH088AG.mo @@ -0,0 +1,24 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D; +record VZH088AG + "Data for Danfoss VZH088AG scroll compressor machine" + extends + AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.Generic( + facGai={1,1,100}, + use_TConOutForTab=true, + use_TEvaOutForTab=false, + scaleUnitsQCon_flow={"K","K",""}, + dataUnitQCon_flow="W", + datasetQCon_flow="/QCon", + scaleUnitsPEle={"K","K",""}, + dataUnitPEle="W", + datasetPEle="/Pel", + filename="modelica://AixLib/Resources/Data/Fluid/HeatPumps/ModularReversible/Data/LookUpTable3D/VZH088AG.sdf", + devIde="VZH088AG"); + + annotation (Documentation(info=" +

Data is based on sheet provided at + +https://www.dwgeire.ie/media/pdf/92/12/96/VZH_Inverter_scroll_compressor_R410A.pdf +

+")); +end VZH088AG; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/package.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/package.mo new file mode 100644 index 0000000000..060faf1ed1 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/package.mo @@ -0,0 +1,5 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF; +package TableData3D "Use table based on three dimensions" + extends Modelica.Icons.MaterialPropertiesPackage; + +end TableData3D; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/package.order b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/package.order new file mode 100644 index 0000000000..3e6b354ff9 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/TableData3D/package.order @@ -0,0 +1,3 @@ +Generic +VZH088AG +VCLibPy diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/package.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/package.mo new file mode 100644 index 0000000000..95ec0edbfa --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/package.mo @@ -0,0 +1,11 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Data; +package TableDataSDF "Package with n-dimensional data based on SDF" + extends Modelica.Icons.MaterialPropertiesPackage; + annotation (preferredView="info", + Documentation(info=" +

+ This package contains data records for heat pump + data based on SDF tables. +

+")); +end TableDataSDF; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/package.order b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/package.order new file mode 100644 index 0000000000..ab5c8e1cf7 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/TableDataSDF/package.order @@ -0,0 +1,3 @@ +Generic +GenericHeatPump +TableData3D diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Data/package.order b/AixLib/Fluid/HeatPumps/ModularReversible/Data/package.order index 45578af2cf..691cc13eb1 100644 --- a/AixLib/Fluid/HeatPumps/ModularReversible/Data/package.order +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Data/package.order @@ -1 +1,2 @@ TableData2D +TableDataSDF diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Examples/BaseClasses/OneRoomRadiatorHeatPumpControl.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Examples/BaseClasses/OneRoomRadiatorHeatPumpControl.mo index 76df51811a..94e9191e38 100644 --- a/AixLib/Fluid/HeatPumps/ModularReversible/Examples/BaseClasses/OneRoomRadiatorHeatPumpControl.mo +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Examples/BaseClasses/OneRoomRadiatorHeatPumpControl.mo @@ -1,4 +1,4 @@ -within AixLib.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses; +within AixLib.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses; model OneRoomRadiatorHeatPumpControl "Helper model for the control of the system" parameter Boolean witCoo=true diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Examples/TableData3D_OneRoomRadiator.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Examples/TableData3D_OneRoomRadiator.mo new file mode 100644 index 0000000000..a3d6f6dee2 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Examples/TableData3D_OneRoomRadiator.mo @@ -0,0 +1,106 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Examples; +model TableData3D_OneRoomRadiator + "Large scale water to water heat pump with 3D data" + extends Modelica.Icons.Example; + extends BaseClasses.PartialOneRoomRadiator( + mEva_flow_nominal=heaPum.mEva_flow_nominal, + mCon_flow_nominal=heaPum.mCon_flow_nominal, + V=6*100*3, + witCoo=true, + mAirRoo_flow_nominal=V*1.2*6/3600*10, + Q_flow_nominal=200000, + sin(nPorts=1), + booToReaPumEva(realTrue=heaPum.mEva_flow_nominal), + pumHeaPumSou(dp_nominal=150000), + pumHeaPum(dp_nominal=150000), + sou(use_T_in=true), + cooLoa(amplitude=0)); + + Modular heaPum( + redeclare package MediumCon = MediumWat, + redeclare package MediumEva = MediumWat, + use_rev=false, + allowDifferentDeviceIdentifiers=true, + dTCon_nominal=8, + use_conCap=false, + dTEva_nominal=5, + use_evaCap=false, + QHea_flow_nominal=Q_flow_nominal, + use_intSafCtr=true, + redeclare model RefrigerantCycleHeatPumpHeating = + AixLib.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.TableData3D ( + extrapMethod=SDF.Types.ExtrapolationMethod.Hold, redeclare + AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VZH088AG + datTab), + TConHea_nominal=TRadSup_nominal, + dpCon_nominal(displayUnit="kPa") = 40000, + TEvaHea_nominal=sou.T, + dpEva_nominal(displayUnit="kPa") = 40000, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + redeclare AixLib.Fluid.HeatPumps.ModularReversible.Controls.Safety.Data.Wuellhorst2021 + safCtrPar, + TConCoo_nominal=273.15, + TEvaCoo_nominal=273.15) + "Large scale water to water heat pump" + annotation (Placement(transformation(extent={{20,-160},{0,-140}}))); + Modelica.Blocks.Sources.Pulse TAirSouSte( + amplitude=20, + width=10, + period=86400, + offset=283.15, + startTime=86400/2) if witCoo "Air source temperature step for cooling phase" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-150,-200}))); +equation + connect(heaPum.port_b2, sin.ports[1]) annotation (Line(points={{20,-156},{38, + -156},{38,-200},{60,-200}}, color={0,127,255})); + connect(heaPum.port_a2, pumHeaPumSou.port_b) annotation (Line( + points={{0,-156},{-30,-156},{-30,-170}}, color={0,127,255})); + connect(heaPum.port_b1, pumHeaPum.port_a) annotation (Line( + points={{0,-144},{-70,-144},{-70,-120}}, color={0,127,255})); + connect(heaPum.port_a1, temRet.port_b) annotation (Line(points={{20,-144},{60, + -144},{60,-30}}, color={0,127,255})); + connect(oneRooRadHeaPumCtr.ySet, heaPum.ySet) annotation (Line( + points={{-139.167,-66.6667},{26,-66.6667},{26,-148.1},{21.1,-148.1}}, + color={ + 0,0,127})); + connect(TAirSouSte.y, sou.T_in) annotation (Line(points={{-139,-200},{-92,-200}, + {-92,-196},{-82,-196}}, color={0,0,127})); + annotation ( + __Dymola_Commands(file= + "modelica://AixLib/Resources/Scripts/Dymola/Fluid/HeatPumps/ModularReversible/Examples/TableData3D_OneRoomRadiator.mos" + "Simulate and plot"), + experiment( + StartTime=0, + StopTime=86400, + Tolerance=1e-08), + Documentation( + info=" +

+ This example demonstrates how to use the + + AixLib.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.TableData3D + refrigerant cycle model. Please check the associated documentation for + further information. +

+ +

+ Please check the documentation of + + AixLib.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator + for further information on the example. +

+", revisions=" + +"), + Diagram(coordinateSystem(extent={{-240,-220},{100,100}})), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}))); +end TableData3D_OneRoomRadiator; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Examples/VCLibAirToWater_OneRoomRadiator.mo b/AixLib/Fluid/HeatPumps/ModularReversible/Examples/VCLibAirToWater_OneRoomRadiator.mo new file mode 100644 index 0000000000..34962cb8fb --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Examples/VCLibAirToWater_OneRoomRadiator.mo @@ -0,0 +1,106 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.Examples; +model VCLibAirToWater_OneRoomRadiator + "Air to water heat pump with 3D data based on VCLib" + extends Modelica.Icons.Example; + extends BaseClasses.PartialOneRoomRadiator( + mEva_flow_nominal=heaPum.mEva_flow_nominal, + mCon_flow_nominal=heaPum.mCon_flow_nominal, + witCoo=false, + sin(nPorts=1, redeclare package Medium = MediumAir), + pumHeaPumSou( + dp_nominal=heaPum.dpEva_nominal, + redeclare package Medium = MediumAir), + sou(use_T_in=true, + redeclare package Medium = MediumAir), + pumHeaPum(dp_nominal=heaPum.dpCon_nominal), + booToReaPumEva(realTrue=heaPum.mEva_flow_nominal), + oneRooRadHeaPumCtr(PIDHea(k=0.08))); + + Modular heaPum( + redeclare package MediumCon = MediumWat, + redeclare package MediumEva = MediumAir, + use_rev=false, + allowDifferentDeviceIdentifiers=true, + dTCon_nominal=8, + use_conCap=false, + dTEva_nominal=3, + use_evaCap=false, + QHea_flow_nominal=Q_flow_nominal, + use_intSafCtr=true, + redeclare model RefrigerantCycleHeatPumpHeating = + AixLib.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.TableData3D ( + redeclare + AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.VCLibPy.VCLibVaporInjectionPhaseSeparatorR410A + datTab), + TConHea_nominal=TRadSup_nominal, + dpCon_nominal(displayUnit="Pa") = 2000, + TEvaHea_nominal=sou.T, + dpEva_nominal(displayUnit="Pa") = 200, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + redeclare AixLib.Fluid.HeatPumps.ModularReversible.Controls.Safety.Data.Wuellhorst2021 + safCtrPar, + TConCoo_nominal=273.15, + TEvaCoo_nominal=273.15) + "Large scale water to water heat pump" + annotation (Placement(transformation(extent={{20,-160},{0,-140}}))); + Modelica.Blocks.Sources.Pulse TAirSouSte( + amplitude=20, + width=10, + period=86400, + offset=283.15, + startTime=86400/2) "Air source temperature step for cooling phase" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-150,-200}))); +equation + connect(heaPum.port_b2, sin.ports[1]) annotation (Line(points={{20,-156},{38, + -156},{38,-200},{60,-200}}, color={0,127,255})); + connect(heaPum.port_a2, pumHeaPumSou.port_b) annotation (Line( + points={{0,-156},{-30,-156},{-30,-170}}, color={0,127,255})); + connect(heaPum.port_b1, pumHeaPum.port_a) annotation (Line( + points={{0,-144},{-70,-144},{-70,-120}}, color={0,127,255})); + connect(heaPum.port_a1, temRet.port_b) annotation (Line(points={{20,-144},{60, + -144},{60,-30}}, color={0,127,255})); + connect(oneRooRadHeaPumCtr.ySet, heaPum.ySet) annotation (Line( + points={{-139.167,-66.6667},{26,-66.6667},{26,-148.1},{21.1,-148.1}}, + color={ + 0,0,127})); + connect(TAirSouSte.y, sou.T_in) annotation (Line(points={{-139,-200},{-92,-200}, + {-92,-196},{-82,-196}}, color={0,0,127})); + annotation ( + __Dymola_Commands(file= + "modelica://AixLib/Resources/Scripts/Dymola/Fluid/HeatPumps/ModularReversible/Examples/VCLibAirToWater_OneRoomRadiator.mos" + "Simulate and plot"), + experiment( + StartTime=0, + StopTime=86400, + Tolerance=1e-08), + Documentation( + info=" +

+ This example demonstrates how to use the + + AixLib.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.TableData3D + refrigerant cycle model. Please check the associated documentation for + further information. +

+ +

+ Please check the documentation of + + AixLib.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator + for further information on the example. +

+", revisions=" + +"), + Diagram(coordinateSystem(extent={{-240,-220},{100,100}})), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}))); +end VCLibAirToWater_OneRoomRadiator; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/Examples/package.order b/AixLib/Fluid/HeatPumps/ModularReversible/Examples/package.order index bf09de91d8..4a6523ecbd 100644 --- a/AixLib/Fluid/HeatPumps/ModularReversible/Examples/package.order +++ b/AixLib/Fluid/HeatPumps/ModularReversible/Examples/package.order @@ -2,4 +2,6 @@ AirToWater2D_OneRoomRadiator CarnotWithLosses_OneRoomRadiator LargeScaleWaterToWater_OneRoomRadiator Modular_OneRoomRadiator +TableData3D_OneRoomRadiator +VCLibAirToWater_OneRoomRadiator BaseClasses diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/NoHeating.mo b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/NoHeating.mo index b858bcd72f..4d8b79e19b 100644 --- a/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/NoHeating.mo +++ b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/NoHeating.mo @@ -38,6 +38,6 @@ equation \"https://github.com/ibpsa/modelica-ibpsa/issues/1576\">#1576) -"), +"), __Dymola_LockedEditing="Model from IBPSA"); end NoHeating; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/PartialTableData3D.mo b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/PartialTableData3D.mo new file mode 100644 index 0000000000..1f5bf97aff --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/PartialTableData3D.mo @@ -0,0 +1,26 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses; +partial model PartialTableData3D + "Partial model with components for TableData3D approach for heat pumps and chillers" + extends AixLib.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.PartialTableDataSDF(final + nDim=3); + parameter Real y_nominal(final min=0, final max=1, final unit="1")=1 + "Nominal electrical power consumption" + annotation (Dialog(group="Nominal condition")); + + + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-120, + -120},{120,120}})), + Documentation(info=" +

+ Partial model for equations and componenents used in both heat pump + and chiller models using three-dimensional data. +

+", revisions=" + +"), + Icon(coordinateSystem(extent={{-120,-120},{120,120}}))); +end PartialTableData3D; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/PartialTableDataSDF.mo b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/PartialTableDataSDF.mo new file mode 100644 index 0000000000..0600a7abfd --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/PartialTableDataSDF.mo @@ -0,0 +1,196 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses; +partial model PartialTableDataSDF + "Partial model with components for table data using ND SDF tables for heat pumps and chillers" + parameter Integer nDim=1 "Number of input dimensions"; + parameter Real scaFac "Scaling factor"; + parameter SDF.Types.InterpolationMethod interpMethod=SDF.Types.InterpolationMethod.Linear + "Interpolation method" annotation(Dialog(group="Data handling")); + parameter SDF.Types.ExtrapolationMethod extrapMethod=SDF.Types.ExtrapolationMethod.Hold + "Extrapolation method" annotation(Dialog(group="Data handling")); + Modelica.Blocks.Math.Product scaFacTimPel "Scale electrical power consumption" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-40,-10}))); + Modelica.Blocks.Math.Product scaFacTimQUse_flow "Scale useful heat flow rate" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={40,-10}))); + Modelica.Blocks.Sources.Constant constScaFac(final k=scaFac) + "Calculates correction of table output based on scaling factor" + annotation (Placement( + transformation(extent={{-10,-10},{10,10}}, rotation=0, + origin={-110,90}))); + + Modelica.Blocks.Routing.RealPassThrough reaPasThrTEvaIn if (not useInRevDev and not use_TEvaOutForTab) or (useInRevDev and not use_TConOutForTab) + "Used to enable conditional bus connection" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-50,90}))); + Modelica.Blocks.Routing.RealPassThrough reaPasThrTConIn if (not useInRevDev and not use_TConOutForTab) or (useInRevDev and not use_TEvaOutForTab) + "Used to enable conditional bus connection" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={50,90}))); + Modelica.Blocks.Routing.RealPassThrough reaPasThrTEvaOut if (not useInRevDev and use_TEvaOutForTab) or (useInRevDev and use_TConOutForTab) + "Used to enable conditional bus connection" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-10,90}))); + Modelica.Blocks.Routing.RealPassThrough reaPasThrTConOut if (not useInRevDev and use_TConOutForTab) or (useInRevDev and use_TEvaOutForTab) + "Used to enable conditional bus connection" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={90,90}))); + + Modelica.Blocks.Math.Gain facGain[nDim] + "Convert relative speed n to an absolute value for interpolation in sdf tables" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-10,50}))); + SDF.NDTable nDTabQUse_flow( + final nin=nDim, + final readFromFile=true, + final interpMethod=interpMethod, + final extrapMethod=extrapMethod) "SDF-Table data for condenser heat flow" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={70,30}))); + SDF.NDTable nDTabPEle( + final nin=nDim, + final readFromFile=true, + final interpMethod=interpMethod, + final extrapMethod=extrapMethod) "SDF table data for electrical power" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={10,30}))); + + Modelica.Blocks.Routing.Multiplex mux(final n=nDim) + "Concat all inputs into an array" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=0, + origin={-70,50}))); + RearrangeInputs ordInp(final nDim=nDim) "Possibly change Input order" annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-40,50}))); + Modelica.Blocks.Math.Product onOffTimScaFac + "Create the product of the scaling factor and whether the device is even on" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-100,30}))); + Modelica.Blocks.Math.BooleanToReal booToRea(final realTrue=1, final realFalse + =0) "Convert on/off signal to real" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-80,90}))); +protected + parameter Real u_nominal[nDim] + "Nominal conditions input array"; + parameter Real uOrdSca_nominal[nDim] = {u_nominal[ordInp.outOrd[i]] for i in 1:nDim} .* facGain.k + "Nominal conditions input array ordered and scaled for sdf"; + parameter Boolean use_TEvaOutForTab=true + "=true to use evaporator outlet temperature, false for inlet"; + parameter Boolean use_TConOutForTab=true + "=true to use condenser outlet temperature, false for inlet"; + + parameter Boolean useInRevDev "=true to indicate usage in reversed operation"; + parameter SDF.Types.ExternalNDTable extTabQUse_flow=SDF.Types.ExternalNDTable( + nDTabQUse_flow.nin, SDF.Functions.readTableData( + Modelica.Utilities.Files.loadResource(nDTabQUse_flow.filename), + nDTabQUse_flow.dataset, + nDTabQUse_flow.dataUnit, + nDTabQUse_flow.scaleUnits)); + parameter SDF.Types.ExternalNDTable extTabPEle=SDF.Types.ExternalNDTable( + nDTabPEle.nin, SDF.Functions.readTableData( + Modelica.Utilities.Files.loadResource(nDTabPEle.filename), + nDTabPEle.dataset, + nDTabPEle.dataUnit, + nDTabPEle.scaleUnits)); + function evaluate + input SDF.Types.ExternalNDTable table; + input Real[:] params; + input SDF.Types.InterpolationMethod interpMethod; + input SDF.Types.ExtrapolationMethod extrapMethod; + output Real value; + external "C" value = ModelicaNDTable_evaluate(table, size(params, 1), params, interpMethod, extrapMethod) annotation ( + Include="#include ", + IncludeDirectory="modelica://SDF/Resources/C-Sources"); + end evaluate; +equation + connect(nDTabPEle.y, scaFacTimPel.u1) annotation (Line(points={{10,19},{10,10}, + {-34,10},{-34,2}}, color={0,0,127})); + connect(nDTabQUse_flow.y, scaFacTimQUse_flow.u1) annotation (Line(points={{70,19}, + {70,12},{46,12},{46,2}}, color={0,0,127})); + connect(facGain.y, nDTabQUse_flow.u) + annotation (Line(points={{1,50},{70,50},{70,42}}, color={0,0,127})); + connect(facGain.y, nDTabPEle.u) + annotation (Line(points={{1,50},{10,50},{10,42}}, color={0,0,127})); + connect(ordInp.y, facGain.u) + annotation (Line(points={{-29,50},{-22,50}}, color={0,0,127})); + connect(mux.y, ordInp.u) + annotation (Line(points={{-59,50},{-52,50}}, color={0,0,127})); + connect(onOffTimScaFac.y, scaFacTimPel.u2) annotation (Line(points={{-100,19}, + {-100,2},{-54,2},{-54,10},{-46,10},{-46,2}}, color={0,0,127})); + connect(onOffTimScaFac.y, scaFacTimQUse_flow.u2) annotation (Line(points={{ + -100,19},{-100,2},{-54,2},{-54,-28},{26,-28},{26,2},{34,2}}, color={0, + 0,127})); + connect(constScaFac.y, onOffTimScaFac.u2) annotation (Line(points={{-99,90},{ + -96,90},{-96,50},{-106,50},{-106,42}}, color={0,0,127})); + connect(booToRea.y, onOffTimScaFac.u1) annotation (Line(points={{-80,79},{-80, + 76},{-94,76},{-94,42}}, color={0,0,127})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-120, + -120},{120,120}})), + Documentation(info=" +

+ Partial model for equations and componenents used in both heat pump + and chiller models using SDF based data. +

+", revisions=" + +"), + Icon(coordinateSystem(extent={{-120,-120},{120,120}}), graphics={ + Rectangle( + extent={{-120,-122},{122,120}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,60},{60,-60}}, + lineColor={47,49,172}, + fillColor={255,255,125}, + fillPattern=FillPattern.Solid), + Line( + points={{-20,60},{-20,-60}}, + color={161,159,189}), + Line( + points={{20,60},{20,-60}}, + color={161,159,189}), + Line( + points={{1,64},{1,-56}}, + color={161,159,189}, + origin={4,-21}, + rotation=90), + Line( + points={{1,76},{1,-44}}, + color={161,159,189}, + origin={16,19}, + rotation=90), + Rectangle( + extent={{-60,60},{60,-60}}, + lineColor={47,49,172})})); +end PartialTableDataSDF; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/RearrangeInputs.mo b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/RearrangeInputs.mo new file mode 100644 index 0000000000..3c93685653 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/RearrangeInputs.mo @@ -0,0 +1,35 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses; +model RearrangeInputs + "Helper model to re-arrange the input order for SDF tables" + parameter Integer nDim(min=1)=1 + "Number of dimensions"; + parameter Integer outOrd[nDim]=1:nDim "Output order"; + + Modelica.Blocks.Interfaces.RealInput u[nDim] + "Connector of Real input signal" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + Modelica.Blocks.Interfaces.RealOutput y[nDim] + "Connector of Real output signal" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + +equation + for i in 1:nDim loop + connect(u[outOrd[i]], y[i]) + annotation (Line(points={{-120,0},{110,0}}, color={0,0,127})); + end for; + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+ Re-arranges the input vector based on the provided order. + For instsance, outOrd={2, 1, 3} switches input + two and one. +

+", revisions=" + +")); +end RearrangeInputs; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/package.order b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/package.order index 473c08dd36..2b57d3cf81 100644 --- a/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/package.order +++ b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/package.order @@ -3,3 +3,6 @@ PartialCarnot PartialHeatPumpCycle PartialRefrigerantCycle PartialTableData2D +PartialTableData3D +PartialTableDataSDF +RearrangeInputs diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/TableData3D.mo b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/TableData3D.mo new file mode 100644 index 0000000000..75c6ac8350 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/TableData3D.mo @@ -0,0 +1,151 @@ +within AixLib.Fluid.HeatPumps.ModularReversible.RefrigerantCycle; +model TableData3D + "3D data: condenser temperature, evaporator temperature, compressor speed" + extends + AixLib.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.PartialHeatPumpCycle( + final devIde=datTab.devIde, + PEle_nominal=evaluate(extTabPEle, uOrdSca_nominal, interpMethod, extrapMethod) + * scaFac); + extends + AixLib.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.PartialTableData3D( + facGain(final k=datTab.facGai), + final u_nominal={TCon_nominal,TEva_nominal,y_nominal}, + final useInRevDev=not useInHeaPum, + scaFac=QHea_flow_nominal/QHeaNoSca_flow_nominal, + final use_TConOutForTab=datTab.use_TConOutForTab, + final use_TEvaOutForTab=datTab.use_TEvaOutForTab, + nDTabPEle( + final filename=datTab.filename, + final dataset=datTab.datasetPEle, + final dataUnit=datTab.dataUnitPEle, + final scaleUnits=datTab.scaleUnitsPEle), + nDTabQUse_flow( + final filename=datTab.filename, + final dataset=datTab.datasetQCon_flow, + final dataUnit=datTab.dataUnitQCon_flow, + final scaleUnits=datTab.scaleUnitsQCon_flow), + ordInp(final outOrd=datTab.outOrd)); + parameter Modelica.Units.SI.HeatFlowRate QHeaNoSca_flow_nominal=evaluate( + extTabQUse_flow, uOrdSca_nominal, interpMethod, extrapMethod) + "Unscaled nominal heating capacity " + annotation (Dialog(group="Nominal condition")); + + replaceable parameter + AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.Generic + datTab constrainedby + AixLib.Fluid.HeatPumps.ModularReversible.Data.TableDataSDF.TableData3D.Generic + "Data Table of HP" annotation (choicesAllMatching=true); + +initial algorithm + assert(datTab.nDim == 3, "In " + getInstanceName() + ": + The provided SDF record contains more than three dimensions", AssertionLevel.error); + +equation + + connect(scaFacTimPel.y, PEle) annotation (Line(points={{-40,-21},{-40,-24},{0, + -24},{0,-130}}, color={0,0,127})); + connect(scaFacTimPel.y, redQCon.u2) annotation (Line(points={{-40,-21},{-40,-24}, + {64,-24},{64,-78}}, color={0,0,127})); + connect(reaPasThrTEvaOut.u, sigBus.TEvaOutMea) annotation (Line(points={{-10,102}, + {-10,120},{1,120}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(reaPasThrTEvaIn.u, sigBus.TEvaInMea) annotation (Line(points={{-50,102}, + {-50,120},{1,120}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(reaPasThrTConIn.u, sigBus.TConInMea) annotation (Line(points={{50,102}, + {50,120},{1,120}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(reaPasThrTConOut.u, sigBus.TConOutMea) annotation (Line(points={{90,102}, + {90,120},{1,120}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + if useInHeaPum then + connect(reaPasThrTConIn.y, mux.u[1]) + annotation (Line(points={{50,79},{50,70},{-80,70},{-80,47.6667}}, + color={0,0,127})); + connect(reaPasThrTConOut.y, mux.u[1]) + annotation (Line(points={{90,79},{90,70},{-80,70},{-80,47.6667}}, + color={0,0,127})); + connect(reaPasThrTEvaOut.y, mux.u[2]) annotation (Line(points={{-10,79},{-10, + 70},{-80,70},{-80,50}}, color={0,0,127})); + connect(reaPasThrTEvaIn.y, mux.u[2]) annotation (Line(points={{-50,79},{-50, + 70},{-80,70},{-80,50}}, + color={0,0,127})); + else + connect(reaPasThrTEvaOut.y, mux.u[1]) annotation (Line(points={{-10,79},{ + -10,70},{-80,70},{-80,47.6667}}, color={0,0,127})); + connect(reaPasThrTEvaIn.y, mux.u[1]) annotation (Line(points={{-50,79},{-50, + 70},{-80,70},{-80,47.6667}}, color={0,0,127})); + connect(reaPasThrTConOut.y, mux.u[2]) + annotation (Line(points={{90,79},{90,70},{-80,70},{-80,50}}, + color={0,0,127})); + connect(reaPasThrTConIn.y, mux.u[2]) + annotation (Line(points={{50,79},{50,70},{-80,70},{-80,50}}, + color={0,0,127})); + end if; + connect(scaFacTimPel.y, feeHeaFloEva.u1) annotation (Line(points={{-40,-21},{-40, + -24},{-86,-24},{-86,-10},{-78,-10}}, color={0,0,127})); + connect(scaFacTimQUse_flow.y, feeHeaFloEva.u2) annotation (Line(points={{40,-21}, + {40,-26},{-70,-26},{-70,-18}}, color={0,0,127})); + connect(mux.u[3], sigBus.yMea) annotation (Line(points={{-80,52.3333},{-80,50}, + {-102,50},{-102,120},{1,120}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + + connect(booToRea.u, sigBus.onOffMea) annotation (Line(points={{-80,102},{-80, + 120},{1,120}}, color={255,0,255}), Text( + string="%second", + index=1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + annotation ( Documentation(revisions=" + +", info=" +

+ This model uses three-dimensional table data possibly given + by manufacturers or estimated using other tools, such as VCLibPy, to calculate + QCon_flow and PEle. +

+

+ Note that losses are often implicitly included in measured data. + In this case, the frosting modules should be disabled. +

+ +

Scaling factor

+

+For the scaling factor, the table data for condenser heat flow rate (QConTabDat_flow) +is evaluated at nominal conditions. Hence, the scaling factor is +

+
+scaFac = QCon_flow_nominal/QConTabDat_flow(TCon_nominal, TEva_nominal, y_nominal).
+
+
+

+Using scaFac, the table data is scaled linearly. +This implies a constant COP over different design sizes: +

+

QCon_flow = scaFac * tabQCon_flow.y

+

PEle = scaFac * tabPel.y

+ + +")); +end TableData3D; diff --git a/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/package.order b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/package.order index 96ca1f6e8f..a72388cbe9 100644 --- a/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/package.order +++ b/AixLib/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/package.order @@ -1,5 +1,6 @@ ConstantCarnotEffectiveness TableData2D +TableData3D Frosting Inertias BaseClasses diff --git a/AixLib/Fluid/HeatPumps/package.order b/AixLib/Fluid/HeatPumps/package.order index 1a0ad34f84..92d8e00c38 100644 --- a/AixLib/Fluid/HeatPumps/package.order +++ b/AixLib/Fluid/HeatPumps/package.order @@ -1,6 +1,5 @@ Carnot_TCon Carnot_y -HeatPump ReciprocatingWaterToWater ScrollWaterToWater Calibration diff --git a/AixLib/Obsolete/Year2019/Fluid/HeatPumps/BaseClasses/CycleHP.mo b/AixLib/Obsolete/Year2019/Fluid/HeatPumps/BaseClasses/CycleHP.mo index 90d8683685..ff3b416cba 100644 --- a/AixLib/Obsolete/Year2019/Fluid/HeatPumps/BaseClasses/CycleHP.mo +++ b/AixLib/Obsolete/Year2019/Fluid/HeatPumps/BaseClasses/CycleHP.mo @@ -1,4 +1,4 @@ -within AixLib.Obsolete.Year2019.Fluid.HeatPumps.BaseClasses; +within AixLib.Obsolete.Year2019.Fluid.HeatPumps.BaseClasses; model CycleHP extends AixLib.Obsolete.BaseClasses.ObsoleteModel; import Modelica.Units.SI; @@ -11,7 +11,7 @@ model CycleHP "Polynomial", choice = 2 "Table (only on/off heat pump)", radioButtons = true)); parameter DataBase.HeatPump.HeatPumpBaseDataDefinition - dataTable=AixLib.DataBase.HeatPump.EN255.Vitocal350BWH113() + dataTable=AixLib.Obsolete.Year2024.DataBase.HeatPump.EN255.Vitocal350BWH113() "Look-up table data for on/off heat pump according to EN255/EN14511" annotation (choicesAllMatching=true, Dialog(enable=HPctrlType and ( capCalcType == 2), group="Capacity data")); @@ -20,15 +20,15 @@ protected final parameter Real tableP_ele[:,:]= dataTable.tableP_ele; public replaceable function data_poly = - AixLib.DataBase.HeatPump.Functions.Characteristics.ConstantQualityGrade + AixLib.Obsolete.Year2024.DataBase.HeatPump.Functions.Characteristics.ConstantQualityGrade constrainedby - AixLib.DataBase.HeatPump.Functions.Characteristics.PartialBaseFct + AixLib.Obsolete.Year2024.DataBase.HeatPump.Functions.Characteristics.PartialBaseFct "Polynomial heat pump characteristics" annotation(choicesAllMatching = true,Dialog(enable=(capCalcType==1),group="Capacity data")); replaceable function Corr_icing = - AixLib.DataBase.HeatPump.Functions.DefrostCorrection.NoModel constrainedby - AixLib.DataBase.HeatPump.Functions.DefrostCorrection.PartialBaseFct + AixLib.Obsolete.Year2024.DataBase.HeatPump.Functions.DefrostCorrection.NoModel constrainedby + AixLib.Obsolete.Year2024.DataBase.HeatPump.Functions.DefrostCorrection.PartialBaseFct "Frost/Defrost model (only air-to-water heat pumps)" annotation(choicesAllMatching = true,Dialog(enable=(capCalcType==1),group="Defrosting/Icing correction",tab="Advanced")); parameter SI.Temperature T_conMax=338.15 "Maximum condenser outlet temperature" annotation(Dialog(group="Heat Pump cycle")); @@ -426,7 +426,7 @@ end if; color={0,0,127}, smooth=Smooth.None)); annotation ( - obsolete = "Obsolete model - This heat pump model is deprecated. Please use AixLib.Fluid.HeatPumps.HeatPump instead.", + obsolete = "Obsolete model - This heat pump model is deprecated. Please use AixLib.Obsolete.Year2024.Fluid.HeatPumps.HeatPump instead.", Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-150,-100}, {150,100}})), Icon(coordinateSystem(preserveAspectRatio=true, extent={{-150,-100},{150,100}}), graphics={ diff --git a/AixLib/Obsolete/Year2019/Fluid/HeatPumps/Examples/HeatPumpDetailed.mo b/AixLib/Obsolete/Year2019/Fluid/HeatPumps/Examples/HeatPumpDetailed.mo index 96f8bf20e8..eb28f09c65 100644 --- a/AixLib/Obsolete/Year2019/Fluid/HeatPumps/Examples/HeatPumpDetailed.mo +++ b/AixLib/Obsolete/Year2019/Fluid/HeatPumps/Examples/HeatPumpDetailed.mo @@ -165,7 +165,7 @@ equation

Besides using the default simple table data, the user should also test tabulated data from AixLib.DataBase.HeatPump or + \"modelica://AixLib.Obsolete.Year2024.DataBase.HeatPump\">AixLib.Obsolete.Year2024.DataBase.HeatPump or polynomial functions.

", diff --git a/AixLib/Obsolete/Year2019/Fluid/HeatPumps/HeatPumpDetailed.mo b/AixLib/Obsolete/Year2019/Fluid/HeatPumps/HeatPumpDetailed.mo index 6843702221..3924c2f4a4 100644 --- a/AixLib/Obsolete/Year2019/Fluid/HeatPumps/HeatPumpDetailed.mo +++ b/AixLib/Obsolete/Year2019/Fluid/HeatPumps/HeatPumpDetailed.mo @@ -1,4 +1,4 @@ -within AixLib.Obsolete.Year2019.Fluid.HeatPumps; +within AixLib.Obsolete.Year2019.Fluid.HeatPumps; model HeatPumpDetailed "Heat pump model with good level of detail. Mainly fed with manufacturing data." extends AixLib.Obsolete.BaseClasses.ObsoleteModel; @@ -44,16 +44,16 @@ model HeatPumpDetailed parameter SI.Volume volume_con=0.004 "External medium volume in heat exchanger" annotation (Dialog(tab="Evaporator, Condenser", group="Condenser")); - parameter AixLib.DataBase.HeatPump.HeatPumpBaseDataDefinition - dataTable=AixLib.DataBase.HeatPump.EN255.Vitocal350BWH113() + parameter AixLib.Obsolete.Year2024.DataBase.HeatPump.HeatPumpBaseDataDefinition + dataTable=AixLib.Obsolete.Year2024.DataBase.HeatPump.EN255.Vitocal350BWH113() "Look-up table data for on/off heat pump according to EN255 or EN14511" annotation (choicesAllMatching=true, Dialog(enable=HPctrlType and ( capCalcType == 2), group="Capacity data")); replaceable function data_poly = - AixLib.DataBase.HeatPump.Functions.Characteristics.ConstantQualityGrade + AixLib.Obsolete.Year2024.DataBase.HeatPump.Functions.Characteristics.ConstantQualityGrade constrainedby - AixLib.DataBase.HeatPump.Functions.Characteristics.PartialBaseFct + AixLib.Obsolete.Year2024.DataBase.HeatPump.Functions.Characteristics.PartialBaseFct "Polynomial heat pump characteristics for inverter heat pump" annotation ( choicesAllMatching=true, Dialog(enable=(capCalcType == 1), group="Capacity data")); @@ -68,9 +68,9 @@ model HeatPumpDetailed group="Initialization", enable=initCondenserVol)); replaceable function Corr_icing = - AixLib.DataBase.HeatPump.Functions.DefrostCorrection.NoModel + AixLib.Obsolete.Year2024.DataBase.HeatPump.Functions.DefrostCorrection.NoModel constrainedby - AixLib.DataBase.HeatPump.Functions.DefrostCorrection.PartialBaseFct + AixLib.Obsolete.Year2024.DataBase.HeatPump.Functions.DefrostCorrection.PartialBaseFct "Frost/Defrost model (only air-to-water heat pumps)" annotation ( choicesAllMatching=true, Dialog( enable=(capCalcType == 1), @@ -451,7 +451,7 @@ equation connect(hydRes_eva.port_b, T_evaOut.port_a) annotation (Line(points={{-130,-30}, {-130,-33},{-130,-36}}, color={0,127,255})); annotation ( - Diagram(obsolete = "Obsolete model - use AixLib.Fluid.HeatPumps.HeatPump instead", coordinateSystem(preserveAspectRatio=false, extent={{-150,-100},{150, + Diagram(obsolete = "Obsolete model - use AixLib.Obsolete.Year2024.Fluid.HeatPumps.HeatPump instead", coordinateSystem(preserveAspectRatio=false, extent={{-150,-100},{150, 100}})), Icon(coordinateSystem(preserveAspectRatio=true, extent={{-150,-100},{150,100}}), graphics={ @@ -609,7 +609,7 @@ equation

See AixLib.Fluid.HeatPumps.Examples.HeatPumpDetailed + \"AixLib.Obsolete.Year2024.Fluid.HeatPumps.Examples.HeatPumpDetailed\">AixLib.Obsolete.Year2024.Fluid.HeatPumps.Examples.HeatPumpDetailed