Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

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

tests for gearbox

parent 39e56feb
Branches
Tags
No related merge requests found
......@@ -186,7 +186,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper
retVal.AxleGearData = new GearData { LossMap = lossMap, Ratio = axleGear.Ratio, TorqueConverterActive = false };
retVal.Gears = gearbox.Body.Gears.Skip(1).Select((gear, i) => {
lossMap = TransmissionLossMap.ReadFromFile(Path.Combine(gearbox.BasePath, axleGear.LossMap), axleGear.Ratio);
lossMap = TransmissionLossMap.ReadFromFile(Path.Combine(gearbox.BasePath, gear.LossMap), gear.Ratio);
EngineFullLoadCurve fullLoadCurve;
if (string.IsNullOrWhiteSpace(gear.FullLoadCurve) || gear.FullLoadCurve == "<NOFILE>") {
fullLoadCurve = engine.FullLoadCurve;
......@@ -196,7 +196,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper
}
var shiftPolygon = DeclarationData.Gearbox.ComputeShiftPolygon(fullLoadCurve, engine.IdleSpeed);
return new KeyValuePair<uint, GearData>((uint)i,
return new KeyValuePair<uint, GearData>((uint)i + 1,
new GearData { LossMap = lossMap, ShiftPolygon = shiftPolygon, Ratio = gear.Ratio, TorqueConverterActive = false });
}).ToDictionary(kv => kv.Key, kv => kv.Value);
return retVal;
......
......@@ -55,6 +55,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
get { return Data.Gears[_gear]; }
}
internal uint Gear
{
get { return _gear; }
set { _gear = value; }
}
IResponse ITnOutPort.Request(Second absTime, Second dt, NewtonMeter torque, PerSecond engineSpeed, bool dryRun)
{
......@@ -64,10 +70,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
// todo check shiftpolygon for shifting
engineSpeed *= CurrentGear.Ratio;
torque = CurrentGear.LossMap.GearboxInTorque(engineSpeed, torque);
var inEngineSpeed = engineSpeed * CurrentGear.Ratio;
var inTorque = CurrentGear.LossMap.GearboxInTorque(inEngineSpeed, torque);
return Next.Request(absTime, dt, torque, engineSpeed);
return Next.Request(absTime, dt, inTorque, inEngineSpeed);
}
public IResponse Initialize(NewtonMeter torque, PerSecond engineSpeed)
......
......@@ -326,6 +326,11 @@ namespace TUGraz.VectoCore.Utils
[JsonConstructor]
private PerSecond(double val) : base(new SI(val).Per.Second) {}
public SI RoundsPerMinute
{
get { return ConvertTo().Rounds.Per.Minute; }
}
}
/// <summary>
......@@ -843,6 +848,10 @@ namespace TUGraz.VectoCore.Utils
numerator.Add(Unit.k);
numerator.Add(Unit.g);
break;
case Unit.min:
factor *= 60;
numerator.Add(Unit.s);
break;
default:
numerator.Add(unit);
break;
......
......@@ -67,7 +67,6 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
[TestMethod]
public void Gearbox_Request()
{
var container = new VehicleContainer();
var gearboxData = DeclarationModeSimulationDataReader.CreateGearboxDataFromFile(GearboxDataFile, EngineDataFile);
var gearbox = new Gearbox(container, gearboxData);
......@@ -75,25 +74,64 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
var port = new MockTnOutPort();
gearbox.InPort().Connect(port);
var absTime = 0.SI<Second>();
var dt = 0.5.SI<Second>();
var torque = 500.SI<NewtonMeter>();
var angularVelocity = 1400.RPMtoRad();
var ratios = new[] { 0.0, 6.38, 4.63, 3.44, 2.59, 1.86, 1.35, 1, 0.76 };
// the first element 0.0 is just a placeholder for axlegear, not used in this test
var ratio = 1; // todo: set correct ratio
var expectedN = angularVelocity * ratio;
var expectedT = 500.SI<NewtonMeter>(); //todo: set correct value
var absTime = 0.SI<Second>();
var dt = 1.SI<Second>();
var expected = new[] {
new { gear = 1, t = 50, n = 800, loss = 10.108 },
new { gear = 1, t = 2450, n = 800, loss = 58.11 },
new { gear = 1, t = -1000, n = 800, loss = 29.11 },
new { gear = 1, t = 850, n = 800, loss = 26.11 },
new { gear = 1, t = 850, n = 0, loss = 22.06 },
new { gear = 1, t = 850, n = 200, loss = 23.07 },
new { gear = 1, t = 850, n = 2000, loss = 32.18 },
new { gear = 2, t = 50, n = 800, loss = 10.108 },
new { gear = 2, t = 2450, n = 800, loss = 58.11 },
new { gear = 2, t = -1000, n = 800, loss = 29.11 },
new { gear = 2, t = 850, n = 800, loss = 26.11 },
new { gear = 2, t = 850, n = 0, loss = 22.06 },
new { gear = 2, t = 850, n = 200, loss = 23.07 },
new { gear = 2, t = 850, n = 2000, loss = 32.18 },
new { gear = 7, t = -1000, n = 0, loss = 10.06 },
new { gear = 7, t = -1000, n = 1200, loss = 16.132 },
new { gear = 7, t = -1000, n = 2000, loss = 20.18 },
new { gear = 7, t = 850, n = 0, loss = 9.31 },
new { gear = 7, t = 850, n = 1200, loss = 15.382 },
new { gear = 7, t = 850, n = 2000, loss = 19.43 },
new { gear = 7, t = 2450, n = 0, loss = 17.31 },
new { gear = 7, t = 2450, n = 1200, loss = 23.382 },
new { gear = 7, t = 2450, n = 2000, loss = 27.43 },
};
foreach (var exp in expected) {
var expectedT = exp.t.SI<NewtonMeter>();
var expectedN = exp.n.RPMtoRad();
var expectedLoss = exp.loss.SI<NewtonMeter>();
var torque = (expectedT - expectedLoss) * ratios[exp.gear];
var angularVelocity = expectedN / ratios[exp.gear];
gearbox.Gear = (uint)exp.gear;
gearbox.OutPort().Request(absTime, dt, torque, angularVelocity);
AssertHelper.AreRelativeEqual(absTime, port.AbsTime);
AssertHelper.AreRelativeEqual(dt, port.Dt);
AssertHelper.AreRelativeEqual(expectedN, port.AngularVelocity);
AssertHelper.AreRelativeEqual(expectedT, port.Torque);
}
}
// todo check for different ranges and gears
// todo set initial gear
[TestMethod]
public void Gearbox_LossMapInterpolationFail()
{
var gearboxData = DeclarationModeSimulationDataReader.CreateGearboxDataFromFile(GearboxDataFile, EngineDataFile);
var gearbox = new Gearbox(new VehicleContainer(), gearboxData);
Assert.Inconclusive();
AssertHelper.Exception<VectoException>(
() => gearbox.OutPort().Request(0.SI<Second>(), 1.SI<Second>(), 5000.SI<NewtonMeter>(), 10000.SI<PerSecond>()),
"Failed to interpolate in TransmissionLossMap. angularVelocity: 63800.0000 [1/s], torque: 5000.0000 [Nm]");
}
[TestMethod]
......
......@@ -59,8 +59,8 @@ namespace TUGraz.VectoCore.Tests.Utils
var ratio = expected == 0 ? Math.Abs(actual) : Math.Abs(actual / expected - 1);
Assert.IsTrue(ratio < toleranceFactor, string.Format(CultureInfo.InvariantCulture,
"Given values are not equal. Expected: {0}, Actual: {1}, Difference: {3} (Tolerance: {2}){4}",
expected, actual, toleranceFactor * (expected == 0 ? 1 : expected), expected - actual, message));
"Given values are not equal. Expected: {0}, Actual: {1}, Difference: {3} (Tolerance Factor: {2}){4}",
expected, actual, toleranceFactor, expected - actual, message));
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment