diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs index d67717deffac0c29acfe8620323559d65db1230b..dafcb0266ae985c22aa16932daffee26610a0f56 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs @@ -27,6 +27,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); private XmlNode _resultsNode; + private IList<IResult> _results; public XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01(XmlNode resultsNode) : base(resultsNode) { @@ -39,7 +40,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public IList<IResult> Results { - get { return ReadResults(); } + get { return _results ?? (_results = ReadResults()); } } diff --git a/VectoCore/VectoCore/InputData/Impl/InputData.cs b/VectoCore/VectoCore/InputData/Impl/InputData.cs index 9a7aac3b37dbd15f3771029eebd87ba1b009ebfd..77dfdf95c14fa325dbe5863a92c58c914f668022 100644 --- a/VectoCore/VectoCore/InputData/Impl/InputData.cs +++ b/VectoCore/VectoCore/InputData/Impl/InputData.cs @@ -31,6 +31,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; @@ -213,6 +214,7 @@ namespace TUGraz.VectoCore.InputData.Impl public IList<IResult> Results { get; internal set; } } + [DebuggerDisplay("{ResultStatus} | {VehicleGroup} {Mission}")] public class Result : IResult { public string ResultStatus { get; internal set; } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs index 5d25d746ac765e7397d8bd203f53f972ce9fbf5e..ccdf65ecf55bf648d44f956436542e912c3820b3 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs @@ -76,7 +76,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter protected override void CretateTCFirstGearATPowerSplit(GearData gearData, uint i, ShiftPolygon shiftPolygon) { gearData.TorqueConverterRatio = 1; - gearData.TorqueConverterGearLossMap = TransmissionLossMapReader.Create(GearEfficiencyIndirectGear, 1, string.Format("TCGear {0}", i + 1)); + //gearData.TorqueConverterGearLossMap = TransmissionLossMapReader.Create(GearEfficiencyIndirectGear, 1, string.Format("TCGear {0}", i + 1)); + gearData.TorqueConverterGearLossMap = TransmissionLossMapReader.Create(1.0, 1, string.Format("TCGear {0}", i + 1)); gearData.TorqueConverterShiftPolygon = shiftPolygon; } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs index 1d08a72e0f18d663fc09e844aba71a3bd2992056..4c2775795b512289cabe425c0e2d660024f433af 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs @@ -180,7 +180,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl var primaryResult = InputDataProvider.PrimaryVehicleData.GetResult( simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode, simulationRunData.VehicleData.Loading); - if (primaryResult == null) { + if (primaryResult == null || !primaryResult.ResultStatus.Equals("success")) { throw new VectoException( "Failed to find results in PrimaryVehicleReport for vehicle group: {0}, mission: {1}, fuel mode: '{2}', payload: {3}. Make sure PIF and completed vehicle data match!", simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode, diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs index 6ec2d5376a6b8d90a3b77e9bf76664ea8bacc1ac..4e74a81793928303ae1cfd61c21896cb5a0b5dda 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs @@ -241,7 +241,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return operatingPoint; } catch (VectoException ve) { Log.Warn(ve, "TorqueConverter: Failed to find operating point for DragPower {0}", engineResponse.DragPower); - var engineSpeed = VectoMath.Max(DataBus.EngineIdleSpeed * 1.001, 0.8 * DataBus.EngineSpeed); + //var engineSpeed = VectoMath.Max(DataBus.EngineIdleSpeed * 1.001, 0.8 * DataBus.EngineSpeed); + var engineSpeed = DataBus.DrivingAction == DrivingAction.Brake + ? DataBus.EngineIdleSpeed * 1.001 + : VectoMath.Max(DataBus.EngineIdleSpeed * 1.001, 0.8 * DataBus.EngineSpeed); var retVal = FindValidTorqueConverterOperatingPoint( absTime, dt, outAngularVelocity, engineSpeed, diff --git a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs index 53f143197d1af209f704419cc50c248580a20fb3..dbf44fdc8cdc98be5e17abadcffb3ffe7cdf8fba 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs @@ -409,7 +409,8 @@ namespace TUGraz.VectoCore.OutputData.XML case VectoRun.Status.Canceled: case VectoRun.Status.Aborted: return new object[] { - new XElement(tns + "Error", resultEntry.Error) + new XElement(tns + "Error", resultEntry.Error), + new XElement(tns + "ErrorDetails", resultEntry.StackTrace), }; default: throw new ArgumentOutOfRangeException(); } diff --git a/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.RSLT_PIF.xml b/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.RSLT_PIF.xml index 73b2b1eacf5ac1f4d838fbe0fcd774a1ae8fe4b9..ce14f27e9fb18fe156ec719b6f4b1b7b9c1a4a57 100644 --- a/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.RSLT_PIF.xml +++ b/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.RSLT_PIF.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <pif:VectoOutputPrimaryVehicle xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1" xmlns:pif="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation" xmlns:di="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/XSD//DEV/VectoOutputPrimaryVehicleInformation.xsd"> <pif:Data xsi:type="PrimaryVehicleHeavyBusDataType" id="PIF-4547e7655ef846a59ce4"> <Vehicle xsi:type="VehiclePIFType"> @@ -486,7 +486,7 @@ </Fuel> <CO2 unit="g/km">695.0</CO2> </Result> - <Result status="success"> + <Result status="error"> <VehicleGroup>P34SD</VehicleGroup> <Mission>Coach</Mission> <SimulationParameters> @@ -495,12 +495,16 @@ <PassengerCount>44.98</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> - <Fuel type="Diesel CI"> + <!-- Test using PIF where not all results are present + <Fuel type="Diesel CI"> <EnergyConsumption unit="MJ/km">9.96560</EnergyConsumption> </Fuel> <CO2 unit="g/km">730.5</CO2> + --> + <Error>20 (Coach _P40DD_ReferenceLoad) - absTime: 7535.2269 [s], distance: 130338.3598 [m], dt: 0.6304 [s], v: 0.0141 [m/s], Gear: 1 | DrivingActionAccelerate: Failed to find operating point</Error> + <ErrorDetails>String</ErrorDetails> </Result> - <Result status="success"> + <Result status="error"> <VehicleGroup>P34DD</VehicleGroup> <Mission>Interurban</Mission> <SimulationParameters> @@ -509,12 +513,16 @@ <PassengerCount>24.48</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> + <!-- Test using PIF where not all results are present <Fuel type="Diesel CI"> <EnergyConsumption unit="MJ/km">14.24030</EnergyConsumption> </Fuel> <CO2 unit="g/km">1043.8</CO2> + --> + <Error>20 (Coach _P40DD_ReferenceLoad) - absTime: 7535.2269 [s], distance: 130338.3598 [m], dt: 0.6304 [s], v: 0.0141 [m/s], Gear: 1 | DrivingActionAccelerate: Failed to find operating point</Error> + <ErrorDetails>String</ErrorDetails> </Result> - <Result status="success"> + <Result status="error"> <VehicleGroup>P34DD</VehicleGroup> <Mission>Interurban</Mission> <SimulationParameters> @@ -523,12 +531,16 @@ <PassengerCount>97.92</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> + <!-- Test using PIF where not all results are present <Fuel type="Diesel CI"> <EnergyConsumption unit="MJ/km">16.77091</EnergyConsumption> </Fuel> <CO2 unit="g/km">1229.3</CO2> + --> + <Error>20 (Coach _P40DD_ReferenceLoad) - absTime: 7535.2269 [s], distance: 130338.3598 [m], dt: 0.6304 [s], v: 0.0141 [m/s], Gear: 1 | DrivingActionAccelerate: Failed to find operating point</Error> + <ErrorDetails>String</ErrorDetails> </Result> - <Result status="success"> + <Result status="error"> <VehicleGroup>P34DD</VehicleGroup> <Mission>Coach</Mission> <SimulationParameters> @@ -551,10 +563,14 @@ <PassengerCount>65.28</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> + <!-- Test using PIF where not all results are present <Fuel type="Diesel CI"> <EnergyConsumption unit="MJ/km">11.34890</EnergyConsumption> </Fuel> <CO2 unit="g/km">831.9</CO2> + --> + <Error>20 (Coach _P40DD_ReferenceLoad) - absTime: 7535.2269 [s], distance: 130338.3598 [m], dt: 0.6304 [s], v: 0.0141 [m/s], Gear: 1 | DrivingActionAccelerate: Failed to find operating point</Error> + <ErrorDetails>String</ErrorDetails> </Result> </Results> <ApplicationInformation> diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 1ede0f985fe4b7fe589d405546d3ce8f7874814f..3d4c009d6d0dcc1a9d737a7d9589d6537aa891e3 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -3787,6 +3787,9 @@ <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\PIF-heavyBus-sample.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\primary_heavyBus group P39_40_nonSmart_ESS.RSLT_PIF.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\vecto_vehicle-medium_lorryFWD-sample.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/VectoCore/VectoCoreTest/XML/XMLPrimaryVehicleReportBusReaderTest.cs b/VectoCore/VectoCoreTest/XML/XMLPrimaryVehicleReportBusReaderTest.cs index 7c4ff2cbdbcc9114fb225c4ea8e1938b011bbeaf..c4e2e44865db0e0ceb4da708f58a696a8d7da710 100644 --- a/VectoCore/VectoCoreTest/XML/XMLPrimaryVehicleReportBusReaderTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLPrimaryVehicleReportBusReaderTest.cs @@ -28,6 +28,10 @@ namespace TUGraz.VectoCore.Tests.XML private const string vehilcePIFExample = "TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/PIF-heavyBus-sample.xml"; + private const string vehiclePIFExampleWithErrors = + @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\primary_heavyBus group P39_40_nonSmart_ESS.RSLT_PIF.xml" + ; + protected IXMLInputDataReader xmlInputReader; private IKernel _kernel; @@ -42,6 +46,19 @@ namespace TUGraz.VectoCore.Tests.XML } + [TestCase] + public void TestReadPIFReportWithErrors() + { + var reader = XmlReader.Create(vehiclePIFExampleWithErrors); + var inputDataProvider = xmlInputReader.Create(reader) as IPrimaryVehicleInformationInputDataProvider; + + Assert.AreEqual("error", inputDataProvider.ResultsInputData.Status); + Assert.AreEqual(20, inputDataProvider.ResultsInputData.Results.Count); + + Assert.AreEqual("error", inputDataProvider.ResultsInputData.Results[19].ResultStatus); + } + + [TestCase] public void TestPrimaryVehicleBusData() {