Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit c8aaaea8 authored by Michael KRISPER's avatar Michael KRISPER
Browse files

Refactored Gear Disabling Feature

parent ed47b9af
No related branches found
No related tags found
No related merge requests found
......@@ -356,7 +356,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
throw new VectoSimulationException("Unsupported gearbox type: {0}!", retVal.Type);
}
var gearsInput = gearbox.Gears;
var gearsInput = FilterDisabledGears(inputData, gearbox);
if (gearsInput.Count < 1) {
throw new VectoSimulationException(
"At least one Gear-Entry must be defined in Gearbox!");
......@@ -364,8 +365,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
SetDeclarationData(retVal);
var gearDifferenceRatio = gearbox.Type.AutomaticTransmission() && gearbox.Gears.Count > 2
? gearbox.Gears[0].Ratio / gearbox.Gears[1].Ratio
var gearDifferenceRatio = gearbox.Type.AutomaticTransmission() && gearsInput.Count > 2
? gearsInput[0].Ratio / gearsInput[1].Ratio
: 1.0;
var gears = new Dictionary<uint, GearData>();
......@@ -379,7 +380,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
var shiftPolygon = shiftPolygonCalc != null
? shiftPolygonCalc.ComputeDeclarationShiftPolygon(
gearbox.Type, (int)i, engine.FullLoadCurves[i + 1], gearbox.Gears, engine, axlegearRatio, dynamicTyreRadius)
gearbox.Type, (int)i, engine.FullLoadCurves[i + 1], gearsInput, engine, axlegearRatio, dynamicTyreRadius)
: DeclarationData.Gearbox.ComputeShiftPolygon(
gearbox.Type, (int)i, engine.FullLoadCurves[i + 1],
gearsInput, engine,
......@@ -397,18 +398,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
gears.Add(i + 1, gearData);
}
// remove disabled gears (only the last or last two gears may be removed)
if (inputData.TorqueLimits != null) {
var toRemove = (from tqLimit in inputData.TorqueLimits where tqLimit.Gear >= gears.Keys.Max() - 1 && tqLimit.MaxTorque.IsEqual(0) select (uint)tqLimit.Gear).ToList();
if (toRemove.Count > 0 && toRemove.Min() <= gears.Count - toRemove.Count) {
throw new VectoException("Only the last 1 or 2 gears can be disabled. Disabling gear {0} for a {1}-speed gearbox is not allowed.", toRemove.Min(), gears.Count);
}
foreach (var entry in toRemove) {
gears.Remove(entry);
}
}
retVal.Gears = gears;
if (retVal.Type.AutomaticTransmission()) {
var ratio = double.IsNaN(retVal.Gears[1].Ratio) ? 1 : retVal.Gears[1].TorqueConverterRatio / retVal.Gears[1].Ratio;
......@@ -442,6 +431,30 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
return retVal;
}
/// <summary>
/// Filters the gears based on disabling rule: If the last (or the second last) torque limit on vehicle level is 0, then the gear should be disabled.
/// </summary>
/// <remarks>VECTO-1628</remarks>
private static IList<ITransmissionInputData> FilterDisabledGears(IVehicleDeclarationInputData inputData, IGearboxDeclarationInputData gearbox) {
var gearsInput = gearbox.Gears;
// remove disabled gears (only the last or last two gears may be removed)
if (inputData.TorqueLimits != null) {
var toRemove = inputData.TorqueLimits
.Where(tqLimit => tqLimit.Gear >= gearsInput.Max(g => g.Gear) - 1 && tqLimit.MaxTorque.IsEqual(0))
.Select(tqLimit => gearsInput.First(g => g.Gear == tqLimit.Gear)).ToList();
if (toRemove.Count > 0 && toRemove.Min(g => g.Gear) <= gearsInput.Count - toRemove.Count) {
throw new VectoException("Only the last 1 or 2 gears can be disabled. Disabling gear {0} for a {1}-speed gearbox is not allowed.", toRemove.Min(), gearsInput.Count);
}
foreach (var entry in toRemove) {
gearsInput.Remove(entry);
}
}
return gearsInput;
}
protected virtual TorqueConverterData CreateTorqueConverterData(GearboxType gearboxType,
ITorqueConverterDeclarationInputData torqueConverter, double ratio,
CombustionEngineData componentsEngineInputData)
......
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