diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs index e286d83689f23f22af4b7d889996c7a921d43394..02829c84b0524d5216230df22f389ab0c0eecafc 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 646c7c3449a7238d2947052b9c8a09a93a0c120d..a1e03606771e97464528f317613d6cc2549d6ccc 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 a6d82e05842452f3f348a5d8f1e4f08019d4d7b7..ded5c0d9cf6cf72fefcb1c2922da11c74cce3169 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 24c4e692369e6a4e28f5a808fe5aa5171715cda0..50fef424dd4836f8951359c113ebb17740cacea5 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 b2c145bda51c0e6172e3b168ca495bb554a50516..e2203ccbab41a02444654c727d4b3ecf6860d488 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 54acf3120c055114ce93ece3d962a83398bd4eaa..29cdc116a0d16b501b4ecc9723f09f305df1577c 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 2d457a76110930714c4334c64098a33eb0469ab7..276c379d906fc87830a6b6dc5797f78ab6b5a47d 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