From 26d73e49039c1872362037a1ab82686da12d6a54 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <quaritsch@ivt.tugraz.at> Date: Wed, 29 Mar 2023 17:56:23 +0200 Subject: [PATCH] refactoring lorry rundata factory: do not store comonent data in fields, introduce property for driver data (only create once, avoid reading multiple times from the .vacc stream) IEPC-E Testcase runs successfully --- ...MLDeclarationBusAuxiliariesDataProvider.cs | 1 + ...eclarationPrimaryBusVehicleDataProvider.cs | 2 +- .../DeclarationDataAdapterPrimaryBus.cs | 1 + .../AuxiliaryDataAdapter.cs | 5 +- .../AbstractDeclarationVectoRunDataFactory.cs | 39 +-- ...DeclarationModeHeavyLorryRunDataFactory.cs | 79 ++---- ...tionModeHeavyLorryRunDataFactory_Hybrid.cs | 61 +---- ...DeclarationModePrimaryBusRunDataFactory.cs | 224 ++++++------------ 8 files changed, 112 insertions(+), 300 deletions(-) diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs index baa232d92c..82825ff2d4 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs @@ -327,6 +327,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public override ConsumerTechnology AdBlueDosing => ConsumerTechnology.Unknown; + public override bool EngineWasteGasHeatExchanger => false; } // --------------------------------------------------------------------------------------- diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/v24/XMLDeclarationPrimaryBusVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/v24/XMLDeclarationPrimaryBusVehicleDataProvider.cs index b462b469f6..f517b07fe6 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/v24/XMLDeclarationPrimaryBusVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/v24/XMLDeclarationPrimaryBusVehicleDataProvider.cs @@ -192,7 +192,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider.v24 public override bool Articulated => GetBool(XMLNames.Vehicle_Articulated); - public override VectoSimulationJobType VehicleType => VectoSimulationJobType.BatteryElectricVehicle; + public override VectoSimulationJobType VehicleType => VectoSimulationJobType.IEPC_E; #endregion diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs index 811ae09d2d..896e4c56e3 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs @@ -316,6 +316,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus public class PEV_E_IEPC : BatteryElectric { + protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new IEPCGearboxDataAdapter(); } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs index c79ae26219..e074e745db 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs @@ -806,7 +806,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen var electricUserInputs = GetElectricalUserConfig(mission, primaryVehicle, actuations, runData.VehicleData.VehicleClass); - electricUserInputs.ConnectESToREESS = true; + if (primaryVehicle.VehicleType.IsOneOf(VectoSimulationJobType.BatteryElectricVehicle, + VectoSimulationJobType.IEPC_E)) { + electricUserInputs.ConnectESToREESS = true; + } var retVal = new AuxiliaryConfig { diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/AbstractDeclarationVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/AbstractDeclarationVectoRunDataFactory.cs index aba2cdc51e..5588d6dfb9 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/AbstractDeclarationVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/AbstractDeclarationVectoRunDataFactory.cs @@ -23,23 +23,13 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl { protected readonly IDeclarationInputDataProvider InputDataProvider; protected IDeclarationReport Report; - //protected abstract IDeclarationDataAdapter DataAdapter { get; } - + protected Segment _segment; - protected bool _allowVocational; - - protected DriverData _driverdata; - protected AirdragData _airdragData; - protected AxleGearData _axlegearData; - protected AngledriveData _angledriveData; - protected GearboxData _gearboxData; - protected RetarderData _retarderData; - protected PTOData _ptoTransmissionData; - protected PTOData _municipalPtoTransmissionData; - //protected Exception InitException; - protected ShiftStrategyParameters _gearshiftData; + protected bool _allowVocational; + private DriverData _driverdata; + protected AbstractDeclarationVectoRunDataFactory( IDeclarationInputDataProvider dataProvider, IDeclarationReport report, bool checkJobType = true) { @@ -55,16 +45,11 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl { Report = report; _allowVocational = true; - //try { - // Initialize(); - // if (Report != null) { - // InitializeReport(); - // } - //} catch (Exception e) { - // InitException = e; - //} } + protected DriverData DriverData => _driverdata ?? (_driverdata = CreateDriverData(_segment)); + protected abstract DriverData CreateDriverData(Segment segment); + public virtual IEnumerable<VectoRunData> NextRun() { @@ -93,15 +78,5 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl { protected abstract VectoRunData GetPowertrainConfigForReportInit(); - //protected virtual PTOData CreateDefaultPTOData() - //{ - // return new PTOData() { - // TransmissionType = DeclarationData.PTO.DefaultPTOTechnology, - // LossMap = PTOIdleLossMapReader.ReadFromStream(RessourceHelper.ReadStream(DeclarationData.PTO.DefaultPTOIdleLosses)), - // PTOCycle = - // DrivingCycleDataReader.ReadFromStream(RessourceHelper.ReadStream(DeclarationData.PTO.DefaultPTOActivationCycle), - // CycleType.PTO, "PTO", false) - // }; - //} } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs index 8f818e38b8..f7d7ab10c7 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs @@ -27,18 +27,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa public IDeclarationInputDataProvider InputDataProvider { get; } public IDeclarationReport Report { get; } - protected DriverData _driverdata; - protected AirdragData _airdragData; - protected AxleGearData _axlegearData; - protected AngledriveData _angledriveData; - protected GearboxData _gearboxData; - protected RetarderData _retarderData; - protected PTOData _ptoTransmissionData; - protected PTOData _municipalPtoTransmissionData; - protected ShiftStrategyParameters _gearshiftData; - private bool _allowVocational; - - protected LorryBase(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, ILorryDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, false) { @@ -47,6 +35,15 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa Report = report; } + #region Overrides of AbstractDeclarationVectoRunDataFactory + + protected override DriverData CreateDriverData(Segment segment) + { + return DataAdapter.CreateDriverData(segment); + } + + #endregion + /// <summary> /// Sets <see cref="VectoRunData.Loading"/> /// ,<see cref="VectoRunData.JobName"/> @@ -140,27 +137,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa } _segment = GetSegment(vehicle); - _driverdata = DataAdapter.CreateDriverData(_segment); - - _airdragData = DataAdapter.CreateAirdragData(vehicle.Components.AirdragInputData, - _segment.Missions.First(), _segment); - if (InputDataProvider.JobInputData.Vehicle.AxleConfiguration.AxlegearIncludedInGearbox()) - { - _axlegearData = DataAdapter.CreateDummyAxleGearData(InputDataProvider.JobInputData.Vehicle.Components.GearboxInputData); - } - else - { - _axlegearData = DataAdapter.CreateAxleGearData(InputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData); - } - _angledriveData = DataAdapter.CreateAngledriveData(InputDataProvider.JobInputData.Vehicle.Components.AngledriveInputData); - _retarderData = DataAdapter.CreateRetarderData(vehicle.Components.RetarderInputData); - - _ptoTransmissionData = DataAdapter.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData, vehicle.Components.GearboxInputData); - - _municipalPtoTransmissionData = DataAdapter.CreatePTOCycleData(vehicle.Components.GearboxInputData, vehicle.Components.PTOTransmissionInputData); - - } protected abstract void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, @@ -183,12 +160,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa protected override VectoRunData GetPowertrainConfigForReportInit() { - var vehicle = InputDataProvider.JobInputData.Vehicle; return GetNextRun().First(x => x != null); - //return _segment.Missions.Select( - // mission => CreateVectoRunData( - // vehicle, mission, mission.Loadings.First(), 0)) - // .FirstOrDefault(x => x != null); } #endregion @@ -238,11 +210,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa public Conventional(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, ILorryDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - protected override void Initialize() - { - base.Initialize(); - } - #region Overrides of LorryBase protected override IEnumerable<VectoRunData> GetNextRun() { @@ -283,8 +250,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa var simulationRunData = CreateCommonRunData(vehicle, mission, loading, _segment, engineModes, modeIdx.Value); - - simulationRunData.VehicleData = DataAdapter.CreateVehicleData(vehicle, _segment, mission, loading, _allowVocational); @@ -297,25 +262,21 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa simulationRunData.ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(); - CreateGearboxAndGearshiftData(vehicle, simulationRunData); - - simulationRunData.AngledriveData = _angledriveData; + simulationRunData.AngledriveData = DataAdapter.CreateAngledriveData(vehicle.Components.AngledriveInputData); simulationRunData.Aux = DataAdapter.CreateAuxiliaryData( vehicle.Components.AuxiliaryInputData, vehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, vehicle.Length, vehicle.Components.AxleWheels.NumSteeredAxles, vehicle.VehicleType); - simulationRunData.Retarder = _retarderData; - simulationRunData.DriverData = _driverdata; + simulationRunData.Retarder = DataAdapter.CreateRetarderData(vehicle.Components.RetarderInputData); + simulationRunData.DriverData = DriverData; simulationRunData.PTO = mission.MissionType == MissionType.MunicipalUtility - ? _municipalPtoTransmissionData - : _ptoTransmissionData; - - - + ? DataAdapter.CreatePTOCycleData(vehicle.Components.GearboxInputData, vehicle.Components.PTOTransmissionInputData) + : DataAdapter.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData, vehicle.Components.GearboxInputData); + simulationRunData.EngineData.FuelMode = modeIdx.Value; simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass; simulationRunData.VehicleData.InputData = vehicle; @@ -342,7 +303,11 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa var shiftStrategyName = PowertrainBuilder.GetShiftStrategyName(vehicle.Components.GearboxInputData.Type, vehicle.VehicleType); - runData.AxleGearData = _axlegearData; + if (InputDataProvider.JobInputData.Vehicle.AxleConfiguration.AxlegearIncludedInGearbox()) { + runData.AxleGearData = DataAdapter.CreateDummyAxleGearData(InputDataProvider.JobInputData.Vehicle.Components.GearboxInputData); + } else { + runData.AxleGearData = DataAdapter.CreateAxleGearData(InputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData); + } runData.GearboxData = DataAdapter.CreateGearboxData(vehicle, runData, ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters)); } @@ -404,11 +369,10 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa int? modeIdx = null, VectoRunData.OvcHevMode ovcMode = VectoRunData.OvcHevMode.NotApplicable) { - //_segment = GetSegment(vehicle); var result = CreateCommonRunData(vehicle, mission, loading, _segment); result.AirdragData = DataAdapter.CreateAirdragData(vehicle.Components.AirdragInputData, mission, _segment); - result.DriverData = DataAdapter.CreateDriverData(_segment); + result.DriverData = DriverData; DataAdapter.CreateREESSData( componentsElectricStorage: vehicle.Components.ElectricStorage, @@ -478,7 +442,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa InputDataProvider.JobInputData.Vehicle.LegislativeClass.ToString()); } _segment = GetSegment(InputDataProvider.JobInputData.Vehicle, true); - } #endregion diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs index ee51df2a98..6c0d528f7a 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs @@ -12,8 +12,6 @@ using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Declaration.IterativeRunStrategies; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; -using TUGraz.VectoCore.Models.SimulationComponent; -using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies; using TUGraz.VectoCore.OutputData; @@ -103,7 +101,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa int? modeIdx, VectoRunData.OvcHevMode ovcMode = VectoRunData.OvcHevMode.NotApplicable) { - //_segment = GetSegment(InputDataProvider.JobInputData.Vehicle, false); CheckMaxChargingPowerPresent(vehicle); var engine = InputDataProvider.JobInputData.Vehicle.Components.EngineInputData; @@ -112,7 +109,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa var runData = CreateCommonRunData(vehicle, mission, loading, _segment, engineModes, modeIdx.Value); - runData.DriverData = DataAdapter.CreateDriverData(_segment); + runData.DriverData = DriverData; runData.AirdragData = DataAdapter.CreateAirdragData(vehicle.Components.AirdragInputData, mission, _segment); runData.VehicleData = DataAdapter.CreateVehicleData(vehicle, _segment, mission, loading, _allowVocational); @@ -124,15 +121,10 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa ((batteryData) => runData.BatteryData = batteryData), ((sCdata => runData.SuperCapData = sCdata))); - runData.ElectricMachinesData = DataAdapter.CreateElectricMachines( vehicle.Components.ElectricMachines, vehicle.ElectricMotorTorqueLimits, runData.BatteryData.CalculateAverageVoltage()); - - - - if (vehicle.VehicleType == VectoSimulationJobType.IEPC_S) { var iepcData = DataAdapter.CreateIEPCElectricMachines(vehicle.Components.IEPC, runData.BatteryData.CalculateAverageVoltage()); @@ -149,10 +141,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa _segment.VehicleClass, vehicle.Length, vehicle.Components.AxleWheels.NumSteeredAxles, VectoSimulationJobType.SerialHybridVehicle); - CreateGearboxAndGearshiftData(vehicle, runData); - runData.HybridStrategyParameters = DataAdapter.CreateHybridStrategy(runData.BatteryData, runData.SuperCapData, runData.VehicleData.TotalVehicleMass, ovcMode, loading.Key, runData.VehicleData.VehicleClass, mission.MissionType); @@ -166,16 +156,9 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa } } - - - - var ptoTransmissionData = DataAdapter.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData, vehicle.Components.GearboxInputData); - - var municipalPtoData = DataAdapter.CreatePTOCycleData(vehicle.Components.GearboxInputData, vehicle.Components.PTOTransmissionInputData); - runData.PTO = mission.MissionType == MissionType.MunicipalUtility - ? municipalPtoData - : ptoTransmissionData; + ? DataAdapter.CreatePTOCycleData(vehicle.Components.GearboxInputData, vehicle.Components.PTOTransmissionInputData) + : DataAdapter.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData, vehicle.Components.GearboxInputData); if (ovcMode != VectoRunData.OvcHevMode.NotApplicable && runData.InputData.JobInputData.Vehicle.OvcHev) { @@ -204,16 +187,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa #endregion - #region Overrides of LorryBase - - protected override void Initialize() - { - _segment = GetSegment(InputDataProvider.JobInputData.Vehicle, false); - } - - - - #endregion } public class ParallelHybrid : Hybrid @@ -223,20 +196,16 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa declarationDataAdapter) { } - #region Overrides of AbstractDeclarationVectoRunDataFactory - protected override VectoRunData CreateVectoRunData(IVehicleDeclarationInputData vehicle, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, int? modeIdx = null, VectoRunData.OvcHevMode ovcMode = VectoRunData.OvcHevMode.NotApplicable) { - //_segment = GetSegment(InputDataProvider.JobInputData.Vehicle, false); CheckMaxChargingPowerPresent(vehicle); var engine = InputDataProvider.JobInputData.Vehicle.Components.EngineInputData; var engineModes = engine.EngineModes; var engineMode = engineModes[modeIdx.Value]; var runData = CreateCommonRunData(vehicle, mission, loading, _segment, engineModes, modeIdx.Value); - runData.DriverData = DataAdapter.CreateDriverData(_segment); - + runData.DriverData = DriverData; runData.AirdragData = DataAdapter.CreateAirdragData(vehicle.Components.AirdragInputData, mission, _segment); @@ -295,16 +264,9 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa runData.IterativeRunStrategy = new OVCHevIterativeRunStrategy(); } - - - - var ptoTransmissionData = DataAdapter.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData, vehicle.Components.GearboxInputData); - - var municipalPtoTransmissionData = DataAdapter.CreatePTOCycleData(vehicle.Components.GearboxInputData, vehicle.Components.PTOTransmissionInputData); - runData.PTO = mission.MissionType == MissionType.MunicipalUtility - ? municipalPtoTransmissionData - : ptoTransmissionData; + ? DataAdapter.CreatePTOCycleData(vehicle.Components.GearboxInputData, vehicle.Components.PTOTransmissionInputData) + : DataAdapter.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData, vehicle.Components.GearboxInputData); if (ovcMode != VectoRunData.OvcHevMode.NotApplicable && runData.InputData.JobInputData.Vehicle.OvcHev) @@ -315,14 +277,9 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa return runData; } - #region Overrides of LorryBase - - protected override void Initialize() - { - //throw new NotImplementedException("ParallelHybrid not implemented"); - _segment = GetSegment(InputDataProvider.JobInputData.Vehicle, false); - } + + protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData) { runData.GearshiftParameters = @@ -343,9 +300,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa { return true; } - #endregion - #endregion } public class HEV_S2 : SerialHybrid diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs index 01a7c6c394..5aee15fbd5 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs @@ -11,9 +11,7 @@ using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; -using TUGraz.VectoCore.Models.SimulationComponent; using TUGraz.VectoCore.Models.SimulationComponent.Data; -using TUGraz.VectoCore.Models.SimulationComponent.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies; using TUGraz.VectoCore.OutputData; @@ -38,13 +36,17 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa Report = report; } + #region Overrides of AbstractDeclarationVectoRunDataFactory + + protected override DriverData CreateDriverData(Segment segment) + { + return DataAdapter.CreateDriverData(segment); + } + + #endregion + protected override VectoRunData GetPowertrainConfigForReportInit() { - var vehicle = InputDataProvider.JobInputData.Vehicle; - //return _segment.Missions.Select( - // mission => CreateVectoRunData( - // vehicle, mission, mission.Loadings.First(), 0)) - // .FirstOrDefault(x => x != null); return GetNextRun().First(x => x != null); } @@ -78,23 +80,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa } _segment = GetSegment(vehicle); - _driverdata = DataAdapter.CreateDriverData(_segment); - var tempVehicle = DataAdapter.CreateVehicleData(vehicle, _segment, _segment.Missions.First(), - _segment.Missions.First().Loadings.First(), _allowVocational); - _airdragData = DataAdapter.CreateAirdragData(vehicle.Components.AirdragInputData, - _segment.Missions.First(), _segment); - if (InputDataProvider.JobInputData.Vehicle.AxleConfiguration.AxlegearIncludedInGearbox()) - { - _axlegearData = DataAdapter.CreateDummyAxleGearData(InputDataProvider.JobInputData.Vehicle.Components.GearboxInputData); - } - else - { - _axlegearData = DataAdapter.CreateAxleGearData(InputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData); - } - _angledriveData = DataAdapter.CreateAngledriveData(InputDataProvider.JobInputData.Vehicle.Components.AngledriveInputData); - - _retarderData = DataAdapter.CreateRetarderData(vehicle.Components.RetarderInputData); - + } #endregion @@ -123,22 +109,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa VehicleDesignSpeed = segment.DesignSpeed, Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), ExecutionMode = ExecutionMode.Declaration, - - //VehicleData = DataAdapter.CreateVehicleData(vehicle, _segment, mission, loading, _allowVocational), - //AirdragData = DataAdapter.CreateAirdragData(null, mission, new Segment()), - ////EngineData = DataAdapter.CreateEngineData(InputDataProvider.JobInputData.Vehicle, engineMode, mission), - //ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(), - //GearboxData = _gearboxData, - //AxleGearData = _axlegearData, - //AngledriveData = _angledriveData, - //Aux = DataAdapter.CreateAuxiliaryData( - // vehicle.Components.AuxiliaryInputData, - // vehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, - // vehicle.Length ?? mission.BusParameter.VehicleLength, - // vehicle.Components.AxleWheels.NumSteeredAxles, vehicle.VehicleType), - //Retarder = _retarderData, - //DriverData = _driverdata, - //GearshiftParameters = _gearshiftData, }; return simulationRunData; @@ -212,25 +182,22 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa var engineModes = engine.EngineModes; var engineMode = engineModes[modeIdx.Value]; - var cycle = DeclarationData.CyclesCache.GetOrAdd(mission.MissionType, _ => DrivingCycleDataReader.ReadFromStream(mission.CycleFile, CycleType.DistanceBased, "", false)); - var simulationRunData = CreateCommonRunData(vehicle, mission, loading, _segment, engineModes, modeIdx.Value); simulationRunData.VehicleData = DataAdapter.CreateVehicleData(vehicle, _segment, mission, loading, _allowVocational); simulationRunData.AirdragData = DataAdapter.CreateAirdragData(null, mission, new Segment()); simulationRunData.EngineData = DataAdapter.CreateEngineData(InputDataProvider.JobInputData.Vehicle, engineMode, mission); simulationRunData.ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(); - simulationRunData.GearboxData = _gearboxData; - simulationRunData.AxleGearData = _axlegearData; - simulationRunData.AngledriveData = _angledriveData; - simulationRunData.Aux = DataAdapter.CreateAuxiliaryData( + simulationRunData.AxleGearData = DataAdapter.CreateAxleGearData(vehicle.Components.AxleGearInputData); + simulationRunData.AngledriveData = DataAdapter.CreateAngledriveData(vehicle.Components.AngledriveInputData); + simulationRunData.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.Retarder = DataAdapter.CreateRetarderData(vehicle.Components.RetarderInputData); + simulationRunData.DriverData = DriverData; + simulationRunData.EngineData.FuelMode = modeIdx.Value; simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass; @@ -325,15 +292,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa public HEV_S2(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - //#region Overrides of PrimaryBusBase - - //protected override IEnumerable<VectoRunData> VectoRunDataHeavyBusPrimary() - //{ - // throw new NotImplementedException(); - //} - - //#endregion - protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData) { if (vehicle.ArchitectureID != ArchitectureID.E2) { @@ -362,20 +320,12 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa public HEV_S3(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - #region Overrides of PrimaryBusBase - - - #endregion } public class HEV_S4 : SerialHybrid { public HEV_S4(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - #region Overrides of PrimaryBusBase - - - #endregion } public class HEV_S_IEPC : SerialHybrid @@ -409,15 +359,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa { protected ParallelHybrid(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - #region Overrides of PrimaryBusBase - - //protected override IEnumerable<VectoRunData> VectoRunDataHeavyBusPrimary() - //{ - // throw new NotImplementedException(); - //} - - #endregion - protected override VectoRunData CreateVectoRunData(IVehicleDeclarationInputData vehicle, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, int? modeIdx = null, VectoRunData.OvcHevMode ovcMode = VectoRunData.OvcHevMode.NotApplicable) @@ -447,54 +388,31 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa { public HEV_P1(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - #region Overrides of PrimaryBusBase - - - #endregion } public class HEV_P2 : ParallelHybrid { public HEV_P2(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - #region Overrides of PrimaryBusBase - - - #endregion } public class HEV_P2_5 : ParallelHybrid { public HEV_P2_5(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - #region Overrides of PrimaryBusBase - - - #endregion + } public class HEV_P3 : ParallelHybrid { public HEV_P3(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - #region Overrides of PrimaryBusBase - - - #endregion } public class HEV_P4 : ParallelHybrid { public HEV_P4(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - #region Overrides of PrimaryBusBase - - //protected override IEnumerable<VectoRunData> VectoRunDataHeavyBusPrimary() - //{ - // throw new NotImplementedException(); - //} - - #endregion } public abstract class BatteryElectric : PrimaryBusBase @@ -503,11 +421,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa #region Overrides of PrimaryBusBase - //protected override IEnumerable<VectoRunData> VectoRunDataHeavyBusPrimary() - //{ - // throw new NotImplementedException(); - //} - protected override IEnumerable<VectoRunData> GetNextRun() { var vehicle = InputDataProvider.JobInputData.Vehicle; @@ -535,30 +448,29 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa (bs) => result.BatteryData = bs, (sc) => result.SuperCapData = sc); - result.ElectricMachinesData = DataAdapter.CreateElectricMachines(vehicle.Components.ElectricMachines, - vehicle.ElectricMotorTorqueLimits, result.BatteryData.CalculateAverageVoltage(), null); + if (vehicle.VehicleType == VectoSimulationJobType.IEPC_E) { result.ElectricMachinesData = DataAdapter.CreateIEPCElectricMachines(vehicle.Components.IEPC, result.BatteryData.CalculateAverageVoltage()); + } else { + result.ElectricMachinesData = DataAdapter.CreateElectricMachines(vehicle.Components.ElectricMachines, + vehicle.ElectricMotorTorqueLimits, result.BatteryData.CalculateAverageVoltage(), null); } 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) { - result.AxleGearData = _axlegearData; + result.AxleGearData = DataAdapter.CreateAxleGearData(vehicle.Components.AxleGearInputData); } - result.AngledriveData = _angledriveData; + result.AngledriveData = DataAdapter.CreateAngledriveData(vehicle.Components.AngledriveInputData); 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); - result.Retarder = _retarderData; - result.DriverData = _driverdata; - result.GearshiftParameters = _gearshiftData; + result.Retarder = DataAdapter.CreateRetarderData(vehicle.Components.RetarderInputData); + result.DriverData = DriverData; result.VehicleData.VehicleClass = _segment.VehicleClass; result.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData( @@ -591,11 +503,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa #region Overrides of PrimaryBusBase - //protected override IEnumerable<VectoRunData> VectoRunDataHeavyBusPrimary() - //{ - // throw new NotImplementedException(); - //} - protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData) { if (vehicle.ArchitectureID != ArchitectureID.E2) { @@ -624,42 +531,64 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa { public PEV_E3(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - #region Overrides of PrimaryBusBase - - //protected override IEnumerable<VectoRunData> VectoRunDataHeavyBusPrimary() - //{ - // throw new NotImplementedException(); - //} - - #endregion } public class PEV_E4 : BatteryElectric { public PEV_E4(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - #region Overrides of PrimaryBusBase - - //protected override IEnumerable<VectoRunData> VectoRunDataHeavyBusPrimary() - //{ - // throw new NotImplementedException(); - //} - - #endregion } public class PEV_E_IEPC : BatteryElectric { public PEV_E_IEPC(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { } - #region Overrides of PrimaryBusBase - //protected override IEnumerable<VectoRunData> VectoRunDataHeavyBusPrimary() - //{ - // throw new NotImplementedException(); - //} + protected override bool AxleGearRequired() + { + var vehicle = InputDataProvider.JobInputData.Vehicle; + var iepcInput = vehicle.Components.IEPC; + var axleGearRequired = !iepcInput.DifferentialIncluded && !iepcInput.DesignTypeWheelMotor; + if (axleGearRequired && vehicle.Components.AxleGearInputData == null) { + throw new VectoException( + $"Axlegear reqhired for selected type of IEPC! DifferentialIncluded: {iepcInput.DifferentialIncluded}, DesignTypeWheelMotor: {iepcInput.DesignTypeWheelMotor}"); + } + + var numGearsPowermap = + iepcInput.VoltageLevels.Select(x => Tuple.Create(x.VoltageLevel, x.PowerMap.Count)).ToArray(); + var gearCount = iepcInput.Gears.Count; + var numGearsDrag = iepcInput.DragCurves.Count; - #endregion + if (numGearsPowermap.Any(x => x.Item2 != gearCount)) { + throw new VectoException( + $"Number of gears for voltage levels does not match! PowerMaps: {numGearsPowermap.Select(x => $"{x.Item1}: {x.Item2}").Join()}; Gear count: {gearCount}"); + } + + if (numGearsDrag > 1 && numGearsDrag != gearCount) { + throw new VectoException( + $"Number of gears drag curve does not match gear count! DragCurve {numGearsDrag}; Gear count: {gearCount}"); + } + + return axleGearRequired || vehicle.Components.AxleGearInputData != null; + + } + + protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData) + { + runData.GearshiftParameters = + DataAdapter.CreateGearshiftData( + runData.AxleGearData?.AxleGear.Ratio ?? 1.0, + null, + GearboxType.APTN, + vehicle.Components.IEPC.Gears.Count + ); + var shiftStrategyName = + PowertrainBuilder.GetShiftStrategyName(GearboxType.APTN, + vehicle.VehicleType); + runData.GearboxData = DataAdapter.CreateGearboxData(vehicle, runData, + ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters)); + + } } public class Exempted : PrimaryBusBase @@ -679,21 +608,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa throw new NotImplementedException(); } - //protected override IEnumerable<VectoRunData> VectoRunDataHeavyBusPrimary() - //{ - // yield return new VectoRunData { - // InputData = DataProvider, - // Exempted = true, - // Report = Report, - // Mission = new Mission { MissionType = MissionType.ExemptedMission }, - // VehicleData = DataAdapter.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, new Segment(), - // null, - // new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>(LoadingType.ReferenceLoad, - // Tuple.Create<Kilogram, double?>(0.SI<Kilogram>(), null)), _allowVocational), - // InputDataHash = InputDataProvider.XMLHash - // }; - //} - protected override IEnumerable<VectoRunData> GetNextRun() { var vehicle = InputDataProvider.JobInputData.Vehicle; -- GitLab