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

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

EngineeringDataAdapter: Implemented disabling gears VECTO-1628

parent 50cecc0e
No related branches found
No related tags found
No related merge requests found
......@@ -256,7 +256,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
/// 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(IList<ITransmissionInputData> gears, Dictionary<int, ITorqueLimitInputData> limits) {
internal static IList<ITransmissionInputData> FilterDisabledGears(IList<ITransmissionInputData> gears, Dictionary<int, ITorqueLimitInputData> limits) {
var lastGear = gears.Last().Gear;
if (limits.ContainsKey(lastGear) && limits[lastGear].MaxTorque.IsEqual(0)) {
gears.Remove(gears.Last());
......@@ -272,7 +272,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
if (l.Value.MaxTorque.IsEqual(0))
throw new VectoException($"Vehicle TorqueLimits: MaxTorque for Gear {l.Key} must not be 0.");
}
return gears;
}
......
......@@ -160,7 +160,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
{
var engine = vehicle.Components.EngineInputData;
var gbx = vehicle.Components.GearboxInputData;
var torqueLimits = vehicle.TorqueLimits;
var torqueConverter = vehicle.Components.TorqueConverterInputData;
var tankSystem = vehicle.TankSystem;
......@@ -182,13 +181,17 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
retVal.Inertia = engine.Inertia +
(gbx != null && gbx.Type.AutomaticTransmission() ? torqueConverter.Inertia : 0.SI<KilogramSquareMeter>());
retVal.EngineStartTime = engine.EngineStartTime ?? DeclarationData.Engine.DefaultEngineStartTime;
var limits = torqueLimits.ToDictionary(e => e.Gear);
var numGears = gbx == null ? 0 : gbx.Gears.Count;
var limits = vehicle.TorqueLimits.ToDictionary(e => e.Gear);
IList<ITransmissionInputData> gears = null;
if (gbx != null){
gears = DeclarationDataAdapter.FilterDisabledGears(gbx.Gears, limits);
}
var numGears = gbx == null ? 0 : gears.Count;
var fullLoadCurves = new Dictionary<uint, EngineFullLoadCurve>(numGears + 1);
fullLoadCurves[0] = FullLoadCurveReader.Create(engine.EngineModes.First().FullLoadCurve);
fullLoadCurves[0].EngineData = retVal;
if (gbx != null) {
foreach (var gear in gbx.Gears) {
foreach (var gear in gears) {
var maxTorque = VectoMath.Min(gear.MaxTorque, limits.ContainsKey(gear.Gear) ? limits[gear.Gear].MaxTorque : null);
fullLoadCurves[(uint)gear.Gear] = IntersectFullLoadCurves(fullLoadCurves[0], maxTorque);
}
......@@ -278,15 +281,20 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
}
retVal.ATEcoRollReleaseLockupClutch = adas != null && adas.EcoRoll != EcoRollType.None && retVal.Type.AutomaticTransmission() ? adas.ATEcoRollReleaseLockupClutch.Value : false;
//var gears = gearbox.Gears;
if (gearbox.Gears.Count < 2) {
var limits = inputData.JobInputData.Vehicle.TorqueLimits.ToDictionary(e => e.Gear);
var gearsInput = DeclarationDataAdapter.FilterDisabledGears(gearbox.Gears, limits);
if (gearsInput.Count < 2) {
throw new VectoSimulationException("At least two Gear-Entries must be defined in Gearbox!");
}
if (gearsInput.Count < 2) {
throw new VectoSimulationException("At least two Gear-Entries must be defined in Gearbox!");
}
SetEngineeringData(gearbox, gearshiftData, 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>();
......@@ -296,19 +304,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
? ShiftPolygonReader.Create(torqueConverter.ShiftPolygon)
: DeclarationData.TorqueConverter.ComputeShiftPolygon(engineData.FullLoadCurves[0]);
}
for (uint i = 0; i < gearbox.Gears.Count; i++) {
var gear = gearbox.Gears[(int)i];
for (uint i = 0; i < gearsInput.Count; i++) {
var gear = gearsInput[(int)i];
var lossMap = CreateGearLossMap(gear, i, true, VehicleCategory.Unknown, gearbox.Type);
var shiftPolygon = gear.ShiftPolygon != null && gear.ShiftPolygon.SourceType != DataSourceType.Missing
? ShiftPolygonReader.Create(gear.ShiftPolygon)
: shiftPolygonCalc != null
? shiftPolygonCalc.ComputeDeclarationShiftPolygon(
gearbox.Type, (int)i, engineData?.FullLoadCurves[i + 1], gearbox.Gears,
gearbox.Type, (int)i, engineData?.FullLoadCurves[i + 1], gearsInput,
engineData,
axlegearRatio, dynamicTyreRadius)
: DeclarationData.Gearbox.ComputeShiftPolygon(
gearbox.Type, (int)i, engineData?.FullLoadCurves[i + 1], gearbox.Gears,
gearbox.Type, (int)i, engineData?.FullLoadCurves[i + 1], gearsInput,
engineData,
axlegearRatio, dynamicTyreRadius);
var gearData = new GearData {
......
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