diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategy.cs index d2edb373da86ea2aa746a443c73ce742d589344c..3c30b7274508c8865bde7b69e26e5279364a4d60 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategy.cs @@ -56,7 +56,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl Data.SkipGears = true; } - private bool SpeedTooLowForEngine(uint gear, PerSecond outAngularSpeed) { return (outAngularSpeed * Data.Gears[gear].Ratio).IsSmaller(DataBus.EngineIdleSpeed); @@ -71,7 +70,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl (outAngularSpeed * Data.Gears[gear].Ratio).IsGreaterOrEqual(DataBus.EngineN95hSpeed); } - public override uint Engage(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity) { while (NextGear > 1 && SpeedTooLowForEngine(NextGear, outAngularVelocity)) { @@ -165,7 +163,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return true; } - // normal shift when all requirements are fullfilled ------------------ var minimumShiftTimePassed = (lastShiftTime + Data.ShiftTime).IsSmallerOrEqual(absTime); if (!minimumShiftTimePassed) { @@ -257,26 +254,24 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl Gearbox.Gear = tryNextGear; var response = (ResponseDryRun)Gearbox.Request(absTime, dt, outTorque, outAngularVelocity, true); Gearbox.Gear = tmpGear; - if (!(response is ResponseEngineSpeedTooLow)) { - inAngularVelocity = Data.Gears[tryNextGear].Ratio * outAngularVelocity; - inTorque = response.ClutchPowerRequest / inAngularVelocity; - - // if next gear supplied enough power reserve: take it - // otherwise take - if (!IsBelowDownShiftCurve(tryNextGear, inTorque, inAngularVelocity)) { - var fullLoadPower = response.EnginePowerRequest - response.DeltaFullLoad; - var reserve = 1 - response.EnginePowerRequest / fullLoadPower; - - if (reserve >= Data.TorqueReserve) { - currentGear = tryNextGear; - } + + inAngularVelocity = Data.Gears[tryNextGear].Ratio * outAngularVelocity; + inTorque = response.ClutchPowerRequest / inAngularVelocity; + + // if next gear supplied enough power reserve: take it + // otherwise take + if (!IsBelowDownShiftCurve(tryNextGear, inTorque, inAngularVelocity)) { + var fullLoadPower = response.EnginePowerRequest - response.DeltaFullLoad; + var reserve = 1 - response.EnginePowerRequest / fullLoadPower; + + if (reserve >= Data.TorqueReserve) { + currentGear = tryNextGear; } } } return currentGear; } - protected virtual uint DoCheckDownshift(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, NewtonMeter inTorque, PerSecond inAngularVelocity, uint currentGear) {