|
4 | 4 | AnyLogic Project File |
5 | 5 | ************************************************* |
6 | 6 | --> |
7 | | -<AnyLogicWorkspace WorkspaceVersion="1.9" AnyLogicVersion="8.7.12.202205250339" AlpVersion="8.7.5"> |
| 7 | +<AnyLogicWorkspace WorkspaceVersion="1.9" AnyLogicVersion="8.7.12.202205250418" AlpVersion="8.7.5"> |
8 | 8 | <Model> |
9 | 9 | <Id>1648027099882</Id> |
10 | 10 | <Name><![CDATA[HeatingSystems]]></Name> |
@@ -2485,7 +2485,7 @@ v_DistrictHeatingAbsorbed_kWh += v_DistrictHeatingAbsorption_kW * timeStep_HR;]] |
2485 | 2485 | <UnitType><![CDATA[NONE]]></UnitType> |
2486 | 2486 | <SdArray>false</SdArray> |
2487 | 2487 | <DefaultValue Class="CodeValue"> |
2488 | | - <Code><![CDATA[0.01]]></Code> |
| 2488 | + <Code><![CDATA[0.02]]></Code> |
2489 | 2489 | </DefaultValue> |
2490 | 2490 | <ParameterEditor> |
2491 | 2491 | <Id>1650616556419</Id> |
@@ -2608,7 +2608,7 @@ v_DistrictHeatingAbsorbed_kWh += v_DistrictHeatingAbsorption_kW * timeStep_HR;]] |
2608 | 2608 | <UnitType><![CDATA[NONE]]></UnitType> |
2609 | 2609 | <SdArray>false</SdArray> |
2610 | 2610 | <DefaultValue Class="CodeValue"> |
2611 | | - <Code><![CDATA[60]]></Code> |
| 2611 | + <Code><![CDATA[62]]></Code> |
2612 | 2612 | </DefaultValue> |
2613 | 2613 | <ParameterEditor> |
2614 | 2614 | <Id>1650616556437</Id> |
@@ -2834,20 +2834,20 @@ if (v_bufferTemp_degC < p_minTempBuffer_degC) { // If PTES temperature drops bel |
2834 | 2834 | t_incentiveMode.setText("power mode"); |
2835 | 2835 | double availablePower_kW = max(0,v_trafoMaxPower-trafoVermogen_kW); |
2836 | 2836 | double heatPumpPowerSetpoint = COP*min(availablePower_kW,p_primarySystemMaxPower_kW); |
2837 | | - double boilerSetpoint_kW = max(0,-trafoVermogen_kW - p_primarySystemMaxPower_kW); // Only when more than p_primarySystemMaxPower_kW power is available) |
| 2837 | + double boilerSetpoint_kW = min(p_backupSystemMaxPower_kW,max(0,-trafoVermogen_kW - p_primarySystemMaxPower_kW)); // Only when more than p_primarySystemMaxPower_kW power is available) |
2838 | 2838 | f_CalculateHeatProduction(heatPumpPowerSetpoint, p_secondarySystemMaxPower_kW, boilerSetpoint_kW, baseTemp_degC, v_bufferTemp_degC, dt_h); |
2839 | 2839 | } else if (v_bufferTemp_degC < p_bufferTempHeatingTreshold_degC && v_bufferTemp_degC >= p_minTempBuffer_degC) { // If PTES temperature drops below heating treshold, gradually start heating with HP |
2840 | 2840 | //traceln("normal heating"); |
2841 | 2841 | t_incentiveMode.setColor(black); |
2842 | 2842 | t_incentiveMode.setText("normal"); |
2843 | 2843 | double availablePower_kW = max(0,v_trafoMaxPower-trafoVermogen_kW); |
2844 | 2844 | double heatPumpPowerSetpoint = COP*min(availablePower_kW,min(p_primarySystemMaxPower_kW,max((p_bufferTempHeatingTreshold_degC - v_bufferTemp_degC) / (p_bufferTempHeatingTreshold_degC - p_minTempBuffer_degC) * p_primarySystemMaxPower_kW, -trafoVermogen_kW))); |
2845 | | - double boilerSetpoint = max(0,-trafoVermogen_kW - heatPumpPowerSetpoint/COP); |
| 2845 | + double boilerSetpoint = min(p_backupSystemMaxPower_kW,max(0,-trafoVermogen_kW - heatPumpPowerSetpoint/COP)); |
2846 | 2846 | f_CalculateHeatProduction(heatPumpPowerSetpoint,0,boilerSetpoint, baseTemp_degC, v_bufferTemp_degC, dt_h); |
2847 | 2847 | } else if ( trafoVermogen_kW < 0 & heatingSystem.p_MyPrimaryHeatingSystem instanceof J_Heatpump & v_bufferTemp_degC < p_maxTempBuffer_degC) { // Overvloed aan stroom in de wijk, zet het in om de PTES op te warmen |
2848 | 2848 | //traceln("opportunity heating"); |
2849 | 2849 | double heatPumpPowerSetpoint = COP*min(p_primarySystemMaxPower_kW, -trafoVermogen_kW); |
2850 | | - double boilerSetpoint = max(0,-trafoVermogen_kW - heatPumpPowerSetpoint/COP); |
| 2850 | + double boilerSetpoint = min(p_backupSystemMaxPower_kW,max(0,-trafoVermogen_kW - heatPumpPowerSetpoint/COP)); |
2851 | 2851 | f_CalculateHeatProduction(heatPumpPowerSetpoint,0,boilerSetpoint, baseTemp_degC, v_bufferTemp_degC, dt_h); |
2852 | 2852 | // f_CalculateHeatProduction(min(-trafoVermogen_kW,p_primarySystemMaxPower_kW) * COP, p_soilTemp_degC, v_bufferTemp_degC, dt_h); |
2853 | 2853 | t_incentiveMode.setColor(green); |
@@ -4604,8 +4604,14 @@ public class J_Heatpump extends J_HeatingSystem implements Serializable { |
4604 | 4604 | currentPower_kW = 0; |
4605 | 4605 | hotWaterDelivery_kW = 0; |
4606 | 4606 | } |
4607 | | - heatDelivery_kW = min( heatRequest_kW, (maxPower_kW - currentPower_kW ) * COPheating) ; // Hot water gets priority |
4608 | | - currentPower_kW += heatDelivery_kW / COPheating; |
| 4607 | + if ( COPheating > 0 ) { |
| 4608 | + heatDelivery_kW = min( heatRequest_kW, (maxPower_kW - currentPower_kW ) * COPheating) ; // Hot water gets priority |
| 4609 | + currentPower_kW += heatDelivery_kW / COPheating; |
| 4610 | + } else { // Prevent negative heatDelivery and Power when base temp is above destination temp |
| 4611 | + heatDelivery_kW = 0; |
| 4612 | + currentPower_kW = 0; |
| 4613 | + } |
| 4614 | + |
4609 | 4615 | if( currentPower_kW < - 0.5 ) { |
4610 | 4616 | traceln("household met currentpower from heatpump: " + currentPower_kW); |
4611 | 4617 | } |
@@ -4726,7 +4732,7 @@ public class J_DHNetworkMT extends J_DistrictHeatingNetwork implements Serializa |
4726 | 4732 | this.networkDiameter_m = Diameter_m; |
4727 | 4733 | this.tempLevel = "MT"; |
4728 | 4734 | this.CAPEX_EURpm = 1000; |
4729 | | - this.networkHeatloss_Wpm2K = 0.4; |
| 4735 | + this.networkHeatloss_Wpm2K = 0.5; |
4730 | 4736 | this.minOperatingTemp_degC = 50; |
4731 | 4737 | this.maxOperatingTemp_degC = 65; |
4732 | 4738 | this.deprecationPeriod_yr = 30; |
@@ -4853,7 +4859,7 @@ public class J_DHNetworkLT extends J_DistrictHeatingNetwork implements Serializa |
4853 | 4859 | this.networkDiameter_m = networkDiameter_m; |
4854 | 4860 | this.tempLevel = "LT"; |
4855 | 4861 | this.CAPEX_EURpm = 800; |
4856 | | - this.networkHeatloss_Wpm2K = 0.5; |
| 4862 | + this.networkHeatloss_Wpm2K = 0.6; |
4857 | 4863 | this.minOperatingTemp_degC = 10; |
4858 | 4864 | this.maxOperatingTemp_degC = 40; |
4859 | 4865 | this.deprecationPeriod_yr = 30; |
|
0 commit comments