diff --git a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs index dd7059729ab6e7a7a390dace87c41a6f3a5fe169..7dc547529bc5df9fa432e22df7d6586c57c94832 100644 --- a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs +++ b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs @@ -343,6 +343,7 @@ namespace TUGraz.VectoCommon.InputData double? PEV_TargetSpeedBrakeNorm { get; } + double? PEV_DownshiftSpeedFactor { get; } double? PEV_DeRatingDownshiftSpeedFactor { get; } double? PEV_DownshiftMinSpeedFactor { get; } } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs index 088fdba8cdc0d50797209aef35b52fac0fd3be6a..2fa86d137ff230f7cbd71073c435d8f3b53901e7 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs @@ -376,6 +376,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public Second ATLookAheadTime => null; public double[][] ShiftSpeedsTCToLocked => null; public double? PEV_TargetSpeedBrakeNorm => null; + public double? PEV_DownshiftSpeedFactor => null; public double? PEV_DeRatingDownshiftSpeedFactor => null; public double? PEV_DownshiftMinSpeedFactor => null; diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONTCUData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONTCUData.cs index 29ff6cda9aeb3b6daf8122d743f8bce72ee6d87f..228a3ef5ba434a3ed712b585f3946722845c098b 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONTCUData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONTCUData.cs @@ -265,6 +265,18 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON } } + public double? PEV_DownshiftSpeedFactor + { + get + { + if (Body["PEV_DownshiftSpeedFactor"] != null) { + return Body.GetEx<double>("PEV_DownshiftSpeedFactor"); + } + + return null; + } + } + public double? PEV_DeRatingDownshiftSpeedFactor { get diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs index 9ad57f3e2e2ce0626148185739cf8be073b63e9f..81853fdae0177e39f420c62b6b29e20eb8e815e0 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs @@ -122,6 +122,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider public Second ATLookAheadTime => null; public double[][] ShiftSpeedsTCToLocked => null; public double? PEV_TargetSpeedBrakeNorm => null; + public double? PEV_DownshiftSpeedFactor => null; public double? PEV_DeRatingDownshiftSpeedFactor => null; public double? PEV_DownshiftMinSpeedFactor => null; diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs index e803c63d34de47c33ee208a139368f048ad42e94..1fbf4be79bb8e028cb42e609b950babd6dc84dbc 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs @@ -780,6 +780,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter retVal.PEV_DeRatedDownshiftSpeedFactor = gsInputData.PEV_DeRatingDownshiftSpeedFactor.Value; } + if (gsInputData.PEV_DownshiftSpeedFactor != null) { + retVal.PEV_DownshiftSpeedFactor = gsInputData.PEV_DownshiftSpeedFactor.Value; + } + if (gsInputData.PEV_TargetSpeedBrakeNorm != null) { retVal.PEV_TargetSpeedBrakeNorm = gsInputData.PEV_TargetSpeedBrakeNorm.Value; } diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs index 29fe96ac780b689cc4362368a0862d732e964298..03f230129f9401a9a2bc2374cfe6606446b9d1ff 100644 --- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs @@ -607,7 +607,7 @@ namespace TUGraz.VectoCore.Models.Declaration var nMax = downshiftMaxSpeed ?? fullLoadCurve.NP80low; var nMin = downshiftMinSpeed ?? 0.1 * fullLoadCurve.RatedSpeed; - downShift.AddRange(DownshiftLineDrive(fullLoadCurve, nMin, nMax)); + downShift.AddRange(DownshiftLineDrive(fullLoadCurve, nMin, fullLoadCurve.NP80low)); downShift.AddRange(DownshiftLineDrag(fullLoadCurve, nMin, nMax)); } diff --git a/VectoCore/VectoCore/Models/Simulation/Data/ShiftStrategyParameters.cs b/VectoCore/VectoCore/Models/Simulation/Data/ShiftStrategyParameters.cs index ce834f26fe7a532ef4f631de4642ac15b6ac989a..528b9a6b8bdeace96abfe59152f8f194b143d301 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/ShiftStrategyParameters.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/ShiftStrategyParameters.cs @@ -13,6 +13,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data { PEV_DownshiftMinSpeedFactor = 0.1; PEV_TargetSpeedBrakeNorm = 0.7; PEV_DeRatedDownshiftSpeedFactor = 1; + PEV_DownshiftSpeedFactor = 1; } public MeterPerSecond StartVelocity { get; internal set; } @@ -109,6 +110,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Data { public double[] LoadStageThresoldsDown { get; set; } public double[][] ShiftSpeedsTCToLocked { get; set; } public double PEV_TargetSpeedBrakeNorm { get; set; } + + public double PEV_DownshiftSpeedFactor { get; set; } public double PEV_DeRatedDownshiftSpeedFactor { get; set; } public double PEV_DownshiftMinSpeedFactor { get; set; } } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVAMTShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVAMTShiftStrategy.cs index 37bf788f4c5c8e7a5b7dbff507d135d96f3feedb..fc7c9065c0faad48f4a8c572d2534e06a7ddb0f4 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVAMTShiftStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVAMTShiftStrategy.cs @@ -120,8 +120,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl IList<ITransmissionInputData> gearboxGears, CombustionEngineData engineData, double axlegearRatio, Meter dynamicTyreRadius, ElectricMotorData electricMotorData = null) { + if (electricMotorData == null) { + throw new VectoException("ElectricMotorData is required to calculate Shift Polygon!"); + } + var emFld = electricMotorData.EfficiencyData.VoltageLevels.First().FullLoadCurve; return ComputeDeclarationShiftPolygon(i, gearboxGears, axlegearRatio, dynamicTyreRadius, electricMotorData, - null, shiftStrategyParameters.PEV_DownshiftMinSpeedFactor * electricMotorData.EfficiencyData.VoltageLevels.First().FullLoadCurve.RatedSpeed); + shiftStrategyParameters.PEV_DownshiftSpeedFactor.LimitTo(0, 1) * emFld.RatedSpeed, shiftStrategyParameters.PEV_DownshiftMinSpeedFactor * emFld.RatedSpeed); }