Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 7b9473c2 authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

Merge pull request #801 in VECTO/vecto-sim from...

Merge pull request #801 in VECTO/vecto-sim from ~EMQUARIMA/vecto-sim:feature/VECTO-1194-handling-input-parameter-vocational-for-groups-other-than-4-5-9-10 to develop

* commit '73c49ca5':
  remove wrongly added testcases - handling of vocational is done in factory, not segmentation lookup
  declarationmode factory: in case no segment was found, try again with vocational set to false; additional parameter in dataobjectadapter to overwrite vocational field from input in case no segment with vocational was found.
  addingtestcases to simulate vocational vehicles other than 4, 5, 9 10
parents 76725a04 73c49ca5
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......
......@@ -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;
......
......@@ -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,
......
......@@ -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,
......
using System.IO;
using System.Linq;
using System.Xml;
using System.Xml.XPath;
using Ninject;
using NUnit.Framework;
using NUnit.Framework.Internal;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Resources;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.InputData.FileIO.XML;
using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
using TUGraz.VectoCore.Models.Simulation.Impl;
using TUGraz.VectoCore.OutputData;
using TUGraz.VectoCore.OutputData.FileIO;
using TUGraz.VectoCore.OutputData.XML;
using TUGraz.VectoCore.Utils;
namespace TUGraz.VectoCore.Tests.Models.Declaration.DataAdapter
{
[TestFixture()]
public class DeclarationAdapterCreateVocationalVehicleTest
{
protected IXMLInputDataReader xmlInputReader;
private IKernel _kernel;
[OneTimeSetUp]
public void RunBeforeAnyTests()
{
Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
_kernel = new StandardKernel(new VectoNinjectModule());
xmlInputReader = _kernel.Get<IXMLInputDataReader>();
}
[TestCase(@"Rigid Truck_4x2_vehicle-class-1_EURO6_2018.xml"),
TestCase(@"Rigid Truck_4x2_vehicle-class-2_EURO6_2018.xml"),
TestCase(@"Rigid Truck_4x2_vehicle-class-3_EURO6_2018.xml"),
TestCase(@"Rigid Truck_6x4_vehicle-class-11_EURO6_2018.xml"),
TestCase(@"Rigid Truck_8x4_vehicle-class-16_EURO6_2018.xml"),
TestCase(@"Tractor_6x4_vehicle-class-12_EURO6_2018.xml"),
]
public void TestCreateDeclarationVocationalVehicle(string jobfile)
{
var reader = XmlReader.Create(Path.Combine(@"TestData/XML/XMLReaderDeclaration/GroupTest", jobfile));
var doc = new XmlDocument();
doc.Load(reader);
var nav = doc.CreateNavigator();
var manager = new XmlNamespaceManager(nav.NameTable);
var helper = new XPathHelper(ExecutionMode.Declaration);
helper.AddNamespaces(manager);
var vocational = nav.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Component_Vehicle, XMLNames.Vehicle_VocationalVehicle));
vocational.SetValue(true.ToString().ToLower());
var modified = XmlReader.Create(new StringReader(nav.OuterXml));
var dataProvider = xmlInputReader.CreateDeclaration(modified);
var xmlReport = new XMLDeclarationReport();
var sumData = new SummaryDataContainer(null);
var jobContainer = new JobContainer(sumData);
var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, null, xmlReport) {
WriteModalResults = false,
Validate = false,
};
jobContainer.AddRuns(runsFactory);
// no need to run the simulation, we only check whether the meta-data is correct, no results are considered
//jobContainer.Execute();
//jobContainer.WaitFinished();
xmlReport.DoWriteReport();
var manufacturerReport = xmlReport.FullReport;
Assert.IsFalse(XmlConvert.ToBoolean(manufacturerReport.XPathSelectElement(XMLHelper.QueryLocalName(XMLNames.Vehicle_VocationalVehicle))?.Value ?? ""));
}
}
}
......@@ -590,46 +590,56 @@ 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.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.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.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.Tractor, AxleConfiguration.AxleConfig_6x4, 7500, 0, false, VehicleClass.Class12),
TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x4, 99000, 0, false, 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),
]
public void SegmentLookupTest(VehicleCategory category, AxleConfiguration axleConfiguration, double grossWeight,
double curbWeight, bool vocational, VehicleClass expectedClass)
......
......@@ -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>();
......
......@@ -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" />
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment