From f8d9fa0b451af3a0ec1d693476dbfc5662d765cf Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Tue, 13 Jun 2017 15:48:34 +0200 Subject: [PATCH] adding test for AT shift line computation --- .../Models/Declaration/DeclarationData.cs | 24 +++---- .../Models/Declaration/ShiftPolygonTest.cs | 64 +++++++++++++++++-- 2 files changed, 72 insertions(+), 16 deletions(-) diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs index 5bc9dcdff9..6944fad5cf 100644 --- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs @@ -194,7 +194,8 @@ namespace TUGraz.VectoCore.Models.Declaration IList<ITransmissionInputData> gears, CombustionEngineData engine, double axlegearRatio, Meter dynamicTyreRadius) { return type.AutomaticTransmission() - ? TorqueConverter.ComputeShiftPolygon(fullLoadCurve) // That's the same for all gears, so call the same method... + ? TorqueConverter.ComputeShiftPolygon(fullLoadCurve, gearIdx == 0, gearIdx >= gears.Count - 1) + // That's the same for all gears, so call the same method... : ComputeManualTransmissionShiftPolygon(gearIdx, fullLoadCurve, gears, engine, axlegearRatio, dynamicTyreRadius); } @@ -385,7 +386,7 @@ namespace TUGraz.VectoCore.Models.Declaration private static PerSecond UpshiftLowRPM = 900.RPMtoRad(); private static PerSecond UpshiftHighRPM = 1150.RPMtoRad(); - public static ShiftPolygon ComputeShiftPolygon(EngineFullLoadCurve fullLoadCurve) + public static ShiftPolygon ComputeShiftPolygon(EngineFullLoadCurve fullLoadCurve, bool first = false, bool last = false) { var maxDragTorque = fullLoadCurve.MaxDragTorque * 1.1; var maxTorque = fullLoadCurve.MaxTorque * 1.1; @@ -395,15 +396,16 @@ namespace TUGraz.VectoCore.Models.Declaration var edge = new Edge(p1, p2); var p2corr = new Point((maxTorque.Value() - edge.OffsetXY) / edge.SlopeXY, maxTorque.Value()); - return new ShiftPolygon( - new[] { - new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = DownshiftPRM, Torque = maxDragTorque }, - new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = DownshiftPRM, Torque = maxTorque } - }.ToList(), - new[] { p0, p1, p2corr }.Select( - pt => - new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = pt.X.SI<PerSecond>(), Torque = pt.Y.SI<NewtonMeter>() }) - .ToList()); + var downshift = new[] { + new ShiftPolygon.ShiftPolygonEntry { AngularSpeed = DownshiftPRM, Torque = maxDragTorque }, + new ShiftPolygon.ShiftPolygonEntry { AngularSpeed = DownshiftPRM, Torque = maxTorque } + }; + var upshift = new[] { p0, p1, p2corr }.Select( + pt => + new ShiftPolygon.ShiftPolygonEntry { AngularSpeed = pt.X.SI<PerSecond>(), Torque = pt.Y.SI<NewtonMeter>() }); + + return new ShiftPolygon(first ? new List<ShiftPolygon.ShiftPolygonEntry>() : downshift.ToList(), + last ? new List<ShiftPolygon.ShiftPolygonEntry>() : upshift.ToList()); } public static IEnumerable<TorqueConverterEntry> GetTorqueConverterDragCurve(double ratio) diff --git a/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs index 450a3e3862..c224911493 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs @@ -343,28 +343,81 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration var dao = new DeclarationDataAdapter(); var gearboxData = new JSONGearboxDataV5(JSONInputDataFactory.ReadFile(gearboxFile), gearboxFile); - var engineData = dao.CreateEngineData(new JSONEngineDataV3(JSONInputDataFactory.ReadFile(engineFile), engineFile), null, + var engineData = dao.CreateEngineData(new JSONEngineDataV3(JSONInputDataFactory.ReadFile(engineFile), engineFile), + null, gearboxData, new List<ITorqueLimitInputData>()); var shiftPolygons = new List<ShiftPolygon>(); for (var i = 0; i < gearboxData.Gears.Count; i++) { - shiftPolygons.Add(DeclarationData.Gearbox.ComputeShiftPolygon(GearboxType.AMT, i, engineData.FullLoadCurves[(uint)(i + 1)], + shiftPolygons.Add(DeclarationData.Gearbox.ComputeShiftPolygon(GearboxType.AMT, i, + engineData.FullLoadCurves[(uint)(i + 1)], gearboxData.Gears, engineData, axlegearRatio, rdyn)); } for (var i = 0; i < Math.Min(gearboxData.Gears.Count, expectedDownshift.Length); i++) { foreach (var tuple in expectedDownshift[i].Zip(shiftPolygons[i].Downshift, Tuple.Create)) { - Assert.AreEqual(tuple.Item1.X, tuple.Item2.AngularSpeed.Value(), 1e-3, "gear: {0} entry: {1}", i, tuple); + Assert.AreEqual(tuple.Item1.X, tuple.Item2.AngularSpeed.Value(), 1e-3, "gear: {0} entry: {1}", i + 1, tuple); Assert.AreEqual(tuple.Item1.Y, tuple.Item2.Torque.Value(), 1e-3, "gear: {0} entry: {1}", i + 1, tuple); } foreach (var tuple in expectedUpshift[i].Zip(shiftPolygons[i].Upshift, Tuple.Create)) { - Assert.AreEqual(tuple.Item1.X, tuple.Item2.AngularSpeed.Value(), 1e-3, "gear: {0} entry: {1}", i, tuple); + Assert.AreEqual(tuple.Item1.X, tuple.Item2.AngularSpeed.Value(), 1e-3, "gear: {0} entry: {1}", i + 1, tuple); Assert.AreEqual(tuple.Item1.Y, tuple.Item2.Torque.Value(), 1e-3, "gear: {0} entry: {1}", i + 1, tuple); } } + Assert.AreEqual(0, shiftPolygons.First().Downshift.Count); + Assert.AreEqual(0, shiftPolygons.Last().Upshift.Count); + } + + + [TestCase] + public void CompueShiftPolygonATDeclarationTest() + { + var engineFile = @"TestData\Components\40t_Long_Haul_Truck.veng"; + var gearboxFile = @"TestData\Components\40t_Long_Haul_Truck.vgbx"; + + var rdyn = 0.4882675.SI<Meter>(); + var axlegearRatio = 2.59; + + var expectedDownshift = new[] { + new Point(73.3038, -352), + new Point(73.3038, 2530), + }; + var expectedUpshift = new[] { + new Point(94.2478, -352), + new Point(94.2478, 0), + new Point(123.0457, 2530), + }; + + var dao = new DeclarationDataAdapter(); + var gearboxData = new JSONGearboxDataV5(JSONInputDataFactory.ReadFile(gearboxFile), gearboxFile); + var engineData = dao.CreateEngineData(new JSONEngineDataV3(JSONInputDataFactory.ReadFile(engineFile), engineFile), + null, + gearboxData, new List<ITorqueLimitInputData>()); + + var shiftPolygons = new List<ShiftPolygon>(); + for (var i = 0; i < gearboxData.Gears.Count; i++) { + shiftPolygons.Add(DeclarationData.Gearbox.ComputeShiftPolygon(GearboxType.ATSerial, i, + engineData.FullLoadCurves[(uint)(i + 1)], + gearboxData.Gears, + engineData, axlegearRatio, rdyn)); + } + + for (var i = 0; i < gearboxData.Gears.Count; i++) { + foreach (var tuple in expectedDownshift.Zip(shiftPolygons[i].Downshift, Tuple.Create)) { + Assert.AreEqual(tuple.Item1.X, tuple.Item2.AngularSpeed.Value(), 1e-3, "gear: {0} entry: {1}", i + 1, tuple); + Assert.AreEqual(tuple.Item1.Y, tuple.Item2.Torque.Value(), 1e-3, "gear: {0} entry: {1}", i + 1, tuple); + } + + foreach (var tuple in expectedUpshift.Zip(shiftPolygons[i].Upshift, Tuple.Create)) { + Assert.AreEqual(tuple.Item1.X, tuple.Item2.AngularSpeed.Value(), 1e-3, "gear: {0} entry: {1}", i + 1, tuple); + Assert.AreEqual(tuple.Item1.Y, tuple.Item2.Torque.Value(), 1e-3, "gear: {0} entry: {1}", i + 1, tuple); + } + } + + Assert.AreEqual(0, shiftPolygons.First().Downshift.Count); Assert.AreEqual(0, shiftPolygons.Last().Upshift.Count); } @@ -405,7 +458,8 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration var downshiftOrig = new List<List<Point>>(); var upshiftOrig = new List<List<Point>>(); for (var i = 0; i < gearboxData.Gears.Count; i++) { - shiftPolygons.Add(DeclarationData.Gearbox.ComputeShiftPolygon(GearboxType.AMT,i, fullLoadCurves[(uint)(i + 1)], gearboxData.Gears, + shiftPolygons.Add(DeclarationData.Gearbox.ComputeShiftPolygon(GearboxType.AMT, i, fullLoadCurves[(uint)(i + 1)], + gearboxData.Gears, engineData, axlegearRatio, rdyn)); List<Point> tmp1, tmp2, tmp3; -- GitLab