From 94efed1e35e5ba3169b8b2bcc28558eaf5fc8496 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Mon, 2 May 2022 16:48:00 +0200 Subject: [PATCH] adding sanity check that number of steered axles matches number of steering pumps --- VECTO/Input Files/Vehicle.vb | 6 ++++++ .../VectoCommon/InputData/DeclarationInputData.cs | 4 ++++ .../InputData/FileIO/JSON/JSONVehicleData.cs | 2 ++ .../DataProvider/XMLDeclarationAxleDataProvider.cs | 4 ++++ .../DataProvider/XMLDeclarationAxlesDataProvider.cs | 13 +++++++++++-- .../DataObjectAdapter/DeclarationDataAdapter.cs | 5 ++++- .../Impl/DeclarationModeVectoRunDataFactory.cs | 2 +- .../Impl/DeclarationVTPModeVectoRunDataFactory.cs | 13 ++++++++----- VectoCore/VectoCoreTest/VectoCoreTest.csproj | 4 ++++ 9 files changed, 44 insertions(+), 9 deletions(-) diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index 254fea169a..5af6047346 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -802,6 +802,12 @@ Public Class Vehicle Public Property EcoRollReleaseLockupClutch As Boolean + Public ReadOnly Property NumSteeredAxles As Integer? Implements IAxlesDeclarationInputData.NumSteeredAxles + get + return nothing + End Get + End Property + Public ReadOnly Property IAxlesEngineeringInputData_DataSource As DataSource Implements IAxlesEngineeringInputData.DataSource get Return New DataSource() With {.SourceType = DataSourceType.JSONFile} diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index 2421cbe206..af7bc5200e 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -201,6 +201,8 @@ namespace TUGraz.VectoCommon.InputData /// cf. VECTO Input Parameters.xlsx /// </summary> IList<IAxleDeclarationInputData> AxlesDeclaration { get; } + + int? NumSteeredAxles { get; } } public interface IAdvancedDriverAssistantSystemDeclarationInputData @@ -370,6 +372,8 @@ namespace TUGraz.VectoCommon.InputData ITyreDeclarationInputData Tyre { get; } + bool Steered { get; } + DataSource DataSource { get; } } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index be3ecca251..43f1205544 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -388,6 +388,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public virtual Watt MaxNetPower2 { get { return null; } } + public int? NumSteeredAxles => null; + IVehicleComponentsDeclaration IVehicleDeclarationInputData.Components { get { return this; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs index a07ffe3a34..2f11975df4 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs @@ -52,6 +52,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider protected ITyreDeclarationInputData _tyre; protected bool? _twinTyre; protected AxleType? _axleType; + private bool? _steered; public XMLDeclarationAxleDataProviderV10(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) : base(componentNode, sourceFile) @@ -80,6 +81,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return _tyre ?? (_tyre = Reader.Tyre); } } + public bool Steered => + _steered ?? (_steered = XmlConvert.ToBoolean(GetString(XMLNames.AxleWheels_Axles_Axle_Steered))).Value; + #endregion diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs index a0edec339c..0473b13816 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs @@ -30,6 +30,7 @@ */ using System.Collections.Generic; +using System.Linq; using System.Xml; using System.Xml.Linq; using TUGraz.VectoCommon.Exceptions; @@ -48,7 +49,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public const string XSD_TYPE = "AxleWheelsDataDeclarationType"; - public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + public static readonly string QUALIFIED_XSD_TYPE = + XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); protected IAxleDeclarationInputData[] _axles; @@ -67,7 +69,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public virtual IList<IAxleDeclarationInputData> AxlesDeclaration { - get { + get + { if (_axles != null) { return _axles; } @@ -83,6 +86,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider if (axleNumber < 1 || axleNumber > _axles.Length) { throw new VectoException("Axle #{0} exceeds axle count", axleNumber); } + if (_axles[axleNumber - 1] != null) { throw new VectoException("Axle #{0} defined multiple times!", axleNumber); } @@ -94,6 +98,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider } } + public int? NumSteeredAxles + { + get { return AxlesDeclaration.Count(x => x.Steered); } + } + #endregion #region Implementation of IXMLResource diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs index d1385740a1..4e7e1eaa94 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs @@ -422,7 +422,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter public IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData, - MissionType mission, VehicleClass hvdClass) + MissionType mission, VehicleClass hvdClass, int? numSteeredAxles) { if (!auxInputData.SavedInDeclarationMode) { WarnDeclarationMode("AuxiliariesData"); @@ -453,6 +453,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter aux.ID = Constants.Auxiliaries.IDs.Fan; break; case AuxiliaryType.SteeringPump: + if (numSteeredAxles.HasValue && auxData.Technology.Count != numSteeredAxles.Value) { + throw new VectoException($"Number of steering pump technologies does not match number of steered axles ({numSteeredAxles.Value}, {auxData.Technology.Count})"); + } aux.PowerDemand = DeclarationData.SteeringPump.Lookup(mission, hvdClass, auxData.Technology); aux.ID = Constants.Auxiliaries.IDs.SteeringPump; break; diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs index c24aefdf5b..9a9222af85 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs @@ -253,7 +253,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl AxleGearData = _axlegearData, AngledriveData = _angledriveData, Aux = _dao.CreateAuxiliaryData(vehicle.Components.AuxiliaryInputData, mission.MissionType, - _segment.VehicleClass), + _segment.VehicleClass, vehicle.Components.AxleWheels.NumSteeredAxles), Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), Retarder = _retarderData, DriverData = _driverdata, diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs index 644710f86c..95b9a88f4d 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs @@ -100,7 +100,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl Dao.CreateAuxiliaryData( JobInputData.Vehicle.Components.AuxiliaryInputData, Segment.Missions.First().MissionType, - Segment.VehicleClass), + Segment.VehicleClass, + JobInputData.Vehicle.Components.AxleWheels.NumSteeredAxles), }; powertrainConfig.VehicleData.VehicleClass = Segment.VehicleClass; Report.InputDataHash = JobInputData.VectoJobHash; @@ -181,7 +182,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl runData.Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()); runData.DriverData = Driverdata; runData.Aux = Dao.CreateAuxiliaryData( - JobInputData.Vehicle.Components.AuxiliaryInputData, mission.MissionType, Segment.VehicleClass); + JobInputData.Vehicle.Components.AuxiliaryInputData, mission.MissionType, Segment.VehicleClass, + JobInputData.Vehicle.Components.AxleWheels.NumSteeredAxles); runData.ExecutionMode = ExecutionMode.Declaration; runData.SimulationType = SimulationType.DistanceCycle; runData.Mission = mission; @@ -258,22 +260,23 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl protected virtual List<VectoRunData.AuxData> CreateVTPAuxData(IVehicleDeclarationInputData vehicle) { + var numSteered = vehicle.Components.AxleWheels.NumSteeredAxles; var auxRD = Dao.CreateAuxiliaryData( - vehicle.Components.AuxiliaryInputData, MissionType.RegionalDelivery, Segment.VehicleClass) + vehicle.Components.AuxiliaryInputData, MissionType.RegionalDelivery, Segment.VehicleClass, numSteered) .ToList(); foreach (var entry in auxRD) { entry.MissionType = MissionType.RegionalDelivery; } var auxLH = Dao.CreateAuxiliaryData( - vehicle.Components.AuxiliaryInputData, MissionType.LongHaul, Segment.VehicleClass) + vehicle.Components.AuxiliaryInputData, MissionType.LongHaul, Segment.VehicleClass, numSteered) .ToList(); foreach (var entry in auxLH) { entry.MissionType = MissionType.LongHaul; } var auxUD = Dao.CreateAuxiliaryData( - vehicle.Components.AuxiliaryInputData, MissionType.UrbanDelivery, Segment.VehicleClass) + vehicle.Components.AuxiliaryInputData, MissionType.UrbanDelivery, Segment.VehicleClass, numSteered) .ToList(); foreach (var entry in auxUD) { entry.MissionType = MissionType.UrbanDelivery; diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 68bc2d2fd9..a99b093025 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -127,6 +127,7 @@ <Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class5.cs" /> <Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class2.cs" /> <Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class9.cs" /> + <Compile Include="Models\Declaration\InputDataSanityChecks.cs" /> <Compile Include="Models\Declaration\ShiftPolygonTest.cs" /> <Compile Include="Models\SimulationComponentData\TorqueConverterDataTest.cs" /> <Compile Include="Models\SimulationComponentData\ValidationTest.cs" /> @@ -3670,6 +3671,9 @@ <Content Include="TestData\Integration\DeclarationMode\ExemptedVehicle\vecto_vehicle-sample_exempted.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="TestData\Integration\DeclarationMode\SteeringPumpCount\Group5_EngineStopStart.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="TestData\Integration\ShiftStrategyV2\SampleVehicles\Rigid Truck_4x2_vehicle-class-1_EURO6_2018.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> -- GitLab