diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs index 31301306d7ef5067cdfa58731a25d11e15c911a4..8665b7c63e691acbee9457bf9300fa36abc238bb 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs @@ -29,7 +29,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Gener private readonly IDriverDataAdapterBus _driverDataAdapter = new CompletedBusGenericDriverDataAdapter(); //protected readonly IVehicleDataAdapter _vehicleDataAdapter = new CompletedBusGenericVehicleDataAdapter(); private readonly IAxleGearDataAdapter _axleGearDataAdapter = new GenericCompletedBusAxleGearDataAdapter(); - private readonly IRetarderDataAdapter _retarderDataAdapter = new GenericRetarderDataAdapter(); + private readonly IGenericRetarderDataAdapter _retarderDataAdapter = new GenericRetarderDataAdapter(); private readonly IAirdragDataAdapter _airdragDataAdapter = new AirdragDataAdapter(); private readonly IAngledriveDataAdapter _angledriveDataAdapter = new GenericAngledriveDataAdapter(); #endregion @@ -106,7 +106,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Gener public RetarderData CreateRetarderData(IRetarderInputData retarderData, ArchitectureID archID, IIEPCDeclarationInputData iepcInputData) { - return _retarderDataAdapter.CreateRetarderData(retarderData, archID, iepcInputData); + throw new NotImplementedException("No longer applicable to buses."); + } + + public RetarderData CreateGenericRetarderData(IRetarderInputData retarderData, VectoRunData vectoRun) + { + return _retarderDataAdapter.CreateGenericRetarderData(retarderData, vectoRun); } public virtual IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs index 8e15523d15a05089c4400c479a197f499452d1c5..17d8269fe4e14e7148851b297a79d68400fa0666 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs @@ -64,7 +64,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry private readonly IDriverDataAdapter _driverDataAdapter = new LorryDriverDataAdapter(); //protected readonly IVehicleDataAdapter _vehicleDataAdapter = new LorryVehicleDataAdapter(); private readonly IAxleGearDataAdapter _axleGearDataAdapter = new AxleGearDataAdapter(); - private readonly IRetarderDataAdapter _retarderDataAdapter = new RetarderDataAdapter(); + private readonly IGenericRetarderDataAdapter _retarderDataAdapter = new GenericRetarderDataAdapter(); private readonly IAirdragDataAdapter _airdragDataAdapter = new AirdragDataAdapter(); private IAngledriveDataAdapter _angleDriveDataAdapter = new AngledriveDataAdapter(); @@ -219,6 +219,11 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry { return ElectricMachinesDataAdapter.CreateIEPCElectricMachines(iepc, averageVoltage); } + + public RetarderData CreateGenericRetarderData(IRetarderInputData retarderData, VectoRunData vectoRun) + { + return _retarderDataAdapter.CreateGenericRetarderData(retarderData, vectoRun); + } } public class Conventional : LorryBase diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs index 41219add0f0722d460176995d521cf09f83d8e10..ed6d927bb7989bc281705ad31a70f18eb47335dc 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs @@ -16,8 +16,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter { public interface IDeclarationDataAdapter { - - VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission first, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> keyValuePair, bool allowVocational); GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, @@ -28,7 +26,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter RetarderData CreateRetarderData(IRetarderInputData retarderData, ArchitectureID archID, IIEPCDeclarationInputData iepcInputData); - + AxleGearData CreateAxleGearData(IAxleGearInputData axleGearInputData); AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData); @@ -108,6 +106,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter GearboxData gearboxData, CombustionEngineData engineData, IList<Tuple<PowertrainPosition, ElectricMotorData>> runDataElectricMachinesData, ArchitectureID architectureId); + + RetarderData CreateGenericRetarderData(IRetarderInputData retarderData, VectoRunData vectoRun); } public interface IGenericCompletedBusDeclarationDataAdapter : IDeclarationDataAdapter @@ -135,7 +135,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter GearboxData gearboxData, CombustionEngineData engineData, IList<Tuple<PowertrainPosition, ElectricMotorData>> runDataElectricMachinesData, ArchitectureID architectureId); - } + RetarderData CreateGenericRetarderData(IRetarderInputData retarderData, VectoRunData vectoRun); + } public interface ISpecificCompletedBusDeclarationDataAdapter { @@ -177,5 +178,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter SuperCapData runDataSuperCapData, Kilogram vehicleMass, OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType, TableData boostingLimitations, GearboxData gearboxData, CombustionEngineData engineData, IList<Tuple<PowertrainPosition, ElectricMotorData>> emData, ArchitectureID architectureId); - } + + RetarderData CreateGenericRetarderData(IRetarderInputData retarderData, VectoRunData vectoRun); + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs index a731f58b8bd743594522fc2d45cb7703430cd4b5..3a225dfd96ba226f9bd249fd4ce7d9128112c301 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs @@ -29,7 +29,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus //protected readonly IVehicleDataAdapter _vehicleDataAdapter = new PrimaryBusVehicleDataAdapter(); protected readonly IAxleGearDataAdapter _axleGearDataAdapter = new AxleGearDataAdapter(); //protected readonly IPrimaryBusAuxiliaryDataAdapter _auxDataAdapter = new PrimaryBusAuxiliaryDataAdapter(); - protected readonly IRetarderDataAdapter _retarderDataAdapter = new RetarderDataAdapter(); + protected readonly IGenericRetarderDataAdapter _retarderDataAdapter = new GenericRetarderDataAdapter(); protected readonly IAirdragDataAdapter _airdragDataAdapter = new AirdragDataAdapter(); private readonly IAngledriveDataAdapter _angledriveDataAdapter = new AngledriveDataAdapter(); @@ -169,6 +169,11 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus { return AuxDataAdapter.CreateBusAuxiliariesData(mission, vehicleData, runData); } + + public RetarderData CreateGenericRetarderData(IRetarderInputData retarderData, VectoRunData vectoRun) + { + return _retarderDataAdapter.CreateGenericRetarderData(retarderData, vectoRun); + } } public class Conventional : PrimaryBusBase diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs index 7214b9fc45693d6748f31c2468e691d43b553ae0..3b9a506d244484d526382bf41127da733ab72be6 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs @@ -1,4 +1,5 @@ using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces @@ -8,4 +9,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen RetarderData CreateRetarderData(IRetarderInputData retarder, ArchitectureID architecture, IIEPCDeclarationInputData iepcInputData); } + + public interface IGenericRetarderDataAdapter : IRetarderDataAdapter + { + RetarderData CreateGenericRetarderData(IRetarderInputData retarder, VectoRunData vehicleData); + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs index 3c48be3ca2744f02e83b6a6fa08e8ed9c2125db6..1d644e5ea61ced7127e8cc59bd84f97950d97613 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs @@ -6,6 +6,7 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.Reader.ComponentData; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents @@ -122,9 +123,26 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen } - public class GenericRetarderDataAdapter : IRetarderDataAdapter + public class GenericRetarderDataAdapter : IGenericRetarderDataAdapter { private readonly GenericBusRetarderData _genericRetarderData = new GenericBusRetarderData(); + + public RetarderData CreateGenericRetarderData(IRetarderInputData retarder, VectoRunData vehicleData) + { + bool isBatteryElectric = + vehicleData.JobType == VectoSimulationJobType.BatteryElectricVehicle + || vehicleData.JobType == VectoSimulationJobType.IEPC_E; + + PerSecond maxMotorSpeed = isBatteryElectric + ? vehicleData.ElectricMachinesData[0].Item2.EfficiencyData.MaxSpeed + : vehicleData.EngineData.FullLoadCurves[0].MaxSpeed; + + double maxGbxRatio = vehicleData.GearboxData?.Gears[(uint)vehicleData.GearboxData.Gears.Count].Ratio ?? 1; + double combinedRatios = isBatteryElectric ? maxGbxRatio * vehicleData.ElectricMachinesData[0].Item2.RatioADC : maxGbxRatio; + + return _genericRetarderData.CreateGenericBusRetarderData(retarder, maxMotorSpeed, combinedRatios); + } + public RetarderData CreateRetarderData(IRetarderInputData retarder, ArchitectureID architecture, IIEPCDeclarationInputData iepcInputData) { diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs index bfa64a6460589517d32eeab7a1887e70b1f66b17..a37cc650c39ace7c1a8cce0c05284aa2f48cd445 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 IDriverDataAdapterBus _driverDataAdapter = new PrimaryBusDriverDataAdapter(); private SingleBusVehicleDataAdapter _vehicleDataAdapter = new SingleBusVehicleDataAdapter(); private IAxleGearDataAdapter _axleGearDataAdapter = new AxleGearDataAdapter(); - private IRetarderDataAdapter _retarderDataAdapter = new RetarderDataAdapter(); + private IGenericRetarderDataAdapter _retarderDataAdapter = new GenericRetarderDataAdapter(); private IAirdragDataAdapter _airdragDataAdapter = new SingleBusAirdragDataAdapter(); private IAngledriveDataAdapter _angledriveDataAdapter = new AngledriveDataAdapter(); @@ -175,6 +175,11 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData); + public RetarderData CreateGenericRetarderData(IRetarderInputData retarderData, VectoRunData vectoRun) + { + return _retarderDataAdapter.CreateGenericRetarderData(retarderData, vectoRun); + } + #endregion } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs index 0554ca45c685cf4eacf2788161bb9ff350b899af..78083b3bfce00e6a47917826509aad9464ff334f 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs @@ -265,13 +265,9 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun PrimaryVehicle.Components.AuxiliaryInputData, primaryBusAuxiliaries, mission.MissionType, primarySegment.VehicleClass, mission.BusParameter.VehicleLength, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType); - simulationRunData.Retarder = - DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID, PrimaryVehicle.Components.IEPC); simulationRunData.EngineData.FuelMode = 0; simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass; - simulationRunData.BusAuxiliaries = - DataAdapterGeneric.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, simulationRunData); var shiftStrategyName = PowertrainBuilder.GetShiftStrategyName(PrimaryVehicle.Components.GearboxInputData.Type, PrimaryVehicle.VehicleType); @@ -282,7 +278,11 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun DataAdapterGeneric.CreateGearshiftData((simulationRunData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (simulationRunData.AngledriveData?.Angledrive.Ratio ?? 1.0), PrimaryVehicle.EngineIdleSpeed, gbx.Type, gbx.Gears.Count); - return simulationRunData; + simulationRunData.Retarder = + DataAdapterGeneric.CreateGenericRetarderData(PrimaryVehicle.Components.RetarderInputData, simulationRunData); + simulationRunData.BusAuxiliaries = + DataAdapterGeneric.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, simulationRunData); + return simulationRunData; } protected override VectoRunData CreateVectoRunDataSpecific(Mission mission, @@ -305,14 +305,15 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun PrimaryVehicle.Components.AuxiliaryInputData, PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, CompletedVehicle.Length, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType); - simulationRunData.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID, PrimaryVehicle.Components.IEPC); simulationRunData.EngineData.FuelMode = 0; simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass; - simulationRunData.BusAuxiliaries = - DataAdapterSpecific.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, - simulationRunData); CreateGearboxAndGearshiftData(simulationRunData); + simulationRunData.Retarder = + DataAdapterGeneric.CreateGenericRetarderData(PrimaryVehicle.Components.RetarderInputData, simulationRunData); + simulationRunData.BusAuxiliaries = + DataAdapterSpecific.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, simulationRunData); + return simulationRunData; } @@ -457,9 +458,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun iepcData.ForEach(iepc => rd.ElectricMachinesData.Add(iepc)); } - - - var primaryBusAuxiliaries = PrimaryVehicle.Components.BusAuxiliaries; rd.VehicleData = @@ -476,17 +474,16 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun PrimaryVehicle.Components.AuxiliaryInputData, primaryBusAuxiliaries, mission.MissionType, primarySegment.VehicleClass, mission.BusParameter.VehicleLength, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType); - rd.Retarder = - DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID, PrimaryVehicle.Components.IEPC); rd.EngineData.FuelMode = 0; rd.VehicleData.VehicleClass = _segment.VehicleClass; - rd.BusAuxiliaries = - DataAdapterGeneric.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, rd); - CreateGearboxAndGearshiftData(rd); + rd.Retarder = + DataAdapterGeneric.CreateGenericRetarderData(PrimaryVehicle.Components.RetarderInputData, rd); + rd.BusAuxiliaries = + DataAdapterGeneric.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, rd); - rd.HybridStrategyParameters = + rd.HybridStrategyParameters = DataAdapterGeneric.CreateHybridStrategy(rd.BatteryData, rd.SuperCapData, rd.VehicleData.TotalVehicleMass, ovcHevMode, loading.Key, rd.VehicleData.VehicleClass, mission.MissionType); @@ -543,12 +540,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun PrimaryVehicle.Components.AuxiliaryInputData, PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, CompletedVehicle.Length, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType); - rd.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID, PrimaryVehicle.Components.IEPC); rd.EngineData.FuelMode = 0; rd.VehicleData.VehicleClass = _segment.VehicleClass; - rd.BusAuxiliaries = - DataAdapterSpecific.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, - rd); CreateGearboxAndGearshiftData(rd); @@ -560,6 +553,10 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun rd.Loading, rd.VehicleData.VehicleClass, rd.Mission.MissionType); + rd.Retarder = DataAdapterGeneric.CreateGenericRetarderData(PrimaryVehicle.Components.RetarderInputData, rd); + rd.BusAuxiliaries = + DataAdapterSpecific.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, + rd); SetOvcModeProperties(ovcMode, rd); @@ -693,13 +690,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun PrimaryVehicle.Components.AuxiliaryInputData, primaryBusAuxiliaries, mission.MissionType, primarySegment.VehicleClass, mission.BusParameter.VehicleLength, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType); - rd.Retarder = - DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.VehicleType == VectoSimulationJobType.IHPC ? ArchitectureID.P_IHPC : PrimaryVehicle.ArchitectureID, PrimaryVehicle.Components.IEPC); - rd.EngineData.FuelMode = 0; rd.VehicleData.VehicleClass = _segment.VehicleClass; - rd.BusAuxiliaries = - DataAdapterGeneric.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, rd); var shiftStrategyName = PowertrainBuilder.GetShiftStrategyName(PrimaryVehicle.Components.GearboxInputData.Type, PrimaryVehicle.VehicleType); @@ -710,6 +702,11 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun DataAdapterGeneric.CreateGearshiftData((rd.AxleGearData?.AxleGear.Ratio ?? 1.0) * (rd.AngledriveData?.Angledrive.Ratio ?? 1.0), PrimaryVehicle.EngineIdleSpeed, gbx.Type, gbx.Gears.Count); + rd.Retarder = + DataAdapterGeneric.CreateGenericRetarderData(PrimaryVehicle.Components.RetarderInputData, rd); + rd.BusAuxiliaries = + DataAdapterGeneric.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, rd); + rd.HybridStrategyParameters = DataAdapterGeneric.CreateHybridStrategy( rd.BatteryData, rd.SuperCapData, @@ -763,13 +760,9 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun PrimaryVehicle.Components.AuxiliaryInputData, PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, CompletedVehicle.Length, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType); - rd.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.VehicleType == VectoSimulationJobType.IHPC ? ArchitectureID.P_IHPC : PrimaryVehicle.ArchitectureID, PrimaryVehicle.Components.IEPC); rd.EngineData.FuelMode = 0; rd.VehicleData.VehicleClass = _segment.VehicleClass; - rd.BusAuxiliaries = - DataAdapterSpecific.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, - rd); - + CreateGearboxAndGearshiftData(rd); rd.HybridStrategyParameters = DataAdapterGeneric.CreateHybridStrategy( rd.BatteryData, @@ -785,7 +778,12 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun rd.ElectricMachinesData, PrimaryVehicle.ArchitectureID ); - SetOvcModeProperties(ovcMode, rd); + rd.Retarder = DataAdapterGeneric.CreateGenericRetarderData(PrimaryVehicle.Components.RetarderInputData, rd); + rd.BusAuxiliaries = + DataAdapterSpecific.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, + rd); + + SetOvcModeProperties(ovcMode, rd); if (ovcMode == OvcHevMode.ChargeSustaining) { rd.IterativeRunStrategy = new HevChargeSustainingIterativeRunStrategy(); } @@ -905,17 +903,18 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, CompletedVehicle.Length, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType); - result.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID, PrimaryVehicle.Components.IEPC); result.MaxChargingPower = PrimaryVehicle.MaxChargingPower; //result.EngineData.FuelMode = 0; result.VehicleData.VehicleClass = _segment.VehicleClass; - result.BusAuxiliaries = - DataAdapterGeneric.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, - result); CreateGearboxAndGearshiftData(result); - return result; + result.Retarder = DataAdapterGeneric.CreateGenericRetarderData(PrimaryVehicle.Components.RetarderInputData, result); + result.BusAuxiliaries = + DataAdapterGeneric.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, + result); + + return result; } protected override VectoRunData CreateVectoRunDataSpecific(Mission mission, @@ -953,17 +952,18 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, CompletedVehicle.Length, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType); - result.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID, PrimaryVehicle.Components.IEPC); result.MaxChargingPower = PrimaryVehicle.MaxChargingPower; //result.EngineData.FuelMode = 0; result.VehicleData.VehicleClass = _segment.VehicleClass; + + CreateGearboxAndGearshiftData(result); + result.Retarder = DataAdapterGeneric.CreateGenericRetarderData(PrimaryVehicle.Components.RetarderInputData, result); result.BusAuxiliaries = DataAdapterSpecific.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, result); - - CreateGearboxAndGearshiftData(result); - return result; + + return result; } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs index 8f3548c6d3c0d540053e8d5106e3467ba14e8ab7..4217ca2a11547806d9ef920d318b9d2778849fa2 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs @@ -181,16 +181,18 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa Vehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, Vehicle.Length ?? mission.BusParameter.VehicleLength, Vehicle.Components.AxleWheels.NumSteeredAxles, Vehicle.VehicleType); - simulationRunData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData, Vehicle.ArchitectureID, null); simulationRunData.DriverData = DriverData; simulationRunData.EngineData.FuelMode = modeIdx.Value; simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass; + + CreateGearboxAndGearshiftData(simulationRunData); + + simulationRunData.Retarder = DataAdapter.CreateGenericRetarderData(Vehicle.Components.RetarderInputData, simulationRunData); simulationRunData.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData( mission, InputDataProvider.JobInputData.Vehicle, simulationRunData); - CreateGearboxAndGearshiftData(simulationRunData); return simulationRunData; } @@ -301,7 +303,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa runData.AxleGearData = DataAdapter.CreateAxleGearData(Vehicle.Components.AxleGearInputData); } - runData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData, Vehicle.ArchitectureID, Vehicle.Components.IEPC); + CreateGearboxAndGearshiftData(runData); + runData.Retarder = DataAdapter.CreateGenericRetarderData(Vehicle.Components.RetarderInputData, runData); runData.Aux = DataAdapter.CreateAuxiliaryData(Vehicle.Components.AuxiliaryInputData, Vehicle.Components.BusAuxiliaries, mission.MissionType, @@ -310,7 +313,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa runData.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData( mission, InputDataProvider.JobInputData.Vehicle, runData); - CreateGearboxAndGearshiftData(runData); runData.HybridStrategyParameters = DataAdapter.CreateHybridStrategy(runData.BatteryData, runData.SuperCapData, runData.VehicleData.TotalVehicleMass, @@ -495,16 +497,16 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa Vehicle.Length ?? mission.BusParameter.VehicleLength, Vehicle.Components.AxleWheels.NumSteeredAxles, VectoSimulationJobType.ParallelHybridVehicle);//Hardcode to override IHPC - runData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData, Vehicle.VehicleType == VectoSimulationJobType.IHPC ? ArchitectureID.P_IHPC : Vehicle.ArchitectureID, null); runData.DriverData = DriverData; runData.EngineData.FuelMode = modeIdx.Value; runData.VehicleData.VehicleClass = _segment.VehicleClass; - runData.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData( - mission, InputDataProvider.JobInputData.Vehicle, runData); CreateGearboxAndGearshiftData(runData); + runData.Retarder = DataAdapter.CreateGenericRetarderData(Vehicle.Components.RetarderInputData, runData); + runData.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData( + mission, InputDataProvider.JobInputData.Vehicle, runData); runData.ElectricMachinesData = DataAdapter.CreateElectricMachines( Vehicle.Components.ElectricMachines, Vehicle.ElectricMotorTorqueLimits, @@ -668,13 +670,13 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa Vehicle.Length ?? mission.BusParameter.VehicleLength, Vehicle.Components.AxleWheels.NumSteeredAxles, Vehicle.VehicleType); var emPos = result.ElectricMachinesData.First(x => x.Item1 != PowertrainPosition.GEN).Item1; - result.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData, Vehicle.ArchitectureID, Vehicle.Components.IEPC); result.DriverData = DriverData; result.VehicleData.VehicleClass = _segment.VehicleClass; + CreateGearboxAndGearshiftData(result); + result.Retarder = DataAdapter.CreateGenericRetarderData(Vehicle.Components.RetarderInputData, result); result.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData( mission, InputDataProvider.JobInputData.Vehicle, result); - CreateGearboxAndGearshiftData(result); return result; } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs index d6d7a405521298a4a0abb37ee9dbd1e770284753..9838c0162ed9e3563fc8fbf3b2a98d2c5d2496d0 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs @@ -167,13 +167,13 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, PrimaryVehicle.Length ?? mission.BusParameter.VehicleLength, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType); - runData.Retarder = DataAdapter.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID, null); runData.EngineData.FuelMode = modeIdx.Value; runData.VehicleData.VehicleClass = _segment.VehicleClass; + CreateGearboxAndGearshiftData(runData); + runData.Retarder = DataAdapter.CreateGenericRetarderData(PrimaryVehicle.Components.RetarderInputData, runData); runData.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, runData); - CreateGearboxAndGearshiftData(runData); return runData; } @@ -307,7 +307,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus runData.AxleGearData = DataAdapter.CreateAxleGearData(PrimaryVehicle.Components.AxleGearInputData); } - runData.Retarder = DataAdapter.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID, PrimaryVehicle.Components.IEPC); + CreateGearboxAndGearshiftData(runData); + runData.Retarder = DataAdapter.CreateGenericRetarderData(PrimaryVehicle.Components.RetarderInputData, runData); runData.Aux = DataAdapter.CreateAuxiliaryData(PrimaryVehicle.Components.AuxiliaryInputData, PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, @@ -316,8 +317,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus runData.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData( mission, PrimaryVehicle, CompletedVehicle , runData); - CreateGearboxAndGearshiftData(runData); - runData.HybridStrategyParameters = DataAdapter.CreateHybridStrategy(runData.BatteryData, runData.SuperCapData, runData.VehicleData.TotalVehicleMass, ovcMode, loading.Key, runData.VehicleData.VehicleClass, mission.MissionType); @@ -504,17 +503,16 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, PrimaryVehicle.Length ?? mission.BusParameter.VehicleLength, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType); - runData.Retarder = DataAdapter.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.VehicleType == VectoSimulationJobType.IHPC ? ArchitectureID.P_IHPC : PrimaryVehicle.ArchitectureID, null); runData.DriverData = DriverData; - runData.EngineData.FuelMode = modeIdx.Value; runData.VehicleData.VehicleClass = _segment.VehicleClass; + + CreateGearboxAndGearshiftData(runData); + runData.Retarder = DataAdapter.CreateGenericRetarderData(PrimaryVehicle.Components.RetarderInputData, runData); runData.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData( mission, PrimaryVehicle, CompletedVehicle, runData); - CreateGearboxAndGearshiftData(runData); - runData.ElectricMachinesData = DataAdapter.CreateElectricMachines( PrimaryVehicle.Components.ElectricMachines, PrimaryVehicle.ElectricMotorTorqueLimits, runData.BatteryData.CalculateAverageVoltage(), runData.GearboxData.GearList); @@ -675,13 +673,13 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus vehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, vehicle.Length ?? mission.BusParameter.VehicleLength, vehicle.Components.AxleWheels.NumSteeredAxles, vehicle.VehicleType); - result.Retarder = DataAdapter.CreateRetarderData(vehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID, PrimaryVehicle.Components.IEPC); result.DriverData = DriverData; result.VehicleData.VehicleClass = _segment.VehicleClass; + CreateGearboxAndGearshiftData(result); + result.Retarder = DataAdapter.CreateGenericRetarderData(vehicle.Components.RetarderInputData, result); result.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData( mission, SingleBusDataProvider.PrimaryVehicle, SingleBusDataProvider.CompletedVehicle, result); - CreateGearboxAndGearshiftData(result); return result; } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs index 0d19c194e8551b01611fdf79bf2817b5a4003a47..27efa9f8f043a65ad329a7ae7ea0b5b98cab6fd5 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs @@ -74,11 +74,16 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl : DataAdapter.CreateAxleGearData(vehicle.Components.AxleGearInputData); AngledriveData = DataAdapter.CreateAngledriveData(vehicle.Components.AngledriveInputData); - GearboxData = DataAdapter.CreateGearboxData( - vehicle, new VectoRunData() { EngineData = EngineData, AxleGearData = AxlegearData, - VehicleData = tempVehicle, Cycle = VTPCycle }, - null); - RetarderData = DataAdapter.CreateRetarderData(vehicle.Components.RetarderInputData, vehicle.ArchitectureID, vehicle.Components.IEPC); + var vectoRun = new VectoRunData() + { + EngineData = EngineData, + AxleGearData = AxlegearData, + VehicleData = tempVehicle, + Cycle = VTPCycle + }; + + GearboxData = DataAdapter.CreateGearboxData(vehicle, vectoRun, null); + RetarderData = DataAdapter.CreateGenericRetarderData(vehicle.Components.RetarderInputData, vectoRun); //PTOTransmissionData = // DataAdapter.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData); diff --git a/VectoCore/VectoCore/Models/GenericModelData/GenericBusRetarderData.cs b/VectoCore/VectoCore/Models/GenericModelData/GenericBusRetarderData.cs index 0bb3eec5ccb763c38b0d6378c9d4d1f5581c3f99..64506fd5d53fe9ebb77a8bcba0ff675b673c738e 100644 --- a/VectoCore/VectoCore/Models/GenericModelData/GenericBusRetarderData.cs +++ b/VectoCore/VectoCore/Models/GenericModelData/GenericBusRetarderData.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Data; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; @@ -11,24 +12,27 @@ namespace TUGraz.VectoCore.Models.Declaration { public class GenericBusRetarderData { + public RetarderData CreateGenericBusRetarderData(IRetarderInputData retarderInput, PerSecond engineSpeed, double gearboxRatio) => + new RetarderData { + Type = retarderInput?.Type ?? RetarderType.None, + Ratio = retarderInput?.Type.IsDedicatedComponent() ?? false ? retarderInput.Ratio : 1.0, + LossMap = retarderInput?.Type.IsDedicatedComponent() ?? false + ? GenerateGenericLossMap(retarderInput, engineSpeed.AsRPM, gearboxRatio) : null + }; public RetarderData CreateGenericBusRetarderData(IRetarderInputData retarderInput) => new RetarderData { Type = retarderInput?.Type ?? RetarderType.None, Ratio = retarderInput?.Type.IsDedicatedComponent() ?? false ? retarderInput.Ratio : 1.0, LossMap = retarderInput?.Type.IsDedicatedComponent() ?? false - ? GenerateGenericLossMap(retarderInput.Ratio) : null + ? GenerateGenericLossMap(retarderInput) : null }; - private RetarderLossMap GenerateGenericLossMap(double stepUpRatio) + private RetarderLossMap GenerateGenericLossMap(IRetarderInputData retarderData, double engineSpeed = 0, double gearboxRatio = 0) { - var retarderSpeeds = new double[] { - 0, 200 , 400, 600, 900, 1200, - 1600, 2000, 2500, 3000, 3500, 4000, - 4500, 5000 - }; + var retarderSpeeds = GenerateRetarderSpeeds(retarderData, engineSpeed, gearboxRatio); - var genericRetarderLosses = GetHydrodynamicRetardersLoss(retarderSpeeds, stepUpRatio); + var genericRetarderLosses = GetHydrodynamicRetardersLoss(retarderSpeeds, retarderData.Ratio); //var genericRetarderLosses = GetMagneticRetarderLoss(retarderSpeeds, stepUpRatio); var torqueLoss = new DataTable(); @@ -47,6 +51,39 @@ namespace TUGraz.VectoCore.Models.Declaration return RetarderLossMapReader.Create(torqueLoss); } + private double[] GenerateRetarderSpeeds(IRetarderInputData retarderData, double engineSpeedRPM, double gearboxRatio) + { + var SMALL_STEP = 200; + var LARGE_STEP = 500; + var LARGE_STEP_THRESHOLD = 1000; + + var defaultEngineSpeed = 5000; + var maxRetarderSpeed = retarderData.Ratio * defaultEngineSpeed; + if (engineSpeedRPM != 0 && gearboxRatio != 0) + { + maxRetarderSpeed = retarderData.Ratio * engineSpeedRPM; + + if (retarderData.Type == RetarderType.TransmissionOutputRetarder) + { + maxRetarderSpeed = retarderData.Ratio * (engineSpeedRPM / gearboxRatio); + } + } + + var step = SMALL_STEP; + var retarderSpeeds = new List<double>(); + for (int i = 0; i < maxRetarderSpeed + step; i += step) + { + retarderSpeeds.Add(i); + var currentMaxSpeed = retarderSpeeds.MaxBy(v => v); + if (currentMaxSpeed >= LARGE_STEP_THRESHOLD) + { + step = LARGE_STEP; + } + } + + return retarderSpeeds.ToArray(); + } + private double[] GetHydrodynamicRetardersLoss(double[] retarderSpeeds, double stepUpRatio) { var losses = new double[retarderSpeeds.Length]; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs index c1752c795dbf43a8a7e24ec4da242c1e8e86356e..ab50ed030df4b5664c7dfec8d57304e3751468cf 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs @@ -271,6 +271,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine } } + public PerSecond MaxSpeed => FullLoadEntries.MaxBy(e => e.EngineSpeed).EngineSpeed; + public PerSecond NTq99hSpeed => _nTq99hSpeed ?? (_nTq99hSpeed = FindEnginSpeedForTorque(0.99 * MaxTorque).Last()); public PerSecond NTq99lSpeed => _nTq99lSpeed ?? (_nTq99lSpeed = FindEnginSpeedForTorque(0.99 * MaxTorque).First());