diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs index 79ed9f108a9aca7b6b6f03a73c7ba9568c565538..96f5f0d041a273e9580ee2348672e01cd2602afb 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs @@ -519,17 +519,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl Case<ResponseOverload>(r => { if (DataBus.GearboxType.AutomaticTransmission()) { // overload may happen because of gearshift between search and actual request, search again - DataBus.BrakePower = 0.SI<Watt>(); - operatingPoint = SearchBrakingPower(absTime, operatingPoint.SimulationDistance, gradient, - operatingPoint.Acceleration, response); - DriverAcceleration = operatingPoint.Acceleration; - if (DataBus.BrakePower.IsSmaller(0)) { + var i = 5; + while (i-- > 0 && !(retVal is ResponseSuccess)) { DataBus.BrakePower = 0.SI<Watt>(); + operatingPoint = SearchBrakingPower(absTime, operatingPoint.SimulationDistance, gradient, + operatingPoint.Acceleration, response); + DriverAcceleration = operatingPoint.Acceleration; + if (DataBus.BrakePower.IsSmaller(0)) { + DataBus.BrakePower = 0.SI<Watt>(); - operatingPoint = SearchOperatingPoint(absTime, ds, gradient, 0.SI<MeterPerSquareSecond>(), r); + operatingPoint = SearchOperatingPoint(absTime, ds, gradient, 0.SI<MeterPerSquareSecond>(), r); + } + retVal = NextComponent.Request(absTime, operatingPoint.SimulationInterval, + operatingPoint.Acceleration, gradient); } - retVal = NextComponent.Request(absTime, operatingPoint.SimulationInterval, - operatingPoint.Acceleration, gradient); } else { throw new UnexpectedResponseException( "DrivingAction Brake: request failed after braking power was found.", r); diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs index 8b6cac9032714a18ea5d7f206a8d9383b2f33609..8830dd9c9593f5729e5cc322a6632b1d6b223d0b 100644 --- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs @@ -236,12 +236,23 @@ namespace TUGraz.VectoCore.OutputData row[CD_x_A] = runData.VehicleData.CrossWindCorrectionCurve.AirDragArea; row[ROLLING_RESISTANCE_COEFFICIENT] = runData.VehicleData.TotalRollResistanceCoefficient.SI<Scalar>(); row[TRANSMISSION_TYPE] = runData.GearboxData.Type; - row[GEAR_RATIO_FIRST_GEAR] = runData.GearboxData.Gears.Count > 0 - ? runData.GearboxData.Gears.First().Value.Ratio.SI<Scalar>() - : 0.SI<Scalar>(); - row[GEAR_RATIO_LAST_GEAR] = runData.GearboxData.Gears.Count > 0 - ? runData.GearboxData.Gears.Last().Value.Ratio.SI<Scalar>() - : 0.SI<Scalar>(); + if (runData.GearboxData.Type.AutomaticTransmission()) { + row[GEAR_RATIO_FIRST_GEAR] = runData.GearboxData.Gears.Count > 0 + ? (double.IsNaN(runData.GearboxData.Gears.First().Value.Ratio) + ? runData.GearboxData.Gears.First().Value.TorqueConverterRatio.SI<Scalar>() + : runData.GearboxData.Gears.First().Value.Ratio.SI<Scalar>()) + : 0.SI<Scalar>(); + row[GEAR_RATIO_LAST_GEAR] = runData.GearboxData.Gears.Count > 0 + ? runData.GearboxData.Gears.Last().Value.Ratio.SI<Scalar>() + : 0.SI<Scalar>(); + } else { + row[GEAR_RATIO_FIRST_GEAR] = runData.GearboxData.Gears.Count > 0 + ? runData.GearboxData.Gears.First().Value.Ratio.SI<Scalar>() + : 0.SI<Scalar>(); + row[GEAR_RATIO_LAST_GEAR] = runData.GearboxData.Gears.Count > 0 + ? runData.GearboxData.Gears.Last().Value.Ratio.SI<Scalar>() + : 0.SI<Scalar>(); + } row[AXLE_GEAR_RATIO] = runData.AxleGearData.AxleGear.Ratio.SI<Scalar>(); row[R_DYN] = runData.VehicleData.DynamicTyreRadius; row[RETARDER_TYPE] = runData.Retarder.Type;