Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 94efed1e authored by Markus QUARITSCH's avatar Markus QUARITSCH
Browse files

adding sanity check that number of steered axles matches number of steering pumps

parent 6b888130
No related branches found
No related tags found
No related merge requests found
Showing with 44 additions and 9 deletions
...@@ -802,6 +802,12 @@ Public Class Vehicle ...@@ -802,6 +802,12 @@ Public Class Vehicle
Public Property EcoRollReleaseLockupClutch As Boolean 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 Public ReadOnly Property IAxlesEngineeringInputData_DataSource As DataSource Implements IAxlesEngineeringInputData.DataSource
get get
Return New DataSource() With {.SourceType = DataSourceType.JSONFile} Return New DataSource() With {.SourceType = DataSourceType.JSONFile}
......
...@@ -201,6 +201,8 @@ namespace TUGraz.VectoCommon.InputData ...@@ -201,6 +201,8 @@ namespace TUGraz.VectoCommon.InputData
/// cf. VECTO Input Parameters.xlsx /// cf. VECTO Input Parameters.xlsx
/// </summary> /// </summary>
IList<IAxleDeclarationInputData> AxlesDeclaration { get; } IList<IAxleDeclarationInputData> AxlesDeclaration { get; }
int? NumSteeredAxles { get; }
} }
public interface IAdvancedDriverAssistantSystemDeclarationInputData public interface IAdvancedDriverAssistantSystemDeclarationInputData
...@@ -370,6 +372,8 @@ namespace TUGraz.VectoCommon.InputData ...@@ -370,6 +372,8 @@ namespace TUGraz.VectoCommon.InputData
ITyreDeclarationInputData Tyre { get; } ITyreDeclarationInputData Tyre { get; }
bool Steered { get; }
DataSource DataSource { get; } DataSource DataSource { get; }
} }
......
...@@ -388,6 +388,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON ...@@ -388,6 +388,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
public virtual Watt MaxNetPower2 { get { return null; } } public virtual Watt MaxNetPower2 { get { return null; } }
public int? NumSteeredAxles => null;
IVehicleComponentsDeclaration IVehicleDeclarationInputData.Components IVehicleComponentsDeclaration IVehicleDeclarationInputData.Components
{ {
get { return this; } get { return this; }
......
...@@ -52,6 +52,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider ...@@ -52,6 +52,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
protected ITyreDeclarationInputData _tyre; protected ITyreDeclarationInputData _tyre;
protected bool? _twinTyre; protected bool? _twinTyre;
protected AxleType? _axleType; protected AxleType? _axleType;
private bool? _steered;
public XMLDeclarationAxleDataProviderV10(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) public XMLDeclarationAxleDataProviderV10(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile)
: base(componentNode, sourceFile) : base(componentNode, sourceFile)
...@@ -80,6 +81,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider ...@@ -80,6 +81,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
get { return _tyre ?? (_tyre = Reader.Tyre); } get { return _tyre ?? (_tyre = Reader.Tyre); }
} }
public bool Steered =>
_steered ?? (_steered = XmlConvert.ToBoolean(GetString(XMLNames.AxleWheels_Axles_Axle_Steered))).Value;
#endregion #endregion
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
*/ */
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Xml; using System.Xml;
using System.Xml.Linq; using System.Xml.Linq;
using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.Exceptions;
...@@ -48,7 +49,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider ...@@ -48,7 +49,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
public const string XSD_TYPE = "AxleWheelsDataDeclarationType"; 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; protected IAxleDeclarationInputData[] _axles;
...@@ -67,7 +69,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider ...@@ -67,7 +69,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
public virtual IList<IAxleDeclarationInputData> AxlesDeclaration public virtual IList<IAxleDeclarationInputData> AxlesDeclaration
{ {
get { get
{
if (_axles != null) { if (_axles != null) {
return _axles; return _axles;
} }
...@@ -83,6 +86,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider ...@@ -83,6 +86,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
if (axleNumber < 1 || axleNumber > _axles.Length) { if (axleNumber < 1 || axleNumber > _axles.Length) {
throw new VectoException("Axle #{0} exceeds axle count", axleNumber); throw new VectoException("Axle #{0} exceeds axle count", axleNumber);
} }
if (_axles[axleNumber - 1] != null) { if (_axles[axleNumber - 1] != null) {
throw new VectoException("Axle #{0} defined multiple times!", axleNumber); throw new VectoException("Axle #{0} defined multiple times!", axleNumber);
} }
...@@ -94,6 +98,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider ...@@ -94,6 +98,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
} }
} }
public int? NumSteeredAxles
{
get { return AxlesDeclaration.Count(x => x.Steered); }
}
#endregion #endregion
#region Implementation of IXMLResource #region Implementation of IXMLResource
......
...@@ -422,7 +422,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter ...@@ -422,7 +422,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
public IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData, public IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData,
MissionType mission, VehicleClass hvdClass) MissionType mission, VehicleClass hvdClass, int? numSteeredAxles)
{ {
if (!auxInputData.SavedInDeclarationMode) { if (!auxInputData.SavedInDeclarationMode) {
WarnDeclarationMode("AuxiliariesData"); WarnDeclarationMode("AuxiliariesData");
...@@ -453,6 +453,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter ...@@ -453,6 +453,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
aux.ID = Constants.Auxiliaries.IDs.Fan; aux.ID = Constants.Auxiliaries.IDs.Fan;
break; break;
case AuxiliaryType.SteeringPump: 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.PowerDemand = DeclarationData.SteeringPump.Lookup(mission, hvdClass, auxData.Technology);
aux.ID = Constants.Auxiliaries.IDs.SteeringPump; aux.ID = Constants.Auxiliaries.IDs.SteeringPump;
break; break;
......
...@@ -253,7 +253,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl ...@@ -253,7 +253,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
AxleGearData = _axlegearData, AxleGearData = _axlegearData,
AngledriveData = _angledriveData, AngledriveData = _angledriveData,
Aux = _dao.CreateAuxiliaryData(vehicle.Components.AuxiliaryInputData, mission.MissionType, Aux = _dao.CreateAuxiliaryData(vehicle.Components.AuxiliaryInputData, mission.MissionType,
_segment.VehicleClass), _segment.VehicleClass, vehicle.Components.AxleWheels.NumSteeredAxles),
Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()),
Retarder = _retarderData, Retarder = _retarderData,
DriverData = _driverdata, DriverData = _driverdata,
......
...@@ -100,7 +100,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl ...@@ -100,7 +100,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
Dao.CreateAuxiliaryData( Dao.CreateAuxiliaryData(
JobInputData.Vehicle.Components.AuxiliaryInputData, JobInputData.Vehicle.Components.AuxiliaryInputData,
Segment.Missions.First().MissionType, Segment.Missions.First().MissionType,
Segment.VehicleClass), Segment.VehicleClass,
JobInputData.Vehicle.Components.AxleWheels.NumSteeredAxles),
}; };
powertrainConfig.VehicleData.VehicleClass = Segment.VehicleClass; powertrainConfig.VehicleData.VehicleClass = Segment.VehicleClass;
Report.InputDataHash = JobInputData.VectoJobHash; Report.InputDataHash = JobInputData.VectoJobHash;
...@@ -181,7 +182,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl ...@@ -181,7 +182,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
runData.Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()); runData.Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString());
runData.DriverData = Driverdata; runData.DriverData = Driverdata;
runData.Aux = Dao.CreateAuxiliaryData( 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.ExecutionMode = ExecutionMode.Declaration;
runData.SimulationType = SimulationType.DistanceCycle; runData.SimulationType = SimulationType.DistanceCycle;
runData.Mission = mission; runData.Mission = mission;
...@@ -258,22 +260,23 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl ...@@ -258,22 +260,23 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
protected virtual List<VectoRunData.AuxData> CreateVTPAuxData(IVehicleDeclarationInputData vehicle) protected virtual List<VectoRunData.AuxData> CreateVTPAuxData(IVehicleDeclarationInputData vehicle)
{ {
var numSteered = vehicle.Components.AxleWheels.NumSteeredAxles;
var auxRD = Dao.CreateAuxiliaryData( var auxRD = Dao.CreateAuxiliaryData(
vehicle.Components.AuxiliaryInputData, MissionType.RegionalDelivery, Segment.VehicleClass) vehicle.Components.AuxiliaryInputData, MissionType.RegionalDelivery, Segment.VehicleClass, numSteered)
.ToList(); .ToList();
foreach (var entry in auxRD) { foreach (var entry in auxRD) {
entry.MissionType = MissionType.RegionalDelivery; entry.MissionType = MissionType.RegionalDelivery;
} }
var auxLH = Dao.CreateAuxiliaryData( var auxLH = Dao.CreateAuxiliaryData(
vehicle.Components.AuxiliaryInputData, MissionType.LongHaul, Segment.VehicleClass) vehicle.Components.AuxiliaryInputData, MissionType.LongHaul, Segment.VehicleClass, numSteered)
.ToList(); .ToList();
foreach (var entry in auxLH) { foreach (var entry in auxLH) {
entry.MissionType = MissionType.LongHaul; entry.MissionType = MissionType.LongHaul;
} }
var auxUD = Dao.CreateAuxiliaryData( var auxUD = Dao.CreateAuxiliaryData(
vehicle.Components.AuxiliaryInputData, MissionType.UrbanDelivery, Segment.VehicleClass) vehicle.Components.AuxiliaryInputData, MissionType.UrbanDelivery, Segment.VehicleClass, numSteered)
.ToList(); .ToList();
foreach (var entry in auxUD) { foreach (var entry in auxUD) {
entry.MissionType = MissionType.UrbanDelivery; entry.MissionType = MissionType.UrbanDelivery;
......
...@@ -127,6 +127,7 @@ ...@@ -127,6 +127,7 @@
<Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class5.cs" /> <Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class5.cs" />
<Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class2.cs" /> <Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class2.cs" />
<Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class9.cs" /> <Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class9.cs" />
<Compile Include="Models\Declaration\InputDataSanityChecks.cs" />
<Compile Include="Models\Declaration\ShiftPolygonTest.cs" /> <Compile Include="Models\Declaration\ShiftPolygonTest.cs" />
<Compile Include="Models\SimulationComponentData\TorqueConverterDataTest.cs" /> <Compile Include="Models\SimulationComponentData\TorqueConverterDataTest.cs" />
<Compile Include="Models\SimulationComponentData\ValidationTest.cs" /> <Compile Include="Models\SimulationComponentData\ValidationTest.cs" />
...@@ -3670,6 +3671,9 @@ ...@@ -3670,6 +3671,9 @@
<Content Include="TestData\Integration\DeclarationMode\ExemptedVehicle\vecto_vehicle-sample_exempted.xml"> <Content Include="TestData\Integration\DeclarationMode\ExemptedVehicle\vecto_vehicle-sample_exempted.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </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"> <Content Include="TestData\Integration\ShiftStrategyV2\SampleVehicles\Rigid Truck_4x2_vehicle-class-1_EURO6_2018.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment