From 7a5641cd576598a2e1344879d4d067621e3e9883 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Tue, 19 Feb 2019 15:07:07 +0100 Subject: [PATCH] default driver strategy: repeat handling of overspeed/gearshift as this may occur in different combinations --- .../Impl/DefaultDriverStrategy.cs | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs index 2799c6fc18..2dc82a9a78 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs @@ -818,17 +818,21 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } // handle the SpeedLimitExceeded Response and Gearshift Response separately in case it occurs in one of the requests in the second try - response.Switch().Case<ResponseGearShift>( + for (var i = 0; i < 3 && (response is ResponseGearShift || response is ResponseSpeedLimitExceeded); i++) { + response.Switch() + .Case<ResponseGearShift>( r => { response = Driver.DrivingActionRoll(absTime, ds, targetVelocity, gradient); }) - .Case<ResponseSpeedLimitExceeded>( - () => { - response = Driver.DrivingActionBrake( - absTime, ds, DataBus.VehicleSpeed, - gradient); - if (response is ResponseOverload && !DataBus.ClutchClosed(absTime)) { - response = Driver.DrivingActionRoll(absTime, ds, DataBus.VehicleSpeed, gradient); - } - }); + .Case<ResponseSpeedLimitExceeded>( + () => { + response = Driver.DrivingActionBrake( + absTime, ds, DataBus.VehicleSpeed, + gradient); + if (response is ResponseOverload && !DataBus.ClutchClosed(absTime)) { + response = Driver.DrivingActionRoll(absTime, ds, DataBus.VehicleSpeed, gradient); + } + }); + } + return response; } -- GitLab