diff --git a/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj b/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj index fe492b24eb0dab3cbdcd67bb616ad3cdd298565e..9b13c99eeed415a0680fbcd965a8f5a630351e82 100644 --- a/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj +++ b/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj @@ -7,36 +7,6 @@ </PropertyGroup> <ItemGroup> - <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.10\vecto_vehicle-exempted_input_full-sample.xml" Link="Testdata\vecto_vehicle-exempted_input_full-sample.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.10\vecto_vehicle-exempted_input_only_certain_entries01-sample.xml" Link="Testdata\vecto_vehicle-exempted_input_only_certain_entries01-sample.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.10\vecto_vehicle-exempted_input_only_certain_entries02-sample.xml" Link="Testdata\vecto_vehicle-exempted_input_only_certain_entries02-sample.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.10\vecto_vehicle-exempted_input_only_mandatory_entries.xml" Link="Testdata\vecto_vehicle-exempted_input_only_mandatory_entries.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.10\vecto_vehicle-stage_input_full-sample.xml" Link="Testdata\vecto_vehicle-stage_input_full-sample.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.10\vecto_vehicle-stage_input_only_certain_entries01-sample.xml" Link="Testdata\vecto_vehicle-stage_input_only_certain_entries01-sample.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.10\vecto_vehicle-stage_input_only_certain_entries02-sample.xml" Link="Testdata\vecto_vehicle-stage_input_only_certain_entries02-sample.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.10\vecto_vehicle-stage_input_only_component_nullable_entries.xml" Link="Testdata\vecto_vehicle-stage_input_only_component_nullable_entries.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.10\vecto_vehicle-stage_input_only_mandatory_entries.xml" Link="Testdata\vecto_vehicle-stage_input_only_mandatory_entries.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.10\vecto_vehicle-stage_input_only_mandatory_standard_value_airdrag.xml" Link="Testdata\vecto_vehicle-stage_input_only_mandatory_standard_value_airdrag.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\AidragComponent.xml" Link="Testdata\AidragComponent.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index 087518be4301d6817f734dd829b4fb096b50605a..58bc4d96609781f9f7f140c4a81e263a11497d5d 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -457,6 +457,8 @@ namespace TUGraz.VectoCommon.InputData ITyreDeclarationInputData Tyre { get; } DataSource DataSource { get; } + + bool Steered { get; } } public interface ITyreDeclarationInputData : IComponentInputData diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs index bef8672f8222816b6712368b09883c1297a8fd32..4ba271313e1c469c428f65a982ca75979e9d0a17 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) @@ -67,6 +68,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public virtual ITyreDeclarationInputData Tyre => _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/Reader/DataObjectAdapter/DeclarationDataAdapterHeavyLorry.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterHeavyLorry.cs index b8101976729273e3126b8d49466b128d04157dd8..75aaf38e7f2c50e1de72d612f9acc64887203f3e 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterHeavyLorry.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterHeavyLorry.cs @@ -488,7 +488,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter } - public virtual IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData, IBusAuxiliariesDeclarationData busAuxData, MissionType mission, VehicleClass hvdClass, Meter vehicleLength) + public virtual IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData, + IBusAuxiliariesDeclarationData busAuxData, MissionType mission, VehicleClass hvdClass, Meter vehicleLength, int? numSteeredAxles) { if (!auxInputData.SavedInDeclarationMode) { WarnDeclarationMode("AuxiliariesData"); @@ -520,6 +521,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/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs index 90087072c524c3b5d9c78758fa7d1d08b03e5b6c..5fdcf0936eaacb5bb2ed48944fc084b0506ee089 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs @@ -76,12 +76,15 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter public override IList<VectoRunData.AuxData> CreateAuxiliaryData( IAuxiliariesDeclarationInputData auxInputData, IBusAuxiliariesDeclarationData busAuxData, MissionType mission, - VehicleClass hdvClass, Meter vehicleLength) + VehicleClass hdvClass, Meter vehicleLength, int? numSteeredAxles) { if (auxInputData != null) { throw new VectoException("Only BusAuxiliaries can be provided as input!"); } + if (numSteeredAxles.HasValue && busAuxData.SteeringPumpTechnology.Count != numSteeredAxles.Value) { + throw new VectoException($"Number of steering pump technologies does not match number of steered axles ({numSteeredAxles.Value}, {busAuxData.SteeringPumpTechnology.Count})"); + } var retVal = new List<VectoRunData.AuxData>(); retVal.Add( diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs index cad2bc0aa4e683a354a90f65e5388ddca93a092b..e5c788adb136e9673042149e53d199f3a774cd50 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs @@ -26,7 +26,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter { RetarderData CreateRetarderData(IRetarderInputData retarderData); PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData); - IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, IBusAuxiliariesDeclarationData busAuxData, MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength); + IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, IBusAuxiliariesDeclarationData busAuxData, MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles); AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData); } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs index cff53cabf0bd778f76a8c67e0e5bcfdc959193eb..d0be389f2411ea3f0f10de36d04f026563da846d 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs @@ -215,9 +215,11 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl } - protected VectoRunData CreateVectoRunDataSpecific(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, int modeIdx) { + protected VectoRunData CreateVectoRunDataSpecific(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, int modeIdx) + { var cycle = DeclarationData.CyclesCache.GetOrAdd(mission.MissionType, _ => DrivingCycleDataReader.ReadFromStream(mission.CycleFile, CycleType.DistanceBased, "", false)); - + var numSteeredAxles = PrimaryVehicle.Components.AxleWheels.AxlesDeclaration.Count(x => x.Steered); + var simulationRunData = new VectoRunData { Loading = loading.Key, VehicleData = DataAdapterSpecific.CreateVehicleData(PrimaryVehicle, CompletedVehicle, _segmentCompletedBus, @@ -229,7 +231,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl AxleGearData = _axlegearData, AngledriveData = _angledriveData, Aux = DataAdapterSpecific.CreateAuxiliaryData(PrimaryVehicle.Components.AuxiliaryInputData, - PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segmentCompletedBus.VehicleClass, CompletedVehicle.Length), + PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segmentCompletedBus.VehicleClass, CompletedVehicle.Length, numSteeredAxles), Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), Retarder = _retarderData, DriverData = _driverData, @@ -267,7 +269,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl AngledriveData = _angledriveData, Aux = DataAdapterGeneric.CreateAuxiliaryData(PrimaryVehicle.Components.AuxiliaryInputData, primaryBusAuxiliaries, mission.MissionType, primarySegment.VehicleClass, - mission.BusParameter.VehicleLength), + mission.BusParameter.VehicleLength, PrimaryVehicle.Components.AxleWheels.AxlesDeclaration.Count(x => x.Steered)), Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), Retarder = _retarderData, DriverData = _driverData, diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedMultistageBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedMultistageBusVectoRunDataFactory.cs index 18db5282c563ee3868e5b0da4a1bd159aa127057..7bbcf8a900b016df1a411c9b83dcf19f83e5c068 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedMultistageBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedMultistageBusVectoRunDataFactory.cs @@ -251,7 +251,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl AxleGearData = _axlegearData, AngledriveData = _angledriveData, Aux = DataAdapterSpecific.CreateAuxiliaryData(PrimaryVehicle.Components.AuxiliaryInputData, - PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segmentCompletedBus.VehicleClass, CompletedVehicle.Length), + PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segmentCompletedBus.VehicleClass, CompletedVehicle.Length, + PrimaryVehicle.Components.AxleWheels.AxlesDeclaration.Count(x => x.Steered)), Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), Retarder = _retarderData, DriverData = _driverData, @@ -290,7 +291,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl AngledriveData = _angledriveData, Aux = DataAdapterGeneric.CreateAuxiliaryData(PrimaryVehicle.Components.AuxiliaryInputData, primaryBusAuxiliaries, mission.MissionType, primarySegment.VehicleClass, - mission.BusParameter.VehicleLength), + mission.BusParameter.VehicleLength, + PrimaryVehicle.Components.AxleWheels.AxlesDeclaration.Count(x => x.Steered)), Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), Retarder = _retarderData, DriverData = _driverData, diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs index 873e10d9cfc5324d4d5c9fba961eb4571d3969cd..5e165e4ada0398d0fcd84673a3b954546c118c9a 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs @@ -31,6 +31,7 @@ using System; using System.Collections.Generic; +using System.Linq; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; @@ -163,7 +164,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl Aux = DataAdapter.CreateAuxiliaryData( vehicle.Components.AuxiliaryInputData, vehicle.Components.BusAuxiliaries, mission.MissionType, - _segment.VehicleClass, vehicle.Length), + _segment.VehicleClass, vehicle.Length, + vehicle.Components.AxleWheels.AxlesDeclaration.Count(x => x.Steered)), Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), Retarder = _retarderData, DriverData = _driverdata, diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs index e31992dcbd25af88c878ff8ec817e0d8af8f204c..bf87fba39115fd94560935d2b9d71bd9e0366e5f 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; @@ -119,7 +120,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl Aux = DataAdapter.CreateAuxiliaryData( vehicle.Components.AuxiliaryInputData, vehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, - vehicle.Length ?? mission.BusParameter.VehicleLength), + vehicle.Length ?? mission.BusParameter.VehicleLength, + vehicle.Components.AxleWheels.AxlesDeclaration.Count(x => x.Steered)), Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), Retarder = _retarderData, DriverData = _driverdata, diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeSingleBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeSingleBusVectoRunDataFactory.cs index 9fbcf5fe1c116cb812bb0d54386ab1f7eeb3cce2..2802c869d7f700f34fe38866c84b6d72819a8b00 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeSingleBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeSingleBusVectoRunDataFactory.cs @@ -81,7 +81,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl AxleGearData = _axlegearData, AngledriveData = _angledriveData, Aux = DataAdapter.CreateAuxiliaryData(vehicle.Components.AuxiliaryInputData, - vehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, vehicle.Length ?? mission.BusParameter.VehicleLength), + vehicle.Components.BusAuxiliaries, mission.MissionType, + _segment.VehicleClass, vehicle.Length ?? mission.BusParameter.VehicleLength, + vehicle.Components.AxleWheels.AxlesDeclaration.Count(x => x.Steered)), Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), Retarder = _retarderData, DriverData = _driverdata, diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryLorries.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryLorries.cs index a1357c407b3d9057a726c33e817dd5683316bf97..468cae22cb84a07898091fb27905fa713ca90b5c 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryLorries.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryLorries.cs @@ -119,27 +119,29 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl JobInputData.Vehicle.Components.AuxiliaryInputData, JobInputData.Vehicle.Components.BusAuxiliaries, missionType, - Segment.VehicleClass, JobInputData.Vehicle.Length); + Segment.VehicleClass, JobInputData.Vehicle.Length, + JobInputData.Vehicle.Components.AxleWheels.AxlesDeclaration.Count(x => x.Steered)); } protected virtual List<VectoRunData.AuxData> CreateVTPAuxData(IVehicleDeclarationInputData vehicle) { + var numSteered = vehicle.Components.AxleWheels.AxlesDeclaration.Count(x => x.Steered); var auxRD = Dao.CreateAuxiliaryData( - vehicle.Components.AuxiliaryInputData, vehicle.Components.BusAuxiliaries, MissionType.RegionalDelivery, Segment.VehicleClass, vehicle.Length) + vehicle.Components.AuxiliaryInputData, vehicle.Components.BusAuxiliaries, MissionType.RegionalDelivery, Segment.VehicleClass, vehicle.Length, numSteered) .ToList(); foreach (var entry in auxRD) { entry.MissionType = MissionType.RegionalDelivery; } var auxLH = Dao.CreateAuxiliaryData( - vehicle.Components.AuxiliaryInputData, vehicle.Components.BusAuxiliaries, MissionType.LongHaul, Segment.VehicleClass, vehicle.Length) + vehicle.Components.AuxiliaryInputData, vehicle.Components.BusAuxiliaries, MissionType.LongHaul, Segment.VehicleClass, vehicle.Length, numSteered) .ToList(); foreach (var entry in auxLH) { entry.MissionType = MissionType.LongHaul; } var auxUD = Dao.CreateAuxiliaryData( - vehicle.Components.AuxiliaryInputData, vehicle.Components.BusAuxiliaries, MissionType.UrbanDelivery, Segment.VehicleClass, vehicle.Length) + vehicle.Components.AuxiliaryInputData, vehicle.Components.BusAuxiliaries, MissionType.UrbanDelivery, Segment.VehicleClass, vehicle.Length, numSteered) .ToList(); foreach (var entry in auxUD) { entry.MissionType = MissionType.UrbanDelivery; diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs index 70351e065ade3fa073dfa390017416208d0ac432..a8951c08c7b2c9d027c90dc4ed4f4ac42264b711 100644 --- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs @@ -465,7 +465,7 @@ namespace TUGraz.VectoCore.Models.Declaration public static PerSecond MinEngineSpeedPostUpshift = 0.RPMtoRad(); - public static Second ATLookAheadTime = Gearbox.PowershiftShiftTime; + public static Second ATLookAheadTime = 1.5.SI<Second>(); //Gearbox.PowershiftShiftTime; public static double[] LoadStageThresholdsUp = { 19.7, 36.34, 53.01, 69.68, 86.35 }; public static double[] LoadStageThresoldsDown = { 13.7, 30.34, 47.01, 63.68, 80.35 }; diff --git a/VectoCore/VectoCore/Resources/Declaration/VAUXBus/SP-Factors_Bus.csv b/VectoCore/VectoCore/Resources/Declaration/VAUXBus/SP-Factors_Bus.csv index ecbbf8d08e27e1c138153fbd11a7bddd6ae2d43c..56e5ba12467a993476e47d6aea89928e9ba6fb9f 100644 --- a/VectoCore/VectoCore/Resources/Declaration/VAUXBus/SP-Factors_Bus.csv +++ b/VectoCore/VectoCore/Resources/Declaration/VAUXBus/SP-Factors_Bus.csv @@ -1,6 +1,7 @@ Technology , fullyelectric , tubing - Heavy Urban , tubing - Urban , tubing - Suburban , tubing - Interurban , tubing - Coach , axle - Heavy Urban , axle - Urban , axle - Suburban , axle - Interurban , axle - Coach , axle - VerificationTest , tubing - VerificationTest Fixed displacement , 0 , 1.00 , 1.00 , 1.00 , 1.00 , 1.00 , 1.00 , 1.00 , 1.00 , 1.00 , 1.00 , 1.0 , 1.0 Fixed displacement with elec. control , 0 , 0.95 , 0.95 , 0.95 , 0.95 , 0.95 , 1.00 , 1.00 , 1.00 , 1.00 , 1.00 , 1.0 , 0.95 +Dual displacement , 0 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 Dual displacement with mech. control , 0 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 Dual displacement with elec. control , 0 , 0.80 , 0.80 , 0.80 , 0.80 , 0.80 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.85 , 0.8 Variable displacement mech. controlled , 0 , 0.75 , 0.75 , 0.75 , 0.75 , 0.75 , 0.75 , 0.75 , 0.75 , 0.75 , 0.75 , 0.75 , 0.75 diff --git a/VectoCore/VectoCoreTest/Models/Declaration/InputDataSanityChecks.cs b/VectoCore/VectoCoreTest/Models/Declaration/InputDataSanityChecks.cs new file mode 100644 index 0000000000000000000000000000000000000000..3f8c30de253899158ad604ba717d9144ce16366f --- /dev/null +++ b/VectoCore/VectoCoreTest/Models/Declaration/InputDataSanityChecks.cs @@ -0,0 +1,130 @@ +using System.IO; +using System.Linq; +using System.Xml; +using Ninject; +using NUnit.Framework; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; +using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.Tests.Utils; + +namespace TUGraz.VectoCore.Tests.Models.Declaration +{ + [TestFixture] + public class InputDataSanityChecks + { + public const string HeavyLorryConventional = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.4\Distributed\HeavyLorry\Conventional_heavyLorry_AMT.xml"; + public const string MediumLorryConventional = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.4\Distributed\MediumLorry\Conventional_mediumLorry_AMT.xml"; + public const string PrimaryBusConventional = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.4\Distributed\PrimaryBus\Conventional_primaryBus_AMT.xml"; + + private IXMLInputDataReader _xmlInputReader; + + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + var kernel = new StandardKernel(new VectoNinjectModule()); + _xmlInputReader = kernel.Get<IXMLInputDataReader>(); + } + + [ + TestCase(HeavyLorryConventional, 1, "Fixed displacement"), + TestCase(HeavyLorryConventional, 2, "Fixed displacement", "Dual displacement"), + TestCase(HeavyLorryConventional, 2, "Full electric steering gear", "Electric driven pump"), + TestCase(HeavyLorryConventional, 1, "Full electric steering gear"), + + TestCase(MediumLorryConventional, 1, "Fixed displacement"), + TestCase(MediumLorryConventional, 2, "Fixed displacement", "Dual displacement"), + TestCase(MediumLorryConventional, 2, "Full electric steering gear", "Electric driven pump"), + TestCase(MediumLorryConventional, 1, "Full electric steering gear"), + + TestCase(PrimaryBusConventional, 1, "Fixed displacement"), + TestCase(PrimaryBusConventional, 2, "Fixed displacement", "Dual displacement"), + TestCase(PrimaryBusConventional, 2, "Full electric steering gear", "Electric driven pump"), + TestCase(PrimaryBusConventional, 1, "Full electric steering gear") + ] + public void TestCorrectNumberSteeredAxles(string jobFile, int numStreeredAxles, params string[] steeringPumpTechnologies) + { + var modified = GetModifiedXML(jobFile, numStreeredAxles, steeringPumpTechnologies); + + var writer = new FileOutputWriter("SanityCheckTest"); + + var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, modified, writer); + factory.WriteModalResults = true; + factory.Validate = false; + + var runs = factory.DataReader.NextRun().ToList(); + + Assert.IsTrue(runs.Count > 0); + } + + [ + TestCase(HeavyLorryConventional, 2, "Fixed displacement"), + TestCase(HeavyLorryConventional, 1, "Fixed displacement", "Dual displacement"), + TestCase(HeavyLorryConventional, 1, "Full electric steering gear", "Electric driven pump"), + TestCase(HeavyLorryConventional, 1, "Fixed displacement", "Dual displacement", "Full electric steering gear"), + + TestCase(MediumLorryConventional, 2, "Fixed displacement"), + TestCase(MediumLorryConventional, 1, "Fixed displacement", "Dual displacement"), + TestCase(MediumLorryConventional, 1, "Full electric steering gear", "Electric driven pump"), + TestCase(MediumLorryConventional, 1, "Fixed displacement", "Dual displacement", "Full electric steering gear"), + + TestCase(PrimaryBusConventional, 2, "Fixed displacement"), + TestCase(PrimaryBusConventional, 1, "Fixed displacement", "Dual displacement"), + TestCase(PrimaryBusConventional, 1, "Full electric steering gear", "Electric driven pump"), + TestCase(PrimaryBusConventional, 1, "Fixed displacement", "Dual displacement", "Full electric steering gear"), + ] + public void TestWrongNumberSteeredAxles(string jobFile, int numStreeredAxles, params string[] steeringPumpTechnologies) + { + var modified = GetModifiedXML(jobFile, numStreeredAxles, steeringPumpTechnologies); + + var writer = new FileOutputWriter("SanityCheckTest"); + + var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, modified, writer); + factory.WriteModalResults = true; + factory.Validate = false; + + AssertHelper.Exception<VectoException>(() => { + var runs = factory.DataReader.NextRun().ToList(); + }, messageContains: $"Number of steering pump technologies does not match number of steered axles ({numStreeredAxles}, {steeringPumpTechnologies.Length})"); + + } + + private IInputDataProvider GetModifiedXML(string jobFile, int numStreeredAxles, string[] steeringPumpTechnologies) + { + var inputXml = new XmlDocument(); + inputXml.Load(jobFile); + + var axleNodesSteered = inputXml.SelectNodes("//*[local-name()='Axle']/*[local-name()='Steered']"); + + var cnt = 0; + foreach (XmlNode steered in axleNodesSteered) { + steered.InnerText = cnt++ < numStreeredAxles ? "true" : "false"; + } + + var steeringPumpNode = inputXml.SelectSingleNode("//*[local-name()='SteeringPump']"); + steeringPumpNode.RemoveAll(); + cnt = 1; + foreach (var steeringPumpTechnology in steeringPumpTechnologies) { + var tech = inputXml.CreateElement("Technology", "urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.4"); + var val = inputXml.CreateTextNode(steeringPumpTechnology); + var attr = inputXml.CreateAttribute("axleNumber"); + var attrVal = inputXml.CreateTextNode(cnt.ToString()); + attr.AppendChild(attrVal); + tech.Attributes.Append(attr); + tech.AppendChild(val); + + steeringPumpNode.AppendChild(tech); + cnt++; + } + + var modified = XmlReader.Create(new StringReader(inputXml.OuterXml)); + + return _xmlInputReader.CreateDeclaration(modified); + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 740dfe35071066c83b42e041bc423b48311391ce..0d6a30ca91032ac382c94b56a1bf8662afe33629 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -144,6 +144,7 @@ <Compile Include="Models\Declaration\DeclarationSegmentComplete3AxleBusesTest.cs" /> <Compile Include="Models\Declaration\DeclarationSegmentComplete4AxleBusesTest.cs" /> <Compile Include="Models\Declaration\DeclarationSegmentHeavyBusesTest.cs" /> + <Compile Include="Models\Declaration\InputDataSanityChecks.cs" /> <Compile Include="Models\Declaration\ShiftPolygonTest.cs" /> <Compile Include="Models\EngineeringMode\EngineeringModeBusAuxTest.cs" /> <Compile Include="Models\SimulationComponentData\ElectricMotorEfficienyMapTest.cs" /> @@ -7006,18 +7007,6 @@ <Content Include="TestData\Integration\MediumLorries\vecto_vehicle-medium_lorry.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="TestData\Integration\Multistage\newVifCompletedConventional.RSLT_CUSTOMER.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="TestData\Integration\Multistage\newVifCompletedConventional.RSLT_MANUFACTURER.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="TestData\Integration\Multistage\newVifCompletedConventional.RSLT_MANUFACTURER_PRIMARY.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="TestData\Integration\Multistage\newVifCompletedConventional.VIF_Report_1.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> <Content Include="TestData\Integration\VTPMode\GenericVehicle XMLJob PTO\Tractor_4x2_vehicle-class-5_Generic vehicle.RSLT_MANUFACTURER.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -7111,9 +7100,6 @@ <Content Include="TestData\Integration\VTPMode\HeavyBus\vecto_vehicle-completed_heavyBus_34f.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="TestData\Integration\VTPMode\MediumLorry\vecto_vehicle-medium_lorry_4x2.RSLT_MANUFACTURER.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> <Content Include="TestData\Integration\VTPMode\MediumLorry\vecto_vehicle-medium_lorry_4x2.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content>