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

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

adding test for AT shift line computation

parent 25de5cfe
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......
......@@ -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;
......
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