diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs index b2025930a03af6f64f4c004dfd19f784febfbf0f..28ba403db1cf3d01da0fb39b3d0ff4dfa7db3e1a 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs @@ -15,24 +15,23 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter { public interface IDeclarationDataAdapter { - //DriverData CreateDriverData(); - //AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment); - //AxleGearData CreateAxleGearData(IAxleGearInputData axlegearData); - //AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData); - //CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode, Mission mission); - //GearboxData CreateGearboxData( - // IVehicleDeclarationInputData inputData, VectoRunData runData, - // IShiftPolygonCalculator shiftPolygonCalc); - //ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed); - //RetarderData CreateRetarderData(IRetarderInputData retarderData); - //PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData); - //IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, IBusAuxiliariesDeclarationData busAuxData, MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles); - //AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData); - + DriverData CreateDriverData(Segment segment); + VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission first, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> keyValuePair, bool allowVocational); + + GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, + VectoRunData runData, + IShiftPolygonCalculator shiftPolygonCalc); + + ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount); + RetarderData CreateRetarderData(IRetarderInputData retarderData, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet); + + AxleGearData CreateAxleGearData(IAxleGearInputData axleGearInputData); + + AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData); - List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines( + List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines( IIEPCDeclarationInputData iepc, Volt averageVoltage); IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage, GearList gears = null); @@ -44,26 +43,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter public interface ILorryDeclarationDataAdapter : IDeclarationDataAdapter { - DriverData CreateDriverData(Segment segment); - - AxleGearData CreateAxleGearData(IAxleGearInputData axlegearData); - - AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData); AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData); - GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, - VectoRunData runData, - IShiftPolygonCalculator shiftPolygonCalc); - PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData, IGearboxDeclarationInputData gbx); PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto); - ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount); - - //VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission mission, - // KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational); - AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment); CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, @@ -73,13 +58,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter IBusAuxiliariesDeclarationData busAuxData, MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles, VectoSimulationJobType jobType); - - - //BatterySystemData CreateBatteryData(IElectricStorageSystemDeclarationInputData componentsElectricStorage, - // VectoSimulationJobType jobType, - // bool ovc); - //SuperCapData CreateSuperCapData(IElectricStorageSystemDeclarationInputData componentsElectricStorage); - HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType); @@ -101,19 +79,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter IAuxiliaryConfig CreateBusAuxiliariesData( Mission mission, IVehicleDeclarationInputData vehicleData, VectoRunData runData); - DriverData CreateDriverData(Segment segment); - AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData); - AxleGearData CreateAxleGearData(IAxleGearInputData axlegearData); - AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData); - - GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, - VectoRunData runData, - IShiftPolygonCalculator shiftPolygonCalc); - - ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, - GearboxType gearboxType, int gearsCount); - + CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode, Mission mission); @@ -145,27 +112,15 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter IBusAuxiliariesDeclarationData busAuxData, MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles, VectoSimulationJobType jobType); - AxleGearData CreateAxleGearData(IAxleGearInputData axlegearData); - - AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData); - - GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, - VectoRunData runData, - IShiftPolygonCalculator shiftPolygonCalc); - - ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, - GearboxType gearboxType, int gearsCount); - - DriverData CreateDriverData(Segment segment); - IAuxiliaryConfig CreateBusAuxiliariesData( Mission mission, IVehicleDeclarationInputData primaryVehicle, IVehicleDeclarationInputData completedVehicle, VectoRunData runData); - HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, + // serial hybrid strategy + HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType); - - HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, + // paralllel hybrid strategy + HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType, TableData boostingLimitations, GearboxData gearboxData, CombustionEngineData engineData, ArchitectureID architectureId); @@ -187,26 +142,15 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter AirdragData CreateAirdragData(IVehicleDeclarationInputData completedVehicle, Mission mission); - //CombustionEngineData CreateEngineData(IVehicleDeclarationInputData primaryVehicle, int modeIdx, - //Mission mission); - - } public interface ISingleBusDeclarationDataAdapter : IDeclarationDataAdapter { AirdragData CreateAirdragData(IVehicleDeclarationInputData completedVehicle, Mission mission); - CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, + CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode, Mission mission); - DriverData CreateDriverData(Segment segment); - AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gearboxInputData); - AxleGearData CreateAxleGearData(IAxleGearInputData axleGearInputData); - AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData); - GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, - VectoRunData runData, - IShiftPolygonCalculator shiftPolygonCalc); - - ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed); + + IEnumerable<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData, IBusAuxiliariesDeclarationData busAuxInput, MissionType mission, VehicleClass segment, Meter vehicleLength, int? numSteeredAxles, VectoSimulationJobType jobType); diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs index a0008e58cccf3e420d7674ea9caace02fc595f7d..30bb62ad3fcf176508548480471fd1bd61dbe491 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs @@ -94,10 +94,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus return _driverDataAdapter.CreateDriverData(segment); } - public virtual AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gearboxInputData) - { - return _axleGearDataAdapter.CreateDummyAxleGearData(gearboxInputData); - } + //public virtual AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gearboxInputData) + //{ + // return _axleGearDataAdapter.CreateDummyAxleGearData(gearboxInputData); + //} public virtual AxleGearData CreateAxleGearData(IAxleGearInputData axleGearInputData) { @@ -126,10 +126,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus throw new VectoException("PTO is not allowed for buses!"); } - public virtual ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, - PerSecond engineIdlingSpeed) + public virtual ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, GearboxType gbxType, int gearsCount) { - return GearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, gbx.Type, gbx.Gears.Count); + return GearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, gbxType, gearsCount); } public virtual IEnumerable<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData, @@ -271,7 +270,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter => throw new NotImplementedException(); - public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage, + protected override ICompletedBusAuxiliaryDataAdapter AuxDataAdapter { get; } = + new SpecificCompletedPEVBusAuxiliaryDataAdapter(); + + public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage, VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData) { var batteryData = _electricStorageAdapter.CreateBatteryData(componentsElectricStorage, jobType, ovc); diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs index 733daf7cf2f7d94fb9a45c3d0641b727c6508b49..b87792a0f4faaf29cf54f3523c8e696858f4a7e0 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs @@ -54,7 +54,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus return; } - _segment = GetSegment(SingleBusDataProvider); + _segment = GetSegment(); } @@ -74,6 +74,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus ExecutionMode = ExecutionMode.Declaration, JobName = SingleBusDataProvider.JobInputData.Vehicle .Identifier, //?!? Jobname + JobType = PrimaryVehicle.VehicleType, ModFileSuffix = $"_{_segment.VehicleClass.GetClassNumber()}_{loading.Key}", Report = Report, Mission = mission, @@ -87,27 +88,23 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus } #endregion - protected Segment GetSegment(ISingleBusInputDataProvider singleBus) + protected Segment GetSegment() { - var vehicle = singleBus.JobInputData.Vehicle; - var completedVehicle = singleBus.CompletedVehicle; - var primaryVehicle = singleBus.PrimaryVehicle; - var segment = DeclarationData.CompletedBusSegments.Lookup( - primaryVehicle.AxleConfiguration.NumAxles(), completedVehicle.VehicleCode, completedVehicle.RegisteredClass, completedVehicle.NumberPassengerSeatsLowerDeck, - completedVehicle.Height, completedVehicle.LowEntry); + PrimaryVehicle.AxleConfiguration.NumAxles(), CompletedVehicle.VehicleCode, CompletedVehicle.RegisteredClass, CompletedVehicle.NumberPassengerSeatsLowerDeck, + CompletedVehicle.Height, CompletedVehicle.LowEntry); if (!segment.Found) { throw new VectoException( "no segment found for vehicle configruation: vehicle category: {0}, axle configuration: {1}, articulated: {2}, vehicle code: {3}, registered class: {4}, passengersLowerDeck: {5}, height: {6}, lowfloor: {7}. completed", - vehicle.VehicleCategory, primaryVehicle.AxleConfiguration, - vehicle.Articulated, completedVehicle.VehicleCode, completedVehicle.RegisteredClass.GetLabel(), completedVehicle.NumberPassengerSeatsLowerDeck, - completedVehicle.Height, completedVehicle.LowEntry); + PrimaryVehicle.VehicleCategory, PrimaryVehicle.AxleConfiguration, + PrimaryVehicle.Articulated, CompletedVehicle.VehicleCode, CompletedVehicle.RegisteredClass.GetLabel(), CompletedVehicle.NumberPassengerSeatsLowerDeck, + CompletedVehicle.Height, CompletedVehicle.LowEntry); } foreach (var mission in segment.Missions) { - mission.VehicleHeight = completedVehicle.Height + mission.BusParameter.DeltaHeight; - mission.BusParameter.VehicleLength = completedVehicle.Length; + mission.VehicleHeight = CompletedVehicle.Height + mission.BusParameter.DeltaHeight; + mission.BusParameter.VehicleLength = CompletedVehicle.Length; } return segment; } @@ -185,12 +182,14 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus primaryVehicle.VehicleType); runData.GearboxData = DataAdapter.CreateGearboxData(primaryVehicle, runData, ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters)); + var gbxInput = primaryVehicle.Components.GearboxInputData; runData.GearshiftParameters = DataAdapter.CreateGearshiftData( - runData.GearboxData, (runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0), - primaryVehicle.EngineIdleSpeed + primaryVehicle.EngineIdleSpeed, + gbxInput.Type, + gbxInput.Gears.Count ); } @@ -369,12 +368,14 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus primaryVehicle.VehicleType); runData.GearboxData = DataAdapter.CreateGearboxData(primaryVehicle, runData, ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters)); + var gbxInput = primaryVehicle.Components.GearboxInputData; runData.GearshiftParameters = DataAdapter.CreateGearshiftData( - runData.GearboxData, (runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0), - primaryVehicle.EngineIdleSpeed + primaryVehicle.EngineIdleSpeed, + gbxInput.Type, + gbxInput.Gears.Count ); } } @@ -487,12 +488,14 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus PrimaryVehicle.VehicleType); runData.GearboxData = DataAdapter.CreateGearboxData(PrimaryVehicle, runData, ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters)); + var gbxInput = PrimaryVehicle.Components.GearboxInputData; runData.GearshiftParameters = DataAdapter.CreateGearshiftData( - runData.GearboxData, (runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0), - PrimaryVehicle.EngineIdleSpeed + PrimaryVehicle.EngineIdleSpeed, + gbxInput.Type, + gbxInput.Gears.Count ); } @@ -566,7 +569,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus vehicle.ElectricMotorTorqueLimits, result.BatteryData.CalculateAverageVoltage(), null); } - result.VehicleData = DataAdapter.CreateVehicleData(null, _segment, mission, loading, _allowVocational); + result.VehicleData = DataAdapter.CreateVehicleData(SingleBusDataProvider, _segment, mission, loading, _allowVocational); result.AirdragData = DataAdapter.CreateAirdragData(SingleBusDataProvider.CompletedVehicle, mission); if (AxleGearRequired() || vehicle.Components.AxleGearInputData != null) { result.AxleGearData = DataAdapter.CreateAxleGearData(vehicle.Components.AxleGearInputData); @@ -615,19 +618,21 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus throw new ArgumentException(nameof(SingleBusDataProvider.PrimaryVehicle)); } - var primaryVehicle = SingleBusDataProvider.PrimaryVehicle; - var shiftStrategyName = - PowertrainBuilder.GetShiftStrategyName(primaryVehicle.Components.GearboxInputData.Type, - primaryVehicle.VehicleType); - runData.GearboxData = DataAdapter.CreateGearboxData(primaryVehicle, runData, - ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters)); + var gbxInput = PrimaryVehicle.Components.GearboxInputData; runData.GearshiftParameters = DataAdapter.CreateGearshiftData( - runData.GearboxData, (runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0), - primaryVehicle.EngineIdleSpeed + null, + gbxInput.Type, + gbxInput.Gears.Count ); + var shiftStrategyName = + PowertrainBuilder.GetShiftStrategyName(PrimaryVehicle.Components.GearboxInputData.Type, + PrimaryVehicle.VehicleType); + runData.GearboxData = DataAdapter.CreateGearboxData(PrimaryVehicle, runData, + ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters)); + } } diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs b/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs index 18ef6f19f8a3f528bbc6b345e5231dc4e9e0c776..8a45dc7446f40e86f67e03850c8243bb79d8dab0 100644 --- a/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs +++ b/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs @@ -89,8 +89,8 @@ public class PrimaryBusSimulation [ TestCase(@"PrimaryBus/Conventional/primary_heavyBus group41_nonSmart.xml", @"Conventional_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus Conventional"), + TestCase(@"PrimaryBus/PEV/PEV_primaryBus_AMT_E2.xml", @"PEV_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus PEV E2"), - TestCase(@"PrimaryBus/PEV/PrimaryCoach_E2_Base_AMT.xml", @"PEV_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus Coach PEV E2 Base"), TestCase(@"PrimaryBus/PEV/PrimaryCityBus_IEPC_Base.xml", @"PEV_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus CityBus PEV IEPC Base"),