Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

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

removing no longer needed shift parameters (Scania model, voith model)

adding new shift parameter (not yet used)
read cycle and shift parameters from file if available (TEST MODE)
parent 27b57fc4
No related branches found
No related tags found
No related merge requests found
Showing
with 106 additions and 233 deletions
......@@ -556,6 +556,12 @@ Public Class Gearbox
End Get
End Property
Public ReadOnly Property DownshiftMaxAccelerationAT As MeterPerSquareSecond Implements IGearshiftEngineeringInputData.DownshiftMaxAccelerationAT
get
return Nothing
End Get
End Property
Public ReadOnly Property PowershiftShiftTime As Second Implements IGearboxEngineeringInputData.PowershiftShiftTime
Get
Return PSShiftTime.SI(Of Second)()
......
......@@ -262,27 +262,11 @@ namespace TUGraz.VectoCommon.InputData
MeterPerSquareSecond UpshiftMinAcceleration { get; }
// ACEA/Scania GS Parameters
//Second GearResidenceTime { get; }
//double? DnT99LHMin1 { get; }
//double? DnT99LHMin2 { get; }
//int? AllowedGearRangeUp { get; }
//int? AllowedGearRangeDown { get; }
//Second LookBackInterval { get; }
//Watt AvgCardanPowerThresholdPropulsion { get; }
//Watt CurrCardanPowerThresholdPropulsion { get; }
//double? TargetSpeedDeviationFactor { get; }
//double? EngineSpeedHighDriveOffFactor { get; }
double? RatingFactorCurrentGear { get; }
//TableData AccelerationReserveLookup { get; }
//TableData ShareTorque99L { get; }
//TableData PredictionDurationLookup { get; }
//TableData ShareIdleLow { get; }
//TableData ShareEngineHigh { get; }
string Source { get; }
//Second DriverAccelerationLookBackInterval { get; }
//MeterPerSquareSecond DriverAccelerationThresholdLow { get; }
// FC-Based GS parameters
double? RatioEarlyUpshiftFC { get; }
double? RatioEarlyDownshiftFC { get; }
......@@ -293,8 +277,7 @@ namespace TUGraz.VectoCommon.InputData
double? AccelerationFactor { get; }
// Voith GS Parameters
//TableData LoadStageShiftLines { get; }
IList<double> LoadStageThresholdsUp { get; }
IList<double> LoadStageThresholdsDown { get; }
PerSecond MinEngineSpeedPostUpshift { get; }
......@@ -302,10 +285,7 @@ namespace TUGraz.VectoCommon.InputData
Second ATLookAheadTime { get; }
double[][] ShiftSpeedsTCToLocked { get; }
//double? PEV_TargetSpeedBrakeNorm { get; }
//double? PEV_DeRatingDownshiftSpeedFactor { get; }
//double? PEV_DownshiftMinSpeedFactor { get; }
MeterPerSquareSecond DownshiftMaxAccelerationAT { get; }
}
public interface ITorqueConverterEngineeringShiftParameterInputData
......
......@@ -390,6 +390,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
public PerSecond MinEngineSpeedPostUpshift => null;
public Second ATLookAheadTime => null;
public double[][] ShiftSpeedsTCToLocked => null;
public MeterPerSquareSecond DownshiftMaxAccelerationAT => null;
public double? VeloictyDropFactor => null;
......
......@@ -64,116 +64,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
public MeterPerSquareSecond StartAcceleration => Body.GetValueOrDefault<double>(JsonKeys.Gearbox_StartAcceleration)?.SI<MeterPerSquareSecond>() ?? DeclarationData.GearboxTCU.StartAcceleration;
public Second GearResidenceTime => Body.GetValueOrDefault<double>("GearResidenceTime")?.SI<Second>();
public double? DnT99LHMin1 => Body.GetValueOrDefault<double>("Dn_Tq99L_high_min_1");
public double? DnT99LHMin2 => Body.GetValueOrDefault<double>("Dn_Tq99L_high_min_2");
public int? AllowedGearRangeUp => Body.GetValueOrDefault<int>("GearRangeUp");
public int? AllowedGearRangeDown => Body.GetValueOrDefault<int>("GearRangeDown");
public Second LookBackInterval => Body.GetValueOrDefault<double>("LookBackDriver")?.SI<Second>();
public Watt AvgCardanPowerThresholdPropulsion => Body.GetValueOrDefault<double>("P_card_avg_threshold")?.SI<Watt>();
public Watt CurrCardanPowerThresholdPropulsion => Body.GetValueOrDefault<double>("P_card_curr_threshold")?.SI<Watt>();
public double? TargetSpeedDeviationFactor => Body.GetValueOrDefault<double>("Diff_curr_targ_vel");
public double? EngineSpeedHighDriveOffFactor => Body.GetValueOrDefault<double>("EngineSpeedHighDriveOffFactor");
public double? RatingFactorCurrentGear => Body.GetValueOrDefault<double>("Rating_current_gear");
public TableData AccelerationReserveLookup
{
get {
try {
return ReadTableData(Body["AccelerationReserveLookup"]?.ToString(), "AccelerationReserveLookup", false);
} catch (Exception) {
if (!TolerateMissing) {
throw;
}
return new TableData(
Path.Combine(BasePath, Body["AccelerationReserveLookup"]?.ToString() ?? "") + MissingFileSuffix,
DataSourceType.Missing);
}
}
}
public TableData ShareTorque99L
{
get {
try {
return ReadTableData(Body["ShareTorque99L"]?.ToString(), "ShareTorque99L", false);
} catch (Exception) {
if (!TolerateMissing) {
throw;
}
return new TableData(
Path.Combine(BasePath, Body["ShareTorque99L"]?.ToString() ?? "") + MissingFileSuffix,
DataSourceType.Missing);
}
}
}
public TableData PredictionDurationLookup
{
get {
try {
return ReadTableData(Body["PredictionDurationLookup"]?.ToString(), "PredictionDurationLookup", false);
} catch (Exception) {
if (!TolerateMissing) {
throw;
}
return new TableData(
Path.Combine(BasePath, Body["PredictionDurationLookup"]?.ToString() ?? "") + MissingFileSuffix,
DataSourceType.Missing);
}
}
}
public TableData ShareIdleLow
{
get {
try {
return ReadTableData(Body["ShareIdleLow"]?.ToString(), "ShareIdleLow", false);
} catch (Exception) {
if (!TolerateMissing) {
throw;
}
return new TableData(
Path.Combine(BasePath, Body["ShareIdleLow"]?.ToString() ?? "") + MissingFileSuffix,
DataSourceType.Missing);
}
}
}
public TableData ShareEngineHigh
{
get {
try {
return ReadTableData(Body["ShareEngineHigh"]?.ToString(), "ShareEngineHigh", false);
} catch (Exception) {
if (!TolerateMissing) {
throw;
}
return new TableData(
Path.Combine(BasePath, Body["ShareEngineHigh"]?.ToString() ?? "") + MissingFileSuffix,
DataSourceType.Missing);
}
}
}
public Second DriverAccelerationLookBackInterval => Body.GetValueOrDefault<double>("DriverAccelerationLookBackInterval")?.SI<Second>();
public MeterPerSquareSecond DriverAccelerationThresholdLow => Body.GetValueOrDefault<double>("DriverAccelerationThresholdLow")?.SI<MeterPerSquareSecond>();
public double? RatioEarlyUpshiftFC => Body.GetValueOrDefault<double>("RatioEarlyUpshiftFC");
public double? RatioEarlyDownshiftFC => Body.GetValueOrDefault<double>("RatioEarlyDownshiftFC");
......@@ -253,64 +145,29 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
}
}
public double? PEV_TargetSpeedBrakeNorm
public MeterPerSquareSecond DownshiftMaxAccelerationAT
{
get
{
if (Body["PEV_TargetSpeedBrakeNorm"] != null) {
return Body.GetEx<double>("PEV_TargetSpeedBrakeNorm");
}
return null;
}
}
public double? PEV_DeRatingDownshiftSpeedFactor
{
get
{
if (Body["PEV_DeRatingDownshiftSpeedFactor"] != null) {
return Body.GetEx<double>("PEV_DeRatingDownshiftSpeedFactor");
}
return null;
}
}
public double? PEV_DownshiftMinSpeedFactor
{
get
{
if (Body["PEV_DownshiftMinSpeedFactor"] != null) {
return Body.GetEx<double>("PEV_DownshiftMinSpeedFactor");
}
return null;
}
}
public TableData LoadStageShiftLines
{
get {
try {
return ReadTableData(Body["LoadStageShiftLines"]?.ToString(), "LoadStageShiftLines", false);
} catch (Exception) {
if (Body["DownshiftMaxAccelerationAT"] == null) {
return null;
}
return Body.GetEx<double>("DownshiftMaxAccelerationAT").SI<MeterPerSquareSecond>();
}
}
public IList<double> LoadStageThresholdsUp
{
get {
return (Body["LoadStageThresoldsUp"]?.ToString())?.Split(';').Select(x => x.ToDouble(0)).ToList();
return (Body["LoadStageThresholdsUp"]?.ToString())?.Split(';').Select(x => x.ToDouble(0)).ToList();
}
}
public IList<double> LoadStageThresholdsDown
{
get {
return (Body["LoadStageThresoldsDown"]?.ToString())?.Split(';').Select(x => x.ToDouble(0)).ToList();
return (Body["LoadStageThresholdsDown"]?.ToString())?.Split(';').Select(x => x.ToDouble(0)).ToList();
}
}
......
......@@ -124,25 +124,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
}
}
public virtual Second GearResidenceTime => null;
public virtual double? DnT99LHMin1 => null;
public virtual double? DnT99LHMin2 => null;
public virtual int? AllowedGearRangeUp => null;
public virtual int? AllowedGearRangeDown => null;
public virtual Second LookBackInterval => null;
public virtual Watt AvgCardanPowerThresholdPropulsion => null;
public virtual Watt CurrCardanPowerThresholdPropulsion => null;
public virtual double? TargetSpeedDeviationFactor => null;
public virtual double? EngineSpeedHighDriveOffFactor => null;
public virtual double? RatingFactorCurrentGear => null;
public virtual TableData AccelerationReserveLookup => null;
public virtual TableData ShareTorque99L => null;
public virtual TableData PredictionDurationLookup => null;
public virtual TableData ShareIdleLow => null;
public virtual TableData ShareEngineHigh => null;
public virtual string Source => null;
public virtual Second DriverAccelerationLookBackInterval => null;
public virtual MeterPerSquareSecond DriverAccelerationThresholdLow => null;
public virtual double? RatioEarlyUpshiftFC => null;
public virtual double? RatioEarlyDownshiftFC => null;
public int? AllowedGearRangeFC => null;
......@@ -152,24 +137,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
public PerSecond MinEngineSpeedPostUpshift => null;
public Second ATLookAheadTime => null;
public double[][] ShiftSpeedsTCToLocked => null;
public double? PEV_TargetSpeedBrakeNorm => null;
public double? PEV_DeRatingDownshiftSpeedFactor => null;
public double? PEV_DownshiftMinSpeedFactor => null;
public MeterPerSquareSecond DownshiftMaxAccelerationAT { get; }
public double? AccelerationFactor => null;
public virtual TableData LoadStageShiftLines => null;
public virtual IList<double> LoadStageThresholdsUp => null;
public virtual IList<double> LoadStageThresholdsDown => null;
public virtual Second PowershiftShiftTime
{
get {
return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_PowershiftShiftTime, required: false)
?.InnerText.ToDouble().SI<Second>() ?? 0.8.SI<Second>();
}
}
#endregion
#region Implementation of ITorqueConverterEngineeringShiftParameterInputData
......
......@@ -602,8 +602,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
RatioEarlyDownshiftFC = DeclarationData.GearboxTCU.RatioEarlyDownshiftFC / axleRatio,
AllowedGearRangeFC = gbx.Type.AutomaticTransmission()
? (gbx.Gears.Count > DeclarationData.GearboxTCU.ATSkipGearsThreshold
? DeclarationData.GearboxTCU.AllowedGearRangeFCATSkipGear
: DeclarationData.GearboxTCU.AllowedGearRangeFCAT)
? DeclarationData.GearboxTCU.AllowedGearRangeFCAPTSkipGear
: DeclarationData.GearboxTCU.AllowedGearRangeFCAPT)
: DeclarationData.GearboxTCU.AllowedGearRangeFCAMT,
VelocityDropFactor = DeclarationData.GearboxTCU.VelocityDropFactor,
AccelerationFactor = DeclarationData.GearboxTCU.AccelerationFactor,
......@@ -614,6 +614,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
LoadStageThresoldsDown = DeclarationData.GearboxTCU.LoadStageThresoldsDown,
ShiftSpeedsTCToLocked = DeclarationData.GearboxTCU.ShiftSpeedsTCToLocked
.Select(x => x.Select(y => y + engineIdlingSpeed.AsRPM).ToArray()).ToArray(),
DownshiftMaxAccelerationAT = DeclarationData.GearboxTCU.DownshiftMaxAccelerationAT,
};
return retVal;
......
......@@ -614,7 +614,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
RatioEarlyUpshiftFC = (gsInputData.RatioEarlyUpshiftFC ?? DeclarationData.GearboxTCU.RatioEarlyUpshiftFC) / axleRatio,
RatioEarlyDownshiftFC = (gsInputData.RatioEarlyDownshiftFC ?? DeclarationData.GearboxTCU.RatioEarlyDownshiftFC) / axleRatio,
AllowedGearRangeFC = gsInputData.AllowedGearRangeFC ?? (gbxType.AutomaticTransmission() ? DeclarationData.GearboxTCU.AllowedGearRangeFCAT : DeclarationData.GearboxTCU.AllowedGearRangeFCAMT),
AllowedGearRangeFC = gsInputData.AllowedGearRangeFC ?? (gbxType.AutomaticTransmission() ? DeclarationData.GearboxTCU.AllowedGearRangeFCAPT : DeclarationData.GearboxTCU.AllowedGearRangeFCAMT),
VelocityDropFactor = gsInputData.VeloictyDropFactor ?? DeclarationData.GearboxTCU.VelocityDropFactor,
AccelerationFactor = gsInputData.AccelerationFactor ?? DeclarationData.GearboxTCU.AccelerationFactor,
MinEngineSpeedPostUpshift = gsInputData.MinEngineSpeedPostUpshift ?? DeclarationData.GearboxTCU.MinEngineSpeedPostUpshift,
......@@ -623,6 +623,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
LoadStageThresoldsDown = gsInputData.LoadStageThresholdsDown?.ToArray() ?? DeclarationData.GearboxTCU.LoadStageThresoldsDown,
LoadStageThresoldsUp = gsInputData.LoadStageThresholdsUp?.ToArray() ?? DeclarationData.GearboxTCU.LoadStageThresholdsUp,
ShiftSpeedsTCToLocked = engineIdlingSpeed == null ? null : (gsInputData.ShiftSpeedsTCToLocked ?? DeclarationData.GearboxTCU.ShiftSpeedsTCToLocked).Select(x => x.Select(y => y + engineIdlingSpeed.AsRPM).ToArray()).ToArray(),
DownshiftMaxAccelerationAT = gsInputData.DownshiftMaxAccelerationAT ?? DeclarationData.GearboxTCU.DownshiftMaxAccelerationAT,
};
......
......@@ -197,7 +197,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
RatioEarlyUpshiftFC = (gsInputData.RatioEarlyUpshiftFC ?? DeclarationData.GearboxTCU.RatioEarlyUpshiftFC) / axleRatio,
RatioEarlyDownshiftFC = (gsInputData.RatioEarlyDownshiftFC ?? DeclarationData.GearboxTCU.RatioEarlyDownshiftFC) / axleRatio,
AllowedGearRangeFC = gsInputData.AllowedGearRangeFC ?? (gbxType.AutomaticTransmission() ? DeclarationData.GearboxTCU.AllowedGearRangeFCAT : DeclarationData.GearboxTCU.AllowedGearRangeFCAMT),
AllowedGearRangeFC = gsInputData.AllowedGearRangeFC ?? (gbxType.AutomaticTransmission() ? DeclarationData.GearboxTCU.AllowedGearRangeFCAPT : DeclarationData.GearboxTCU.AllowedGearRangeFCAMT),
VelocityDropFactor = gsInputData.VeloictyDropFactor ?? DeclarationData.GearboxTCU.VelocityDropFactor,
AccelerationFactor = gsInputData.AccelerationFactor ?? DeclarationData.GearboxTCU.AccelerationFactor,
MinEngineSpeedPostUpshift = gsInputData.MinEngineSpeedPostUpshift ?? DeclarationData.GearboxTCU.MinEngineSpeedPostUpshift,
......
......@@ -440,8 +440,8 @@ namespace TUGraz.VectoCore.Models.Declaration
public static double RatioEarlyDownshiftFC = 24;
public static int AllowedGearRangeFCAMT = 2;
public static int AllowedGearRangeFCAT = 1;
public static int AllowedGearRangeFCATSkipGear = 2;
public static int AllowedGearRangeFCAPT = 1;
public static int AllowedGearRangeFCAPTSkipGear = 2;
public static int ATSkipGearsThreshold = 6;
public static PerSecond MinEngineSpeedPostUpshift = 0.RPMtoRad();
......@@ -463,10 +463,11 @@ namespace TUGraz.VectoCore.Models.Declaration
public const double DownhillSlope = -5;
public const double UphillSlope = 5;
public static string DefaultShiftStrategy = "";
//public static string DefaultShiftStrategy = "";
public const double DragMarginFactor = 0.7;
public static bool Fallback_ATEcoRollReleaseLockupClutch = false;
public static MeterPerSquareSecond DownshiftMaxAccelerationAT = -5.SI<MeterPerSquareSecond>();
// TODO: MQ 2019-11-26 remove, once the parameters are fixed! make fields above read-only or const
......@@ -480,7 +481,6 @@ namespace TUGraz.VectoCore.Models.Declaration
var tcuData = JSONInputDataFactory.ReadShiftParameters(expectedFile, true);
if (tcuData.RatingFactorCurrentGear.HasValue) {
RatingFactorCurrentGear = tcuData.RatingFactorCurrentGear.Value;
RatingFactorCurrentGearAPT = tcuData.RatingFactorCurrentGear.Value;
}
if (tcuData.RatioEarlyDownshiftFC.HasValue) {
RatioEarlyDownshiftFC = tcuData.RatioEarlyDownshiftFC.Value;
......@@ -490,7 +490,6 @@ namespace TUGraz.VectoCore.Models.Declaration
}
if (tcuData.AllowedGearRangeFC.HasValue) {
AllowedGearRangeFCAMT = tcuData.AllowedGearRangeFC.Value;
AllowedGearRangeFCAT = tcuData.AllowedGearRangeFC.Value;
}
if (tcuData.VeloictyDropFactor.HasValue) {
VelocityDropFactor = tcuData.VeloictyDropFactor.Value;
......@@ -513,11 +512,28 @@ namespace TUGraz.VectoCore.Models.Declaration
if (tcuData.MinEngineSpeedPostUpshift != null) {
MinEngineSpeedPostUpshift = tcuData.MinEngineSpeedPostUpshift;
}
var tmp = tcuData as JSONFile;
if (tmp != null && tmp.Body["ShiftStrategy"] != null) {
DefaultShiftStrategy = tmp.Body["ShiftStrategy"].Value<string>();
if (tcuData.DownshiftMaxAccelerationAT != null) {
DownshiftMaxAccelerationAT = tcuData.DownshiftMaxAccelerationAT;
}
var raw = tcuData as JSONFile;
if (raw.Body["Rating_current_gear_APT"] != null) {
RatingFactorCurrentGearAPT = raw.Body.GetEx<double>("Rating_current_gear_APT");
}
if (raw.Body["AllowedGearRangeFCAPT"] != null) {
AllowedGearRangeFCAPT = raw.Body.GetEx<int>("AllowedGearRangeFCAPT");
}
if (raw.Body["AllowedGearRangeFCAPTSkipGear"] != null) {
AllowedGearRangeFCAPTSkipGear = raw.Body.GetEx<int>("AllowedGearRangeFCAPTSkipGear");
}
//var tmp = tcuData as JSONFile;
//if (tmp != null && tmp.Body["ShiftStrategy"] != null) {
// DefaultShiftStrategy = tmp.Body["ShiftStrategy"].Value<string>();
//}
}
}
......
......@@ -72,6 +72,6 @@ namespace TUGraz.VectoCore.Models.Simulation.Data {
public double[] LoadStageThresoldsUp { get; set; }
public double[] LoadStageThresoldsDown { get; set; }
public double[][] ShiftSpeedsTCToLocked { get; set; }
public MeterPerSquareSecond DownshiftMaxAccelerationAT { get; set; }
}
}
\ No newline at end of file
......@@ -520,12 +520,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
public static IShiftStrategy GetShiftStrategy(IVehicleContainer container)
{
var runData = container.RunData;
var shiftStrategy = runData.ShiftStrategy;
if (string.IsNullOrWhiteSpace(shiftStrategy)) {
shiftStrategy = DeclarationData.GearboxTCU.DefaultShiftStrategy;
}
//var shiftStrategy = runData.ShiftStrategy;
//if (string.IsNullOrWhiteSpace(shiftStrategy)) {
// shiftStrategy = DeclarationData.GearboxTCU.DefaultShiftStrategy;
//}
if (string.IsNullOrWhiteSpace(shiftStrategy)) {
//if (string.IsNullOrWhiteSpace(shiftStrategy)) {
switch (runData.GearboxData.Type) {
case GearboxType.AMT:
//if (runData.JobType == VectoSimulationJobType.ConventionalVehicle) {
......@@ -551,18 +551,18 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
throw new ArgumentOutOfRangeException("GearboxType",
$"Unknown Gearbox Type {runData.GearboxData.Type.ToString()}");
}
}
//}
var selected = ShiftStrategies.FirstOrDefault(x =>
x.Item1.Contains(runData.GearboxData.Type) &&
x.Item2.Equals(shiftStrategy, StringComparison.InvariantCultureIgnoreCase));
if (selected == null) {
throw new ArgumentOutOfRangeException("ShiftStrategy",
$"Unknown Shiftstrategy {shiftStrategy} for Gearbox Type {runData.GearboxData.Type.ToString()}");
}
//var selected = ShiftStrategies.FirstOrDefault(x =>
// x.Item1.Contains(runData.GearboxData.Type) &&
// x.Item2.Equals(shiftStrategy, StringComparison.InvariantCultureIgnoreCase));
//if (selected == null) {
// throw new ArgumentOutOfRangeException("ShiftStrategy",
// $"Unknown Shiftstrategy {shiftStrategy} for Gearbox Type {runData.GearboxData.Type.ToString()}");
//}
runData.ShiftStrategy = selected.Item3;
return selected.Item4(container);
//runData.ShiftStrategy = selected.Item3;
//return selected.Item4(container);
}
......
......@@ -359,6 +359,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
return null;
}
//var minAcceleration = VectoMath.Min(shiftStrategyParameters.DownshiftMaxAccelerationAT, ???);
//if (!(DataBus.DriverInfo.DrivingAction == DrivingAction.Accelerate &&
// DataBus.DriverInfo.DriverAcceleration.IsGreater(minAcceleration))) {
// return null;
//}
var minFcGear = currentGear;
var minFc = double.MaxValue;
var fcCurrent = double.NaN;
......

\ No newline at end of file
{
"Header": {
"FileVersion": 1
},
"Body": {
"Rating_current_gear": 0.97,
"Rating_current_gear_APT": 0.97,
"RatioEarlyDownshiftFC": 24,
"RatioEarlyUpshiftFC": 24,
"AllowedGearRangeFC": 2,
"AllowedGearRangeFCAPT": 1,
"AllowedGearRangeFCAPTSkipGear": 2,
"VelocityDropFactor": 1.0,
"AccelerationFactorNP98h": 0.5,
"ATLookAheadTime": 0.8,
"ShiftSpeedsTCLockup": [
[ 90.0, 120, 165, 90, 120, 165 ],
[ 90.0, 120, 165, 90, 120, 165 ],
[ 90.0, 120, 165, 90, 120, 165 ],
[ 90.0, 120, 165, 110, 140, 185 ],
[ 100.0, 130, 175, 120, 150, 195 ],
[ 110.0, 140, 185, 130, 160, 205 ]
],
"LoadStageThresholdsUp": "19.7; 36.34; 53.01; 69.68; 86.35",
"LoadStageThresholdsDown": "13.7; 30.34; 47.01; 63.68; 80.35",
"MinEngineSpeedPostUpshift": 0,
"DownshiftMaxAccelerationAT": -2
}
}
\ No newline at end of file
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