diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs index 3246c499dbb08cabcc18018045eeeeb47c298098..56779d22b998fdf9e11be7a9a4aa580e574c220b 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs @@ -855,9 +855,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public class DriverModeDrive : AbstractDriverMode { - protected override IResponse DoHandleRequest( - Second absTime, Meter ds, MeterPerSecond targetVelocity, Radian gradient, - bool prohibitOverspeed = false) + protected override IResponse DoHandleRequest(Second absTime, Meter ds, MeterPerSecond targetVelocity, + Radian gradient, bool prohibitOverspeed = false) { var debug = new DebugData(); @@ -874,8 +873,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } for (var i = 0; i < 3; i++) { - var retVal = HandleRequestEngaged( - absTime, ds, targetVelocity, gradient, prohibitOverspeed, velocity, debug); + var retVal = HandleRequestEngaged(absTime, ds, targetVelocity, gradient, prohibitOverspeed, + velocity, debug); if (retVal != null) { return retVal; } @@ -889,15 +888,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return response; } if (!(response is ResponseSuccess) && DataBus.ClutchInfo.ClutchClosed(absTime)) { - response = HandleRequestEngaged( - absTime, ds, targetVelocity, gradient, prohibitOverspeed, velocity, debug); + response = HandleRequestEngaged(absTime, ds, targetVelocity, gradient, prohibitOverspeed, velocity, debug); } return response; } - private IResponse HandleRequestDisengaged( - Second absTime, Meter ds, Radian gradient, MeterPerSecond velocity, + private IResponse HandleRequestDisengaged(Second absTime, Meter ds, Radian gradient, MeterPerSecond velocity, DebugData debug) { if (DataBus.VehicleInfo.VehicleSpeed.IsSmallerOrEqual(0.SI<MeterPerSecond>())) { @@ -914,18 +911,18 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } var response = Driver.DrivingActionRoll(absTime, ds, velocity, gradient); - debug.Add(new { action = "ClutchOpen -> Roll", response }); + debug.Add(new { a = "[HRD-0] ClutchOpen -> Roll", response }); switch (response) { case ResponseUnderload _ when DataBus.ClutchInfo.ClutchClosed(absTime): response = HandleRequestEngaged(absTime, ds, velocity, gradient, false, velocity, debug); break; case ResponseUnderload _ when !DataBus.ClutchInfo.ClutchClosed(absTime): response = Driver.DrivingActionBrake(absTime, ds, velocity, gradient, response); - debug.Add(new { action = "Roll:Underload -> Brake", response }); + debug.Add(new { a = "[HRD-1] Roll:Underload -> Brake", response }); break; case ResponseSpeedLimitExceeded _: response = Driver.DrivingActionBrake(absTime, ds, velocity, gradient); - debug.Add(new { action = "Roll:SpeedLimitExceeded -> Brake", response }); + debug.Add(new { a = "[HRD-2] Roll:SpeedLimitExceeded -> Brake", response }); break; } return response; @@ -936,8 +933,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl bool prohibitOverspeed, MeterPerSecond velocityWithOverspeed, DebugData debug) { // drive along - var first = FirstAccelerateOrCoast( - absTime, ds, targetVelocity, gradient, prohibitOverspeed, velocityWithOverspeed, debug); + var first = FirstAccelerateOrCoast(absTime, ds, targetVelocity, gradient, prohibitOverspeed, velocityWithOverspeed, debug); var second = first; switch (first) { @@ -945,11 +941,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl if (DataBus.GearboxInfo.GearboxType.AutomaticTransmission() && !DataBus.ClutchInfo.ClutchClosed(absTime)) { //TODO mk20210616 the whole statement could be de-nested to switch-pattern matching (with "where") if this first "if" would not be here. var debugResponse = Driver.DrivingActionRoll(absTime, ds, velocityWithOverspeed, gradient); + debug.Add(new { a = "[HRE-0] (Underload&Overspeed)->Roll", second }); } if (DataBus.VehicleInfo.VehicleSpeed.IsGreater(0) && DriverStrategy.IsOverspeedAllowed(targetVelocity, prohibitOverspeed)) { second = Driver.DrivingActionCoast(absTime, ds, velocityWithOverspeed, gradient); - debug.Add(new { action = "first:(Underload & Overspeed)-> Coast", second }); + debug.Add(new { a = "[HRE-1] (Underload&Overspeed)->Coast", second }); second = HandleCoastAfterUnderloadWithOverspeed(absTime, ds, gradient, velocityWithOverspeed, debug, second); } else { // overrideAction: in case of hybrids with an AT gearbox after an underload we search for braking power because the torque converter @@ -967,7 +964,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl : (DrivingAction?)null; second = Driver.DrivingActionBrake(absTime, ds, velocityWithOverspeed, gradient, overrideAction: overrideAction); - debug.Add(new { action = "first:(Underload & !Overspeed) -> Brake", second }); + debug.Add(new { a = "[HRE-2] (Underload&!Overspeed)->Brake", second }); } break; case ResponseEngineSpeedTooHigh _: @@ -975,7 +972,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl break; case ResponseSpeedLimitExceeded _: second = Driver.DrivingActionBrake(absTime, ds, velocityWithOverspeed, gradient); - debug.Add(new { action = "SpeedLimitExceeded -> Brake", second }); + debug.Add(new { a = "[HRE-3] SpeedLimitExceeded->Brake", second }); break; } @@ -988,36 +985,36 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl switch (second) { case ResponseGearShift _: third = Driver.DrivingActionRoll(absTime, ds, velocityWithOverspeed, gradient); - debug.Add(new { action = "second: GearShift -> Roll", third }); + debug.Add(new { a = "[HRE-4] second: GearShift -> Roll", third }); switch (third) { case ResponseUnderload _: - // overload may happen if driver limits acceleration when rolling downhill + // underload may happen if driver limits acceleration when rolling downhill third = Driver.DrivingActionBrake(absTime, ds, velocityWithOverspeed, gradient); - debug.Add(new { action = "third:Underload -> Brake", third }); + debug.Add(new { a = "[HRE-6] third:Underload -> Brake", third }); break; case ResponseSpeedLimitExceeded _: third = Driver.DrivingActionBrake(absTime, ds, velocityWithOverspeed, gradient); - debug.Add(new { action = "third:SpeedLimitExceeded -> Brake", third }); + debug.Add(new { a = "[HRE-7] third:SpeedLimitExceeded -> Brake", third }); break; } break; case ResponseOverload _ when DataBus.VehicleInfo.VehicleSpeed.IsGreater(0): third = Driver.DrivingActionCoast(absTime, ds, velocityWithOverspeed, gradient); - debug.Add(new { action = "second:Overload -> Coast", third }); + debug.Add(new { a = "[HRE-8] second:Overload -> Coast", third }); switch (third) { case ResponseGearShift _: third = Driver.DrivingActionCoast(absTime, ds, velocityWithOverspeed, gradient); - debug.Add(new { action = "third:GearShift -> try again Coast", third }); + debug.Add(new { a = "[HRE-9] third:GearShift -> try again Coast", third }); break; case ResponseSpeedLimitExceeded _: if (DataBus.GearboxInfo.GearboxType.AutomaticTransmission() && !DataBus.GearboxInfo.Gear.IsLockedGear()) { third = Driver.DrivingActionCoast(absTime, ds, velocityWithOverspeed + 1.KMPHtoMeterPerSecond(), gradient); - debug.Add(new { action = "third:Overload (AT, Converter gear) -> Coast", third }); + debug.Add(new { a = "[HRE-10] third:Overload (AT, Converter gear) -> Coast", third }); } else { third = Driver.DrivingActionBrake(absTime, ds, velocityWithOverspeed, gradient); - debug.Add(new { action = "third:SpeedLimitExceeded -> Brake", third }); + debug.Add(new { a = "[HRE-11] third:SpeedLimitExceeded -> Brake", third }); } break; @@ -1028,35 +1025,26 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return third; } - private IResponse HandleCoastAfterUnderloadWithOverspeed( - Second absTime, Meter ds, Radian gradient, + private IResponse HandleCoastAfterUnderloadWithOverspeed(Second absTime, Meter ds, Radian gradient, MeterPerSecond velocity, DebugData debug, IResponse second) { if (second is ResponseUnderload || second is ResponseSpeedLimitExceeded) { second = Driver.DrivingActionBrake(absTime, ds, velocity, gradient); - debug.Add( - new { - action = "second:(Underload|SpeedLimitExceeded) -> Brake", - second - }); + debug.Add(new { a = "[HCAUWO-0] second:(Underload|SpeedLimitExceeded) -> Brake", second }); } if (second is ResponseEngineSpeedTooHigh) { second = Driver.DrivingActionBrake(absTime, ds, velocity, gradient, second); - debug.Add( - new { - action = "second:(EngineSpeedTooHigh|SpeedLimitExceeded) -> Brake with reduced acceleration", - second - }); + debug.Add(new { a = "[HCAUWO-1] second:(EngineSpeedTooHigh|SpeedLimitExceeded) -> Brake with reduced acceleration", second }); } return second; } - private IResponse FirstAccelerateOrCoast( - Second absTime, Meter ds, MeterPerSecond targetVelocity, Radian gradient, + private IResponse FirstAccelerateOrCoast(Second absTime, Meter ds, MeterPerSecond targetVelocity, Radian gradient, bool prohibitOverspeed, MeterPerSecond velocityWithOverspeed, DebugData debug) { if (DriverStrategy.pccState == PCCStates.UseCase1 || DriverStrategy.pccState == PCCStates.UseCase2) { var response = Driver.DrivingActionCoast(absTime, ds, velocityWithOverspeed, gradient); + debug.Add(new { a = "[FAOC-0] Coast", response }); if (response is ResponseSuccess) { return response; } @@ -1068,27 +1056,27 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl //we are driving in overspeed (VehicleSpeed >= targetVelocity) var response = Driver.DrivingActionCoast(absTime, ds, velocityWithOverspeed, gradient); - debug.Add(new { action = "Coast", response }); + debug.Add(new { a = "[FAOC-1] Coast", response }); if (response is ResponseSuccess && response.Driver.Acceleration < 0 && response.Vehicle.VehicleSpeed <= targetVelocity) { //do accelerate action if we would come below targetVelocity due to coasting response = Driver.DrivingActionAccelerate(absTime, ds, targetVelocity, gradient); - debug.Add(new { action = "Accelerate(Success && Acc<0 && VehSpeed <= targetVelocity)", response }); + debug.Add(new { a = "[FAOC-2] Accelerate(Success && Acc<0 && VehSpeed <= targetVelocity)", response }); } if (response is ResponseOverload && DataBus.PowertrainInfo.HasCombustionEngine && !DataBus.EngineInfo.EngineOn) { response = Driver.DrivingActionAccelerate(absTime, ds, targetVelocity, gradient); - debug.Add(new { action = "Accelerate(Overload && ICE off)", response }); + debug.Add(new { a = "[FAOC-3] Accelerate(Overload && ICE off)", response }); } if (response is ResponseOverload && !DataBus.PowertrainInfo.HasCombustionEngine) { response = Driver.DrivingActionAccelerate(absTime, ds, targetVelocity, gradient); - debug.Add(new { action = "Accelerate(Overload && BEV)", response }); + debug.Add(new { a = "[FAOC-4] Accelerate(Overload && BEV)", response }); } if (response is ResponseOverload) { response = Driver.DrivingActionAccelerate(absTime, ds, targetVelocity, gradient); - debug.Add(new { action = "Accelerate(Overload)", response }); + debug.Add(new { a = "[FAOC-5] Accelerate(Overload)", response }); } return response; } else { @@ -1096,11 +1084,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl if (DataBus.GearboxInfo.GearboxType.AutomaticTransmission() && DataBus.GearboxInfo.DisengageGearbox) { var response = Driver.DrivingActionCoast(absTime, ds, velocityWithOverspeed, gradient); - debug.Add(new { action = "Coast", response }); + debug.Add(new { a = "[FAOC-6] Coast", response }); return response; } else { var response = Driver.DrivingActionAccelerate(absTime, ds, targetVelocity, gradient); - debug.Add(new { action = "Accelerate", response }); + debug.Add(new { a = "[FAOC-7] Accelerate", response }); return response; } } @@ -1252,17 +1240,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } response = Driver.DrivingActionAccelerate(absTime, ds, 1.KMPHtoMeterPerSecond(), gradient); - debug.Add(new { a = "(1) Accelerate", response }); + debug.Add(new { a = "[DB-] Accelerate", response }); if (response is ResponseUnderload) { response = Driver.DrivingActionBrake(absTime, ds, 1.KMPHtoMeterPerSecond(), gradient, response, overrideAction: DrivingAction.Accelerate); - debug.Add(new { a = "(2) Brake", response }); + debug.Add(new { a = "[DB-2] Brake", response }); } } else { response = Driver.DrivingActionBrake(absTime, ds, DriverStrategy.BrakeTrigger.NextTargetSpeed, gradient, targetDistance: targetDistance); - debug.Add(new { a = "(3) Brake", response }); + debug.Add(new { a = "[DB-3] Brake", response }); } if ((DataBus.GearboxInfo.GearboxType.AutomaticTransmission() || DataBus.HybridControllerInfo != null) @@ -1271,7 +1259,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl DataBus.Brakes.BrakePower = 0.SI<Watt>(); response = Driver.DrivingActionBrake(absTime, ds, DriverStrategy.BrakeTrigger.NextTargetSpeed, gradient, targetDistance: targetDistance); - debug.Add(new { a = "(4) Brake", response }); + debug.Add(new { a = "[DB-4] Brake", response }); } if (response == null) { @@ -1284,10 +1272,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl if (!DataBus.ClutchInfo.ClutchClosed(absTime)) { Log.Info("Brake -> Overload -> Clutch is open - Trying roll action"); response = Driver.DrivingActionRoll(absTime, ds, targetVelocity, gradient); - debug.Add(new { a = "(5) Roll", response }); + debug.Add(new { a = "[DB-5] Roll", response }); if (response is ResponseSpeedLimitExceeded) { response = Driver.DrivingActionBrake(absTime, ds, targetVelocity, gradient); - debug.Add(new { a = "(6) Brake", response }); + debug.Add(new { a = "[DB-6] Brake", response }); } } else { Log.Info("Brake -> Overload -> Clutch is closed - Trying brake action again"); @@ -1295,16 +1283,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl DataBus.HybridControllerCtl?.RepeatDrivingAction(absTime); response = Driver.DrivingActionBrake(absTime, ds, DriverStrategy.BrakeTrigger.NextTargetSpeed, gradient, targetDistance: targetDistance); - debug.Add(new { a = "(7) Brake", response }); + debug.Add(new { a = "[DB-7] Brake", response }); if (response is ResponseOverload) { Log.Info("Brake -> Overload -> 2nd Brake -> Overload -> Trying accelerate action"); var gear = DataBus.GearboxInfo.Gear; if (DataBus.GearboxInfo.GearEngaged(absTime)) { response = Driver.DrivingActionAccelerate(absTime, ds, DriverStrategy.BrakeTrigger.NextTargetSpeed, gradient); - debug.Add(new { a = "(8) Accelerate", response }); + debug.Add(new { a = "[DB-8] Accelerate", response }); } else { response = Driver.DrivingActionRoll(absTime, ds, targetVelocity, gradient); - debug.Add(new { a = "(9) Roll", response }); + debug.Add(new { a = "[DB-9] Roll", response }); } switch (response) { @@ -1312,14 +1300,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl Log.Info("Brake -> Overload -> 2nd Brake -> Accelerate or Roll -> Got GearShift response, performing roll action"); response = Driver.DrivingActionRoll(absTime, ds, DriverStrategy.BrakeTrigger.NextTargetSpeed, gradient); - debug.Add(new { a = "(12) Roll", response }); + debug.Add(new { a = "[DB-12] Roll", response }); break; case ResponseUnderload _: if (gear.Gear != DataBus.GearboxInfo.Gear.Gear) { // AT Gearbox switched gears, shift losses are no longer applied, try once more... response = Driver.DrivingActionAccelerate(absTime, ds, DriverStrategy.BrakeTrigger.NextTargetSpeed, gradient); - debug.Add(new { a = "(13 Accelerate", response }); + debug.Add(new { a = "[DB-13] Accelerate", response }); } break; } @@ -1333,11 +1321,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl DataBus.Brakes.BrakePower = 0.SI<Watt>(); response = Driver.DrivingActionBrake(absTime, ds, DriverStrategy.BrakeTrigger.NextTargetSpeed, gradient, targetDistance: targetDistance); - debug.Add(new { a = "(14) Brake", response }); + debug.Add(new { a = "[DB-14] Brake", response }); if (response is ResponseOverload) { Log.Info("Brake -> Gearshift -> Overload -> trying roll action (no gear engaged)"); response = Driver.DrivingActionRoll(absTime, ds, DriverStrategy.BrakeTrigger.NextTargetSpeed, gradient); - debug.Add(new { a = "(15) Roll", response }); + debug.Add(new { a = "[DB-15] Roll", response }); } break; }