From 5bc4c7d88a680ae5d59c7316b519527635ad332d Mon Sep 17 00:00:00 2001 From: "VKMTHD\\haraldmartini" <harald.martini@student.tugraz.at> Date: Thu, 8 Sep 2022 15:29:49 +0200 Subject: [PATCH] created singlebus vehicle adapter --- .../IDeclarationDataAdapter.cs | 16 +++- .../VehicleDataAdapter.cs | 73 ++++++++++++++++--- .../DeclarationDataAdapterSingleBus.cs | 8 +- ...arationModeSingleBusVectoRunDataFactory.cs | 4 +- 4 files changed, 82 insertions(+), 19 deletions(-) diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs index ac355c2e70..83f7c24a64 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs @@ -14,8 +14,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter public interface IDeclarationDataAdapter { //DriverData CreateDriverData(); - VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational); - //AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment); + //AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment); //AxleGearData CreateAxleGearData(IAxleGearInputData axlegearData); //AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData); //CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode, Mission mission); @@ -27,7 +26,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter //PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData); //IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, IBusAuxiliariesDeclarationData busAuxData, MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles); //AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData); - } + VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission first, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> keyValuePair, bool allowVocational); + } public interface ILorryDeclarationDataAdapter : IDeclarationDataAdapter { @@ -60,6 +60,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, IBusAuxiliariesDeclarationData busAuxData, MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles); + + VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational); } public interface IPrimaryBusDeclarationDataAdapter : IDeclarationDataAdapter @@ -93,6 +95,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter Meter vehicleLength, int? numSteeredAxles); AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment); + VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational); } public interface IGenericCompletedBusDeclarationDataAdapter : IDeclarationDataAdapter @@ -125,6 +128,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter IAuxiliaryConfig CreateBusAuxiliariesData( Mission mission, IVehicleDeclarationInputData vehicleData, VectoRunData runData); + + VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational); } public interface ISpecificCompletedBusDeclarationDataAdapter @@ -146,7 +151,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter Mission mission); } - public interface ISingleBusDeclarationDataAdapter : IDeclarationDataAdapter + public interface ISingleBusDeclarationDataAdapter { AirdragData CreateAirdragData(IVehicleDeclarationInputData completedVehicle, Mission mission); CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, @@ -163,5 +168,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed); IEnumerable<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData, IBusAuxiliariesDeclarationData busAuxInput, MissionType mission, VehicleClass segment, Meter vehicleLength, int? numSteeredAxles); IAuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData primaryVehicle, IVehicleDeclarationInputData completedVehicle, VectoRunData simulationRunData); + + VehicleData CreateVehicleData(ISingleBusInputDataProvider vehicle, Segment segment, Mission mission, + KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational); } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs index 672a7373bc..73b5b2f50b 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs @@ -36,8 +36,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen } return null; - } - protected readonly IADASDataAdapter _adasDataAdapter = new ADASDataAdapter(); + } + internal static IADASDataAdapter _adasDataAdapter = new ADASDataAdapter(); internal static VehicleData SetCommonVehicleData(IVehicleDeclarationInputData data) { var retVal = new VehicleData @@ -95,12 +95,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen protected abstract VehicleData DoCreateExemptedVehicleData(IVehicleDeclarationInputData data); - #endregion - } - - internal class LorryVehicleDataAdapter : VehicleDataAdapter - { - protected override VehicleData DoCreateVehicleData(IVehicleDeclarationInputData data, + protected static VehicleData GetVehicleData(IVehicleDeclarationInputData data, Segment segment, Mission mission, Kilogram loading, double? passengerCount, bool allowVocational) { var retVal = SetCommonVehicleData(data); @@ -188,6 +183,16 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen retVal.AxleData = axleData; return retVal; } + #endregion + } + + internal class LorryVehicleDataAdapter : VehicleDataAdapter + { + protected override VehicleData DoCreateVehicleData(IVehicleDeclarationInputData data, + Segment segment, Mission mission, Kilogram loading, double? passengerCount, bool allowVocational) + { + return GetVehicleData(data, segment, mission, loading, passengerCount, allowVocational); + } protected override VehicleData DoCreateExemptedVehicleData(IVehicleDeclarationInputData data) { @@ -204,7 +209,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen } } - internal class PrimaryBusVehicleDataAdapter : LorryVehicleDataAdapter { #region Overrides of VehicleDataAdapter @@ -284,4 +288,55 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen #endregion } + + internal class SingleBusVehicleDataAdapter : VehicleDataAdapter + { + #region Overrides of VehicleDataAdapter + + public VehicleData CreateVehicleData(ISingleBusInputDataProvider data, Segment segment, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational) + { + var completedVehicle = data.CompletedVehicle; + var vehicle = data.JobInputData.Vehicle; + var busFloorArea = DeclarationData.BusAuxiliaries.CalculateBusFloorSurfaceArea( + completedVehicle.Length, + completedVehicle.Width); + var passengerCountRef = busFloorArea * (loading.Key == LoadingType.LowLoading + ? mission.BusParameter.PassengerDensityLow + : mission.BusParameter.PassengerDensityRef); + var passengerCountDecl = completedVehicle.NumberPassengerSeatsUpperDeck + + completedVehicle.NumberPassengerSeatsLowerDeck + + (mission.MissionType == MissionType.Coach + ? 0 + : completedVehicle.NumberPassengersStandingLowerDeck + + completedVehicle.NumberPassengersStandingUpperDeck); + + //var refLoad = passengerCount * mission.MissionType.GetAveragePassengerMass(); + if (loading.Key != LoadingType.ReferenceLoad && loading.Key != LoadingType.LowLoading) + { + throw new VectoException("Unhandled loading type: {0}", loading.Key); + } + + var passengerCountCalc = loading.Key == LoadingType.ReferenceLoad + ? VectoMath.Min(passengerCountRef, (int)passengerCountDecl) + : passengerCountRef * mission.MissionType.GetLowLoadFactorBus(); + var payload = passengerCountCalc * mission.MissionType.GetAveragePassengerMass(); + + var retVal = DoCreateVehicleData(vehicle, segment, mission, payload, passengerCountCalc, allowVocational); + retVal.CurbMass = completedVehicle.CurbMassChassis; + return retVal; + } + + protected override VehicleData DoCreateVehicleData(IVehicleDeclarationInputData data, Segment segment, Mission mission, Kilogram loading, + double? passengerCount, bool allowVocational) + { + return VehicleDataAdapter.GetVehicleData(data, segment, mission, loading, passengerCount, allowVocational); + } + + protected override VehicleData DoCreateExemptedVehicleData(IVehicleDeclarationInputData data) + { + throw new NotImplementedException(); + } + + #endregion + } } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs index 8fd3d1e7fd..bdafee1668 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs @@ -30,7 +30,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus private ICompletedBusAuxiliaryDataAdapter _busAuxiliaryDataAdapter = new SpecificCompletedBusAuxiliaryDataAdapter(new PrimaryBusAuxiliaryDataAdapter()); - private IVehicleDataAdapter _vehicleDataAdapter = new PrimaryBusVehicleDataAdapter(); + private SingleBusVehicleDataAdapter _vehicleDataAdapter = new SingleBusVehicleDataAdapter(); private IAxleGearDataAdapter _axleGearDataAdapter = new AxleGearDataAdapter(); private IDriverDataAdapter _driverDataAdapter = new PrimaryBusDriverDataAdapter(); private IAngledriveDataAdapter _angledriveDataAdapter = new AngledriveDataAdapter(); @@ -39,11 +39,11 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus #region Implementation of IDeclarationDataAdapter - public VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission mission, + public VehicleData CreateVehicleData(ISingleBusInputDataProvider vehicle, Segment segment, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational) { - return _vehicleDataAdapter.CreateVehicleData(vehicle, segment, mission, loading.Value.Item1, - loading.Value.Item2, allowVocational); + return _vehicleDataAdapter.CreateVehicleData(vehicle, segment, mission, loading + , allowVocational); } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs index 05559b092c..30f7c19699 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs @@ -108,7 +108,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus _segment = GetSegment(DataProvider); _driverdata = DataAdapter.CreateDriverData(); //PrimaryBus _driverdata.AccelerationCurve = AccelerationCurveReader.ReadFromStream(_segment.AccelerationFile); - var tempVehicle = DataAdapter.CreateVehicleData(vehicle, _segment, _segment.Missions.First(), + var tempVehicle = DataAdapter.CreateVehicleData(DataProvider, _segment, _segment.Missions.First(), _segment.Missions.First().Loadings.First(), _allowVocational); if (vehicle.AxleConfiguration.AxlegearIncludedInGearbox()) { @@ -161,7 +161,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus { InputData = DataProvider, Loading = loading.Key, - VehicleData = DataAdapter.CreateVehicleData(vehicle, _segment, mission, loading, _allowVocational), //Primary + VehicleData = DataAdapter.CreateVehicleData(singleBus, _segment, mission, loading, _allowVocational), //Primary AirdragData = DataAdapter.CreateAirdragData(completedVehicle, mission), //Single EngineData = DataAdapter.CreateEngineData(vehicle, engineMode, mission), //Primary ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(), -- GitLab