diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index 90a9f182aaec69ef17dfad73bc48f7dfe439c486..dde47c8190239717692b5e9a747dbd7fcdb90db0 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -112,7 +112,7 @@ Public Class Vehicle Dim segment As Segment = DeclarationData.Segments.Lookup(vehicle.VehicleCategory, vehicle.AxleConfiguration, vehicle.GrossVehicleMassRating, vehicle.CurbMassChassis, false) vehicleData = doa.CreateVehicleData(vehicle, segment.Missions.First(), - segment.Missions.First().Loadings.First().Value) + segment.Missions.First().Loadings.First().Value, true) airdragData = doa.CreateAirdragData(vehicle, segment.Missions.First(), segment) retarderData = doa.CreateRetarderData(vehicle) angledriveData = doa.CreateAngledriveData(vehicle) diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs index 098b5d1e511a1c205ee0f9f451b71860c4147928..addf852baa6a28db2dceb8f3190acf07d52f3761 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs @@ -79,18 +79,18 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter return retVal; } - internal VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Mission mission, Kilogram loading) + internal VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Mission mission, Kilogram loading, bool allowVocational) { if (!data.SavedInDeclarationMode) { WarnDeclarationMode("VehicleData"); } return data.ExemptedVehicle ? CreateExemptedVehicleData(data) - : CreateNonExemptedVehicleData(data, mission, loading); + : CreateNonExemptedVehicleData(data, mission, loading, allowVocational); } private VehicleData CreateNonExemptedVehicleData( - IVehicleDeclarationInputData data, Mission mission, Kilogram loading) + IVehicleDeclarationInputData data, Mission mission, Kilogram loading, bool allowVocational) { var retVal = SetCommonVehicleData(data); retVal.AxleConfiguration = data.AxleConfiguration; @@ -111,7 +111,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter .Average(); retVal.CargoVolume = mission.MissionType != MissionType.Construction ? mission.TotalCargoVolume : 0.SI<CubicMeter>(); - retVal.VocationalVehicle = data.VocationalVehicle; + retVal.VocationalVehicle = allowVocational && data.VocationalVehicle; retVal.ADAS = CreateADAS(data.ADAS); var axles = data.Components.AxleWheels.AxlesDeclaration; diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs index 041f8e37e0f3aef2f7f65ae5d3f59b054c279273..eba281e270f221d52660d8d17a374bb018339e69 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs @@ -59,6 +59,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl protected IDeclarationReport Report; private DeclarationDataAdapter _dao; private Segment _segment; + private bool allowVocational; private DriverData _driverdata; private AirdragData _airdragData; private CombustionEngineData _engineData; @@ -74,7 +75,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl { InputDataProvider = dataProvider; Report = report; - + allowVocational = true; try { Initialize(); if (Report != null) { @@ -92,11 +93,23 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl if (vehicle.ExemptedVehicle) { return; } - _segment = GetVehicleClassification(vehicle.VehicleCategory, - vehicle.AxleConfiguration, - vehicle.GrossVehicleMassRating, - vehicle.CurbMassChassis, - vehicle.VocationalVehicle); + + try { + _segment = GetVehicleClassification( + vehicle.VehicleCategory, + vehicle.AxleConfiguration, + vehicle.GrossVehicleMassRating, + vehicle.CurbMassChassis, + vehicle.VocationalVehicle); + } catch (VectoException) { + allowVocational = false; + _segment = GetVehicleClassification( + vehicle.VehicleCategory, + vehicle.AxleConfiguration, + vehicle.GrossVehicleMassRating, + vehicle.CurbMassChassis, + false); + } if (!_segment.Found) { throw new VectoException( "no segment found for vehicle configruation: vehicle category: {0}, axle configuration: {1}, GVMR: {2}", @@ -106,7 +119,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl _driverdata = _dao.CreateDriverData(); _driverdata.AccelerationCurve = AccelerationCurveReader.ReadFromStream(_segment.AccelerationFile); var tempVehicle = _dao.CreateVehicleData(vehicle, _segment.Missions.First(), - _segment.Missions.First().Loadings.First().Value); + _segment.Missions.First().Loadings.First().Value, allowVocational); _airdragData = _dao.CreateAirdragData(vehicle.Components.AirdragInputData, _segment.Missions.First(), _segment); _engineData = _dao.CreateEngineData(vehicle.Components.EngineInputData, @@ -130,7 +143,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl if (InputDataProvider.JobInputData.Vehicle.ExemptedVehicle) { powertrainConfig = new VectoRunData() { Exempted = true, - VehicleData = _dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, null, null), + VehicleData = _dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, null, null, allowVocational), InputDataHash = InputDataProvider.XMLHash }; } else { @@ -138,7 +151,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl VehicleData = _dao.CreateVehicleData( InputDataProvider.JobInputData.Vehicle, _segment.Missions.First(), - _segment.Missions.First().Loadings.First().Value), + _segment.Missions.First().Loadings.First().Value, allowVocational), AirdragData = _airdragData, EngineData = _engineData, GearboxData = _gearboxData, @@ -168,7 +181,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl Exempted = true, Report = Report, Mission = new Mission() { MissionType = MissionType.ExemptedMission}, - VehicleData = _dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, null, null), + VehicleData = _dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, null, null, allowVocational), InputDataHash = InputDataProvider.XMLHash }; } else { @@ -201,7 +214,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl var simulationRunData = new VectoRunData { Loading = loading.Key, VehicleDesignSpeed = _segment.DesignSpeed, - VehicleData = _dao.CreateVehicleData(vehicle, mission, loading.Value), + VehicleData = _dao.CreateVehicleData(vehicle, mission, loading.Value, allowVocational), AirdragData = _dao.CreateAirdragData(vehicle.Components.AirdragInputData, mission, _segment), EngineData = _engineData.Copy(), // a copy is necessary because every run has a different correction factor! GearboxData = _gearboxData, diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs index b89cbc6dc7c188fdd546e048f542d9b9505972b6..5f812b4ddead01e1d581a3cc9d3666ae4db08784 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs @@ -59,6 +59,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl protected PTOData PTOTransmissionData; protected List<VectoRunData.AuxData> AuxVTP; protected Segment Segment; + protected bool allowVocational; protected DeclarationDataAdapter Dao; protected Exception InitException; @@ -71,6 +72,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl { JobInputData = job; Report = report; + allowVocational = true; try { Initialize(); if (Report != null) { @@ -87,7 +89,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl VehicleData = Dao.CreateVehicleData( JobInputData.Vehicle, Segment.Missions.First(), - Segment.Missions.First().Loadings.First().Value), + Segment.Missions.First().Loadings.First().Value, allowVocational), AirdragData = AirdragData, EngineData = EngineData, GearboxData = GearboxData, @@ -111,17 +113,27 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl { Dao = new DeclarationDataAdapter(); var vehicle = JobInputData.Vehicle; - Segment = DeclarationData.Segments.Lookup( - vehicle.VehicleCategory, - vehicle.AxleConfiguration, - vehicle.GrossVehicleMassRating, - vehicle.CurbMassChassis, - vehicle.VocationalVehicle); + try { + Segment = DeclarationData.Segments.Lookup( + vehicle.VehicleCategory, + vehicle.AxleConfiguration, + vehicle.GrossVehicleMassRating, + vehicle.CurbMassChassis, + vehicle.VocationalVehicle); + } catch (VectoException) { + allowVocational = false; + Segment = DeclarationData.Segments.Lookup( + vehicle.VehicleCategory, + vehicle.AxleConfiguration, + vehicle.GrossVehicleMassRating, + vehicle.CurbMassChassis, + false); + } Driverdata = Dao.CreateDriverData(); Driverdata.AccelerationCurve = AccelerationCurveReader.ReadFromStream(Segment.AccelerationFile); var tempVehicle = Dao.CreateVehicleData( vehicle, Segment.Missions.First(), - Segment.Missions.First().Loadings.First().Value); + Segment.Missions.First().Loadings.First().Value, allowVocational); AirdragData = Dao.CreateAirdragData( vehicle.Components.AirdragInputData, Segment.Missions.First(), Segment); @@ -226,7 +238,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl AngledriveData = AngledriveData, VehicleData = Dao.CreateVehicleData( JobInputData.Vehicle, mission, - loading), + loading, allowVocational), AirdragData = AirdragData, DriverData = null, AdvancedAux = null, diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs index 73ee6dfb09fcd741b13630e662597bfcf7b8c602..bb6bed91d383d781e850f43483c67b8e4164342f 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs @@ -590,46 +590,62 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 7500.01, 0, false, VehicleClass.Class1), TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 10000, 0, false, VehicleClass.Class1), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 10000, 0, false, VehicleClass.Class1), + TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 10000, 0, true, VehicleClass.Class1), + TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 10001, 0, false, VehicleClass.Class2), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 10001, 0, false, VehicleClass.Class2), TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 12000, 0, false, VehicleClass.Class2), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 12000, 0, false, VehicleClass.Class2), + TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 12000, 0, true, VehicleClass.Class2), + TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 12001, 0, false, VehicleClass.Class3), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 12001, 0, false, VehicleClass.Class3), TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 16000, 0, false, VehicleClass.Class3), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 16000, 0, false, VehicleClass.Class3), + TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 16000, 0, true, VehicleClass.Class3), + TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 16001, 0, false, VehicleClass.Class4), TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 99000, 0, false, VehicleClass.Class4), TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 16001, 0, true, VehicleClass.Class4), TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 99000, 0, true, VehicleClass.Class4), + TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 16001, 0, false, VehicleClass.Class5), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 99000, 0, false, VehicleClass.Class5), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 16001, 0, true, VehicleClass.Class5), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 99000, 0, true, VehicleClass.Class5), + //TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x4, 7500, 0, VehicleClass.Class6), //TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x4, 16000, 0, VehicleClass.Class6), //TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x4, 16001, 0, VehicleClass.Class7), //TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x4, 99000, 0, VehicleClass.Class7), //TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x4, 16000, 0, VehicleClass.Class8), //TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x4, 99000, 0, VehicleClass.Class8), + TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x2, 7500, 0, false, VehicleClass.Class9), TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x2, 16000, 0, false, VehicleClass.Class9), TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x2, 40000, 0, false, VehicleClass.Class9), TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x2, 99000, 0, false, VehicleClass.Class9), TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x2, 7500, 0, true, VehicleClass.Class9), TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x2, 99000, 0, true, VehicleClass.Class9), + TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x2, 7500, 0, false, VehicleClass.Class10), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x2, 16000, 0, false, VehicleClass.Class10), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x2, 40000, 0, false, VehicleClass.Class10), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x2, 99000, 0, false, VehicleClass.Class10), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x2, 7500, 0, true, VehicleClass.Class10), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x2, 99000, 0, true, VehicleClass.Class10), + TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x4, 7500, 0, false, VehicleClass.Class11), TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x4, 40000, 0, false, VehicleClass.Class11), + TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x4, 40000, 0, true, VehicleClass.Class11), + TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x4, 7500, 0, false, VehicleClass.Class12), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x4, 99000, 0, false, VehicleClass.Class12), + TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x4, 99000, 0, true, VehicleClass.Class12), + TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_8x4, 7500, 0, false, VehicleClass.Class16), - TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_8x4, 99000, 0, false, VehicleClass.Class16) + TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_8x4, 99000, 0, false, VehicleClass.Class16), + TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_8x4, 99000, 0, true, VehicleClass.Class16) ] public void SegmentLookupTest(VehicleCategory category, AxleConfiguration axleConfiguration, double grossWeight, double curbWeight, bool vocational, VehicleClass expectedClass) diff --git a/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs index 15407f73662ef2c8d33d2f13ee5a74c0ad024e6f..390ea45158c37115efdc708d1a68a1765e5e576c 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs @@ -879,7 +879,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration var segment = DeclarationData.Segments.Lookup( vehicle.VehicleCategory, vehicle.AxleConfiguration, vehicle.GrossVehicleMassRating, vehicle.CurbMassChassis, false); - var vehicleData = dao.CreateVehicleData(inputData.JobInputData.Vehicle, segment.Missions.First(), 0.SI<Kilogram>()); + var vehicleData = dao.CreateVehicleData(inputData.JobInputData.Vehicle, segment.Missions.First(), 0.SI<Kilogram>(), true); var rdyn = vehicleData.DynamicTyreRadius; var shiftPolygons = new List<ShiftPolygon>(); diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index d3029b8ae1dbd163c14bfc57e1153bc6f12099ac..e42c9e0937d7ec2a8c4882ca57f016f8a8b0b3df 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -117,6 +117,7 @@ <Compile Include="Integration\TorqueLimitsTest.cs" /> <Compile Include="Integration\XMLReportTest.cs" /> <Compile Include="Models\Declaration\AirdragDefaultValuesTest.cs" /> + <Compile Include="Models\Declaration\DataAdapter\DeclarationAdapterCreateVocationalVehicleTest.cs" /> <Compile Include="Models\Declaration\DataAdapter\DeclarationAdapterTestHelper.cs" /> <Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class5.cs" /> <Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class2.cs" />