diff --git a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs index 079a1b2850ca62314d9009e5262a46c0ef753378..400ea653426bf78caa43489d13881d19d7f9efdc 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs @@ -397,6 +397,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Data P_electricMotor_mech_P2, [ModalResultField(typeof(SI), caption: "P_em-P3_mech [kW]", outputFactor: 1e-3)] P_electricMotor_mech_P3, + [ModalResultField(typeof(SI), caption: "P_em-P4_mech [kW]", outputFactor: 1e-3)] + P_electricMotor_mech_P4, // --> [ModalResultField(typeof(SI), caption: "P_bat_T [kW]", outputFactor: 1e-3)] P_battery_terminal, diff --git a/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs b/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs index efeab63c8da55ae43937ebaaa9c3a3b037f162ee..6415b741a8328265a3184177b335a2ff486b4ac0 100644 --- a/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs @@ -62,9 +62,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid GraphWriter.Yfields = new[] { ModalResultField.v_act, ModalResultField.altitude, ModalResultField.acc, ModalResultField.Gear, - ModalResultField.P_ice_out, ModalResultField.P_electricMotor_mech_P3 , ModalResultField.BatterySOC, ModalResultField.FCMap + ModalResultField.P_ice_out, ModalResultField.BatterySOC, ModalResultField.FCMap }; - GraphWriter.Series1Label = "Hybrid P2"; + GraphWriter.Series1Label = "Hybrid"; GraphWriter.PlotIgnitionState = true; } @@ -76,6 +76,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid ] public void P2HybridDriveOff(double vmax, double initialSoC, double slope) { + GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P2 }).ToArray(); var cycleData = string.Format( @" 0, 0, {1}, 3 700, {0}, {1}, 0", vmax, slope); @@ -122,6 +123,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid ] public void P2HybridConstantSpeed(double vmax, double initialSoC, double slope, double pAuxEl) { + GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P2 }).ToArray(); + var cycleData = string.Format( @" 0, {0}, {1}, 0 7000, {0}, {1}, 0", vmax, slope); @@ -163,6 +166,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid ] public void P2HybriDriveCycle(string declarationMission, double payload, double initialSoC, double pAuxEl) { + GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P2 }).ToArray(); + var cycleData = RessourceHelper.ReadStream( DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." + declarationMission + @@ -229,6 +234,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid ] public void P2HybridBrakeStandstill(double vmax, double initialSoC, double slope) { + GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P2 }).ToArray(); + //var dst = var cycleData = string.Format( @" 0, {0}, {1}, 0 @@ -256,6 +263,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid GraphWriter.Write(modFilename); } + // - - - - - - - - - - - - - - - - - - - - - - - - - + + [ TestCase(30, 0.7, 0, 0, TestName = "P3 Hybrid ConstantSpeed 30km/h SoC: 0.7, level"), TestCase(50, 0.7, 0, 0, TestName = "P3 Hybrid ConstantSpeed 50km/h SoC: 0.7, level"), @@ -278,6 +288,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid ] public void P3HybridConstantSpeed(double vmax, double initialSoC, double slope, double pAuxEl) { + GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P3 }).ToArray(); + var cycleData = string.Format( @" 0, {0}, {1}, 0 7000, {0}, {1}, 0", vmax, slope); @@ -314,6 +326,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid ] public void P3HybridDriveOff(double vmax, double initialSoC, double slope) { + GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P3 }).ToArray(); + var cycleData = string.Format( @" 0, 0, {1}, 3 700, {0}, {1}, 0", vmax, slope); @@ -344,6 +358,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid ] public void P3HybridBrakeStandstill(double vmax, double initialSoC, double slope) { + GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P3 }).ToArray(); + //var dst = var cycleData = string.Format( @" 0, {0}, {1}, 0 @@ -371,6 +387,129 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid GraphWriter.Write(modFilename); } + // - - - - - - - - - - - - - - - - - - - - - - - - - + + [ + TestCase(30, 0.7, 0, 0, TestName = "P4 Hybrid ConstantSpeed 30km/h SoC: 0.7, level"), + TestCase(50, 0.7, 0, 0, TestName = "P4 Hybrid ConstantSpeed 50km/h SoC: 0.7, level"), + TestCase(80, 0.7, 0, 0, TestName = "P4 Hybrid ConstantSpeed 80km/h SoC: 0.7, level"), + + TestCase(30, 0.25, 0, 0, TestName = "P4 Hybrid ConstantSpeed 30km/h SoC: 0.25, level"), + TestCase(50, 0.25, 0, 0, TestName = "P4 Hybrid ConstantSpeed 50km/h SoC: 0.25, level"), + TestCase(80, 0.25, 0, 0, TestName = "P4 Hybrid ConstantSpeed 80km/h SoC: 0.25, level"), + + TestCase(30, 0.5, 5, 0, TestName = "P4 Hybrid ConstantSpeed 30km/h SoC: 0.5, UH 5%"), + TestCase(50, 0.5, 5, 0, TestName = "P4 Hybrid ConstantSpeed 50km/h SoC: 0.5, UH 5%"), + TestCase(80, 0.5, 5, 0, TestName = "P4 Hybrid ConstantSpeed 80km/h SoC: 0.5, UH 5%"), + + TestCase(30, 0.5, -5, 0, TestName = "P4 Hybrid ConstantSpeed 30km/h SoC: 0.5, DH 5%"), + TestCase(50, 0.5, -5, 0, TestName = "P4 Hybrid ConstantSpeed 50km/h SoC: 0.5, DH 5%"), + TestCase(80, 0.5, -5, 0, TestName = "P4 Hybrid ConstantSpeed 80km/h SoC: 0.5, DH 5%"), + + TestCase(30, 0.25, 0, 1000, TestName = "P4 Hybrid ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 1kW"), + TestCase(30, 0.25, 0, 5000, TestName = "P4 Hybrid ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 5kW"), + ] + public void P4HybridConstantSpeed(double vmax, double initialSoC, double slope, double pAuxEl) + { + GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P4 }).ToArray(); + + var cycleData = string.Format( + @" 0, {0}, {1}, 0 + 7000, {0}, {1}, 0", vmax, slope); + var cycle = SimpleDrivingCycles.CreateCycleData(cycleData); + + const bool largeMotor = true; + + var modFilename = string.Format("SimpleParallelHybrid-P4_constant_{0}-{1}_{2}_{3}.vmod", vmax, initialSoC, slope, pAuxEl); + const PowertrainPosition pos = PowertrainPosition.HybridP4; + var run = CreateEngineeringRun( + cycle, modFilename, initialSoC, pos, largeMotor: true, pAuxEl: pAuxEl); + + var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController; + Assert.NotNull(hybridController); + + var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data; + + var data = run.GetContainer().RunData; + //File.WriteAllText( + // $"{modFilename}.json", + // JsonConvert.SerializeObject(data, Formatting.Indented)); + + run.Run(); + Assert.IsTrue(run.FinishedWithoutErrors); + + Assert.IsTrue(modData.Rows.Count > 0); + GraphWriter.Write(modFilename); + } + + [ + TestCase(30, 0.7, 0, TestName = "P4 Hybrid DriveOff 30km/h SoC: 0.7, level"), + TestCase(80, 0.7, 0, TestName = "P4 Hybrid DriveOff 80km/h SoC: 0.7, level"), + TestCase(30, 0.22, 0, TestName = "P4 Hybrid DriveOff 30km/h SoC: 0.22, level") + ] + public void P4HybridDriveOff(double vmax, double initialSoC, double slope) + { + GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P4 }).ToArray(); + + var cycleData = string.Format( + @" 0, 0, {1}, 3 + 700, {0}, {1}, 0", vmax, slope); + var cycle = SimpleDrivingCycles.CreateCycleData(cycleData); + + const bool largeMotor = true; + + var modFilename = string.Format("SimpleParallelHybrid-P4_acc_{0}-{1}_{2}.vmod", vmax, initialSoC, slope); + const PowertrainPosition pos = PowertrainPosition.HybridP4; + var run = CreateEngineeringRun( + cycle, modFilename, initialSoC, pos, largeMotor: true); + + var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController; + Assert.NotNull(hybridController); + + var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data; + + run.Run(); + Assert.IsTrue(run.FinishedWithoutErrors); + + Assert.IsTrue(modData.Rows.Count > 0); + GraphWriter.Write(modFilename); + } + + [TestCase(50, 0.79, 0, TestName = "P4 Hybrid Brake Standstill 50km/h SoC: 0.79, level"), + TestCase(50, 0.25, 0, TestName = "P4 Hybrid Brake Standstill 50km/h SoC: 0.25, level"), + TestCase(50, 0.65, 0, TestName = "P4 Hybrid Brake Standstill 50km/h SoC: 0.65, level") + ] + public void P4HybridBrakeStandstill(double vmax, double initialSoC, double slope) + { + GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P4 }).ToArray(); + + //var dst = + var cycleData = string.Format( + @" 0, {0}, {1}, 0 + 200, 0, {1}, 3", vmax, slope); + var cycle = SimpleDrivingCycles.CreateCycleData(cycleData); + + const bool largeMotor = true; + + var modFilename = string.Format("SimpleParallelHybrid-P4_stop_{0}-{1}_{2}.vmod", vmax, initialSoC, slope); + const PowertrainPosition pos = PowertrainPosition.HybridP4; + var run = CreateEngineeringRun( + cycle, modFilename, initialSoC, pos, largeMotor: true); + + var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController; + Assert.NotNull(hybridController); + //var strategy = (DelegateParallelHybridStrategy)hybridController.Strategy; + //Assert.NotNull(strategy); + + var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data; + + run.Run(); + Assert.IsTrue(run.FinishedWithoutErrors); + + Assert.IsTrue(modData.Rows.Count > 0); + GraphWriter.Write(modFilename); + } + // ================================================= public static VectoRun CreateEngineeringRun(DrivingCycleData cycleData, string modFileName, double initialSoc, PowertrainPosition pos, bool largeMotor = false,