Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 0a6f79e4 authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

adaptation amt shift strategy: ignoe effshift if engine operating point is close to drag curve

parent 9f014d97
No related branches found
No related tags found
No related merge requests found
......@@ -75,8 +75,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
#region Overrides of AMTShiftStrategy
protected override uint CheckEarlyUpshift(
Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, uint currentGear)
protected override uint CheckEarlyUpshift(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, uint currentGear, IResponse response1)
{
var minFcGear = currentGear;
var minFc = double.MaxValue;
......@@ -85,6 +84,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
var fcUpshiftPossible = true;
if (response1.EngineTorqueDemand.IsSmaller(DeclarationData.GearboxTCU.DragMarginFactor * fld[currentGear].DragLoadStationaryTorque(response1.EngineSpeed))) {
return currentGear;
}
var estimatedVelocityPostShift = VelocityDropData.Interpolate(DataBus.VehicleSpeed, DataBus.RoadGradient ?? 0.SI<Radian>());
var vDrop = DataBus.VehicleSpeed - estimatedVelocityPostShift;
var vehicleSpeedPostShift = DataBus.VehicleSpeed - vDrop * shiftStrategyParameters.VelocityDropFactor;
......@@ -186,7 +189,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
return fcUpshiftPossible
? currentGear
: base.CheckEarlyUpshift(absTime, dt, outTorque, outAngularVelocity, currentGear);
: base.CheckEarlyUpshift(absTime, dt, outTorque, outAngularVelocity, currentGear, _response1);
}
private double GetFCRating(PerSecond engineSpeed, NewtonMeter tqCurrent)
......@@ -207,24 +210,27 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
protected override uint DoCheckDownshift(
Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity,
NewtonMeter inTorque, PerSecond inAngularVelocity, uint currentGear)
NewtonMeter inTorque, PerSecond inAngularVelocity, uint currentGear, IResponse response)
{
var nextGear = base.DoCheckDownshift(
absTime, dt, outTorque, outAngularVelocity, inTorque, inAngularVelocity, currentGear);
absTime, dt, outTorque, outAngularVelocity, inTorque, inAngularVelocity, currentGear, response);
if (nextGear == currentGear && currentGear > ModelData.Gears.Keys.Min()) {
nextGear = CheckEarlyDownshift(absTime, dt, outTorque, outAngularVelocity, currentGear);
nextGear = CheckEarlyDownshift(absTime, dt, outTorque, outAngularVelocity, currentGear, response);
}
return nextGear;
}
protected virtual uint CheckEarlyDownshift(
Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, uint currentGear)
protected virtual uint CheckEarlyDownshift(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, uint currentGear, IResponse response1)
{
var minFcGear = currentGear;
var minFc = double.MaxValue;
var fcCurrent = double.NaN;
if (response1.EngineTorqueDemand.IsSmaller(DeclarationData.GearboxTCU.DragMarginFactor * fld[currentGear].DragLoadStationaryTorque(response1.EngineSpeed))) {
return currentGear;
}
for (var i = 1; i <= shiftStrategyParameters.AllowedGearRangeFC; i++) {
var tryNextGear = (uint)(currentGear - i);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment