From 1d3177769ead6a09ed5f7eaac9e63f981724c504 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Wed, 11 May 2022 08:58:04 +0200 Subject: [PATCH] started working on data adapter for IEPC --- .../InputData/EngineeringInputData.cs | 1 + .../EngineeringModeVectoRunDataFactory.cs | 91 +++++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs index ea6328192c..23e1fdac43 100644 --- a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs +++ b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs @@ -59,6 +59,7 @@ namespace TUGraz.VectoCommon.InputData SerialHybridVehicle, BatteryElectricVehicle, EngineOnlySimulation, + IEPCVehicle } public interface IHybridStrategyParameters diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs index 819baba620..dbff8d0ce8 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs @@ -78,11 +78,15 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl return GetBatteryElectricVehicleRunData(); case VectoSimulationJobType.SerialHybridVehicle: return GetSerialHybridRunData(); + case VectoSimulationJobType.IEPCVehicle: + return GetIEPCRunData(); default: throw new ArgumentOutOfRangeException($"Invalid JobType {InputDataProvider.JobInputData.JobType}"); } } + + private IEnumerable<VectoRunData> GetSerialHybridRunData() { var engine = InputDataProvider.JobInputData.Vehicle.Components.EngineInputData; @@ -336,6 +340,93 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl } } + private IEnumerable<VectoRunData> GetIEPCRunData() + { + foreach (var cycle in InputDataProvider.JobInputData.Cycles) { + var dao = new EngineeringDataAdapter(); + var driver = dao.CreateDriverData(InputDataProvider.DriverInputData); + var vehicle = InputDataProvider.JobInputData.Vehicle; + + var axlegearData = vehicle.Components.AxleGearInputData != null + ? dao.CreateAxleGearData(vehicle.Components.AxleGearInputData) + : null; + + var batteryData = dao.CreateBatteryData(vehicle.Components.ElectricStorage, vehicle.InitialSOC); + var supercapData = dao.CreateSuperCapData(vehicle.Components.ElectricStorage, vehicle.InitialSOC); + + var averageVoltage = batteryData != null ? CalculateAverageVoltage(batteryData) : null; + var electricMachinesData = dao.CreateElectricMachines(vehicle.Components.ElectricMachines, vehicle.ElectricMotorTorqueLimits, averageVoltage); + var powertrainPosition = electricMachinesData.First(e => e.Item1 != PowertrainPosition.GEN).Item1; + GearboxData gearboxData = null; + ShiftStrategyParameters gearshiftParams = null; + var angledriveData = dao.CreateAngledriveData(vehicle.Components.AngledriveInputData); + if (electricMachinesData.Any(x => x.Item1 == PowertrainPosition.BatteryElectricE2)) { + // gearbox required! + gearshiftParams = dao.CreateGearshiftData( + InputDataProvider.JobInputData.Vehicle.Components.GearboxInputData.Type, InputDataProvider.DriverInputData.GearshiftInputData, + axlegearData.AxleGear.Ratio * (angledriveData?.Angledrive.Ratio ?? 1.0), null); + var tmpRunData = new VectoRunData() { + JobType = VectoSimulationJobType.BatteryElectricVehicle, + GearboxData = new GearboxData() { + Type = vehicle.Components.GearboxInputData.Type, + }, + GearshiftParameters = gearshiftParams, + ElectricMachinesData = electricMachinesData, + //VehicleData = dao.CreateVehicleData(vehicle) + }; + var tempVehicle = dao.CreateVehicleData(vehicle); + var tmpStrategy = PowertrainBuilder.GetShiftStrategy(new SimplePowertrainContainer(tmpRunData)); + gearboxData = dao.CreateGearboxData( + InputDataProvider, new VectoRunData() { + JobType = VectoSimulationJobType.BatteryElectricVehicle, + VehicleData = tempVehicle, + AxleGearData = axlegearData, + ElectricMachinesData = electricMachinesData + }, tmpStrategy); + angledriveData = dao.CreateAngledriveData(vehicle.Components.AngledriveInputData); + + } + + if (gearshiftParams == null) { + gearshiftParams = new ShiftStrategyParameters() { + StartSpeed = DeclarationData.GearboxTCU.StartSpeed, + StartAcceleration = DeclarationData.GearboxTCU.StartAcceleration + }; + } + + var crossWindRequired = vehicle.Components.AirdragInputData.CrossWindCorrectionMode == + CrossWindCorrectionMode.VAirBetaLookupTable; + //var ptoTransmissionData = dao.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData); + + var drivingCycle = GetDrivingCycle(cycle, crossWindRequired); + + var vehicleData = dao.CreateVehicleData(vehicle); + yield return new VectoRunData { + JobName = InputDataProvider.JobInputData.JobName, + JobType = VectoSimulationJobType.BatteryElectricVehicle, + GearboxData = gearboxData, + AxleGearData = axlegearData, + AngledriveData = angledriveData, + VehicleData = vehicleData, + AirdragData = dao.CreateAirdragData(vehicle.Components.AirdragInputData, vehicle), + DriverData = driver, + Aux = dao.CreateAuxiliaryData(vehicle.Components.AuxiliaryInputData), + BusAuxiliaries = dao.CreateBusAuxiliariesData(vehicle.Components.AuxiliaryInputData, vehicleData, VectoSimulationJobType.BatteryElectricVehicle), + Retarder = dao.CreateRetarderData(vehicle.Components.RetarderInputData, powertrainPosition), + //PTO = ptoTransmissionData, + Cycle = new DrivingCycleProxy(drivingCycle, cycle.Name), + ExecutionMode = ExecutionMode.Engineering, + ElectricMachinesData = electricMachinesData, + //HybridStrategyParameters = dao.CreateHybridStrategyParameters(InputDataProvider.JobInputData.HybridStrategyParameters), + BatteryData = batteryData, + SuperCapData = supercapData, + SimulationType = SimulationType.DistanceCycle | SimulationType.MeasuredSpeedCycle | SimulationType.PWheel, + GearshiftParameters = gearshiftParams, + ElectricAuxDemand = InputDataProvider.JobInputData.Vehicle.Components.AuxiliaryInputData.Auxiliaries.ElectricPowerDemand, + }; + } + } + protected virtual IEnumerable<VectoRunData> GetConventionalVehicleRunData() { var engine = InputDataProvider.JobInputData.Vehicle.Components.EngineInputData; -- GitLab