diff --git a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs index 6b34b38543cb10ade68cf561347b4a7c83aa4159..9f65fed73e28ad85281d0e8e48641b4df8abc470 100644 --- a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs +++ b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs @@ -80,7 +80,7 @@ namespace TUGraz.VectoCore.Tests.Reports { var rundata = new VectoRunData() { JobName = "sumDataTest" - }; + }; var modData = new ModalDataContainer(rundata, null, null); var initalSpeed = initialSpeedVal.KMPHtoMeterPerSecond(); var speed = initalSpeed; @@ -154,6 +154,44 @@ namespace TUGraz.VectoCore.Tests.Reports RunSimulation(jobName, ExecutionMode.Engineering); } + [Category("LongRunning")] + [TestCase] + public void Test_P1_PCC_ESSOn_EssOff() + { + var jobName = @"TestData\Integration\EngineeringMode\P1_Group5_AMT\P1_Group5_s2c0_rep_Payload.vecto"; + var fileWriter = new FileOutputWriter(jobName); + var sumData = new SummaryDataContainer(fileWriter); + var jobContainer = new JobContainer(sumData); + var inputData = JSONInputDataFactory.ReadJsonJob(jobName); + var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter) { WriteModalResults = false, Validate = false }; + jobContainer.AddRuns(runsFactory); + + var run = runsFactory.SimulationRuns().First(); + var modESSon = (run.GetContainer().ModalData as ModalDataContainer).Data; + run.Run(); + Assert.IsTrue(run.FinishedWithoutErrors); + + jobName = @"TestData\Integration\EngineeringMode\P1_Group5_AMT\P1_Group5_s2c0_rep_Payload_ESSoff.vecto"; + fileWriter = new FileOutputWriter(jobName); + inputData = JSONInputDataFactory.ReadJsonJob(jobName); + runsFactory = new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter) { WriteModalResults = false, Validate = false }; + jobContainer.AddRuns(runsFactory); + + run = runsFactory.SimulationRuns().First(); + var modESSoff = (run.GetContainer().ModalData as ModalDataContainer).Data; + run.Run(); + Assert.IsTrue(run.FinishedWithoutErrors); + + // ICEOn is sometimes 0, therefore the sum must be lower than the row count + Assert.That(modESSon.Sum(r => (bool)r[ModalResultField.ICEOn.GetName()] ? 1 : 0) < modESSon.Rows.Count); + + // ICEOn must always be 1, therefore the sum should equal the row count + Assert.That(modESSoff.Sum(r => (bool)r[ModalResultField.ICEOn.GetName()] ? 1 : 0) == modESSoff.Rows.Count); + } + + + + [TestCase(@"TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Class2_RigidTruck_DECL.vecto")] public void TestVSUM_VMOD_FormatDecl(string jobName) @@ -172,7 +210,7 @@ namespace TUGraz.VectoCore.Tests.Reports TestCase(@"TestData\Integration\EngineeringMode\Class9_RigidTruck_6x2_PTO\Class9_RigidTruck_ENG_PTO.vecto"),] public void TestFullCycleModDataIntegrityMT(string jobName) { - RunSimulation(jobName, ExecutionMode.Engineering); + RunSimulation(jobName, ExecutionMode.Engineering); } [TestCase(@"TestData\XML\XMLReaderDeclaration\Tractor_4x2_vehicle-class-5_5_t_0.xml", 1, 1.0), @@ -225,7 +263,7 @@ namespace TUGraz.VectoCore.Tests.Reports Assert.IsTrue(min2.IsEqual(expectedTractionInterruption, 0.1), "minimum traction interruption time: {0}", min); Assert.IsTrue(max2.IsEqual(expectedTractionInterruption, 0.1), "maximum traction interruption time: {0}", max2); - + } private Dictionary<Second, Second> ExtractTractionInterruptionTimes(ModalResults modData) @@ -248,7 +286,7 @@ namespace TUGraz.VectoCore.Tests.Reports } if (gear != 0 && tracStart != null) { var tracEnd = absTime - dt / 2.0; - retVal[absTime] =(tracEnd - tracStart); + retVal[absTime] = (tracEnd - tracStart); tracStart = null; } } @@ -286,7 +324,7 @@ namespace TUGraz.VectoCore.Tests.Reports Assert.AreEqual(2, numParts.Length, $"Line {lineCnt}: column {i}: value {parts[i]}"); Assert.IsTrue(numParts[0].Length > 0); Assert.AreEqual(4, numParts[1].Length); - } + } } } @@ -357,11 +395,11 @@ namespace TUGraz.VectoCore.Tests.Reports var engInput = inputData as IEngineeringInputDataProvider; FuelConsumptionMap fcMap = null; if (engInput != null) { - fcMap = FuelConsumptionMapReader.Create(engInput.JobInputData.Vehicle - .Components.EngineInputData.EngineModes.First().Fuels.First().FuelConsumptionMap); + fcMap = FuelConsumptionMapReader.Create(engInput.JobInputData.Vehicle + .Components.EngineInputData.EngineModes.First().Fuels.First().FuelConsumptionMap); } var vtpInput = inputData as IVTPEngineeringInputDataProvider; - if (vtpInput != null ) { + if (vtpInput != null) { fcMap = FuelConsumptionMapReader.Create(vtpInput.JobInputData.Vehicle .Components.EngineInputData.EngineModes.First().Fuels.First().FuelConsumptionMap); } @@ -422,7 +460,7 @@ namespace TUGraz.VectoCore.Tests.Reports var eAxlLoss = ((ConvertedSI)row[SummaryDataContainer.Fields.E_AXL_LOSS]); var eBrakeLoss = ((ConvertedSI)row[SummaryDataContainer.Fields.E_BRAKE]); var eVehInertia = ((ConvertedSI)row[SummaryDataContainer.Fields.E_VEHICLE_INERTIA]); - var eWheel = !distanceBased ? ((ConvertedSI)row[SummaryDataContainer.Fields.E_WHEEL]) : null ; + var eWheel = !distanceBased ? ((ConvertedSI)row[SummaryDataContainer.Fields.E_WHEEL]) : null; var eAir = ((ConvertedSI)row[SummaryDataContainer.Fields.E_AIR]); var eRoll = ((ConvertedSI)row[SummaryDataContainer.Fields.E_ROLL]); var eGrad = ((ConvertedSI)row[SummaryDataContainer.Fields.E_GRAD]); @@ -434,7 +472,7 @@ namespace TUGraz.VectoCore.Tests.Reports ? 0.0 : ((ConvertedSI)row[string.Format(SummaryDataContainer.Fields.FCFINAL_LiterPer100M3KM, "")]); var fcPerLoad = loadingValue > 0 ? ((ConvertedSI)row[string.Format(SummaryDataContainer.Fields.FCFINAL_LITERPER100TKM, "")]) : 0.0; - var co2PerKm = distanceBased? ((ConvertedSI)row[SummaryDataContainer.Fields.CO2_KM]) : null; + var co2PerKm = distanceBased ? ((ConvertedSI)row[SummaryDataContainer.Fields.CO2_KM]) : null; var co2PerVolume = mode == ExecutionMode.Engineering ? 0.0 : ((ConvertedSI)row[SummaryDataContainer.Fields.CO2_M3KM]); var co2PerLoad = loadingValue > 0 ? ((ConvertedSI)row[SummaryDataContainer.Fields.CO2_TKM]) : 0.0; @@ -527,7 +565,7 @@ namespace TUGraz.VectoCore.Tests.Reports // check fuel consumption interpolation var fuelConsumption = (SI)row[ModalResultField.FCMap.GetName()]; Assert.AreEqual(fuelConsumption.Value(), - consumptionMap.GetFuelConsumption(tqEngFcmap, nEngFcMap,true).Value.Value(), 1E-3, "time: {0} distance: {1}", + consumptionMap.GetFuelConsumption(tqEngFcmap, nEngFcMap, true).Value.Value(), 1E-3, "time: {0} distance: {1}", time, distance); // check P_eng_FCmap = T_eng_fcmap * n_eng @@ -561,7 +599,7 @@ namespace TUGraz.VectoCore.Tests.Reports var pAux = (Watt)(row[ModalResultField.P_aux_mech.GetName()] != DBNull.Value ? row[ModalResultField.P_aux_mech.GetName()] : 0.SI<Watt>()); var pBrakeLoss = distanceBased ? (Watt)row[ModalResultField.P_brake_loss.GetName()] : 0.SI<Watt>(); - var pBrakeIn = distanceBased ? (Watt)row[ModalResultField.P_brake_in.GetName()] : pWheelIn; + var pBrakeIn = distanceBased ? (Watt)row[ModalResultField.P_brake_in.GetName()] : pWheelIn; var pWheelInertia = distanceBased ? (Watt)row[ModalResultField.P_wheel_inertia.GetName()] : 0.SI<Watt>(); var pPTOconsumer = ptoConsumerColumn == null || row[ptoConsumerColumn.ColumnName] is DBNull @@ -585,7 +623,7 @@ namespace TUGraz.VectoCore.Tests.Reports } Assert.AreEqual(pBrakeIn.Value(), (pWheelIn + pBrakeLoss).Value(), 1E-3, "time: {0} distance: {1}", time, distance); - + Assert.AreEqual(pAxleIn.Value(), (pBrakeIn + pLossAxle).Value(), 1E-3, "time: {0} distance: {1}", time, distance); Assert.AreEqual(pRetIn.Value(), (pAxleIn + pLossRet).Value(), 1E-3, "time: {0} distance: {1}", time, distance); @@ -747,15 +785,15 @@ namespace TUGraz.VectoCore.Tests.Reports var pClutchOut = row[ModalResultField.P_clutch_out.GetName()]; //if (pClutchOut != DBNull.Value) { - Assert.AreEqual(pGbxIn.Value(), (pClutchOut as Watt).Value(), 1E-3, "time: {0} distance: {1}", time, distance); - var pP1Out = row[p1OutColumn] as Watt; - Assert.AreEqual(pP1Out.Value(), (pClutchOut as Watt + pClutchLoss).Value(), 1E-3, "time: {0} distance: {1}", - time, distance); + Assert.AreEqual(pGbxIn.Value(), (pClutchOut as Watt).Value(), 1E-3, "time: {0} distance: {1}", time, distance); + var pP1Out = row[p1OutColumn] as Watt; + Assert.AreEqual(pP1Out.Value(), (pClutchOut as Watt + pClutchLoss).Value(), 1E-3, "time: {0} distance: {1}", + time, distance); - var pP1Loss = row[p1LossColumn] as Watt; - var pP1Mech = row[p1MechColumn] as Watt; - var pP1In = row[p1InColumn] as Watt; - var pP1El = row[p1ElColumn] as Watt; + var pP1Loss = row[p1LossColumn] as Watt; + var pP1Mech = row[p1MechColumn] as Watt; + var pP1In = row[p1InColumn] as Watt; + var pP1El = row[p1ElColumn] as Watt; Assert.AreEqual(pP1In.Value(), (pP1Out + pP1Mech).Value(), 1E-3, "time: {0} distance: {1}", time, distance); diff --git a/VectoCore/VectoCoreTest/TestData/Integration/EngineeringMode/P1_Group5_AMT/P1_Group5_ESSoff.vveh b/VectoCore/VectoCoreTest/TestData/Integration/EngineeringMode/P1_Group5_AMT/P1_Group5_ESSoff.vveh new file mode 100644 index 0000000000000000000000000000000000000000..5ef57a2c37f1edbaa19aa85413074c5002a99686 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/EngineeringMode/P1_Group5_AMT/P1_Group5_ESSoff.vveh @@ -0,0 +1,112 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2021-12-21T10:13:15.9000372Z", + "AppVersion": "3", + "FileVersion": 10 + }, + "Body": { + "SavedInDeclMode": false, + "VehCat": "Tractor", + "LegislativeClass": "Unknown", + "CurbWeight": 7747.0, + "CurbWeightExtra": 7500.0, + "MassMax": 18.0, + "Loading": 19300.0, + "rdyn": 492.0, + "CdCorrMode": "CdofVdecl", + "CdCorrFile": "", + "AxleConfig": { + "Type": "4x2", + "Axles": [ + { + "Inertia": 14.9, + "Wheels": "315/70 R22.5", + "AxleWeightShare": 0.2, + "TwinTyres": false, + "RRCISO": 0.0052, + "FzISO": 33350.0, + "Type": "VehicleNonDriven" + }, + { + "Inertia": 14.9, + "Wheels": "315/70 R22.5", + "AxleWeightShare": 0.25, + "TwinTyres": true, + "RRCISO": 0.0057, + "FzISO": 33350.0, + "Type": "VehicleDriven" + }, + { + "Inertia": 19.2, + "Wheels": "385/65 R22.5", + "AxleWeightShare": 0.18333, + "TwinTyres": false, + "RRCISO": 0.0055, + "FzISO": 41690.0, + "Type": "Trailer" + }, + { + "Inertia": 19.2, + "Wheels": "385/65 R22.5", + "AxleWeightShare": 0.18333, + "TwinTyres": false, + "RRCISO": 0.0055, + "FzISO": 41690.0, + "Type": "Trailer" + }, + { + "Inertia": 19.2, + "Wheels": "385/65 R22.5", + "AxleWeightShare": 0.18334, + "TwinTyres": false, + "RRCISO": 0.0055, + "FzISO": 41690.0, + "Type": "Trailer" + } + ] + }, + "EngineStopStart": false, + "EcoRoll": "None", + "PredictiveCruiseControl": "Option_1_2_3", + "ATEcoRollReleaseLockupClutch": false, + "CdA": 5.62, + "VehicleHeight": 4.0, + "IdlingSpeed": 550.0, + "Retarder": { + "Type": "secondary", + "Ratio": 1.0, + "File": "Default.vrlm" + }, + "Angledrive": { + "Type": "None", + "Ratio": 0.0, + "LossMap": "" + }, + "PTO": { + "Type": "None", + "LossMap": "", + "Cycle": "", + "CycleDriving": "" + }, + "TorqueLimits": {}, + "InitialSoC": 50.0, + "PowertrainConfiguration": "ParallelHybrid", + "ElectricMotors": [ + { + "Count": 1, + "Ratio": 1.0, + "Position": "P1", + "MotorFile": "P1_Group5_EM.vem", + "MechanicalEfficiency": 1.0 + } + ], + "Batteries": [ + { + "NumPacks": 1, + "BatteryFile": "P1_Group5_REESS.vreess", + "StreamId": 0 + } + ] + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Integration/EngineeringMode/P1_Group5_AMT/P1_Group5_s2c0_rep_Payload_ESSoff.vecto b/VectoCore/VectoCoreTest/TestData/Integration/EngineeringMode/P1_Group5_AMT/P1_Group5_s2c0_rep_Payload_ESSoff.vecto new file mode 100644 index 0000000000000000000000000000000000000000..66b81dca02520e869b90827ebe0abe1ef272a463 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/EngineeringMode/P1_Group5_AMT/P1_Group5_s2c0_rep_Payload_ESSoff.vecto @@ -0,0 +1,53 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2021-12-21T10:13:17.1134933Z", + "AppVersion": "3", + "FileVersion": 8 + }, + "Body": { + "SavedInDeclMode": false, + "EngineOnlyMode": false, + "VehicleFile": "P1_Group5_ESSoff.vveh", + "EngineFile": "P1_Group5_12.7l.veng", + "GearboxFile": "AMT_12.vgbx", + "TCU": "AMT_12.vgbx", + "HybridStrategyParams": "HEV_Parameter.vhctl", + "Padd": 4293.0, + "Paux_ICEOff_Driving": 0.0, + "Paux_ICEOff_Standstill": 0.0, + "Padd_electric": 0.0, + "VACC": "Truck.vacc", + "EngineStopStartAtVehicleStopThreshold": 2.0, + "EngineStopStartMaxOffTimespan": 120.0, + "EngineStopStartUtilityFactor": 0.8, + "EngineStopStartUtilityFactorDriving": 0.8, + "EcoRollMinSpeed": 0.0, + "EcoRollActivationDelay": 0.0, + "EcoRollUnderspeedThreshold": 0.0, + "EcoRollMaxAcceleration": 0.0, + "PCCEnableSpeed": 80.0, + "PCCMinSpeed": 50.0, + "PCCUnderspeed": 8.0, + "PCCOverSpeed": 5.0, + "PCCPreviewDistanceUC1": 1500.0, + "PCCPreviewDistanceUC2": 1000.0, + "LAC": { + "Enabled": true, + "PreviewDistanceFactor": 10.0, + "DF_offset": 2.5, + "DF_scaling": 1.5, + "DF_targetSpeedLookup": "", + "Df_velocityDropLookup": "", + "MinSpeed": 50.0 + }, + "OverSpeedEcoRoll": { + "Mode": "Overspeed", + "MinSpeed": 50.0, + "OverSpeed": 2.5 + }, + "Cycles": [ + "LongHaul_mod5_id_2.vdri" + ] + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 39411f874e7cbbfebc12390f23d1016627bda8b7..d809918ed1d5b860629ac4c56a00e871db74be55 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -3586,12 +3586,18 @@ <None Include="TestData\Integration\EngineeringMode\P1_Group5_AMT\P1_Group5_EM.vem"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Integration\EngineeringMode\P1_Group5_AMT\P1_Group5_ESSoff.vveh"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Integration\EngineeringMode\P1_Group5_AMT\P1_Group5_REESS.vreess"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> <None Include="TestData\Integration\EngineeringMode\P1_Group5_AMT\P1_Group5_s2c0_rep_Payload.vecto"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Integration\EngineeringMode\P1_Group5_AMT\P1_Group5_s2c0_rep_Payload_ESSoff.vecto"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Integration\EngineeringMode\P1_Group5_AMT\REESS_Internal_Resistance.vbatr"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None>