From dae48638d42f54fffbb60ee0bd7491ec5ed3c36e Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <quaritsch@ivt.tugraz.at> Date: Tue, 28 Mar 2023 17:36:48 +0200 Subject: [PATCH] refactoring: heavy lorry declaration data adapter: implement methods in base class, get component data adapter via property implemented in derived class refactoring: extract interfaces of data adapter in separate files start implementation primary bus (PEV E2) --- ...clarationDataAdapterGenericCompletedBus.cs | 3 +- ...larationDataAdapterSpecificCompletedBus.cs | 3 +- .../DeclarationDataAdapterHeavyLorry.cs | 423 ++++---------- .../IDeclarationDataAdapter.cs | 4 +- .../DeclarationDataAdapterPrimaryBus.cs | 140 ++--- .../SimulationComponents/ADASDataAdapter.cs | 7 +- .../AirdragDataAdapter.cs | 12 +- .../AngledriveDataAdapter.cs | 9 +- .../AuxiliaryDataAdapter.cs | 35 +- .../AxleGearDataAdapter.cs | 9 +- .../SimulationComponents/DriverDataAdapter.cs | 8 +- .../ElectricMachinesDataAdapter.cs | 525 ++++++++---------- .../SimulationComponents/EngineDataAdapter.cs | 10 +- .../GearBoxDataAdapter.cs | 12 +- .../Interfaces/IADASDataAdapter.cs | 10 + .../Interfaces/IAirdragDataAdapter.cs | 15 + .../Interfaces/IAngledriveDataAdapter.cs | 11 + .../Interfaces/IAuxiliaryDataAdapter.cs | 30 + .../Interfaces/IAxleGearDataAdapter.cs | 11 + .../Interfaces/IDriverDataAdapter.cs | 10 + .../{ => Interfaces}/IEPCDataAdapter.cs | 6 +- .../IElectricMachinesDataAdapter.cs | 19 + .../Interfaces/IEngineDataAdapter.cs | 14 + .../Interfaces/IGearboxDataAdapter.cs | 18 + .../Interfaces/IPTODataAdapter.cs | 11 + .../Interfaces/IRetarderDataAdapter.cs | 10 + .../Interfaces/ITorqueConverterDataAdapter.cs | 14 + .../Interfaces/IVehicleDataAdapter.cs | 21 + .../SimulationComponents/PTODataAdapter.cs | 9 +- .../RetarderDataAdapter.cs | 7 +- .../HybridStrategyParameterDataAdapter.cs | 39 +- .../IHybridStrategyDataAdapter.cs | 27 + .../TorqueConverterDataAdapter.cs | 9 +- .../VehicleDataAdapter.cs | 14 +- .../DeclarationDataAdapterSingleBus.cs | 3 +- ...DeclarationModeHeavyLorryRunDataFactory.cs | 7 +- ...DeclarationModePrimaryBusRunDataFactory.cs | 200 ++++--- ...PModeVectoRunDataFactoryHeavyBusPrimary.cs | 7 +- .../Models/Declaration/DeclarationData.cs | 13 +- .../Reports/ModDataPostprocessingTest.cs | 8 +- 40 files changed, 829 insertions(+), 914 deletions(-) create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IADASDataAdapter.cs create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAirdragDataAdapter.cs create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAngledriveDataAdapter.cs create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAuxiliaryDataAdapter.cs create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAxleGearDataAdapter.cs create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IDriverDataAdapter.cs rename VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/{ => Interfaces}/IEPCDataAdapter.cs (93%) create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IElectricMachinesDataAdapter.cs create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEngineDataAdapter.cs create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IGearboxDataAdapter.cs create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IPTODataAdapter.cs create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/ITorqueConverterDataAdapter.cs create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IVehicleDataAdapter.cs create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/IHybridStrategyDataAdapter.cs diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs index e98844d18b..35aee8c2e6 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs @@ -5,6 +5,7 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.SimulationComponent; @@ -12,7 +13,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Generic { - public abstract class DeclarationDeclarationDataAdapterGenericCompletedBusDeclaration + public abstract class DeclarationDeclarationDataAdapterGenericCompletedBusDeclaration { public abstract class CompletedBusDeclarationBase : IGenericCompletedBusDeclarationDataAdapter { diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs index 629854476f..9a2c09430e 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs @@ -9,6 +9,7 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.Models.BusAuxiliaries; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Pneumatics; @@ -19,7 +20,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Specific { - public abstract class DeclarationDataAdapterSpecificCompletedBus + public abstract class DeclarationDataAdapterSpecificCompletedBus { public abstract class CompletedBusDeclarationBase : AbstractSimulationDataAdapter, ISpecificCompletedBusDeclarationDataAdapter { diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs index 4450ced9e5..f98c7e674d 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs @@ -40,6 +40,7 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData.Reader.ComponentData; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.StrategyDataAdapter; using TUGraz.VectoCore.InputData.Reader.ShiftStrategy; using TUGraz.VectoCore.Models.Declaration; @@ -54,20 +55,30 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry { - public class DeclarationDataAdapterHeavyLorry + public class DeclarationDataAdapterHeavyLorry { public abstract class LorryBase : AbstractSimulationDataAdapter, ILorryDeclarationDataAdapter { - #region Implementation of IDeclarationDataAdapter - - private readonly IDriverDataAdapter _driverDataAdapter = new LorryDriverDataAdapter(); - protected readonly IVehicleDataAdapter _vehicleDataAdapter = new LorryVehicleDataAdapter(); + + 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 IAirdragDataAdapter _airdragDataAdapter = new AirdragDataAdapter(); private IAngledriveDataAdapter _angleDriveDataAdapter = new AngledriveDataAdapter(); - public DriverData CreateDriverData(Segment segment) + + protected abstract IEngineDataAdapter EngineDataAdapter { get; } + protected abstract IGearboxDataAdapter GearboxDataAdapter { get; } + protected abstract IAuxiliaryDataAdapter AuxDataAdapter { get; } + + protected abstract IHybridStrategyDataAdapter HybridStrategyDataAdapter { get; } + + protected abstract IPTODataAdapter PtoDataAdapter { get; } + + protected virtual IElectricMachinesDataAdapter ElectricMachinesDataAdapter => throw new NotImplementedException(); + + public virtual DriverData CreateDriverData(Segment segment) { return _driverDataAdapter.CreateDriverData(segment); } @@ -82,23 +93,22 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry loading.Value.Item2, allowVocational); } - public virtual IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines( - IElectricMachinesDeclarationInputData electricMachines, - IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage, - GearList gears = null) - { - throw new NotImplementedException(); - } - + public abstract void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage, VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData); - public virtual HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, SuperCapData runDataSuperCapData, - Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType) + public virtual HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, + SuperCapData runDataSuperCapData, + Kilogram vehicleMass, + VectoRunData.OvcHevMode ovcMode, + LoadingType loading, + VehicleClass vehicleClass, + MissionType missionType) { - throw new NotImplementedException(); + return HybridStrategyDataAdapter.CreateHybridStrategyParameters(runDataBatteryData, + runDataSuperCapData, vehicleMass, ovcMode); } public virtual HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, @@ -113,17 +123,16 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry CombustionEngineData engineData, ArchitectureID archId) { - throw new NotImplementedException(); - } - - public virtual ShiftStrategyParameters CreateDummyGearshiftStrategy() - { - throw new NotImplementedException(); + return HybridStrategyDataAdapter.CreateHybridStrategyParameters( + batterySystemData: runDataBatteryData, + superCap: runDataSuperCapData, + ovcMode: ovcMode, + loading: loading, + vehicleClass: vehicleClass, + missionType: missionType, archId, engineData, gearboxData, boostingLimitations); } - - public virtual AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment) { @@ -145,19 +154,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry IEngineModeDeclarationInputData engineMode, Mission mission) { - throw new NotImplementedException(); + return EngineDataAdapter.CreateEngineData(vehicle, engineMode, mission); } public virtual GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData, IShiftPolygonCalculator shiftPolygonCalc) { - throw new NotImplementedException(); + return GearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes); } public virtual ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount) { - throw new NotImplementedException(); + return GearboxDataAdapter.CreateGearshiftData(axleRatio, null, gearboxType, gearsCount); } public RetarderData CreateRetarderData(IRetarderInputData retarderData, PowertrainPosition position) @@ -165,9 +174,16 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry return _retarderDataAdapter.CreateRetarderData(retarderData, position); } - public abstract PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto); - public abstract PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData, - IGearboxDeclarationInputData gbx); + public virtual PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto) + { + return PtoDataAdapter.CreateDefaultPTOData(pto, gbx); + } + + public virtual PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData, + IGearboxDeclarationInputData gbx) + { + return PtoDataAdapter.CreatePTOTransmissionData(ptoData, gbx); + } public virtual IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, @@ -184,14 +200,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry return _axleGearDataAdapter.CreateDummyAxleGearData(gbxData); } - #endregion - - protected abstract IAuxiliaryDataAdapter AuxDataAdapter { get; } + public virtual IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines( + IElectricMachinesDeclarationInputData electricMachines, + IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage, + GearList gears = null) + { + return ElectricMachinesDataAdapter.CreateElectricMachines(electricMachines, torqueLimits, averageVoltage, + gears); + } public virtual List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines( IIEPCDeclarationInputData iepc, Volt averageVoltage) { - throw new NotImplementedException(); + return ElectricMachinesDataAdapter.CreateIEPCElectricMachines(iepc, averageVoltage); } } @@ -203,53 +224,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry protected override GearboxType[] SupportedGearboxTypes => new [] { GearboxType.MT, GearboxType.AMT, GearboxType.ATPowerSplit, GearboxType.ATSerial }; - private IEngineDataAdapter _engineDataAdapter = new CombustionEngineComponentDataAdapter(); - private IGearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(new TorqueConverterDataAdapter()); - private IAuxiliaryDataAdapter _auxAdapter = new HeavyLorryAuxiliaryDataAdapter(); - private readonly IPTODataAdapter _ptoDataAdapter = new PTODataAdapterLorry(); - public override CombustionEngineData CreateEngineData( - IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData mode, Mission mission) - { - return _engineDataAdapter.CreateEngineData(vehicle, mode, mission); - } - - public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData, - IShiftPolygonCalculator shiftPolygonCalc) - { - return _gearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes); - } - - public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData, - IGearboxDeclarationInputData gbx) - { - return _ptoDataAdapter.CreatePTOTransmissionData(ptoData, gbx); - } - - public override PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto) - { - return _ptoDataAdapter.CreateDefaultPTOData(pto, gbx); - } - - - #region Overrides of LorryBase - - public override ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount) - { - return _gearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, gearboxType, gearsCount); - } + protected override IAuxiliaryDataAdapter AuxDataAdapter { get; } = new HeavyLorryAuxiliaryDataAdapter(); + protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter => throw new NotImplementedException(); + protected override IPTODataAdapter PtoDataAdapter { get; } = new PTODataAdapterLorry(); - protected override IAuxiliaryDataAdapter AuxDataAdapter => _auxAdapter; - - #endregion + protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter()); - //public override IList<VectoRunData.AuxData> CreateAuxiliaryData( - // IAuxiliariesDeclarationInputData auxInputData, - // IBusAuxiliariesDeclarationData busAuxData, MissionType mission, VehicleClass hvdClass, - // Meter vehicleLength, int? numSteeredAxles, VectoSimulationJobType jobType) - //{ - // return _auxAdapter.CreateAuxiliaryData(auxInputData, busAuxData, mission, hvdClass, vehicleLength, - // numSteeredAxles, jobType); - //} + protected override IEngineDataAdapter EngineDataAdapter { get; } = new CombustionEngineComponentDataAdapter(); public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage, VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, @@ -261,37 +242,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry public abstract class Hybrid : LorryBase { - private IEngineDataAdapter _engineDataAdapter = new CombustionEngineComponentDataAdapter(); - private ElectricMachinesDataAdapter _electricMachinesDataAdapter = new ElectricMachinesDataAdapter(); private ElectricStorageAdapter _eletricStorageAdapter = new ElectricStorageAdapter(); protected IAuxiliaryDataAdapter _auxAdapter = new HeavyLorryAuxiliaryDataAdapter(); - public override CombustionEngineData CreateEngineData( - IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData mode, Mission mission) - { - return _engineDataAdapter.CreateEngineData(vehicle, mode, mission); - } - - #region Overrides of LorryBase - - public override IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines( - IElectricMachinesDeclarationInputData electricMachines, - IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage, - GearList gears = null) - { - return _electricMachinesDataAdapter.CreateElectricMachines(electricMachines, torqueLimits, averageVoltage, - gears); - } - + protected override IEngineDataAdapter EngineDataAdapter { get; } = new CombustionEngineComponentDataAdapter(); - //public override IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, - // IBusAuxiliariesDeclarationData busAuxData, - // MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles, - // VectoSimulationJobType jobType) - //{ - // return _auxAdapter.CreateAuxiliaryData(auxData, busAuxData, missionType, vehicleClass, vehicleLength, - // numSteeredAxles, jobType); - //} + protected override IElectricMachinesDataAdapter ElectricMachinesDataAdapter { get; } = new ElectricMachinesDataAdapter(); protected override IAuxiliaryDataAdapter AuxDataAdapter => _auxAdapter; @@ -312,8 +268,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry throw new VectoException("Either battery or super cap must be provided"); } } - - #endregion } public abstract class SerialHybrid : Hybrid @@ -322,99 +276,29 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry protected override GearboxType[] SupportedGearboxTypes { get; } - private SerialHybridStrategyParameterDataAdapter _hybridStrategyParameterData = - new SerialHybridStrategyParameterDataAdapter(); - private readonly ElectricPTODataAdapter _ptoDataAdapter = new ElectricPTODataAdapter(); - - public override HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, - SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType) - { - return _hybridStrategyParameterData.CreateHybridStrategyParameters(runDataBatteryData, - runDataSuperCapData, vehicleMass, ovcMode); - } - - #endregion - - #region Overrides of LorryBase - - public override PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto) - { - return _ptoDataAdapter.CreateDefaultPTOData(pto, gbx); - } - - public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData, - IGearboxDeclarationInputData gbx) - { - return _ptoDataAdapter.CreatePTOTransmissionData(ptoData, gbx); - } - public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage, - VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData) - { - base.CreateREESSData(componentsElectricStorage, jobType, ovc, setBatteryData, setSuperCapData); - } - + protected override IGearboxDataAdapter GearboxDataAdapter => throw new NotImplementedException(); + protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter { get; } = new + SerialHybridStrategyParameterDataAdapter(); + protected override IPTODataAdapter PtoDataAdapter { get; } = new ElectricPTODataAdapter(); #endregion + } public abstract class ParallelHybrid : Hybrid { - private ParallelHybridStrategyParameterDataAdapter _hybridStrategyDataAdapter = - new ParallelHybridStrategyParameterDataAdapter(); - - private PTODataAdapterLorry _ptoAdapterLorry = new PTODataAdapterLorry(); protected override GearboxType[] SupportedGearboxTypes => new[] { GearboxType.AMT, GearboxType.ATPowerSplit, GearboxType.ATSerial }; - private IGearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(new TorqueConverterDataAdapter()); - //private GearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(null); - - //private ElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter(); - #region Overrides of LorryBase - - public override ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, GearboxType type, int gearsCount) - { - - return _gearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, type, gearsCount); - } - - public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData, - IShiftPolygonCalculator shiftPolygonCalc) - { - return _gearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes); - } - public override HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, - SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, - LoadingType loading, VehicleClass vehicleClass, MissionType missionType, TableData boostingLimitations, - GearboxData gearboxData, CombustionEngineData engineData, ArchitectureID archID) - { - return _hybridStrategyDataAdapter.CreateHybridStrategyParameters( - batterySystemData: runDataBatteryData, - superCap: runDataSuperCapData, - ovcMode: ovcMode, - loading: loading, - vehicleClass: vehicleClass, - missionType: missionType, archID, engineData, gearboxData, boostingLimitations); - } + protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter()); - #endregion + protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter { get; } = new + ParallelHybridStrategyParameterDataAdapter(); - #region Overrides of LorryBase - - public override PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto) - { - return _ptoAdapterLorry.CreateDefaultPTOData(pto, gbx); - } + protected override IPTODataAdapter PtoDataAdapter { get; } = new PTODataAdapterLorry(); - public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData, - IGearboxDeclarationInputData gbx) - { - return _ptoAdapterLorry.CreatePTOTransmissionData(ptoData, gbx); - } - - #endregion } public abstract class BatteryElectric : LorryBase @@ -424,42 +308,24 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry protected override GearboxType[] SupportedGearboxTypes { get; } - private readonly GearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(null); + //private readonly GearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(null); private readonly ElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter(); private readonly ElectricMachinesDataAdapter _electricMachineAdapter = new ElectricMachinesDataAdapter(); - private readonly ElectricPTODataAdapter _ptoDataAdapter = new ElectricPTODataAdapter(); - + private readonly HeavyLorryPEVAuxiliaryDataAdapter _auxDataAdapter = new HeavyLorryPEVAuxiliaryDataAdapter(); - public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData, - IShiftPolygonCalculator shiftPolygonCalc) - { - return _gearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes); - } + protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(null); - public override ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount) - { - System.Diagnostics.Debug.Assert(engineIdlingSpeed == null); - return _gearboxDataAdapter.CreateGearshiftData(axleRatio, null, gearboxType, gearsCount); - } + protected override IEngineDataAdapter EngineDataAdapter => throw new NotImplementedException(); - //public override IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, - // IBusAuxiliariesDeclarationData busAuxData, - // MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles, - // VectoSimulationJobType jobType) - //{ - // return _auxDataAdapter.CreateAuxiliaryData(auxData, null, missionType, vehicleClass, vehicleLength, numSteeredAxles, - // jobType); - //} + protected override IPTODataAdapter PtoDataAdapter { get; } = new ElectricPTODataAdapter(); protected override IAuxiliaryDataAdapter AuxDataAdapter => _auxDataAdapter; - - public override IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, - Volt averageVoltage, GearList gears = null) - { - return _electricMachineAdapter.CreateElectricMachines(electricMachines, torqueLimits, averageVoltage, gears); - } + + protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter => throw new NotImplementedException(); + + protected override IElectricMachinesDataAdapter ElectricMachinesDataAdapter { get; } = new ElectricMachinesDataAdapter(); public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage, VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData) @@ -480,28 +346,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry } - //public override BatterySystemData CreateBatteryData(IElectricStorageSystemDeclarationInputData componentsElectricStorage, VectoSimulationJobType jobType, bool ovc) - //{ - // return _electricStorageAdapter.CreateBatteryData(batteryInputData: componentsElectricStorage, jobType: jobType, ovc: ovc); - //} - - //public override SuperCapData CreateSuperCapData(IElectricStorageSystemDeclarationInputData componentsElectricStorage) - //{ - // return _electricStorageAdapter.CreateSuperCapData(componentsElectricStorage); - //} - - public override PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto) - { - return _ptoDataAdapter.CreateDefaultPTOData(pto, gbx); - } - - public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData, - IGearboxDeclarationInputData gbx) - { - var result = _ptoDataAdapter.CreatePTOTransmissionData(ptoData, gbx); - return result; - } - #endregion } @@ -511,20 +355,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry protected override GearboxType[] SupportedGearboxTypes => new[] { GearboxType.AMT, GearboxType.ATPowerSplit, GearboxType.ATSerial, GearboxType.APTN }; - - - private GearboxDataAdapter _gearBoxDataAdaper = new GearboxDataAdapter(new TorqueConverterDataAdapter()); - public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData, - IShiftPolygonCalculator shiftPolygonCalc) - { - return _gearBoxDataAdaper.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes); - } - - public override ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, - GearboxType gearboxType, int gearsCount) - { - return _gearBoxDataAdaper.CreateGearshiftData(axleRatio, engineIdlingSpeed, gearboxType, gearsCount); - } + protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter()); #endregion } @@ -537,28 +368,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry protected override GearboxType[] SupportedGearboxTypes => new[] { GearboxType.AMT, GearboxType.ATPowerSplit, GearboxType.ATSerial, GearboxType.APTN }; - - - private IGearboxDataAdapter _gearBoxDataAdaper = new IEPCGearboxDataAdapter(); private ElectricMachinesDataAdapter _electricMachinesDataAdapter = new ElectricMachinesDataAdapter(); - public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData, - IShiftPolygonCalculator shiftPolygonCalc) - { - return _gearBoxDataAdaper.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes); - } + protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new IEPCGearboxDataAdapter(); - public override ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, - GearboxType gearboxType, int gearsCount) - { - return _gearBoxDataAdaper.CreateGearshiftData(axleRatio, engineIdlingSpeed, gearboxType, gearsCount); - } + protected override IElectricMachinesDataAdapter ElectricMachinesDataAdapter { get; } = new ElectricMachinesDataAdapter(); - public override List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines( - IIEPCDeclarationInputData iepc, Volt averageVoltage) - { - return _electricMachinesDataAdapter.CreateIEPCElectricMachines(iepc, averageVoltage); - } } public class HEV_P1 : ParallelHybrid @@ -595,29 +410,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry public class PEV_E_IEPC : BatteryElectric { - #region Overrides of LorryBase - - private ElectricMachinesDataAdapter _emDataAdapter = new ElectricMachinesDataAdapter(); - private IEPCGearboxDataAdapter _gearboxDataAdapter = new IEPCGearboxDataAdapter(); - public override List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(IIEPCDeclarationInputData iepc, Volt averageVoltage) - { - return _emDataAdapter.CreateIEPCElectricMachines(iepc, averageVoltage); - } + protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new IEPCGearboxDataAdapter(); - #region Overrides of BatteryElectric + protected override IElectricMachinesDataAdapter ElectricMachinesDataAdapter { get; } = new ElectricMachinesDataAdapter(); - public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData, - IShiftPolygonCalculator shiftPolygonCalc) - { - return _gearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, new GearboxType[] - { - GearboxType.APTN - }); - } - - #endregion - - #endregion } public class Exempted : LorryBase { @@ -637,22 +433,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry throw new NotImplementedException(); } - public override PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto) - { - throw new NotImplementedException(); - } - - public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData, - IGearboxDeclarationInputData gbx) - { - throw new NotImplementedException(); - } - - public override ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount) - { - throw new NotImplementedException(); - } - public override IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, IBusAuxiliariesDeclarationData busAuxData, MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles, @@ -661,34 +441,17 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry throw new NotImplementedException(); } - protected override IAuxiliaryDataAdapter AuxDataAdapter { get; } - - #endregion - } - - - - - - - - - - - - - - - - - - - - + protected override IEngineDataAdapter EngineDataAdapter => throw new NotImplementedException(); + protected override IGearboxDataAdapter GearboxDataAdapter => throw new NotImplementedException(); + protected override IAuxiliaryDataAdapter AuxDataAdapter => throw new NotImplementedException(); + protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter => throw new NotImplementedException(); + protected override IPTODataAdapter PtoDataAdapter => throw new NotImplementedException(); + #endregion + } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs index 05ac40d9ab..3c26f06944 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs @@ -94,7 +94,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter GearboxData gearboxData, CombustionEngineData engineData, ArchitectureID archId); - ShiftStrategyParameters CreateDummyGearshiftStrategy(); } public interface IPrimaryBusDeclarationDataAdapter : IDeclarationDataAdapter @@ -115,7 +114,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter //RetarderData CreateRetarderData(IRetarderInputData retarderData); //PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData); - ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed); + 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); diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs index 2b2186ebdd..811ae09d2d 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs @@ -1,28 +1,22 @@ using System; using System.Collections.Generic; -using System.Linq; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents; -using TUGraz.VectoCore.Models.BusAuxiliaries; -using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics; -using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC; -using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Pneumatics; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.SimulationComponent; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.Battery; using TUGraz.VectoCore.Models.SimulationComponent.Impl; -using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus { - public abstract class DeclarationDataAdapterPrimaryBus + public abstract class DeclarationDataAdapterPrimaryBus { public abstract class PrimaryBusBase : IPrimaryBusDeclarationDataAdapter { @@ -37,7 +31,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus protected readonly IRetarderDataAdapter _retarderDataAdapter = new RetarderDataAdapter(); protected readonly IAirdragDataAdapter _airdragDataAdapter = new AirdragDataAdapter(); private readonly IAngledriveDataAdapter _angledriveDataAdapter = new AngledriveDataAdapter(); - private readonly IEngineDataAdapter _engineDataAdapter = new CombustionEngineComponentDataAdapter(); + + protected abstract IEngineDataAdapter EngineDataAdapter { get; } + + protected abstract IGearboxDataAdapter GearboxDataAdapter { get; } + + protected virtual IElectricMachinesDataAdapter ElectricMachinesDataAdapter => throw new NotImplementedException(); public DriverData CreateDriverData(Segment segment) { @@ -56,12 +55,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus return _airdragDataAdapter.CreateAirdragData(airdragData, mission, segment); } - public virtual IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, - Volt averageVoltage, GearList gears = null) - { - throw new NotImplementedException(); - } - public abstract void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage, VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData); @@ -78,18 +71,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus public virtual CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode, Mission mission) { - throw new NotImplementedException(); + return EngineDataAdapter.CreateEngineData(vehicle, engineMode, mission); } public virtual GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData, IShiftPolygonCalculator shiftPolygonCalc) { - throw new NotImplementedException(); + return GearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes); } - public virtual ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed) + public virtual ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, + GearboxType gearboxType, int gearsCount) { - throw new NotImplementedException(); + return GearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, gearboxType, gearsCount); } @@ -98,9 +92,16 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus return _retarderDataAdapter.CreateRetarderData(retarderData, position); } + + public virtual IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, + Volt averageVoltage, GearList gears = null) + { + return ElectricMachinesDataAdapter.CreateElectricMachines(electricMachines, torqueLimits, averageVoltage, gears); + } + public virtual List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(IIEPCDeclarationInputData iepc, Volt averageVoltage) { - throw new NotImplementedException(); + return ElectricMachinesDataAdapter.CreateIEPCElectricMachines(iepc, averageVoltage); } public virtual IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, @@ -134,65 +135,36 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus public class Conventional : PrimaryBusBase { - protected IEngineDataAdapter _engineDataAdapter = new CombustionEngineComponentDataAdapter(); - protected IGearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(new TorqueConverterDataAdapter()); - protected readonly IPrimaryBusAuxiliaryDataAdapter _auxDataAdapter = new PrimaryBusAuxiliaryDataAdapter(); + #region Overrides of PrimaryBusBase + protected override IEngineDataAdapter EngineDataAdapter { get; } = new CombustionEngineComponentDataAdapter(); - #region Overrides of PrimaryBusBase + protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter()); + protected override IPrimaryBusAuxiliaryDataAdapter AuxDataAdapter { get; } = new PrimaryBusAuxiliaryDataAdapter(); public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage, VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData) { throw new NotImplementedException(); } - public override CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode, - Mission mission) - { - return _engineDataAdapter.CreateEngineData(vehicle, engineMode, mission); - } - - public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData, - IShiftPolygonCalculator shiftPolygonCalc) - { - return _gearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes); - } - - public override ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed) - { - return _gearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, gbx.Type, gbx.Gears.Count); - } - - protected override IPrimaryBusAuxiliaryDataAdapter AuxDataAdapter => _auxDataAdapter; - + #endregion } public abstract class Hybrid : PrimaryBusBase { private CombustionEngineComponentDataAdapter _engineDataAdapter = new CombustionEngineComponentDataAdapter(); - private ElectricMachinesDataAdapter _electricMachinesDataAdapter = new ElectricMachinesDataAdapter(); private ElectricStorageAdapter _eletricStorageAdapter = new ElectricStorageAdapter(); protected readonly IPrimaryBusAuxiliaryDataAdapter _auxDataAdapter = new PrimaryBusAuxiliaryDataAdapter(); #region Overrides of PrimaryBusBase - public override CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode, - Mission mission) - { - return _engineDataAdapter.CreateEngineData(vehicle, engineMode, mission); - } + protected override IEngineDataAdapter EngineDataAdapter { get; } = new CombustionEngineComponentDataAdapter(); + + protected override IElectricMachinesDataAdapter ElectricMachinesDataAdapter { get; } = new ElectricMachinesDataAdapter(); - public override IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines( - IElectricMachinesDeclarationInputData electricMachines, - IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage, - GearList gears = null) - { - return _electricMachinesDataAdapter.CreateElectricMachines(electricMachines, torqueLimits, averageVoltage, - gears); - } public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage, VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData) @@ -223,11 +195,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus public abstract class SerialHybrid : Hybrid { + protected override IGearboxDataAdapter GearboxDataAdapter => throw new NotImplementedException(); } public class HEV_S2 : SerialHybrid { + protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter()); } @@ -243,24 +217,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus public class HEV_S_IEPC : SerialHybrid { + protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new IEPCGearboxDataAdapter(); } public abstract class ParallelHybrid : Hybrid { - private GearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(new TorqueConverterDataAdapter()); - public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData, - IShiftPolygonCalculator shiftPolygonCalc) - { - return _gearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, - supportedGearboxTypes: SupportedGearboxTypes); - } + #region Overrides of PrimaryBusBase - public override ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed) - { - throw new NotImplementedException(); - //return _gearboxDataAdapter.CreateGearshiftData(gbx, axleRatio, engineIdlingSpeed, gbx.Type, gbx.Gears.Count); - } + protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter()); + + #endregion + + } public class HEV_P1 : ParallelHybrid @@ -290,17 +259,22 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus public abstract class BatteryElectric : PrimaryBusBase { - private readonly GearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(null); private readonly ElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter(); - private readonly ElectricMachinesDataAdapter _electricMachineAdapter = new ElectricMachinesDataAdapter(); protected readonly IPrimaryBusAuxiliaryDataAdapter _auxDataAdapter = new PrimaryBusPEVAuxiliaryDataAdapter(); - public override IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, - Volt averageVoltage, GearList gears = null) - { - return _electricMachineAdapter.CreateElectricMachines(electricMachines, torqueLimits, averageVoltage, gears); - } + #region Overrides of PrimaryBusBase + + protected override IEngineDataAdapter EngineDataAdapter => throw new NotImplementedException(); + + protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(null); + + protected override IElectricMachinesDataAdapter ElectricMachinesDataAdapter { get; } = new ElectricMachinesDataAdapter(); + + protected override IPrimaryBusAuxiliaryDataAdapter AuxDataAdapter => _auxDataAdapter; + + #endregion + public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage, VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData) @@ -318,14 +292,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus if (superCapData != null) { throw new VectoException("Supercaps are not allowed for PEVs"); } - } - - #region Overrides of PrimaryBusBase - - protected override IPrimaryBusAuxiliaryDataAdapter AuxDataAdapter => _auxDataAdapter; - - #endregion + } @@ -356,6 +324,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus { #region Overrides of PrimaryBusBase + protected override IEngineDataAdapter EngineDataAdapter => throw new NotImplementedException(); + public override VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational) { @@ -368,7 +338,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus throw new NotImplementedException(); } - protected override IPrimaryBusAuxiliaryDataAdapter AuxDataAdapter { get; } + protected override IPrimaryBusAuxiliaryDataAdapter AuxDataAdapter => throw new NotImplementedException(); + + protected override IGearboxDataAdapter GearboxDataAdapter => throw new NotImplementedException(); #endregion } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ADASDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ADASDataAdapter.cs index 330e260c79..508b93d5d7 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ADASDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ADASDataAdapter.cs @@ -1,13 +1,10 @@ using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.Models.SimulationComponent.Data; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents { - public interface IADASDataAdapter - { - VehicleData.ADASData CreateADAS(IAdvancedDriverAssistantSystemDeclarationInputData adas); - } - public class ADASDataAdapter : IADASDataAdapter + public class ADASDataAdapter : IADASDataAdapter { public VehicleData.ADASData CreateADAS(IAdvancedDriverAssistantSystemDeclarationInputData adas) diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AirdragDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AirdragDataAdapter.cs index 380e4297ae..2fe2301e3a 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AirdragDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AirdragDataAdapter.cs @@ -8,22 +8,14 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents { - public interface IAirdragDataAdapter - { - AirdragData CreateAirdragData( - IAirdragDeclarationInputData airdragInputData, Mission mission, - Segment segment); - - AirdragData CreateAirdragData(IVehicleDeclarationInputData completedVehicle, Mission mission); - } - - public static class AirdragDataAdapterHelper + public static class AirdragDataAdapterHelper { public static List<CrossWindCorrectionCurveReader.CrossWindCorrectionEntry> GetDeclarationAirResistanceCurve( string crosswindCorrectionParameters, SquareMeter aerodynamicDragAera, Meter vehicleHeight) diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AngledriveDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AngledriveDataAdapter.cs index 0f88899d1e..459d233e2b 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AngledriveDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AngledriveDataAdapter.cs @@ -4,19 +4,14 @@ using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.Models.GenericModelData; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents { - public interface IAngledriveDataAdapter - { - AngledriveData CreateAngledriveData(IAngledriveInputData data, bool useEfficiencyFallback); - AngledriveData CreateAngledriveData(IAngledriveInputData data); - } - - public class AngledriveDataAdapter : IAngledriveDataAdapter + public class AngledriveDataAdapter : IAngledriveDataAdapter { public AngledriveData CreateAngledriveData(IAngledriveInputData data, bool useEfficiencyFallback) { diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs index ab674ce7e4..ecea0fff88 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs @@ -9,6 +9,7 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDataFactory; using TUGraz.VectoCore.Models.BusAuxiliaries; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics; @@ -22,27 +23,9 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents { - public interface IAuxiliaryDataAdapter - { - IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData, - IBusAuxiliariesDeclarationData busAuxData, MissionType mission, VehicleClass hvdClass, Meter vehicleLength, - int? numSteeredAxles, VectoSimulationJobType jobType); - } - public interface ICompletedBusAuxiliaryDataAdapter : IPrimaryBusAuxiliaryDataAdapter - { - IAuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData primaryVehicle, - IVehicleDeclarationInputData completedVehicle, VectoRunData runData); - } - public interface IPrimaryBusAuxiliaryDataAdapter : IAuxiliaryDataAdapter - { - AuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData primaryVehicle, VectoRunData runData); - - } - - - public abstract class AuxiliaryDataAdapter : ComponentDataAdapterBase, IAuxiliaryDataAdapter + public abstract class AuxiliaryDataAdapter : ComponentDataAdapterBase, IAuxiliaryDataAdapter { public class ElectricConsumerEntry { @@ -553,7 +536,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen KneelingHeight = VectoMath.Max(0.SI<Meter>(), mission.BusParameter.EntranceHeight - Constants.BusParameters.EntranceHeight), CompressorGearEfficiency = Constants.BusAuxiliaries.PneumaticUserConfig.CompressorGearEfficiency, CompressorGearRatio = busAux.PneumaticSupply.Ratio, - CompressorMap = DeclarationData.BusAuxiliaries.GetCompressorMap(busAux.PneumaticSupply.CompressorSize, busAux.PneumaticSupply.Clutch), + CompressorMap = DeclarationData.BusAuxiliaries.GetCompressorMap(busAux.PneumaticSupply), SmartAirCompression = busAux.PneumaticSupply.SmartAirCompression, SmartRegeneration = busAux.PneumaticSupply.SmartRegeneration, AdBlueDosing = busAux.PneumaticConsumers.AdBlueDosing, @@ -821,10 +804,14 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen ssmHeating.ElectricHeater = GetElectricHeater(mission, runData); ssmHeating.HeatingDistributions = DeclarationData.BusAuxiliaries.HeatingDistributionCases; + var electricUserInputs = + GetElectricalUserConfig(mission, primaryVehicle, actuations, runData.VehicleData.VehicleClass); + electricUserInputs.ConnectESToREESS = true; + var retVal = new AuxiliaryConfig { InputData = primaryVehicle.Components.BusAuxiliaries, - ElectricalUserInputsConfig = GetElectricalUserConfig(mission, primaryVehicle, actuations, runData.VehicleData.VehicleClass), + ElectricalUserInputsConfig = electricUserInputs, PneumaticUserInputsConfig = GetPneumaticUserConfig(primaryVehicle, mission), PneumaticAuxillariesConfig = CreatePneumaticAuxConfig(runData.Retarder.Type), Actuations = actuations, @@ -1102,11 +1089,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen { return new PneumaticUserInputsConfig { - CompressorMap = completedVehicle.VehicleType == VectoSimulationJobType.BatteryElectricVehicle - ? null - : DeclarationData.BusAuxiliaries.GetCompressorMap( - primaryBusAuxiliaries.PneumaticSupply.CompressorSize, - primaryBusAuxiliaries.PneumaticSupply.Clutch), + CompressorMap = DeclarationData.BusAuxiliaries.GetCompressorMap(primaryBusAuxiliaries.PneumaticSupply), CompressorGearEfficiency = Constants.BusAuxiliaries.PneumaticUserConfig.CompressorGearEfficiency, CompressorGearRatio = completedVehicle.VehicleType == VectoSimulationJobType.BatteryElectricVehicle ? 0 : primaryBusAuxiliaries.PneumaticSupply.Ratio, diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AxleGearDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AxleGearDataAdapter.cs index de8a94b9f4..8c48bc4527 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AxleGearDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AxleGearDataAdapter.cs @@ -1,19 +1,14 @@ using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.Models.GenericModelData; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents { - public interface IAxleGearDataAdapter - { - AxleGearData CreateAxleGearData(IAxleGearInputData data); - AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData); - } - - public class AxleGearDataAdapter : IAxleGearDataAdapter + public class AxleGearDataAdapter : IAxleGearDataAdapter { public AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData) { diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/DriverDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/DriverDataAdapter.cs index 16105fddcf..e81dfc39eb 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/DriverDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/DriverDataAdapter.cs @@ -1,15 +1,11 @@ using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.SimulationComponent.Data; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents { - - public interface IDriverDataAdapter - { - DriverData CreateDriverData(Segment segment); - } - internal abstract class DriverDataAdapter : IDriverDataAdapter + internal abstract class DriverDataAdapter : IDriverDataAdapter { protected DriverDataAdapter() { } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs index a73638a3d5..f70cd98ca3 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs @@ -7,6 +7,7 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor; @@ -16,198 +17,7 @@ using TUGraz.VectoCore.Utils.Ninject; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents { - internal abstract class StandardValuesInputData - { - /// <summary> - /// Wraps the standard value input data and overrides the voltage level - /// </summary> - internal class StandardValueVoltageLevelInputData : IElectricMotorVoltageLevel - { - - public StandardValueVoltageLevelInputData(IElectricMotorVoltageLevel inputData, Volt voltageLevel) - { - _electricMotorVoltageLevelImplementation = inputData; - _voltageLevel = voltageLevel; - } - private IElectricMotorVoltageLevel _electricMotorVoltageLevelImplementation; - private Volt _voltageLevel; - - public Volt VoltageLevel => _voltageLevel; - - - #region Implementation of IElectricMotorVoltageLevel - - - - public NewtonMeter ContinuousTorque => _electricMotorVoltageLevelImplementation.ContinuousTorque; - - public PerSecond ContinuousTorqueSpeed => _electricMotorVoltageLevelImplementation.ContinuousTorqueSpeed; - - public NewtonMeter OverloadTorque => _electricMotorVoltageLevelImplementation.OverloadTorque; - - public PerSecond OverloadTestSpeed => _electricMotorVoltageLevelImplementation.OverloadTestSpeed; - - public Second OverloadTime => _electricMotorVoltageLevelImplementation.OverloadTime; - - public TableData FullLoadCurve => _electricMotorVoltageLevelImplementation.FullLoadCurve; - - public IList<IElectricMotorPowerMap> PowerMap => _electricMotorVoltageLevelImplementation.PowerMap; - - #endregion - } - - internal class StandardValueIEPCInputData : IIEPCDeclarationInputData - { - private IIEPCDeclarationInputData _iiepcDeclarationInputDataImplementation; - private IList<IElectricMotorVoltageLevel> _voltageLevels = new List<IElectricMotorVoltageLevel>(); - - /// <summary> - /// Wraps the inputData and creates new voltage levels based on the voltage level provided in the input data - /// </summary> - /// <param name="inputData"></param> - /// <param name="voltageLevels"></param> - /// <exception cref="ArgumentException"></exception> - public StandardValueIEPCInputData(IIEPCDeclarationInputData inputData, params Volt[] voltageLevels) - { - _iiepcDeclarationInputDataImplementation = inputData; - if (inputData.CertificationMethod != CertificationMethod.StandardValues) { - throw new ArgumentException("Only for standard value certification"); - } - - foreach (var voltageLevel in voltageLevels) { - _voltageLevels.Add(new StandardValueVoltageLevelInputData(inputData.VoltageLevels.First(), voltageLevel)); - } - - } - - public IList<IElectricMotorVoltageLevel> VoltageLevels => _voltageLevels; - - #region Implementation of IComponentInputData - - public DataSource DataSource => _iiepcDeclarationInputDataImplementation.DataSource; - - public bool SavedInDeclarationMode => _iiepcDeclarationInputDataImplementation.SavedInDeclarationMode; - - public string Manufacturer => _iiepcDeclarationInputDataImplementation.Manufacturer; - - public string Model => _iiepcDeclarationInputDataImplementation.Model; - - public DateTime Date => _iiepcDeclarationInputDataImplementation.Date; - - public string AppVersion => _iiepcDeclarationInputDataImplementation.AppVersion; - - public CertificationMethod CertificationMethod => _iiepcDeclarationInputDataImplementation.CertificationMethod; - - public string CertificationNumber => _iiepcDeclarationInputDataImplementation.CertificationNumber; - - public DigestData DigestValue => _iiepcDeclarationInputDataImplementation.DigestValue; - - #endregion - - #region Implementation of IIEPCDeclarationInputData - - public ElectricMachineType ElectricMachineType => _iiepcDeclarationInputDataImplementation.ElectricMachineType; - - public Watt R85RatedPower => _iiepcDeclarationInputDataImplementation.R85RatedPower; - - public KilogramSquareMeter Inertia => _iiepcDeclarationInputDataImplementation.Inertia; - - public bool DifferentialIncluded => _iiepcDeclarationInputDataImplementation.DifferentialIncluded; - - public bool DesignTypeWheelMotor => _iiepcDeclarationInputDataImplementation.DesignTypeWheelMotor; - - public int? NrOfDesignTypeWheelMotorMeasured => _iiepcDeclarationInputDataImplementation.NrOfDesignTypeWheelMotorMeasured; - - public IList<IGearEntry> Gears => _iiepcDeclarationInputDataImplementation.Gears; - - - - public IList<IDragCurve> DragCurves => _iiepcDeclarationInputDataImplementation.DragCurves; - - public TableData Conditioning => _iiepcDeclarationInputDataImplementation.Conditioning; - - #endregion - } - - internal class StandardValuesEmInputData : IElectricMotorDeclarationInputData - { - private IElectricMotorDeclarationInputData _electricMotorDeclarationInputDataImplementation; - - private IList<IElectricMotorVoltageLevel> _voltageLevels = new List<IElectricMotorVoltageLevel>(); - - /// <summary> - /// Wraps the inputData and creates new voltage levels based on the voltage level provided in the input data - /// </summary> - /// <param name="inputData"></param> - /// <param name="voltageLevels"></param> - /// <exception cref="ArgumentException"></exception> - public StandardValuesEmInputData(IElectricMotorDeclarationInputData inputData, params Volt[] voltageLevels) - { - _electricMotorDeclarationInputDataImplementation = inputData; - if (inputData.CertificationMethod != CertificationMethod.StandardValues) - { - throw new ArgumentException("Only for standard value certification"); - } - - foreach (var voltageLevel in voltageLevels) - { - _voltageLevels.Add(new StandardValueVoltageLevelInputData(inputData.VoltageLevels.First(), voltageLevel)); - } - - } - - public IList<IElectricMotorVoltageLevel> VoltageLevels => _voltageLevels; - - - #region Implementation of IComponentInputData - - public DataSource DataSource => _electricMotorDeclarationInputDataImplementation.DataSource; - - public bool SavedInDeclarationMode => _electricMotorDeclarationInputDataImplementation.SavedInDeclarationMode; - - public string Manufacturer => _electricMotorDeclarationInputDataImplementation.Manufacturer; - - public string Model => _electricMotorDeclarationInputDataImplementation.Model; - - public DateTime Date => _electricMotorDeclarationInputDataImplementation.Date; - - public string AppVersion => _electricMotorDeclarationInputDataImplementation.AppVersion; - - public CertificationMethod CertificationMethod => _electricMotorDeclarationInputDataImplementation.CertificationMethod; - - public string CertificationNumber => _electricMotorDeclarationInputDataImplementation.CertificationNumber; - - public DigestData DigestValue => _electricMotorDeclarationInputDataImplementation.DigestValue; - - #endregion - - #region Implementation of IElectricMotorDeclarationInputData - - public ElectricMachineType ElectricMachineType => _electricMotorDeclarationInputDataImplementation.ElectricMachineType; - - public Watt R85RatedPower => _electricMotorDeclarationInputDataImplementation.R85RatedPower; - - public KilogramSquareMeter Inertia => _electricMotorDeclarationInputDataImplementation.Inertia; - - public bool DcDcConverterIncluded => _electricMotorDeclarationInputDataImplementation.DcDcConverterIncluded; - - public string IHPCType => _electricMotorDeclarationInputDataImplementation.IHPCType; - - - - public TableData DragCurve => _electricMotorDeclarationInputDataImplementation.DragCurve; - - public TableData Conditioning => _electricMotorDeclarationInputDataImplementation.Conditioning; - - #endregion - } - } - - - - - - public class ElectricMachinesDataAdapter + public class ElectricMachinesDataAdapter : IElectricMachinesDataAdapter { public IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines( IElectricMachinesDeclarationInputData electricMachines, @@ -220,8 +30,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen } - if (electricMachines.Entries.Select(x => x.Position).Where(x => x != PowertrainPosition.GEN).Distinct().Count() > 1) - { + if (electricMachines.Entries.Select(x => x.Position).Where(x => x != PowertrainPosition.GEN).Distinct().Count() > 1) { throw new VectoException("multiple electric propulsion motors are not supported at the moment"); } @@ -229,7 +38,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen CheckTorqueLimitVoltageLevels(electricMachines, torqueLimits); - + return electricMachines.Entries .Select(m => Tuple.Create(m.Position, CreateElectricMachine(m.Position, m.ElectricMachine, m.Count, m.RatioADC, m.RatioPerGear, @@ -237,17 +46,17 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen } - private void CheckTorqueLimitVoltageLevels(IElectricMachinesDeclarationInputData electricMachines, + private void CheckTorqueLimitVoltageLevels(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits) { if (torqueLimits == null) { return; } - - foreach (var torqueLimit in torqueLimits.OrderBy(x => x.Key)) { - + + foreach (var torqueLimit in torqueLimits.OrderBy(x => x.Key)) { + //E-machines at position - foreach(var eMachine in electricMachines.Entries.Where(e => e.Position == torqueLimit.Key).Select(x => x.ElectricMachine)) { + foreach (var eMachine in electricMachines.Entries.Where(e => e.Position == torqueLimit.Key).Select(x => x.ElectricMachine)) { foreach (var torqueLimitVoltageLevel in torqueLimit.Value.Select(tl => tl.Item1)) { if (eMachine.VoltageLevels.All(vl => vl.VoltageLevel != torqueLimitVoltageLevel)) { throw new VectoException( @@ -258,9 +67,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen } } - private ElectricMotorData CreateElectricMachine(PowertrainPosition powertrainPosition, + private ElectricMotorData CreateElectricMachine(PowertrainPosition powertrainPosition, IElectricMotorDeclarationInputData motorData, - int count, + int count, double adcRatio, double[] ratioPerGear, TableData adcLossMap, @@ -274,8 +83,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen } var voltageLevels = new List<ElectricMotorVoltageLevelData>(); - foreach (var entry in motorData.VoltageLevels.OrderBy(x => x.VoltageLevel)) - { + foreach (var entry in motorData.VoltageLevels.OrderBy(x => x.VoltageLevel)) { var fullLoadCurve = ElectricFullLoadCurveReader.Create(entry.FullLoadCurve, count); var maxTorqueCurve = torqueLimits == null ? null @@ -297,8 +105,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen } } - if (averageVoltage == null) - { + if (averageVoltage == null) { // if no average voltage is provided (e.g. for supercap) use mean value of measured voltage maps averageVoltage = (voltageLevels.Min(x => x.Voltage) + voltageLevels.Max(x => x.Voltage)) / 2.0; } @@ -308,10 +115,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen : adcLossMap != null ? TransmissionLossMapReader.CreateEmADCLossMap(adcLossMap, adcRatio, "EM ADC LossMap") : TransmissionLossMapReader.CreateEmADCLossMap(DeclarationData.ElectricMachineDefaultMechanicalTransmissionEfficiency, adcRatio, "EM ADC LossMap Eff"); - - var retVal = new ElectricMotorData() - { + + var retVal = new ElectricMotorData() { EfficiencyData = new VoltageLevelData() { VoltageLevels = voltageLevels }, EMDragCurve = ElectricMotorDragCurveReader.Create(motorData.DragCurve, count), Inertia = motorData.Inertia * count, @@ -327,43 +133,35 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen private static ElectricMotorFullLoadCurve IntersectEMFullLoadCurves(ElectricMotorFullLoadCurve fullLoadCurve, ElectricMotorFullLoadCurve maxTorqueCurve) { - if (maxTorqueCurve == null) - { + if (maxTorqueCurve == null) { return fullLoadCurve; } - if (maxTorqueCurve.MaxSpeed.IsSmaller(fullLoadCurve.MaxSpeed)) - { + if (maxTorqueCurve.MaxSpeed.IsSmaller(fullLoadCurve.MaxSpeed)) { throw new VectoException("EM Torque limitation has to cover the whole speed range"); } var motorSpeeds = fullLoadCurve.FullLoadEntries.Select(x => x.MotorSpeed) .Concat(maxTorqueCurve.FullLoadEntries.Select(x => x.MotorSpeed)).ToList(); // iterate over all segments in the full-load curve - foreach (var fldTuple in fullLoadCurve.FullLoadEntries.Pairwise()) - { + foreach (var fldTuple in fullLoadCurve.FullLoadEntries.Pairwise()) { // find all grid points of max torque curve within the current segment of fld var maxPtsWithinSegment = maxTorqueCurve.FullLoadEntries.Where(x => x.MotorSpeed.IsGreaterOrEqual(fldTuple.Item1.MotorSpeed) && x.MotorSpeed.IsSmallerOrEqual(fldTuple.Item2.MotorSpeed)).OrderBy(x => x.MotorSpeed).ToList(); - if (maxPtsWithinSegment.Count == 0) - { + if (maxPtsWithinSegment.Count == 0) { // if grid pint is within, take the 'surrounding' segment var segment = maxTorqueCurve.FullLoadEntries.GetSection(x => x.MotorSpeed < fldTuple.Item1.MotorSpeed); maxPtsWithinSegment = new[] { segment.Item1, segment.Item2 }.ToList(); - } - else - { + } else { // add the point just before and just after the current list of points - if (maxPtsWithinSegment.Min(x => x.MotorSpeed).IsGreater(fldTuple.Item1.MotorSpeed)) - { + if (maxPtsWithinSegment.Min(x => x.MotorSpeed).IsGreater(fldTuple.Item1.MotorSpeed)) { maxPtsWithinSegment.Add(maxTorqueCurve.FullLoadEntries.Last(x => x.MotorSpeed.IsSmaller(fldTuple.Item1.MotorSpeed))); } - if (maxPtsWithinSegment.Max(x => x.MotorSpeed).IsSmaller(fldTuple.Item2.MotorSpeed)) - { + if (maxPtsWithinSegment.Max(x => x.MotorSpeed).IsSmaller(fldTuple.Item2.MotorSpeed)) { maxPtsWithinSegment.Add(maxTorqueCurve.FullLoadEntries.First(x => x.MotorSpeed.IsGreater(fldTuple.Item2.MotorSpeed))); } @@ -376,19 +174,16 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen var fldEdgeGenerate = Edge.Create(new Point(fldTuple.Item1.MotorSpeed.Value(), fldTuple.Item1.FullGenerationTorque.Value()), new Point(fldTuple.Item2.MotorSpeed.Value(), fldTuple.Item2.FullGenerationTorque.Value())); - foreach (var maxTuple in maxPtsWithinSegment.Pairwise()) - { + foreach (var maxTuple in maxPtsWithinSegment.Pairwise()) { var maxEdgeDrive = Edge.Create(new Point(maxTuple.Item1.MotorSpeed.Value(), maxTuple.Item1.FullDriveTorque.Value()), new Point(maxTuple.Item2.MotorSpeed.Value(), maxTuple.Item2.FullDriveTorque.Value())); - if (!(maxEdgeDrive.SlopeXY - fldEdgeDrive.SlopeXY).IsEqual(0, 1e-12)) - { + if (!(maxEdgeDrive.SlopeXY - fldEdgeDrive.SlopeXY).IsEqual(0, 1e-12)) { // lines are not parallel var nIntersectDrive = ((fldEdgeDrive.OffsetXY - maxEdgeDrive.OffsetXY) / (maxEdgeDrive.SlopeXY - fldEdgeDrive.SlopeXY)).SI<PerSecond>(); - if (nIntersectDrive.IsBetween(fldTuple.Item1.MotorSpeed, fldTuple.Item2.MotorSpeed)) - { + if (nIntersectDrive.IsBetween(fldTuple.Item1.MotorSpeed, fldTuple.Item2.MotorSpeed)) { motorSpeeds.Add(nIntersectDrive); } } @@ -396,16 +191,14 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen var maxEdgeGenerate = Edge.Create(new Point(maxTuple.Item1.MotorSpeed.Value(), maxTuple.Item1.FullGenerationTorque.Value()), new Point(maxTuple.Item2.MotorSpeed.Value(), maxTuple.Item2.FullGenerationTorque.Value())); - if (!((maxEdgeGenerate.SlopeXY - fldEdgeGenerate.SlopeXY).IsEqual(0, 1e-12))) - { + if (!((maxEdgeGenerate.SlopeXY - fldEdgeGenerate.SlopeXY).IsEqual(0, 1e-12))) { // lines are not parallel var nIntersectGenerate = ((fldEdgeGenerate.OffsetXY - maxEdgeGenerate.OffsetXY) / (maxEdgeGenerate.SlopeXY - fldEdgeGenerate.SlopeXY)).SI<PerSecond>(); - if (nIntersectGenerate.IsBetween(fldTuple.Item1.MotorSpeed, fldTuple.Item2.MotorSpeed)) - { + if (nIntersectGenerate.IsBetween(fldTuple.Item1.MotorSpeed, fldTuple.Item2.MotorSpeed)) { motorSpeeds.Add(nIntersectGenerate); } } @@ -414,8 +207,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen // create new full-load curve with values closest to zero. return new ElectricMotorFullLoadCurve(motorSpeeds.OrderBy(x => x.Value()).Distinct().Select(x => - new ElectricMotorFullLoadCurve.FullLoadEntry() - { + new ElectricMotorFullLoadCurve.FullLoadEntry() { MotorSpeed = x, FullDriveTorque = VectoMath.Max(fullLoadCurve.FullLoadDriveTorque(x), maxTorqueCurve.FullLoadDriveTorque(x)), @@ -426,23 +218,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen private ElectricMotorVoltageLevelData CreateIHPCVoltageLevelData(int count, IElectricMotorVoltageLevel entry, ElectricMotorFullLoadCurve fullLoadCurveCombined, GearList gearList) { - if (gearList == null) - { + if (gearList == null) { throw new VectoException("no gears provided for IHPC EM"); } - if (gearList.Count() != entry.PowerMap.Count) - { + if (gearList.Count() != entry.PowerMap.Count) { throw new VectoException( $"number of gears in transmission does not match gears in electric motor (IHPC) - {gearList.Count()}/{entry.PowerMap.Count}"); } var effMap = new Dictionary<uint, EfficiencyMap>(); - foreach (var gear in gearList) - { + foreach (var gear in gearList) { effMap.Add(gear.Gear, ElectricMotorMapReader.Create(entry.PowerMap[(int)gear.Gear - 1].PowerMap, count)); } - return new IEPCVoltageLevelData() - { + return new IEPCVoltageLevelData() { Voltage = entry.VoltageLevel, FullLoadCurve = fullLoadCurveCombined, EfficiencyMaps = effMap, @@ -468,12 +256,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen public List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(IIEPCDeclarationInputData iepc, Volt averageVoltage) { - if (iepc == null) - { + if (iepc == null) { return null; } - if (iepc.CertificationMethod == CertificationMethod.StandardValues) - { + if (iepc.CertificationMethod == CertificationMethod.StandardValues) { //Fake one very low voltage level and one very high for standard values iepc = new StandardValuesInputData.StandardValueIEPCInputData(iepc, 1.SI<Volt>(), 10E9.SI<Volt>()); } @@ -493,19 +279,16 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen var voltageLevels = new List<ElectricMotorVoltageLevelData>(); - foreach (var entry in iepc.VoltageLevels.OrderBy(x => x.VoltageLevel).AsEnumerable()) - { + foreach (var entry in iepc.VoltageLevels.OrderBy(x => x.VoltageLevel).AsEnumerable()) { var effMap = new Dictionary<uint, EfficiencyMap>(); var fldCurve = IEPCFullLoadCurveReader.Create(entry.FullLoadCurve, count, gearRatioUsedForMeasurement.Ratio); - for (var i = 0u; i < entry.PowerMap.Count; i++) - { + for (var i = 0u; i < entry.PowerMap.Count; i++) { var ratio = iepc.Gears.First(x => x.GearNumber == i + 1).Ratio; effMap.Add(i + 1, IEPCMapReader.Create(entry.PowerMap[(int)i].PowerMap, count, ratio, fldCurve)); //fullLoadCurves.Add(i + 1, IEPCFullLoadCurveReader.Create(entry.FullLoadCurve, count, ratio)); } - voltageLevels.Add(new IEPCVoltageLevelData() - { + voltageLevels.Add(new IEPCVoltageLevelData() { Voltage = iepc.CertificationMethod != CertificationMethod.StandardValues ? entry.VoltageLevel : null, //No voltagelevel is provided for standard values FullLoadCurve = fldCurve, @@ -518,26 +301,20 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen var dragCurves = new Dictionary<uint, DragCurve>(); - if (iepc.DragCurves.Count > 1) - { - for (var i = 0u; i < iepc.DragCurves.Count; i++) - { + if (iepc.DragCurves.Count > 1) { + for (var i = 0u; i < iepc.DragCurves.Count; i++) { var ratio = iepc.Gears.First(x => x.GearNumber == i + 1).Ratio; dragCurves.Add(i + 1, IEPCDragCurveReader.Create(iepc.DragCurves[(int)i].DragCurve, count, ratio)); } - } - else - { + } else { var dragCurve = iepc.DragCurves.First().DragCurve; - for (var i = 0u; i < iepc.Gears.Count; i++) - { + for (var i = 0u; i < iepc.Gears.Count; i++) { var ratio = iepc.Gears.First(x => x.GearNumber == i + 1).Ratio; dragCurves.Add(i + 1, IEPCDragCurveReader.Create(dragCurve, count, ratio)); } } - var retVal = new IEPCElectricMotorData() - { + var retVal = new IEPCElectricMotorData() { EfficiencyData = new VoltageLevelData() { VoltageLevels = voltageLevels }, IEPCDragCurves = dragCurves, Inertia = iepc.Inertia * count, @@ -556,14 +333,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen private OverloadData CalculateOverloadData(IIEPCDeclarationInputData iepc, int count, VoltageLevelData voltageLevel, Volt averageVoltage, Tuple<uint, double> gearRatioUsedForMeasurement) { - + // if average voltage is outside of the voltage-level range, do not extrapolate but take the min voltage entry, or max voltage entry - if (averageVoltage < iepc.VoltageLevels.Min(x => x.VoltageLevel)) - { + if (averageVoltage < iepc.VoltageLevels.Min(x => x.VoltageLevel)) { return CalculateOverloadBuffer(iepc.VoltageLevels.First(), count, voltageLevel, gearRatioUsedForMeasurement); } - if (averageVoltage > iepc.VoltageLevels.Max(x => x.VoltageLevel)) - { + if (averageVoltage > iepc.VoltageLevels.Max(x => x.VoltageLevel)) { return CalculateOverloadBuffer(iepc.VoltageLevels.Last(), count, voltageLevel, gearRatioUsedForMeasurement); } @@ -571,8 +346,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen var ovlLo = CalculateOverloadBuffer(vLow, count, voltageLevel, gearRatioUsedForMeasurement); var ovlHi = CalculateOverloadBuffer(vHigh, count, voltageLevel, gearRatioUsedForMeasurement); - var retVal = new OverloadData() - { + var retVal = new OverloadData() { OverloadBuffer = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.OverloadBuffer, ovlHi.OverloadBuffer, averageVoltage), ContinuousTorque = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.ContinuousTorque, ovlHi.ContinuousTorque, averageVoltage), ContinuousPowerLoss = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.ContinuousPowerLoss, ovlHi.ContinuousPowerLoss, averageVoltage) @@ -585,12 +359,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen { // if average voltage is outside of the voltage-level range, do not extrapolate but take the min voltage entry, or max voltage entry - if (averageVoltage < motorData.VoltageLevels.Min(x => x.VoltageLevel)) - { + if (averageVoltage < motorData.VoltageLevels.Min(x => x.VoltageLevel)) { return CalculateOverloadBuffer(motorData.VoltageLevels.First(), count, voltageLevel); } - if (averageVoltage > motorData.VoltageLevels.Max(x => x.VoltageLevel)) - { + if (averageVoltage > motorData.VoltageLevels.Max(x => x.VoltageLevel)) { return CalculateOverloadBuffer(motorData.VoltageLevels.Last(), count, voltageLevel); } @@ -598,8 +370,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen var ovlLo = CalculateOverloadBuffer(vLow, count, voltageLevel); var ovlHi = CalculateOverloadBuffer(vHigh, count, voltageLevel); - var retVal = new OverloadData() - { + var retVal = new OverloadData() { OverloadBuffer = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.OverloadBuffer, ovlHi.OverloadBuffer, averageVoltage), ContinuousTorque = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.ContinuousTorque, ovlHi.ContinuousTorque, averageVoltage), ContinuousPowerLoss = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.ContinuousPowerLoss, ovlHi.ContinuousPowerLoss, averageVoltage) @@ -618,10 +389,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen var overloadTestSpeed = (voltageEntry.OverloadTestSpeed ?? 0.RPMtoRad()) * gearRatioUsedForMeasurement; - var peakElPwr = voltageLevel.LookupElectricPower(voltageEntry.VoltageLevel, - overloadTestSpeed, + var peakElPwr = voltageLevel.LookupElectricPower(voltageEntry.VoltageLevel, + overloadTestSpeed, -overloadTorque, - gear, + gear, true) .ElectricalPower; var peakPwrLoss = -peakElPwr - overloadTorque * overloadTestSpeed; // losses need to be positive @@ -633,8 +404,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen gear, true).ElectricalPower; var continuousPowerLoss = -contElPwr - continuousTorque * continuousTorqueSpeed; // loss needs to be positive var overloadBuffer = (peakPwrLoss - continuousPowerLoss) * voltageEntry.OverloadTime; - return new OverloadData() - { + return new OverloadData() { OverloadBuffer = overloadBuffer, ContinuousTorque = continuousTorque, ContinuousPowerLoss = continuousPowerLoss @@ -642,4 +412,193 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen } } + internal abstract class StandardValuesInputData + { + /// <summary> + /// Wraps the standard value input data and overrides the voltage level + /// </summary> + internal class StandardValueVoltageLevelInputData : IElectricMotorVoltageLevel + { + + public StandardValueVoltageLevelInputData(IElectricMotorVoltageLevel inputData, Volt voltageLevel) + { + _electricMotorVoltageLevelImplementation = inputData; + _voltageLevel = voltageLevel; + } + private IElectricMotorVoltageLevel _electricMotorVoltageLevelImplementation; + private Volt _voltageLevel; + + public Volt VoltageLevel => _voltageLevel; + + + #region Implementation of IElectricMotorVoltageLevel + + + + public NewtonMeter ContinuousTorque => _electricMotorVoltageLevelImplementation.ContinuousTorque; + + public PerSecond ContinuousTorqueSpeed => _electricMotorVoltageLevelImplementation.ContinuousTorqueSpeed; + + public NewtonMeter OverloadTorque => _electricMotorVoltageLevelImplementation.OverloadTorque; + + public PerSecond OverloadTestSpeed => _electricMotorVoltageLevelImplementation.OverloadTestSpeed; + + public Second OverloadTime => _electricMotorVoltageLevelImplementation.OverloadTime; + + public TableData FullLoadCurve => _electricMotorVoltageLevelImplementation.FullLoadCurve; + + public IList<IElectricMotorPowerMap> PowerMap => _electricMotorVoltageLevelImplementation.PowerMap; + + #endregion + } + + internal class StandardValueIEPCInputData : IIEPCDeclarationInputData + { + private IIEPCDeclarationInputData _iiepcDeclarationInputDataImplementation; + private IList<IElectricMotorVoltageLevel> _voltageLevels = new List<IElectricMotorVoltageLevel>(); + + /// <summary> + /// Wraps the inputData and creates new voltage levels based on the voltage level provided in the input data + /// </summary> + /// <param name="inputData"></param> + /// <param name="voltageLevels"></param> + /// <exception cref="ArgumentException"></exception> + public StandardValueIEPCInputData(IIEPCDeclarationInputData inputData, params Volt[] voltageLevels) + { + _iiepcDeclarationInputDataImplementation = inputData; + if (inputData.CertificationMethod != CertificationMethod.StandardValues) { + throw new ArgumentException("Only for standard value certification"); + } + + foreach (var voltageLevel in voltageLevels) { + _voltageLevels.Add(new StandardValueVoltageLevelInputData(inputData.VoltageLevels.First(), voltageLevel)); + } + + } + + public IList<IElectricMotorVoltageLevel> VoltageLevels => _voltageLevels; + + #region Implementation of IComponentInputData + + public DataSource DataSource => _iiepcDeclarationInputDataImplementation.DataSource; + + public bool SavedInDeclarationMode => _iiepcDeclarationInputDataImplementation.SavedInDeclarationMode; + + public string Manufacturer => _iiepcDeclarationInputDataImplementation.Manufacturer; + + public string Model => _iiepcDeclarationInputDataImplementation.Model; + + public DateTime Date => _iiepcDeclarationInputDataImplementation.Date; + + public string AppVersion => _iiepcDeclarationInputDataImplementation.AppVersion; + + public CertificationMethod CertificationMethod => _iiepcDeclarationInputDataImplementation.CertificationMethod; + + public string CertificationNumber => _iiepcDeclarationInputDataImplementation.CertificationNumber; + + public DigestData DigestValue => _iiepcDeclarationInputDataImplementation.DigestValue; + + #endregion + + #region Implementation of IIEPCDeclarationInputData + + public ElectricMachineType ElectricMachineType => _iiepcDeclarationInputDataImplementation.ElectricMachineType; + + public Watt R85RatedPower => _iiepcDeclarationInputDataImplementation.R85RatedPower; + + public KilogramSquareMeter Inertia => _iiepcDeclarationInputDataImplementation.Inertia; + + public bool DifferentialIncluded => _iiepcDeclarationInputDataImplementation.DifferentialIncluded; + + public bool DesignTypeWheelMotor => _iiepcDeclarationInputDataImplementation.DesignTypeWheelMotor; + + public int? NrOfDesignTypeWheelMotorMeasured => _iiepcDeclarationInputDataImplementation.NrOfDesignTypeWheelMotorMeasured; + + public IList<IGearEntry> Gears => _iiepcDeclarationInputDataImplementation.Gears; + + + + public IList<IDragCurve> DragCurves => _iiepcDeclarationInputDataImplementation.DragCurves; + + public TableData Conditioning => _iiepcDeclarationInputDataImplementation.Conditioning; + + #endregion + } + + internal class StandardValuesEmInputData : IElectricMotorDeclarationInputData + { + private IElectricMotorDeclarationInputData _electricMotorDeclarationInputDataImplementation; + + private IList<IElectricMotorVoltageLevel> _voltageLevels = new List<IElectricMotorVoltageLevel>(); + + /// <summary> + /// Wraps the inputData and creates new voltage levels based on the voltage level provided in the input data + /// </summary> + /// <param name="inputData"></param> + /// <param name="voltageLevels"></param> + /// <exception cref="ArgumentException"></exception> + public StandardValuesEmInputData(IElectricMotorDeclarationInputData inputData, params Volt[] voltageLevels) + { + _electricMotorDeclarationInputDataImplementation = inputData; + if (inputData.CertificationMethod != CertificationMethod.StandardValues) + { + throw new ArgumentException("Only for standard value certification"); + } + + foreach (var voltageLevel in voltageLevels) + { + _voltageLevels.Add(new StandardValueVoltageLevelInputData(inputData.VoltageLevels.First(), voltageLevel)); + } + + } + + public IList<IElectricMotorVoltageLevel> VoltageLevels => _voltageLevels; + + + #region Implementation of IComponentInputData + + public DataSource DataSource => _electricMotorDeclarationInputDataImplementation.DataSource; + + public bool SavedInDeclarationMode => _electricMotorDeclarationInputDataImplementation.SavedInDeclarationMode; + + public string Manufacturer => _electricMotorDeclarationInputDataImplementation.Manufacturer; + + public string Model => _electricMotorDeclarationInputDataImplementation.Model; + + public DateTime Date => _electricMotorDeclarationInputDataImplementation.Date; + + public string AppVersion => _electricMotorDeclarationInputDataImplementation.AppVersion; + + public CertificationMethod CertificationMethod => _electricMotorDeclarationInputDataImplementation.CertificationMethod; + + public string CertificationNumber => _electricMotorDeclarationInputDataImplementation.CertificationNumber; + + public DigestData DigestValue => _electricMotorDeclarationInputDataImplementation.DigestValue; + + #endregion + + #region Implementation of IElectricMotorDeclarationInputData + + public ElectricMachineType ElectricMachineType => _electricMotorDeclarationInputDataImplementation.ElectricMachineType; + + public Watt R85RatedPower => _electricMotorDeclarationInputDataImplementation.R85RatedPower; + + public KilogramSquareMeter Inertia => _electricMotorDeclarationInputDataImplementation.Inertia; + + public bool DcDcConverterIncluded => _electricMotorDeclarationInputDataImplementation.DcDcConverterIncluded; + + public string IHPCType => _electricMotorDeclarationInputDataImplementation.IHPCType; + + + + public TableData DragCurve => _electricMotorDeclarationInputDataImplementation.DragCurve; + + public TableData Conditioning => _electricMotorDeclarationInputDataImplementation.Conditioning; + + #endregion + } + } + + + } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/EngineDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/EngineDataAdapter.cs index 7f1d8d5052..0597a5c1be 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/EngineDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/EngineDataAdapter.cs @@ -6,6 +6,7 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; 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.SimulationComponent; using TUGraz.VectoCore.Models.SimulationComponent.Data; @@ -13,14 +14,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents { - public interface IEngineDataAdapter - { - CombustionEngineData CreateEngineData(IVehicleDeclarationInputData primaryVehicle, - IEngineModeDeclarationInputData mode, Mission mission); - - CombustionEngineData CreateEngineData(IVehicleDeclarationInputData primaryVehicle, int modeIdx, Mission mission); - } - public abstract class EngineComponentDataAdapter : ComponentDataAdapterBase, IEngineDataAdapter + public abstract class EngineComponentDataAdapter : ComponentDataAdapterBase, IEngineDataAdapter { internal static EngineFullLoadCurve IntersectFullLoadCurves(EngineFullLoadCurve engineCurve, NewtonMeter maxTorque) { diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/GearBoxDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/GearBoxDataAdapter.cs index f05d285827..808bccce88 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/GearBoxDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/GearBoxDataAdapter.cs @@ -9,6 +9,7 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.Impl; using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.InputData.Reader.ShiftStrategy; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; @@ -19,16 +20,7 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents { - public interface IGearboxDataAdapter - { - GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData, - IShiftPolygonCalculator shiftPolygonCalculator, GearboxType[] supportedGearboxTypes); - - ShiftStrategyParameters CreateGearshiftData(double axleRatio, - PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount); - } - - public abstract class GearboxDataAdapterBase : ComponentDataAdapterBase, IGearboxDataAdapter + public abstract class GearboxDataAdapterBase : ComponentDataAdapterBase, IGearboxDataAdapter { #region Helper protected internal static NewtonMeter GbxMaxTorque( diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IADASDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IADASDataAdapter.cs new file mode 100644 index 0000000000..fcabfd058e --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IADASDataAdapter.cs @@ -0,0 +1,10 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.Models.SimulationComponent.Data; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces +{ + public interface IADASDataAdapter + { + VehicleData.ADASData CreateADAS(IAdvancedDriverAssistantSystemDeclarationInputData adas); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAirdragDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAirdragDataAdapter.cs new file mode 100644 index 0000000000..5c7dc780b1 --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAirdragDataAdapter.cs @@ -0,0 +1,15 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.SimulationComponent.Data; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces +{ + public interface IAirdragDataAdapter + { + AirdragData CreateAirdragData( + IAirdragDeclarationInputData airdragInputData, Mission mission, + Segment segment); + + AirdragData CreateAirdragData(IVehicleDeclarationInputData completedVehicle, Mission mission); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAngledriveDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAngledriveDataAdapter.cs new file mode 100644 index 0000000000..f91809fcfa --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAngledriveDataAdapter.cs @@ -0,0 +1,11 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.Models.SimulationComponent.Data; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces +{ + public interface IAngledriveDataAdapter + { + AngledriveData CreateAngledriveData(IAngledriveInputData data, bool useEfficiencyFallback); + AngledriveData CreateAngledriveData(IAngledriveInputData data); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAuxiliaryDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAuxiliaryDataAdapter.cs new file mode 100644 index 0000000000..246c74a129 --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAuxiliaryDataAdapter.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.BusAuxiliaries; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces +{ + public interface IAuxiliaryDataAdapter + { + IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData, + IBusAuxiliariesDeclarationData busAuxData, MissionType mission, VehicleClass hvdClass, Meter vehicleLength, + int? numSteeredAxles, VectoSimulationJobType jobType); + } + public interface ICompletedBusAuxiliaryDataAdapter : IPrimaryBusAuxiliaryDataAdapter + { + IAuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData primaryVehicle, + IVehicleDeclarationInputData completedVehicle, VectoRunData runData); + } + + public interface IPrimaryBusAuxiliaryDataAdapter : IAuxiliaryDataAdapter + { + AuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData primaryVehicle, VectoRunData runData); + + } + +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAxleGearDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAxleGearDataAdapter.cs new file mode 100644 index 0000000000..dbc20226cc --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAxleGearDataAdapter.cs @@ -0,0 +1,11 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.Models.SimulationComponent.Data; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces +{ + public interface IAxleGearDataAdapter + { + AxleGearData CreateAxleGearData(IAxleGearInputData data); + AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IDriverDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IDriverDataAdapter.cs new file mode 100644 index 0000000000..0d10a46d33 --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IDriverDataAdapter.cs @@ -0,0 +1,10 @@ +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.SimulationComponent.Data; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces +{ + public interface IDriverDataAdapter + { + DriverData CreateDriverData(Segment segment); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/IEPCDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEPCDataAdapter.cs similarity index 93% rename from VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/IEPCDataAdapter.cs rename to VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEPCDataAdapter.cs index 03c58d718a..4af31d9495 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/IEPCDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEPCDataAdapter.cs @@ -10,10 +10,10 @@ using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor; -namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces { public class IEPCDataAdapter { - - } + + } } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IElectricMachinesDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IElectricMachinesDataAdapter.cs new file mode 100644 index 0000000000..05a4a34662 --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IElectricMachinesDataAdapter.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Impl; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces +{ + public interface IElectricMachinesDataAdapter + { + IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines( + IElectricMachinesDeclarationInputData electricMachines, + IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage, GearList gearlist = null); + + List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(IIEPCDeclarationInputData iepc, + Volt averageVoltage); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEngineDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEngineDataAdapter.cs new file mode 100644 index 0000000000..347b3a2cd6 --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEngineDataAdapter.cs @@ -0,0 +1,14 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.SimulationComponent.Data; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces +{ + public interface IEngineDataAdapter + { + CombustionEngineData CreateEngineData(IVehicleDeclarationInputData primaryVehicle, + IEngineModeDeclarationInputData mode, Mission mission); + + CombustionEngineData CreateEngineData(IVehicleDeclarationInputData primaryVehicle, int modeIdx, Mission mission); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IGearboxDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IGearboxDataAdapter.cs new file mode 100644 index 0000000000..16aa7ac027 --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IGearboxDataAdapter.cs @@ -0,0 +1,18 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.SimulationComponent; +using TUGraz.VectoCore.Models.SimulationComponent.Data; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces +{ + public interface IGearboxDataAdapter + { + GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData, + IShiftPolygonCalculator shiftPolygonCalculator, GearboxType[] supportedGearboxTypes); + + ShiftStrategyParameters CreateGearshiftData(double axleRatio, + PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IPTODataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IPTODataAdapter.cs new file mode 100644 index 0000000000..a81fea75f4 --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IPTODataAdapter.cs @@ -0,0 +1,11 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.Models.SimulationComponent.Data; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces +{ + public interface IPTODataAdapter + { + PTOData CreatePTOTransmissionData(IPTOTransmissionInputData pto, IGearboxDeclarationInputData gbx); + PTOData CreateDefaultPTOData(IPTOTransmissionInputData pto, IGearboxDeclarationInputData gbx); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs new file mode 100644 index 0000000000..752d41eebb --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs @@ -0,0 +1,10 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.Models.SimulationComponent.Data; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces +{ + public interface IRetarderDataAdapter + { + RetarderData CreateRetarderData(IRetarderInputData retarder, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/ITorqueConverterDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/ITorqueConverterDataAdapter.cs new file mode 100644 index 0000000000..ea8dd7461b --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/ITorqueConverterDataAdapter.cs @@ -0,0 +1,14 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces +{ + public interface ITorqueConverterDataAdapter + { + TorqueConverterData CreateTorqueConverterData(GearboxType gearboxType, + ITorqueConverterDeclarationInputData torqueConverter, double ratio, + CombustionEngineData engineData); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IVehicleDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IVehicleDataAdapter.cs new file mode 100644 index 0000000000..774fd01a0c --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IVehicleDataAdapter.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.SimulationComponent.Data; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces +{ + public interface IVehicleDataAdapter + { + VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Segment segment, Mission mission, + Kilogram loading, double? passengerCount, bool allowVocational); + VehicleData CreateExemptedVehicleData(IVehicleDeclarationInputData data); + + VehicleData CreateVehicleData(IVehicleDeclarationInputData primaryVehicle, + IVehicleDeclarationInputData completedVehicle, Segment segment, Mission mission, + KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading); + + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/PTODataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/PTODataAdapter.cs index 64a5ce462c..5011385a9c 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/PTODataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/PTODataAdapter.cs @@ -2,6 +2,7 @@ using TUGraz.VectoCommon.InputData; 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; @@ -9,13 +10,7 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents { - public interface IPTODataAdapter - { - PTOData CreatePTOTransmissionData(IPTOTransmissionInputData pto, IGearboxDeclarationInputData gbx); - PTOData CreateDefaultPTOData(IPTOTransmissionInputData pto, IGearboxDeclarationInputData gbx); - } - - public class PTODataAdapterLorry : IPTODataAdapter + public class PTODataAdapterLorry : IPTODataAdapter { public virtual PTOData CreateDefaultPTOData(IPTOTransmissionInputData pto, IGearboxDeclarationInputData gbx) diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs index 215ba949b5..ee3b6a1511 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs @@ -4,16 +4,13 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; 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.SimulationComponent.Data; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents { - public interface IRetarderDataAdapter - { - RetarderData CreateRetarderData(IRetarderInputData retarder, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet); - } - public class RetarderDataAdapter : IRetarderDataAdapter + public class RetarderDataAdapter : IRetarderDataAdapter { public RetarderData CreateRetarderData(IRetarderInputData retarder, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet) { diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/HybridStrategyParameterDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/HybridStrategyParameterDataAdapter.cs index 7fcd4e108c..d63ed42668 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/HybridStrategyParameterDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/HybridStrategyParameterDataAdapter.cs @@ -16,8 +16,8 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.StrategyDataAdapter { - - public abstract class HybridStrategyDataAdapter{ + public abstract class HybridStrategyDataAdapter : IHybridStrategyDataAdapter + { protected internal static Dictionary<GearshiftPosition, VehicleMaxPropulsionTorque> CreateMaxPropulsionTorque( ArchitectureID archId, CombustionEngineData engineData, GearboxData gearboxData, TableData boostingLimitations) { @@ -168,11 +168,22 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen return entries; } - } + + #region Implementation of IHybridStrategyDataAdapter + + public abstract HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData, SuperCapData superCap, + VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType, ArchitectureID archID, + CombustionEngineData engineData, GearboxData gearboxData, TableData boostingLimitations); + + public abstract HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData, SuperCapData superCapData, + Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode); + + #endregion + } public class ParallelHybridStrategyParameterDataAdapter : HybridStrategyDataAdapter { - public HybridStrategyParameters CreateHybridStrategyParameters( + public override HybridStrategyParameters CreateHybridStrategyParameters( BatterySystemData batterySystemData, SuperCapData superCap, VectoRunData.OvcHevMode ovcMode, @@ -236,15 +247,23 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen return result; } - - - - - } + public override HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData, SuperCapData superCapData, + Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode) + { + throw new NotImplementedException("Not supported for parallel hybrid strategy"); + } + } public class SerialHybridStrategyParameterDataAdapter : HybridStrategyDataAdapter { - public HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData, + public override HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData, SuperCapData superCap, + VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType, ArchitectureID archID, + CombustionEngineData engineData, GearboxData gearboxData, TableData boostingLimitations) + { + throw new NotImplementedException("Not supported for serial hybrid strategy"); + } + + public override HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData, SuperCapData superCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode) { if (batterySystemData == null && superCapData == null) { diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/IHybridStrategyDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/IHybridStrategyDataAdapter.cs new file mode 100644 index 0000000000..f656527161 --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/IHybridStrategyDataAdapter.cs @@ -0,0 +1,27 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.Battery; + +namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.StrategyDataAdapter +{ + public interface IHybridStrategyDataAdapter + { + // parallel hybrid params + HybridStrategyParameters CreateHybridStrategyParameters( + BatterySystemData batterySystemData, + SuperCapData superCap, + VectoRunData.OvcHevMode ovcMode, + LoadingType loading, + VehicleClass vehicleClass, + MissionType missionType, ArchitectureID archID, CombustionEngineData engineData, GearboxData gearboxData, + TableData boostingLimitations); + + // serial hybrid params + HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData, + SuperCapData superCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/TorqueConverterDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/TorqueConverterDataAdapter.cs index eb7d615599..c25724f2ca 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/TorqueConverterDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/TorqueConverterDataAdapter.cs @@ -1,19 +1,14 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents { - public interface ITorqueConverterDataAdapter - { - TorqueConverterData CreateTorqueConverterData(GearboxType gearboxType, - ITorqueConverterDeclarationInputData torqueConverter, double ratio, - CombustionEngineData engineData); - } - public class TorqueConverterDataAdapter : ITorqueConverterDataAdapter + public class TorqueConverterDataAdapter : ITorqueConverterDataAdapter { public virtual TorqueConverterData CreateTorqueConverterData(GearboxType gearboxType, ITorqueConverterDeclarationInputData torqueConverter, double ratio, diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs index a6487417bc..b7b9708a46 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs @@ -6,24 +6,14 @@ using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents { - public interface IVehicleDataAdapter - { - VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Segment segment, Mission mission, - Kilogram loading, double? passengerCount, bool allowVocational); - VehicleData CreateExemptedVehicleData(IVehicleDeclarationInputData data); - - VehicleData CreateVehicleData(IVehicleDeclarationInputData primaryVehicle, - IVehicleDeclarationInputData completedVehicle, Segment segment, Mission mission, - KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading); - - } - internal abstract class VehicleDataAdapter : ComponentDataAdapterBase, IVehicleDataAdapter + internal abstract class VehicleDataAdapter : ComponentDataAdapterBase, IVehicleDataAdapter { public static NewtonMeter VehMaxTorque( ITransmissionInputData gear, int numGears, diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs index 46799d3843..ea82c0546d 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs @@ -8,6 +8,7 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.SimulationComponent; @@ -15,7 +16,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus { - public abstract class DeclarationDataAdapterSingleBus + public abstract class DeclarationDataAdapterSingleBus { public abstract class SingleBusBase : ISingleBusDeclarationDataAdapter { diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs index ea7f482c8e..8f818e38b8 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs @@ -95,6 +95,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa InputDataHash = InputDataProvider.XMLHash, MaxChargingPower = InputDataProvider.JobInputData.Vehicle.MaxChargingPower, }; + return simulationRunData; } @@ -295,12 +296,12 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa mission); // _engineData.Copy(), // a copy is necessary because every run has a different correction factor! simulationRunData.ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(); - - CreateGearboxAndGearshiftData(vehicle, simulationRunData); + + CreateGearboxAndGearshiftData(vehicle, simulationRunData); - simulationRunData.AngledriveData = _angledriveData; + simulationRunData.AngledriveData = _angledriveData; simulationRunData.Aux = DataAdapter.CreateAuxiliaryData( vehicle.Components.AuxiliaryInputData, vehicle.Components.BusAuxiliaries, mission.MissionType, diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs index e57617e60c..01a7c6c394 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs @@ -38,32 +38,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa Report = report; } - - //protected abstract IEnumerable<VectoRunData> VectoRunDataHeavyBusPrimary(); - //protected override IEnumerable<VectoRunData> GetNextRun() - //{ - // if (InputDataProvider.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle) - // { - // //if (InputDataProvider.JobInputData.Vehicle.ExemptedVehicle) - // //{ - // // yield return CreateVectoRunData(InputDataProvider.JobInputData.Vehicle, 0, null, - // // new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>()); - // //} - // //else - // //{ - // foreach (var vectoRunData in VectoRunDataHeavyBusPrimary()) - // { - // yield return vectoRunData; - // } - // //} - // } - - // foreach (var entry in new List<VectoRunData>()) - // { - // yield return entry; - // } - //} - protected override VectoRunData GetPowertrainConfigForReportInit() { var vehicle = InputDataProvider.JobInputData.Vehicle; @@ -166,6 +140,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa //DriverData = _driverdata, //GearshiftParameters = _gearshiftData, }; + return simulationRunData; } @@ -195,6 +170,9 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa throw new VectoException("Super caps AND batteries are not supported"); } } + + protected abstract void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, + VectoRunData runData); } public class Conventional : PrimaryBusBase @@ -259,19 +237,28 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa simulationRunData.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData( mission, InputDataProvider.JobInputData.Vehicle, simulationRunData); + CreateGearboxAndGearshiftData(vehicle, simulationRunData); + return simulationRunData; + } + + #region Overrides of PrimaryBusBase + + protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData) + { var shiftStrategyName = PowertrainBuilder.GetShiftStrategyName(vehicle.Components.GearboxInputData.Type, vehicle.VehicleType); - simulationRunData.GearboxData = DataAdapter.CreateGearboxData(vehicle, simulationRunData, - ShiftPolygonCalculator.Create(shiftStrategyName, simulationRunData.GearshiftParameters)); - simulationRunData.GearshiftParameters = + runData.GearboxData = DataAdapter.CreateGearboxData(vehicle, runData, + ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters)); + + runData.GearshiftParameters = DataAdapter.CreateGearshiftData( - simulationRunData.GearboxData, - (simulationRunData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (simulationRunData.AngledriveData?.Angledrive.Ratio ?? 1.0), - vehicle.EngineIdleSpeed - ); + (runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0), + vehicle.EngineIdleSpeed, + vehicle.Components.GearboxInputData.Type, + vehicle.Components.GearboxInputData.Gears.Count); - return simulationRunData; } + #endregion } public abstract class Hybrid : PrimaryBusBase @@ -320,6 +307,16 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa throw new NotImplementedException(); } + protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData) + { + if (vehicle.ArchitectureID.IsOneOf(ArchitectureID.S2, ArchitectureID.S_IEPC)) { + throw new ArgumentException(nameof(vehicle.ArchitectureID)); + } + runData.GearshiftParameters = new ShiftStrategyParameters() { + StartSpeed = DeclarationData.GearboxTCU.StartSpeed, + StartAcceleration = DeclarationData.GearboxTCU.StartAcceleration + }; + } } @@ -337,16 +334,27 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa //#endregion - #region Overrides of PrimaryBusBase - - + protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData) + { + if (vehicle.ArchitectureID != ArchitectureID.E2) { + throw new ArgumentException(nameof(vehicle)); + } - #endregion + runData.GearshiftParameters = + DataAdapter.CreateGearshiftData( + (runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0), + null, + vehicle.Components.GearboxInputData.Type, + vehicle.Components.GearboxInputData.Gears.Count); - #region Overrides of PrimaryBusBase + var shiftStrategyName = + PowertrainBuilder.GetShiftStrategyName(vehicle.Components.GearboxInputData.Type, + vehicle.VehicleType); + runData.GearboxData = DataAdapter.CreateGearboxData(vehicle, runData, + ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters)); - #endregion + } } public class HEV_S3 : SerialHybrid @@ -374,10 +382,27 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa { public HEV_S_IEPC(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - #region Overrides of PrimaryBusBase + protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData) + { + if (vehicle.ArchitectureID != ArchitectureID.E2) { + throw new ArgumentException(nameof(vehicle)); + } + runData.GearshiftParameters = + DataAdapter.CreateGearshiftData( + (runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0), + null, + vehicle.Components.GearboxInputData.Type, + vehicle.Components.GearboxInputData.Gears.Count); - #endregion + + var shiftStrategyName = + PowertrainBuilder.GetShiftStrategyName(vehicle.Components.GearboxInputData.Type, + vehicle.VehicleType); + runData.GearboxData = DataAdapter.CreateGearboxData(vehicle, runData, + ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters)); + + } } public abstract class ParallelHybrid : Hybrid @@ -400,6 +425,22 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa throw new NotImplementedException(); } + protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData) + { + var shiftStrategyName = PowertrainBuilder.GetShiftStrategyName(vehicle.Components.GearboxInputData.Type, vehicle.VehicleType); + + runData.GearshiftParameters = + DataAdapter.CreateGearshiftData( + (runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0), + vehicle.EngineIdleSpeed, + vehicle.Components.GearboxInputData.Type, + vehicle.Components.GearboxInputData.Gears.Count); + + runData.GearboxData = DataAdapter.CreateGearboxData(vehicle, runData, + ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters)); + + } + } public class HEV_P1 : ParallelHybrid @@ -484,66 +525,54 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa protected override VectoRunData CreateVectoRunData(IVehicleDeclarationInputData vehicle, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, int? modeIdx = null, VectoRunData.OvcHevMode ovcMode = VectoRunData.OvcHevMode.NotApplicable) { - var simulationRunData = CreateCommonRunData(vehicle, mission, loading, _segment); + var result = CreateCommonRunData(vehicle, mission, loading, _segment); DataAdapter.CreateREESSData( componentsElectricStorage: vehicle.Components.ElectricStorage, vehicle.VehicleType, true, - (bs) => simulationRunData.BatteryData = bs, - (sc) => simulationRunData.SuperCapData = sc); + (bs) => result.BatteryData = bs, + (sc) => result.SuperCapData = sc); - simulationRunData.ElectricMachinesData = DataAdapter.CreateElectricMachines(vehicle.Components.ElectricMachines, - vehicle.ElectricMotorTorqueLimits, simulationRunData.BatteryData.CalculateAverageVoltage(), null); + result.ElectricMachinesData = DataAdapter.CreateElectricMachines(vehicle.Components.ElectricMachines, + vehicle.ElectricMotorTorqueLimits, result.BatteryData.CalculateAverageVoltage(), null); if (vehicle.VehicleType == VectoSimulationJobType.IEPC_E) { - simulationRunData.ElectricMachinesData = DataAdapter.CreateIEPCElectricMachines(vehicle.Components.IEPC, - simulationRunData.BatteryData.CalculateAverageVoltage()); + result.ElectricMachinesData = DataAdapter.CreateIEPCElectricMachines(vehicle.Components.IEPC, + result.BatteryData.CalculateAverageVoltage()); } - simulationRunData.VehicleData = DataAdapter.CreateVehicleData(vehicle, _segment, mission, loading, _allowVocational); - simulationRunData.AirdragData = DataAdapter.CreateAirdragData(null, mission, new Segment()); - //EngineData = DataAdapter.CreateEngineData(InputDataProvider.JobInputData.Vehicle, engineMode, mission), - simulationRunData.ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(); - simulationRunData.GearboxData = _gearboxData; + result.VehicleData = DataAdapter.CreateVehicleData(vehicle, _segment, mission, loading, _allowVocational); + result.AirdragData = DataAdapter.CreateAirdragData(null, mission, new Segment()); + result.ElectricMachinesData = DataAdapter.CreateElectricMachines(vehicle.Components.ElectricMachines, vehicle.ElectricMotorTorqueLimits, result.BatteryData.CalculateAverageVoltage(), null); + result.GearboxData = _gearboxData; if (AxleGearRequired() || vehicle.Components.AxleGearInputData != null) { - simulationRunData.AxleGearData = _axlegearData; + result.AxleGearData = _axlegearData; } - simulationRunData.AngledriveData = _angledriveData; - simulationRunData.Aux = DataAdapter.CreateAuxiliaryData( + result.AngledriveData = _angledriveData; + result.Aux = DataAdapter.CreateAuxiliaryData( vehicle.Components.AuxiliaryInputData, vehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, vehicle.Length ?? mission.BusParameter.VehicleLength, vehicle.Components.AxleWheels.NumSteeredAxles, vehicle.VehicleType); - simulationRunData.Retarder = _retarderData; - simulationRunData.DriverData = _driverdata; - simulationRunData.GearshiftParameters = _gearshiftData; - - //simulationRunData.EngineData.FuelMode = modeIdx.Value; - simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass; - simulationRunData.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData( - mission, InputDataProvider.JobInputData.Vehicle, simulationRunData); - var shiftStrategyName = - PowertrainBuilder.GetShiftStrategyName(vehicle.Components.GearboxInputData.Type, - vehicle.VehicleType); - simulationRunData.GearboxData = DataAdapter.CreateGearboxData(vehicle, simulationRunData, - ShiftPolygonCalculator.Create(shiftStrategyName, simulationRunData.GearshiftParameters)); - simulationRunData.GearshiftParameters = - DataAdapter.CreateGearshiftData( - simulationRunData.GearboxData, - (simulationRunData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (simulationRunData.AngledriveData?.Angledrive.Ratio ?? 1.0), - vehicle.EngineIdleSpeed - ); - - return simulationRunData; + result.Retarder = _retarderData; + result.DriverData = _driverdata; + result.GearshiftParameters = _gearshiftData; + + result.VehicleData.VehicleClass = _segment.VehicleClass; + result.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData( + mission, InputDataProvider.JobInputData.Vehicle, result); + CreateGearboxAndGearshiftData(vehicle, result); + + return result; } protected virtual bool AxleGearRequired() { return InputDataProvider.JobInputData.Vehicle.ArchitectureID != ArchitectureID.E4; } - protected virtual void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData) + protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData) { if (vehicle.ArchitectureID == ArchitectureID.E2) { throw new ArgumentException(); @@ -574,9 +603,11 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa } runData.GearshiftParameters = - DataAdapter.CreateGearshiftData(runData.GearboxData, - runData.AxleGearData?.AxleGear.Ratio ?? 1.0, - null); + DataAdapter.CreateGearshiftData( + (runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0), + null, + vehicle.Components.GearboxInputData.Type, + vehicle.Components.GearboxInputData.Gears.Count); var shiftStrategyName = @@ -643,6 +674,11 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa return CreateVectoRunData(vehicle, null, new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>(), 0); } + protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData) + { + throw new NotImplementedException(); + } + //protected override IEnumerable<VectoRunData> VectoRunDataHeavyBusPrimary() //{ // yield return new VectoRunData { diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs index 097137e86b..6cf4b896f7 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs @@ -77,7 +77,10 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl // DataAdapter.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData); GearshiftData = DataAdapter.CreateGearshiftData( - GearboxData, AxlegearData.AxleGear.Ratio * (AngledriveData?.Angledrive.Ratio ?? 1.0), EngineData.IdleSpeed); + AxlegearData.AxleGear.Ratio * (AngledriveData?.Angledrive.Ratio ?? 1.0), + EngineData.IdleSpeed, + vehicle.Components.GearboxInputData.Type, + vehicle.Components.GearboxInputData.Gears.Count); AuxVTP = CreateVTPAuxData(vehicle); } @@ -157,7 +160,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl }); var busAux = vehicle.Components.BusAuxiliaries; - var psCompressor = DeclarationData.BusAuxiliaries.GetCompressorMap(busAux.PneumaticSupply.CompressorSize, busAux.PneumaticSupply.Clutch); + var psCompressor = DeclarationData.BusAuxiliaries.GetCompressorMap(busAux.PneumaticSupply); retVal.Add(new VectoRunData.AuxData() { DemandType = AuxiliaryDemandType.Direct, diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs index 2be73e6a81..6e54283f1b 100644 --- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs @@ -285,8 +285,19 @@ namespace TUGraz.VectoCore.Models.Declaration // } //} - public static ICompressorMap GetCompressorMap(string compressorSize, string clutchType) + public static ICompressorMap GetCompressorMap( + IPneumaticSupplyDeclarationData pneumaticSupply) { + var compressorSize = pneumaticSupply.CompressorSize; + var clutchType = pneumaticSupply.Clutch; + + if (pneumaticSupply.CompressorDrive == CompressorDrive.electrically) { + return null; + //var size = GetCompressorResourceForSize("Small"); + //return CompressorMapReader.ReadStream( + // RessourceHelper.ReadStream(DeclarationDataResourcePrefix + ".VAUXBus." + size), 1, $"{compressorSize} - {clutchType}"); + } + var resource = GetCompressorResourceForSize(compressorSize); var dragCurveFactorClutch = 1.0; diff --git a/VectoCore/VectoCoreTest/Reports/ModDataPostprocessingTest.cs b/VectoCore/VectoCoreTest/Reports/ModDataPostprocessingTest.cs index 379d473730..8c8ad60982 100644 --- a/VectoCore/VectoCoreTest/Reports/ModDataPostprocessingTest.cs +++ b/VectoCore/VectoCoreTest/Reports/ModDataPostprocessingTest.cs @@ -4,6 +4,7 @@ using System.Data; using System.Diagnostics; using System.IO; using System.Linq; +using Moq; using NUnit.Framework; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; @@ -2826,9 +2827,14 @@ namespace TUGraz.VectoCore.Tests.Reports protected PneumaticUserInputsConfig CreatePneumaticUserInputsConfig(bool smartCompressor) { + var mock = new Mock<IPneumaticSupplyDeclarationData>(); + mock.Setup(x => x.CompressorDrive).Returns(CompressorDrive.mechanically); + mock.Setup(x => x.CompressorSize).Returns("Medium Supply 2-stage"); + mock.Setup(x => x.Clutch).Returns("visco"); + return new PneumaticUserInputsConfig() { CompressorMap = - DeclarationData.BusAuxiliaries.GetCompressorMap("Medium Supply 2-stage", "visco"), + DeclarationData.BusAuxiliaries.GetCompressorMap(mock.Object), CompressorGearEfficiency = Constants.BusAuxiliaries.PneumaticUserConfig.CompressorGearEfficiency, CompressorGearRatio = 1.0, SmartAirCompression = smartCompressor, -- GitLab