Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit d18bac48 authored by Stefanos DOUMPOULAKIS's avatar Stefanos DOUMPOULAKIS
Browse files

Merge branch 'fix/471_override_downshift_rb' into 'amdm2/develop'

Override downshift strategy if speed reduced by half or below extended downshift polygon

See merge request vecto!230
parents bf5475ba 5c91cb1d
No related branches found
No related tags found
No related merge requests found
Showing
with 271 additions and 13 deletions
......@@ -376,9 +376,25 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
gearsInput, engine,
axlegearRatio, dynamicTyreRadius, runData.ElectricMachinesData?.FirstOrDefault()?.Item2);
ShiftPolygon extendedShiftPolygon = null;
if (gearbox.Type == GearboxType.MT)
{
extendedShiftPolygon = shiftPolygonCalculator != null
? shiftPolygonCalculator.ComputeDeclarationExtendedShiftPolygon(
gearbox.Type, (int)i, engine?.FullLoadCurves[i + 1], gearbox.Gears, engine, axlegearRatio,
dynamicTyreRadius, runData.ElectricMachinesData?.FirstOrDefault()?.Item2)
: DeclarationData.Gearbox.ComputeManualTransmissionShiftPolygonExtended(
(int)i, engine?.FullLoadCurves[i + 1],
gearsInput,
engine,
axlegearRatio,
dynamicTyreRadius);
}
var gearData = new GearData
{
ShiftPolygon = shiftPolygon,
ExtendedShiftPolygon = extendedShiftPolygon,
MaxSpeed = gear.MaxInputSpeed,
MaxTorque = gear.MaxTorque,
Ratio = gear.Ratio,
......
......@@ -58,6 +58,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.Batter
using TUGraz.VectoCore.Models.SimulationComponent.Impl;
using TUGraz.VectoCore.OutputData;
using Point = TUGraz.VectoCommon.Utils.Point;
using System.Diagnostics;
namespace TUGraz.VectoCore.Models.Declaration
{
......@@ -1308,12 +1309,12 @@ namespace TUGraz.VectoCore.Models.Declaration
return new ShiftPolygon(downShift, upShift);
}
public static ShiftPolygon ComputeManualTransmissionShiftPolygon(
int gearIdx, EngineFullLoadCurve fullLoadCurve,
IList<ITransmissionInputData> gears, CombustionEngineData engine, double axlegearRatio, Meter dynamicTyreRadius)
{
if (gears.Count < 2) {
if (gears.Count < 2)
{
throw new VectoException("ComputeShiftPolygon needs at least 2 gears. {0} gears given.", gears.Count);
}
......@@ -1324,10 +1325,42 @@ namespace TUGraz.VectoCore.Models.Declaration
var diffRatio = gears[gears.Count - 2].Ratio / gears[gears.Count - 1].Ratio - 1;
var maxDragTorque = fullLoadCurve.MaxDragTorque * 1.1;
var p1 = new Point(engine.IdleSpeed.Value() / 2, 0);
var p2 = new Point(engine.IdleSpeed.Value() * 1.1, 0);
var p3 = new Point(
nVHigh.Value() * 0.9,
fullLoadCurve.FullLoadStationaryTorque(nVHigh * 0.9).Value());
var p4 = new Point((nVHigh * (1 + diffRatio / 3)).Value(), 0);
var p5 = new Point(fullLoadCurve.N95hSpeed.Value(), fullLoadCurve.MaxTorque.Value());
var p6 = new Point(p2.X, VectoMath.Interpolate(p1, p3, p2.X));
var p7 = new Point(p4.X, VectoMath.Interpolate(p2, p5, p4.X));
return ComputeManualTransmissionShiftPolygonBase(gearIdx, fullLoadCurve, gears, p2, p3, p4, p5, p6, p7);
}
public static ShiftPolygon ComputeManualTransmissionShiftPolygonExtended(
int gearIdx,
EngineFullLoadCurve fullLoadCurve,
IList<ITransmissionInputData> gears,
CombustionEngineData engine,
double axlegearRatio,
Meter dynamicTyreRadius)
{
if (gears.Count < 2)
{
throw new VectoException("ComputeShiftPolygon needs at least 2 gears. {0} gears given.", gears.Count);
}
// ReSharper disable once InconsistentNaming
var engineSpeed85kmhLastGear = ComputeEngineSpeed85kmh(gears[gears.Count - 1], axlegearRatio, dynamicTyreRadius);
var nVHigh = VectoMath.Min(engineSpeed85kmhLastGear, engine.FullLoadCurves[0].RatedSpeed);
var diffRatio = gears[gears.Count - 2].Ratio / gears[gears.Count - 1].Ratio - 1;
var p1 = new Point(engine.IdleSpeed.Value() / 2, 0);
var p2 = new Point(engine.IdleSpeed.Value() * 1.1, 0);
var p3 = new Point(
nVHigh.Value() * 0.9,
fullLoadCurve.FullLoadStationaryTorque(nVHigh * 0.9).Value());
......@@ -1338,11 +1371,28 @@ namespace TUGraz.VectoCore.Models.Declaration
var p6 = new Point(p2.X, VectoMath.Interpolate(p1, p3, p2.X));
var p7 = new Point(p4.X, VectoMath.Interpolate(p2, p5, p4.X));
/// Increase the torque at P6 by 20% and create a new extended shift polygon.
var extendedRatio = 0.20;
var p6YOffset = extendedRatio * p6.Y;
var p3Extended = new Point(p3.X, p3.Y + p6YOffset);
var p6Extended = new Point(p6.X, p6.Y + p6YOffset);
return ComputeManualTransmissionShiftPolygonBase(gearIdx, fullLoadCurve, gears, p2, p3Extended, p4, p5, p6Extended, p7);
}
private static ShiftPolygon ComputeManualTransmissionShiftPolygonBase(
int gearIdx,
EngineFullLoadCurve fullLoadCurve,
IList<ITransmissionInputData> gears,
Point p2, Point p3, Point p4, Point p5, Point p6, Point p7)
{
var maxDragTorque = fullLoadCurve.MaxDragTorque * 1.1;
var fldMargin = ShiftPolygonFldMargin(fullLoadCurve.FullLoadEntries, (p3.X * 0.95).SI<PerSecond>());
var downshiftCorr = MoveDownshiftBelowFld(Edge.Create(p6, p3), fldMargin, 1.1 * fullLoadCurve.MaxTorque);
var downShift = new List<ShiftPolygon.ShiftPolygonEntry>();
if (gearIdx > 0) {
if (gearIdx > 0)
{
downShift =
new[] { p2, downshiftCorr.P1, downshiftCorr.P2 }.Select(
point => new ShiftPolygon.ShiftPolygonEntry(point.Y.SI<NewtonMeter>(), point.X.SI<PerSecond>()))
......@@ -1351,7 +1401,8 @@ namespace TUGraz.VectoCore.Models.Declaration
downShift[0].Torque = maxDragTorque;
}
var upShift = new List<ShiftPolygon.ShiftPolygonEntry>();
if (gearIdx >= gears.Count - 1) {
if (gearIdx >= gears.Count - 1)
{
return new ShiftPolygon(downShift, upShift);
}
......@@ -1368,7 +1419,8 @@ namespace TUGraz.VectoCore.Models.Declaration
// ReSharper restore InconsistentNaming
var upShiftPts = IntersectTakeHigherShiftLine(new[] { p4, p7, p5 }, new[] { p2p, p6p, p3pExt });
if (gears[gearIdx].MaxInputSpeed != null) {
if (gears[gearIdx].MaxInputSpeed != null)
{
var maxSpeed = gears[gearIdx].MaxInputSpeed.Value();
upShiftPts = IntersectTakeLowerShiftLine(
upShiftPts,
......@@ -1378,6 +1430,7 @@ namespace TUGraz.VectoCore.Models.Declaration
upShiftPts.Select(point => new ShiftPolygon.ShiftPolygonEntry(point.Y.SI<NewtonMeter>(), point.X.SI<PerSecond>()))
.ToList();
upShift[0].Torque = maxDragTorque;
return new ShiftPolygon(downShift, upShift);
}
......
......@@ -273,13 +273,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
public PerSecond MaxSpeed => FullLoadEntries.MaxBy(e => e.EngineSpeed).EngineSpeed;
public PerSecond NTq99hSpeed => _nTq99hSpeed ?? (_nTq99hSpeed = FindEnginSpeedForTorque(0.99 * MaxTorque).Last());
public PerSecond NTq99hSpeed => _nTq99hSpeed ?? (_nTq99hSpeed = FindEngineSpeedForTorque(0.99 * MaxTorque).Last());
public PerSecond NTq99lSpeed => _nTq99lSpeed ?? (_nTq99lSpeed = FindEnginSpeedForTorque(0.99 * MaxTorque).First());
public PerSecond NTq99lSpeed => _nTq99lSpeed ?? (_nTq99lSpeed = FindEngineSpeedForTorque(0.99 * MaxTorque).First());
public PerSecond NP99hSpeed => _nP99hSpeed ?? (_nP99hSpeed = ComputeNP99HSpeed());
public PerSecond NTq98hSpeed => _nTq98hSpeed ?? (_nTq98hSpeed = FindEnginSpeedForTorque(0.98 * MaxTorque).Last());
public PerSecond NTq98hSpeed => _nTq98hSpeed ?? (_nTq98hSpeed = FindEngineSpeedForTorque(0.98 * MaxTorque).Last());
public PerSecond NP98hSpeed => _nP98hSpeed ?? (_nP98hSpeed = ComputeNP98HSpeed());
......@@ -360,11 +360,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
return retVal.First(x => x.IsBetween(p1.EngineSpeed, p2.EngineSpeed)).SI<PerSecond>();
}
private List<PerSecond> FindEnginSpeedForTorque(NewtonMeter torque)
private List<PerSecond> FindEngineSpeedForTorque(NewtonMeter torque)
{
var retVal = new List<PerSecond>();
foreach (var pair in FullLoadEntries.Pairwise(Tuple.Create)) {
var solution = FindEnginSpeedForTorque(pair.Item1, pair.Item2, torque);
var solution = FindEngineSpeedForTorque(pair.Item1, pair.Item2, torque);
if (solution != null) {
retVal.Add(solution);
}
......@@ -373,7 +373,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
return retVal.Distinct(new SI.EqualityComparer<PerSecond>()).ToList();
}
private PerSecond FindEnginSpeedForTorque(FullLoadCurveEntry p1, FullLoadCurveEntry p2, NewtonMeter torque)
private PerSecond FindEngineSpeedForTorque(FullLoadCurveEntry p1, FullLoadCurveEntry p2, NewtonMeter torque)
{
if (p1.TorqueFullLoad.IsEqual(p2.TorqueFullLoad) && p1.TorqueFullLoad.IsEqual(torque)) {
// horizontal line in FLD that equals requested torque
......
......@@ -61,6 +61,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
[ValidateObject]
public ShiftPolygon ShiftPolygon { get; internal set; }
public ShiftPolygon ExtendedShiftPolygon { get; internal set; }
public double TorqueConverterRatio { get; internal set; }
public TransmissionLossMap TorqueConverterGearLossMap { get; internal set; }
......
......@@ -116,6 +116,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent
GearboxType gearboxType, int i, EngineFullLoadCurve engineDataFullLoadCurve,
IList<ITransmissionInputData> gearboxGears, CombustionEngineData engineData, double axlegearRatio,
Meter dynamicTyreRadius, ElectricMotorData electricMotorData = null);
ShiftPolygon ComputeDeclarationExtendedShiftPolygon(
GearboxType gearboxType, int i, EngineFullLoadCurve engineDataFullLoadCurve,
IList<ITransmissionInputData> gearboxGears, CombustionEngineData engineData, double axlegearRatio,
Meter dynamicTyreRadius, ElectricMotorData electricMotorData = null);
}
// public class GearInfo
......
......@@ -617,6 +617,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
{
return null;
}
public override ShiftPolygon ComputeDeclarationExtendedShiftPolygon(
GearboxType gearboxType, int i, EngineFullLoadCurve engineDataFullLoadCurve, IList<ITransmissionInputData> gearboxGears,
CombustionEngineData engineData, double axlegearRatio, Meter dynamicTyreRadius, ElectricMotorData electricMotorData = null)
{
return null;
}
}
}
}
\ No newline at end of file
......@@ -417,6 +417,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
i, engineDataFullLoadCurve, gearboxGears, engineData, axlegearRatio, dynamicTyreRadius);
}
public override ShiftPolygon ComputeDeclarationExtendedShiftPolygon(
GearboxType gearboxType,
int i,
EngineFullLoadCurve engineDataFullLoadCurve,
IList<ITransmissionInputData> gearboxGears,
CombustionEngineData engineData,
double axlegearRatio,
Meter dynamicTyreRadius,
ElectricMotorData electricMotorData = null)
{
return DeclarationData.Gearbox.ComputeManualTransmissionShiftPolygonExtended(
i, engineDataFullLoadCurve, gearboxGears, engineData, axlegearRatio, dynamicTyreRadius);
}
protected override bool DoCheckShiftRequired(Second absTime, Second dt, NewtonMeter outTorque,
PerSecond outAngularVelocity, NewtonMeter inTorque,
PerSecond inAngularVelocity, GearshiftPosition gear, Second lastShiftTime, IResponse response)
......
......@@ -29,6 +29,7 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/
using System;
using System.Collections.Generic;
using System.Linq;
using TUGraz.VectoCommon.InputData;
......@@ -58,6 +59,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
return DeclarationData.Gearbox.ComputeManualTransmissionShiftPolygon(
i, engineDataFullLoadCurve, gearboxGears, engineData, axlegearRatio, dynamicTyreRadius);
}
public ShiftPolygon ComputeDeclarationExtendedShiftPolygon(
GearboxType gearboxType, int i, EngineFullLoadCurve engineDataFullLoadCurve, IList<ITransmissionInputData> gearboxGears,
CombustionEngineData engineData, double axlegearRatio, Meter dynamicTyreRadius, ElectricMotorData electricMotorData = null)
{
return DeclarationData.Gearbox.ComputeManualTransmissionShiftPolygonExtended(
i, engineDataFullLoadCurve, gearboxGears, engineData, axlegearRatio, dynamicTyreRadius);
}
}
/// <summary>
......@@ -129,6 +138,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
i, engineDataFullLoadCurve, gearboxGears, engineData, axlegearRatio, dynamicTyreRadius, electricMotorData);
}
public override ShiftPolygon ComputeDeclarationExtendedShiftPolygon(
GearboxType gearboxType, int i, EngineFullLoadCurve engineDataFullLoadCurve, IList<ITransmissionInputData> gearboxGears,
CombustionEngineData engineData, double axlegearRatio, Meter dynamicTyreRadius, ElectricMotorData electricMotorData = null)
{
throw new NotImplementedException("Not applicable to AMT Gearbox.");
}
public static string Name => "AMT - Classic";
public override GearshiftPosition Engage(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity)
......
......@@ -29,6 +29,19 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
//return DeclarationData.Gearbox.ComputeManualTransmissionShiftPolygon(
// i, engineDataFullLoadCurve, gearboxGears, engineData, axlegearRatio, dynamicTyreRadius);
}
public ShiftPolygon ComputeDeclarationExtendedShiftPolygon(
GearboxType gearboxType,
int i,
EngineFullLoadCurve engineDataFullLoadCurve,
IList<ITransmissionInputData> gearboxGears,
CombustionEngineData engineData,
double axlegearRatio,
Meter dynamicTyreRadius,
ElectricMotorData electricMotorData = null)
{
throw new NotImplementedException("Not applicable to AMT Gearbox.");
}
}
public class AMTShiftStrategyOptimized : AMTShiftStrategy
{
......
......@@ -50,6 +50,19 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies
{
public class ATShiftStrategyPolygonCalculator : IShiftPolygonCalculator
{
public ShiftPolygon ComputeDeclarationExtendedShiftPolygon(
GearboxType gearboxType,
int i,
EngineFullLoadCurve engineDataFullLoadCurve,
IList<ITransmissionInputData> gearboxGears,
CombustionEngineData engineData,
double axlegearRatio,
Meter dynamicTyreRadius,
ElectricMotorData electricMotorData = null)
{
throw new System.NotImplementedException();
}
public ShiftPolygon ComputeDeclarationShiftPolygon(
GearboxType gearboxType, int i, EngineFullLoadCurve engineDataFullLoadCurve,
IList<ITransmissionInputData> gearboxGears, CombustionEngineData engineData, double axlegearRatio,
......@@ -89,6 +102,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies
gearboxGears, engineData, axlegearRatio, dynamicTyreRadius, electricMotorData);
}
public override ShiftPolygon ComputeDeclarationExtendedShiftPolygon(
GearboxType gearboxType,
int i,
EngineFullLoadCurve engineDataFullLoadCurve,
IList<ITransmissionInputData> gearboxGears,
CombustionEngineData engineData,
double axlegearRatio,
Meter dynamicTyreRadius,
ElectricMotorData electricMotorData = null)
{
throw new System.NotImplementedException("Not applicable to AT Gearbox.");
}
public static string Name => "AT - Classic";
public ATShiftStrategy(IVehicleContainer dataBus) : base(dataBus)
......
......@@ -44,6 +44,19 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies
return new ShiftPolygon(shiftLine.Downshift.ToList(), upshift);
}
public ShiftPolygon ComputeDeclarationExtendedShiftPolygon(
GearboxType gearboxType,
int i,
EngineFullLoadCurve engineDataFullLoadCurve,
IList<ITransmissionInputData> gearboxGears,
CombustionEngineData engineData,
double axlegearRatio,
Meter dynamicTyreRadius,
ElectricMotorData electricMotorData = null)
{
throw new NotImplementedException("Not applicable to AT transmissions.");
}
}
public class ATShiftStrategyOptimized : ATShiftStrategy
......
......@@ -100,6 +100,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
GearboxType gearboxType, int i, EngineFullLoadCurve engineDataFullLoadCurve, IList<ITransmissionInputData> gearboxGears,
CombustionEngineData engineData, double axlegearRatio, Meter dynamicTyreRadius, ElectricMotorData electricMotorData = null);
public abstract ShiftPolygon ComputeDeclarationExtendedShiftPolygon(
GearboxType gearboxType, int i, EngineFullLoadCurve engineDataFullLoadCurve, IList<ITransmissionInputData> gearboxGears,
CombustionEngineData engineData, double axlegearRatio, Meter dynamicTyreRadius, ElectricMotorData electricMotorData = null);
protected MeterPerSquareSecond EstimateAccelerationForGear(GearshiftPosition gear, PerSecond gbxAngularVelocityOut)
{
if (!Gears.Contains(gear)) {
......
......@@ -29,19 +29,30 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/
using System;
using System.Linq;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Models.Connector.Ports.Impl;
using TUGraz.VectoCore.Models.Declaration;
using TUGraz.VectoCore.Models.Simulation;
using TUGraz.VectoCore.Models.Simulation.Impl;
namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies
{
public class MTShiftStrategy : AMTShiftStrategy
{
VelocitySpeedGearshiftPreprocessor PreprocessorSpeed;
VelocityRollingLookup velocityDropData = new VelocityRollingLookup();
public MTShiftStrategy(IVehicleContainer bus) : base(bus)
{
EarlyShiftUp = false;
SkipGears = true;
PreprocessorSpeed = ConfigureSpeedPreprocessor(bus);
bus.AddPreprocessor(PreprocessorSpeed);
}
public new static string Name => "MT Shift Strategy";
......@@ -108,7 +119,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies
PerSecond outAngularVelocity, NewtonMeter inTorque, PerSecond inAngularVelocity, GearshiftPosition currentGear, IResponse response1)
{
// down shift
if (IsBelowDownShiftCurve(currentGear, inTorque, inAngularVelocity)) {
var interpolatedDroppedSpeed = velocityDropData.Interpolate(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>());
var droppedSpeed = interpolatedDroppedSpeed == 0.SI<MeterPerSecond>() || interpolatedDroppedSpeed == null
? DataBus.VehicleInfo.VehicleSpeed : interpolatedDroppedSpeed;
double droppedSpeedRatio = DataBus.VehicleInfo.VehicleSpeed / droppedSpeed;
if ((IsBelowDownShiftCurve(currentGear, inTorque, inAngularVelocity) && droppedSpeedRatio.IsSmallerOrEqual(2.0)) ||
IsBelowExtendedDownShiftCurve(currentGear, inTorque, inAngularVelocity))
{
currentGear = Gears.Predecessor(currentGear);
while (SkipGears && currentGear.Gear > 1) {
currentGear = Gears.Predecessor(currentGear);
......@@ -133,5 +151,31 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies
}
return currentGear;
}
private VelocitySpeedGearshiftPreprocessor ConfigureSpeedPreprocessor(IVehicleContainer bus)
{
var TestContainer = new SimplePowertrainContainer(bus.RunData);
PowertrainBuilder.BuildSimplePowertrain(bus.RunData, TestContainer);
var TestContainerGbx = TestContainer.GearboxCtl as Gearbox;
if (TestContainerGbx == null)
{
throw new VectoException("Unknown gearboxtype: {0}", TestContainer.GearboxCtl.GetType().FullName);
}
var maxGradient = bus.RunData.Cycle.Entries.Max(x => Math.Abs(x.RoadGradientPercent.Value())) + 1;
var gradient = Convert.ToInt32(maxGradient / 2) * 2;
if (gradient == 0)
{
gradient = 2;
}
return new VelocitySpeedGearshiftPreprocessor(
velocityDropData,
bus.RunData.GearboxData.TractionInterruption,
TestContainer,
-gradient,
gradient,
2);
}
}
}
\ No newline at end of file
......@@ -33,6 +33,19 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies
_shiftStrategyParameters = shiftStrategyparamets;
}
public ShiftPolygon ComputeDeclarationExtendedShiftPolygon(
GearboxType gearboxType,
int i,
EngineFullLoadCurve engineDataFullLoadCurve,
IList<ITransmissionInputData> gearboxGears,
CombustionEngineData engineData,
double axlegearRatio,
Meter dynamicTyreRadius,
ElectricMotorData electricMotorData = null)
{
throw new NotImplementedException("Not applicable to PEVAMT Gearbox.");
}
public ShiftPolygon ComputeDeclarationShiftPolygon(GearboxType gearboxType, int i, EngineFullLoadCurve engineDataFullLoadCurve,
IList<ITransmissionInputData> gearboxGears, CombustionEngineData engineData, double axlegearRatio, Meter dynamicTyreRadius,
ElectricMotorData electricMotorData = null)
......@@ -927,6 +940,19 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies
return _shiftPolygonImplementation.ComputeDeclarationShiftPolygon(gearboxType, i, engineDataFullLoadCurve, gearboxGears, engineData, axlegearRatio, dynamicTyreRadius, electricMotorData);
}
public ShiftPolygon ComputeDeclarationExtendedShiftPolygon(
GearboxType gearboxType,
int i,
EngineFullLoadCurve engineDataFullLoadCurve,
IList<ITransmissionInputData> gearboxGears,
CombustionEngineData engineData,
double axlegearRatio,
Meter dynamicTyreRadius,
ElectricMotorData electricMotorData = null)
{
throw new NotImplementedException("Not applicable to PEVAMT gearbox.");
}
#endregion
}
}
\ No newline at end of file
......@@ -109,6 +109,24 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies
return GearboxModelData.Gears[gear.Gear].ShiftPolygon.IsAboveDownshiftCurve(inTorque, inEngineSpeed);
}
protected bool IsBelowExtendedDownShiftCurve(GearshiftPosition gear, NewtonMeter inTorque, PerSecond inEngineSpeed)
{
if (!Gears.HasPredecessor(gear))
{
return false;
}
return GearboxModelData.Gears[gear.Gear].ExtendedShiftPolygon.IsBelowDownshiftCurve(inTorque, inEngineSpeed);
}
protected bool IsAboveExtendedDownShiftCurve(GearshiftPosition gear, NewtonMeter inTorque, PerSecond inEngineSpeed)
{
if (!Gears.HasPredecessor(gear))
{
return true;
}
return GearboxModelData.Gears[gear.Gear].ExtendedShiftPolygon.IsAboveDownshiftCurve(inTorque, inEngineSpeed);
}
/// <summary>
/// Tests if the operating point is above the up-shift curve (=outside of shift curve).
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment