diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index df4b0ed8a7380a1ccf98b769da031636dbba48af..4461f27850b71ea0336f9fa4db2dcc2a81240220 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -422,8 +422,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl var dcdc = new DCDCConverter(container, data.DCDCData.DCDCEfficiency); - AddElectricAuxiliaries(data, container, es, null, dcdc); - AddHybridBusAuxiliaries(data, container, es); + AddHighVoltageAuxiliaries(data, container, es, dcdc); + AddHybridBusAuxiliaries(data, container, es); return container; } @@ -713,11 +713,11 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl throw new VectoException("BusAux data set but no BusAux component found!"); } } - AddElectricAuxiliaries(data, container, es, cycle, dcdc); - + + AddHighVoltageAuxiliaries(data, container, es, new DCDCConverter(container, data.DCDCData.DCDCEfficiency)); - ///TODO: remove - data.ElectricAuxDemand = 0.SI<Watt>(); + ///TODO: remove + data.ElectricAuxDemand = 0.SI<Watt>(); return container; } @@ -770,9 +770,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl SetIdleControllerForHybridP1(data, gearbox, idleController, clutch); - var dcdc = new DCDCConverter(container, data.DCDCData.DCDCEfficiency); - AddElectricAuxiliaries(data, container, es, null, dcdc); - AddHybridBusAuxiliaries(data, container, es); + AddHighVoltageAuxiliaries(data, container, es, new DCDCConverter(container, data.DCDCData.DCDCEfficiency)); + AddHybridBusAuxiliaries(data, container, es); return container; } @@ -973,15 +972,15 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl return container; } - /// <summary> - /// Adds electric auxilaries and EPTO to the powertrain - /// </summary> - /// <param name="data"></param> - /// <param name="container"></param> - /// <param name="es"></param> - /// <param name="cycle">Only for EPTO controller.</param> - /// <param name="dcdc"></param> - private static void AddElectricAuxiliaries( + /// <summary> + /// Adds electric auxilaries and EPTO to the powertrain + /// </summary> + /// <param name="data"></param> + /// <param name="container"></param> + /// <param name="es"></param> + /// <param name="cycle">Only for EPTO controller.</param> + /// <param name="dcdc"></param> + private static void AddElectricAuxiliaries( VectoRunData data, VehicleContainer container, ElectricSystem es, @@ -1003,12 +1002,13 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl } elAux.AddAuxiliaries(data.Aux.Where(x => x.ConnectToREESS && x.ID != Constants.Auxiliaries.IDs.Cond)); - if (data.Aux.Any(aux => aux.ID == Constants.Auxiliaries.IDs.Cond)) { + if (data.Aux.Any(aux => aux.ID == Constants.Auxiliaries.IDs.Cond)) + { elAux.AddAuxiliary(new Conditioning(data.Aux.FirstOrDefault(aux => aux.ID == Constants.Auxiliaries.IDs.Cond), epto)); - } + } - var hvElectricAuxiliaries = ConfigureHVElectricAuxilariesData(data); + var hvElectricAuxiliaries = ConfigureHVElectricAuxilariesData(data); elAux.AddAuxiliaries(hvElectricAuxiliaries); dcdc.Connect(elAux); @@ -1016,49 +1016,65 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl es.Connect(dcdc); } - private static IEnumerable<VectoRunData.AuxData> ConfigureHVElectricAuxilariesData(VectoRunData data) - { + private static void AddHighVoltageAuxiliaries( + VectoRunData data, + VehicleContainer container, + ElectricSystem es, + DCDCConverter dcdc) + { + var elAux = new ElectricAuxiliaries(container); + + var hvElectricAuxiliaries = ConfigureHVElectricAuxilariesData(data); + elAux.AddAuxiliaries(hvElectricAuxiliaries); + + dcdc.Connect(elAux); + dcdc.Initialize(); + es.Connect(dcdc); + } + + private static IEnumerable<VectoRunData.AuxData> ConfigureHVElectricAuxilariesData(VectoRunData data) + { VectoRunData.AuxData additionalPowerData = new VectoRunData.AuxData() { ID = Constants.Auxiliaries.IDs.PowerAdditonalHighVoltage, - IsFullyElectric = true, + IsFullyElectric = true, ConnectToREESS = true, DemandType = AuxiliaryDemandType.Dynamic, - PowerDemandDataBusFunc = (d, m) => d.DrivingCycleInfo.CycleData.LeftSample.PowerAdditonalHighVoltage ?? 0.SI<Watt>() - }; + PowerDemandDataBusFunc = (d, m) => d.DrivingCycleInfo.CycleData.LeftSample.PowerAdditonalHighVoltage ?? 0.SI<Watt>() + }; - VectoRunData.AuxData auxElectricPowerData = new VectoRunData.AuxData() - { - ID = Constants.Auxiliaries.IDs.PowerAuxiliaryElectric, - IsFullyElectric = true, - ConnectToREESS = true, - DemandType = AuxiliaryDemandType.Constant, - PowerDemandElectric = data.ElectricAuxDemand ?? 0.SI<Watt>(), - }; + VectoRunData.AuxData auxElectricPowerData = new VectoRunData.AuxData() + { + ID = Constants.Auxiliaries.IDs.PowerAuxiliaryElectric, + IsFullyElectric = true, + ConnectToREESS = true, + DemandType = AuxiliaryDemandType.Constant, + PowerDemandElectric = data.ElectricAuxDemand ?? 0.SI<Watt>(), + }; - return new List<VectoRunData.AuxData> { additionalPowerData, auxElectricPowerData }; - } + return new List<VectoRunData.AuxData> { additionalPowerData, auxElectricPowerData }; + } - /// <summary> - /// Builds a battery electric powertrain for either E4, E3, or E2. - /// <code> - /// DistanceBasedDrivingCycle - /// └Driver - /// └Vehicle - /// └Wheels - /// └Brakes - /// │ └Engine E4 - /// └AxleGear - /// │ ├(AxlegearInputRetarder) - /// | └Engine E3 - /// ├(Angledrive) - /// ├(TransmissionOutputRetarder) - /// └PEVGearbox or APTNGearbox - /// ├(TransmissionInputRetarder) - /// └Engine E2 - /// </code> - /// </summary> - private static IVehicleContainer BuildFullPowertrainBatteryElectric(VectoRunData data, IModalDataContainer modData, ISumData sumWriter) + /// <summary> + /// Builds a battery electric powertrain for either E4, E3, or E2. + /// <code> + /// DistanceBasedDrivingCycle + /// └Driver + /// └Vehicle + /// └Wheels + /// └Brakes + /// │ └Engine E4 + /// └AxleGear + /// │ ├(AxlegearInputRetarder) + /// | └Engine E3 + /// ├(Angledrive) + /// ├(TransmissionOutputRetarder) + /// └PEVGearbox or APTNGearbox + /// ├(TransmissionInputRetarder) + /// └Engine E2 + /// </code> + /// </summary> + private static IVehicleContainer BuildFullPowertrainBatteryElectric(VectoRunData data, IModalDataContainer modData, ISumData sumWriter) { if (data.Cycle.CycleType != CycleType.DistanceBased) { throw new VectoException("CycleType must be DistanceBased"); @@ -1864,10 +1880,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl }; _timerunGearHybridBuilders[position].Invoke(data, container, components); - - var dcdc = new DCDCConverter(container, data.DCDCData.DCDCEfficiency); - - AddElectricAuxiliaries(data, container, es, null, dcdc); + + AddHighVoltageAuxiliaries(data, container, es, new DCDCConverter(container, data.DCDCData.DCDCEfficiency)); AddHybridBusAuxiliaries(data, container, es); } @@ -1999,8 +2013,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl .AddComponent(gearbox) .AddComponent(em); var dcdc = new DCDCConverter(container, data.DCDCData.DCDCEfficiency); - - AddElectricAuxiliaries(data, container, es, null, dcdc); + AddElectricAuxiliaries(data, container, es, null, dcdc); } /// <summary> @@ -2070,10 +2083,10 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl { var es = ConnectREESS(data, container); var dcdc = new DCDCConverter(container, data.DCDCData.DCDCEfficiency); - AddElectricAuxiliaries(data, container, es, null, dcdc); + AddHighVoltageAuxiliaries(data, container, es, dcdc); - //IMPORTANT HINT: add engine BEFORE gearbox to container that gearbox can obtain if an ICE is available - var engine = new StopStartCombustionEngine(container, data.EngineData); + //IMPORTANT HINT: add engine BEFORE gearbox to container that gearbox can obtain if an ICE is available + var engine = new StopStartCombustionEngine(container, data.EngineData); var gearbox = GetSimpleGearbox(container, data); if (!(gearbox is IHybridControlledGearbox gbx)) { throw new VectoException("Gearbox can not be used for parallel hybrid"); diff --git a/VectoCore/VectoCoreTest/Integration/Auxiliaries.cs b/VectoCore/VectoCoreTest/Integration/Auxiliaries.cs index 5184cfa73e0b859173377d02894648df8ad88380..f054ce869ffee3288f13c166d2f84832df71ee00 100644 --- a/VectoCore/VectoCoreTest/Integration/Auxiliaries.cs +++ b/VectoCore/VectoCoreTest/Integration/Auxiliaries.cs @@ -111,13 +111,13 @@ namespace TUGraz.VectoCore.Tests.Integration [Category("Integration")] [ - TestCase(HYBRID_P2_Group_5, TestName = "GenericVehicle Group5 P2 Padd_hv"), - TestCase(HYBRID_SerialHybrid_S2, TestName = "GenericVehicle S2 Job Padd_hv"), - TestCase(HYBRID_SerialHybrid_S4, TestName = "GenericVehicle S4 Job Padd_hv"), - TestCase(HYBRID_IEPC_S_GBX3, TestName = "IEPC-S 3 Speed Gearbox Padd_hv"), - TestCase(HYBRID_IHPC_G5_12SPEED, TestName = "IHPC Group 5 12 Speed Gearbox Padd_hv"), + TestCase(HYBRID_P2_Group_5, TestName = "GenericVehicle Group5 P2 Padd_hv"), + TestCase(HYBRID_SerialHybrid_S2, TestName = "GenericVehicle S2 Job Padd_hv"), + TestCase(HYBRID_SerialHybrid_S4, TestName = "GenericVehicle S4 Job Padd_hv"), + TestCase(HYBRID_IEPC_S_GBX3, TestName = "IEPC-S 3 Speed Gearbox Padd_hv"), + TestCase(HYBRID_IHPC_G5_12SPEED, TestName = "IHPC Group 5 12 Speed Gearbox Padd_hv"), ] - public void HighVoltageAuxiliaries_IncreaseConsumption_ForHybrid(String jobFile) + public void HighVoltageAuxiliaries_IncreaseConsumption_ForHybrid(string jobFile) { // Arrange. var fileWriter = new FileOutputWriter(jobFile); @@ -154,9 +154,9 @@ namespace TUGraz.VectoCore.Tests.Integration string pWheelCycle = "PWheel"; AssertHVElectricAxuliariesForHybrids(summaryData, pWheelCycle); - } + } - private void AssertHVElectricAxuliaries(Dictionary<object, DataRow> summaryData, string drivingCycle) + private void AssertHVElectricAxuliaries(Dictionary<object, DataRow> summaryData, string drivingCycle) { string extendedSuffix = "Extended"; string cycle = $"{drivingCycle}.vdri"; @@ -167,7 +167,7 @@ namespace TUGraz.VectoCore.Tests.Integration return; } - TestContext.WriteLine($"Testing cycle: {cycle}"); + TestContext.WriteLine($"Tested cycle: {cycle}"); var absoluteTime = (ConvertedSI)summaryData[extendedCycle][SumDataFields.TIME]; @@ -192,7 +192,7 @@ namespace TUGraz.VectoCore.Tests.Integration return; } - TestContext.WriteLine($"Testing cycle: {cycle}"); + TestContext.WriteLine($"Tested cycle: {cycle}"); var absoluteTime = (ConvertedSI)summaryData[extendedCycle][SumDataFields.TIME]; diff --git a/VectoCore/VectoCoreTest/TestData/Integration/Auxiliaries/GenericIHPC/12SpeedGbx/GenericMap_140kW_936Nm.vemo b/VectoCore/VectoCoreTest/TestData/Integration/Auxiliaries/GenericIHPC/12SpeedGbx/GenericMap_140kW_936Nm.vemo index 029526d8db403203cd7e51d32ffd6479b754cf4f..b520ba77b65f9fe1948b130d494b5f925ad8ee0d 100644 --- a/VectoCore/VectoCoreTest/TestData/Integration/Auxiliaries/GenericIHPC/12SpeedGbx/GenericMap_140kW_936Nm.vemo +++ b/VectoCore/VectoCoreTest/TestData/Integration/Auxiliaries/GenericIHPC/12SpeedGbx/GenericMap_140kW_936Nm.vemo @@ -44,7 +44,6 @@ n [rpm] , T [Nm] , P_el [kW] 0.00,855.00,6.413 0.00,900.00,6.894 0.00,0.00,6.413 -0.00,0.00,5.946 29.70,-990.00,0.000 29.70,-945.00,0.000 29.70,-900.00,0.000 diff --git a/VectoCore/VectoCoreTest/TestData/Integration/Auxiliaries/GenericVehicle_Group5_P2/GenericMap_140kW_936Nm.vemo b/VectoCore/VectoCoreTest/TestData/Integration/Auxiliaries/GenericVehicle_Group5_P2/GenericMap_140kW_936Nm.vemo index ddf2e473ded06d9aa797ec842ca3d2885a88e17d..5e3d00ec31f7ede02c1d30269bdcaeaaccd787a7 100644 --- a/VectoCore/VectoCoreTest/TestData/Integration/Auxiliaries/GenericVehicle_Group5_P2/GenericMap_140kW_936Nm.vemo +++ b/VectoCore/VectoCoreTest/TestData/Integration/Auxiliaries/GenericVehicle_Group5_P2/GenericMap_140kW_936Nm.vemo @@ -44,7 +44,6 @@ n [rpm] , T [Nm] , P_el [kW] 0.00,855.00,6.392 0.00,900.00,6.871 0.00,0.00,6.392 -0.00,0.00,5.926 29.60,-990.00,0.000 29.60,-945.00,0.000 29.60,-900.00,0.000