From 7b2ee971aa53424b1796e983c68b3b9e59e6ba81 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Mon, 4 May 2020 17:34:27 +0200 Subject: [PATCH] adapt vtp report generation for buses, adapt testdata (fc column), adapt testcase: # missions is only 1, no longer simulating default vehicle --- .../InputData/FileIO/JSON/JSONInputData.cs | 8 ++-- .../VectoCore/OutputData/XML/XMLVTPReport.cs | 43 ++++++++++++++----- .../VectoCoreTest/Integration/VTP/VTPTest.cs | 2 +- .../Models/Simulation/DrivingCycleTests.cs | 2 +- .../VTPMode/GenericVehicle/VTP_rural_2Hz.vdri | 2 +- .../GenericVehicle/VTP_rural_2Hz_noGear.vdri | 2 +- .../vtp_cycle_citybus_atser.vdri | 2 +- 7 files changed, 41 insertions(+), 20 deletions(-) diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs index e286d83689..02829c84b0 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs @@ -929,7 +929,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON var entry = new Result { ResultStatus = node.Attributes.GetNamedItem("status").InnerText, Mission = node.SelectSingleNode("./*[local-name()='Mission']").InnerText.ParseEnum<MissionType>(), - SimulationParameter = GetSimulationParameter(node.SelectSingleNode("//*[local-name()='SimulationParametersCompletedVehicle']")), + SimulationParameter = GetSimulationParameter(node.SelectSingleNode("//*[local-name() = 'SimulationParameters' or local-name() = 'SimulationParametersCompletedVehicle']")), EnergyConsumption = node.SelectSingleNode("//*[local-name()='Fuel' and FuelConsumption/@unit='MJ/km']")? .Cast<XmlNode>().Select( x => new KeyValuePair<FuelType, JoulePerMeter>( @@ -951,9 +951,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON private ISimulationParameter GetSimulationParameter(XmlNode node) { return new SimulationParameter { - TotalVehicleMass = node.SelectSingleNode($"./*[local-name()='{XMLNames.Report_ResultEntry_TotalVehicleMass}']").InnerText.ToDouble().SI<Kilogram>(), - Payload = node.SelectSingleNode($"./*[local-name()='{XMLNames.Report_Result_Payload}']").InnerText.ToDouble().SI<Kilogram>(), - PassengerCount = node.SelectSingleNode($"./*[local-name()='{XMLNames.Bus_PassengerCount}']").InnerText.ToDouble(), + TotalVehicleMass = (node.SelectSingleNode($"./*[local-name()='{XMLNames.Report_ResultEntry_TotalVehicleMass}']")?.InnerText.ToDouble() ?? 0).SI<Kilogram>(), + Payload = (node.SelectSingleNode($"./*[local-name()='{XMLNames.Report_Result_Payload}']")?.InnerText.ToDouble() ?? 0).SI<Kilogram>(), + PassengerCount = node.SelectSingleNode($"./*[local-name()='{XMLNames.Bus_PassengerCount}']")?.InnerText.ToDouble() ?? 0, FuelMode = "" //node.SelectSingleNode($"./*[local-name()='{XMLNames.Report_Result_FuelMode}']").InnerText }; } diff --git a/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs index 646c7c3449..a1e0360677 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs @@ -51,6 +51,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing; using NLog; +using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCore.Models.SimulationComponent.Impl; using LogManager = NLog.LogManager; @@ -77,6 +78,9 @@ namespace TUGraz.VectoCore.OutputData.XML private static List<string> LogList = new List<string>(); private LoggingRule cycleChecksRule; + protected VehicleClass VehicleClass = VehicleClass.Unknown; + protected VehicleCode VehicleCode = VehicleCode.NOT_APPLICABLE; + //protected XNamespace di; //private bool allSuccess = true; @@ -216,11 +220,21 @@ namespace TUGraz.VectoCore.OutputData.XML throw new VectoException("no vtp result found for generating vtp report"); } - var selectedMission = vtpResult.VehicleClass.IsMediumLorry() - ? DeclarationData.VTPMode.SelectedMissionMediumLorry - : DeclarationData.VTPMode.SelectedMissionHeavyLorry; + var selectedMission = VehicleClass.IsBus() + ? (VehicleCode.GetFloorType() == FloorType.LowFloor + ? DeclarationData.VTPMode.SelectedMissionLowFloorBus + : DeclarationData.VTPMode.SelectedMissionHighFloorBus) + : (vtpResult.VehicleClass.IsMediumLorry() + ? DeclarationData.VTPMode.SelectedMissionMediumLorry + : DeclarationData.VTPMode.SelectedMissionHeavyLorry); const LoadingType selectedLoading = DeclarationData.VTPMode.SelectedLoading; - var result = Results.OrderBy(x => x.FuelMode).FirstOrDefault(x => x.Mission == selectedMission && x.LoadingType == selectedLoading); + //var result = Results.OrderBy(x => x.FuelMode).FirstOrDefault(x => x.Mission == selectedMission && x.LoadingType == selectedLoading); + + + var result = ManufacturerRecord.Results.Results.Where(x => x.Mission == selectedMission) + .MaxBy(x => x.SimulationParameter.Payload); + var key = VehicleClass.IsBus() ? "g/p-km" : "g/t-km"; + var declaredCO2 = result.CO2[key]; if (result == null) { throw new VectoException("no corresponding simulation result found for generating vtp report"); @@ -232,9 +246,9 @@ namespace TUGraz.VectoCore.OutputData.XML var fuels = DeclarationData.FuelData; var cVtp = vtpFcMeasuredCorr.Sum(e => e.Value * fuels.Lookup(e.Key, vtpResult.TankSystem).CO2PerFuelWeightVTP) / vtpFcSimulated.Sum(e => e.Value * fuels.Lookup(e.Key, vtpResult.TankSystem).CO2PerFuelWeightVTP); - var declaredCO2 = - result.FuelConsumptionFinal.Sum(x => x.Value * fuels.Lookup(x.Key, vtpResult.TankSystem).CO2PerFuelWeightVTP) / - result.Distance / result.Payload; + //var declaredCO2 = + // result.FuelConsumptionFinal.Sum(x => x.Value * fuels.Lookup(x.Key, vtpResult.TankSystem).CO2PerFuelWeightVTP) / + // result.Distance / result.Payload; var verifiedCO2 = declaredCO2 * cVtp.Value(); ResultsPart.Add( @@ -273,12 +287,12 @@ namespace TUGraz.VectoCore.OutputData.XML string.Format("{0}, {1}", selectedMission.ToXMLFormat(), selectedLoading.ToString()) ), new XElement( - tns + "Declared", new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"), - declaredCO2.ConvertToGrammPerTonKilometer().ToMinSignificantDigits(3, 1) + tns + "Declared", new XAttribute(XMLNames.Report_Results_Unit_Attr, key), + declaredCO2.ToMinSignificantDigits(3, 1) ), new XElement( - tns + "Verified", new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"), - verifiedCO2.ConvertToGrammPerTonKilometer().ToMinSignificantDigits(3, 1) + tns + "Verified", new XAttribute(XMLNames.Report_Results_Unit_Attr, key), + verifiedCO2.ToMinSignificantDigits(3, 1) ) ), new XElement(tns + "C_VTP", cVtp.ToXMLFormat(4))); @@ -324,6 +338,10 @@ namespace TUGraz.VectoCore.OutputData.XML public override void InitializeReport(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) { + VehicleClass = modelData.VehicleData.VehicleClass; + if (VehicleClass.IsBus()) { + VehicleCode = modelData.VehicleData.VehicleCode; + } GeneralPart.Add( new XElement(tns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer), new XElement(tns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress)); @@ -660,6 +678,9 @@ namespace TUGraz.VectoCore.OutputData.XML }; var retVal = new XElement(tns + XMLNames.Component_Auxiliaries); foreach (var auxId in auxList) { + if (!auxData.ContainsKey(auxId.Key())) { + continue; + } foreach (var entry in auxData[auxId.Key()].Technology) { retVal.Add(new XElement(tns + GetTagName(auxId), entry)); } diff --git a/VectoCore/VectoCoreTest/Integration/VTP/VTPTest.cs b/VectoCore/VectoCoreTest/Integration/VTP/VTPTest.cs index a6d82e0584..ded5c0d9cf 100644 --- a/VectoCore/VectoCoreTest/Integration/VTP/VTPTest.cs +++ b/VectoCore/VectoCoreTest/Integration/VTP/VTPTest.cs @@ -136,7 +136,7 @@ namespace TUGraz.VectoCore.Tests.Integration.VTP jobContainer.AddRuns(runsFactory); - Assert.AreEqual(2, jobContainer.Runs.Count); + Assert.AreEqual(1, jobContainer.Runs.Count); var i = 0; jobContainer.Runs[i].Run.Run(); Assert.IsTrue(jobContainer.Runs[i].Run.FinishedWithoutErrors); diff --git a/VectoCore/VectoCoreTest/Models/Simulation/DrivingCycleTests.cs b/VectoCore/VectoCoreTest/Models/Simulation/DrivingCycleTests.cs index 24c4e69236..50fef424dd 100644 --- a/VectoCore/VectoCoreTest/Models/Simulation/DrivingCycleTests.cs +++ b/VectoCore/VectoCoreTest/Models/Simulation/DrivingCycleTests.cs @@ -207,7 +207,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation // Verification test simulation TestCase("<t>,<v>,<n_eng>,<n_fan>,<tq_left>,<tq_right>,<n_wh_left>,<n_wh_right>", CycleType.VTP), TestCase("<t>,<v>,<n_eng>,<n_fan>,<tq_left>,<tq_right>,<n_wh_left>,<n_wh_right>,<gear>", CycleType.VTP), - TestCase("<t>,<v>,<n_eng>,<n_fan>,<tq_left>,<tq_right>,<n_wh_left>,<n_wh_right>,<fc>,<gear>", CycleType.VTP), + TestCase("<t>,<v>,<n_eng>,<n_fan>,<tq_left>,<tq_right>,<n_wh_left>,<n_wh_right>,<fc_Diesel CI>,<gear>", CycleType.VTP), ] public void DrivingCycle_AutoDetect(string cycle, CycleType type) { diff --git a/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/VTP_rural_2Hz.vdri b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/VTP_rural_2Hz.vdri index b2c145bda5..e2203ccbab 100644 --- a/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/VTP_rural_2Hz.vdri +++ b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/VTP_rural_2Hz.vdri @@ -1,4 +1,4 @@ -<t> [s],<v> [km/h],<n_eng> [rpm],<n_fan> [rpm],<tq_left> [Nm],<tq_right> [Nm],<n_wh_left> [rpm],<n_wh_right> [rpm],<fc> [g/h],<gear> +<t> [s],<v> [km/h],<n_eng> [rpm],<n_fan> [rpm],<tq_left> [Nm],<tq_right> [Nm],<n_wh_left> [rpm],<n_wh_right> [rpm],<fc_Diesel CI> [g/h],<gear> 0,0,599.72,727.3,319.1147826,429.8065217,0.78,0.78,836,3 0.5,0,600.29,727.3,316.7856522,430.0626087,0.7832,0.78,836,3 1,0,600.1,726.912,319.9513043,430.8052174,0.78,0.78,836,3 diff --git a/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/VTP_rural_2Hz_noGear.vdri b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/VTP_rural_2Hz_noGear.vdri index 54acf3120c..29cdc116a0 100644 --- a/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/VTP_rural_2Hz_noGear.vdri +++ b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/VTP_rural_2Hz_noGear.vdri @@ -1,4 +1,4 @@ -<t>Â [s],<v>Â [km/h],<n_eng>Â [rpm],<n_fan>Â [rpm],<tq_left>Â [Nm],<tq_right>Â [Nm],<n_wh_left>Â [rpm],<n_wh_right>Â [rpm],<fc>Â [g/h] +<t>Â [s],<v>Â [km/h],<n_eng>Â [rpm],<n_fan>Â [rpm],<tq_left>Â [Nm],<tq_right>Â [Nm],<n_wh_left>Â [rpm],<n_wh_right>Â [rpm],<fc_Diesel CI>Â [g/h] 0,0,599.72,727.3,319.1147826,429.8065217,0.78,0.78,836 0.5,0,600.29,727.3,316.7856522,430.0626087,0.7832,0.78,836 1,0,600.1,726.912,319.9513043,430.8052174,0.78,0.78,836 diff --git a/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/vtp_cycle_citybus_atser.vdri b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/vtp_cycle_citybus_atser.vdri index 2d457a7611..276c379d90 100644 --- a/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/vtp_cycle_citybus_atser.vdri +++ b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/vtp_cycle_citybus_atser.vdri @@ -1,4 +1,4 @@ -t,v,gear,tc_active,n_eng,n_fan,fc,n_wh_left,n_wh_right,tq_left,tq_right +t,v,gear,tc_active,n_eng,n_fan,fc_Diesel CI,n_wh_left,n_wh_right,tq_left,tq_right 0.25,0,0,1,600,1000,1278.2425,0,0,0,0 1,0,0,1,600,1000,1278.2425,0,0,0,0 1.75,0,0,1,600,1000,1278.2425,0,0,0,0 -- GitLab