Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

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

Merge pull request #581 in VECTO/vecto-sim from...

Merge pull request #581 in VECTO/vecto-sim from ~EMQUARIMA/vecto-sim:bugfix/VECTO-642-vecto-bug-secondary-retarder-losses to develop

* commit '39c52ca6':
  corrected retarder model: torque loss has to be multiplied with the step-up ratio (not divided!)
  corrected retarder testcases: retarder losses are higher when retarder ratio > 1!
  adapt clutch test - slipping clutch at low speeds allowed
parents bbc764b1 39c52ca6
No related branches found
No related tags found
No related merge requests found
......@@ -64,7 +64,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
public IResponse Initialize(NewtonMeter torque, PerSecond angularVelocity)
{
var retarderTorqueLoss = _lossMap.GetTorqueLoss(angularVelocity * _ratio) / _ratio;
var retarderTorqueLoss = _lossMap.GetTorqueLoss(angularVelocity * _ratio) * _ratio;
PreviousState.SetState(torque + retarderTorqueLoss, angularVelocity, torque, angularVelocity);
return NextComponent.Initialize(PreviousState.InTorque, PreviousState.InAngularVelocity);
}
......@@ -75,7 +75,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
return NextComponent.Request(absTime, dt, torque, null, dryRun);
}
var avgAngularSpeed = (PreviousState.InAngularVelocity + angularVelocity) / 2.0;
var retarderTorqueLoss = _lossMap.GetTorqueLoss(avgAngularSpeed * _ratio) / _ratio;
var retarderTorqueLoss = _lossMap.GetTorqueLoss(avgAngularSpeed * _ratio) * _ratio;
CurrentState.SetState(torque + retarderTorqueLoss, angularVelocity, torque, angularVelocity);
return NextComponent.Request(absTime, dt, CurrentState.InTorque, CurrentState.InAngularVelocity, dryRun);
}
......
......@@ -59,7 +59,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
[Test,
// clutch slipping
TestCase(DrivingBehavior.Driving, 100, 0, 3, 0, 65.6889),
TestCase(DrivingBehavior.Driving, 100, 5, 1, 7.6116, 65.6889), // would cause clutch losses!
TestCase(DrivingBehavior.Driving, 100, 5, 1, 100, 65.6889), // would cause clutch losses!
TestCase(DrivingBehavior.Braking, 100, 80, 1, 100, 80),
// clutch opened - would cause neg. clutch losses (which is not possible), torque is adapted
TestCase(DrivingBehavior.Halted, 100, 30, 0, 51.1569, 58.643062),
......
......@@ -29,6 +29,7 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/
using System.IO;
using NUnit.Framework;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.Models;
......@@ -47,8 +48,16 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
private const string RetarderLossMapFile = @"TestData\Components\Retarder.vrlm";
private const double Delta = 0.0001;
[TestCase]
public void RetarderBasicTest()
[OneTimeSetUp]
public void RunBeforeAnyTests()
{
Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
}
[TestCase(0, 10, 10.002),
TestCase(100, 1000, 12)
]
public void RetarderBasicTest(double cardanTorque, double cardanSpeed, double expectedRetarderLoss)
{
var vehicle = new VehicleContainer(ExecutionMode.Declaration);
var retarderData = RetarderLossMapReader.ReadFromFile(RetarderLossMapFile);
......@@ -63,19 +72,34 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
var dt = 0.SI<Second>();
// --------
outPort.Initialize(0.SI<NewtonMeter>(), 10.RPMtoRad());
outPort.Request(absTime, dt, 0.SI<NewtonMeter>(), 10.RPMtoRad());
outPort.Initialize(cardanTorque.SI<NewtonMeter>(), cardanSpeed.RPMtoRad());
outPort.Request(absTime, dt, cardanTorque.SI<NewtonMeter>(), cardanSpeed.RPMtoRad());
Assert.AreEqual(10.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
Assert.AreEqual(10.002, nextRequest.Torque.Value(), Delta);
Assert.AreEqual(cardanSpeed.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
Assert.AreEqual(cardanTorque + expectedRetarderLoss, nextRequest.Torque.Value(), Delta);
// --------
outPort.Initialize(100.SI<NewtonMeter>(), 1000.RPMtoRad());
outPort.Request(absTime, dt, 100.SI<NewtonMeter>(), 1000.RPMtoRad());
//// --------
//outPort.Initialize(100.SI<NewtonMeter>(), 1000.RPMtoRad());
//outPort.Request(absTime, dt, 100.SI<NewtonMeter>(), 1000.RPMtoRad());
//Assert.AreEqual(1000.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
//Assert.AreEqual(112, nextRequest.Torque.Value(), Delta);
}
[TestCase]
public void RetarderSubsequentRequestTest()
{
var vehicle = new VehicleContainer(ExecutionMode.Declaration);
var retarderData = RetarderLossMapReader.ReadFromFile(RetarderLossMapFile);
var retarder = new Retarder(vehicle, retarderData, 1.0);
var nextRequest = new MockTnOutPort();
Assert.AreEqual(1000.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
Assert.AreEqual(112, nextRequest.Torque.Value(), Delta);
retarder.InPort().Connect(nextRequest);
var outPort = retarder.OutPort();
var absTime = 0.SI<Second>();
var dt = 0.SI<Second>();
// --------
outPort.Initialize(50.SI<NewtonMeter>(), 650.RPMtoRad());
outPort.Request(absTime, dt, 50.SI<NewtonMeter>(), 1550.RPMtoRad());
......@@ -92,8 +116,11 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
Assert.AreEqual(50 + 12, nextRequest.Torque.Value(), Delta);
}
[TestCase]
public void RetarderRatioTest()
[TestCase(0, 10, 20.008),
TestCase(100, 1000, 36),
TestCase(50, 1550, 55.56) // extrapolated
]
public void RetarderRatioTest(double cardanTorque, double cardanSpeed, double expectedRetarderLoss)
{
var vehicle = new VehicleContainer(ExecutionMode.Engineering);
var retarderData = RetarderLossMapReader.ReadFromFile(RetarderLossMapFile);
......@@ -107,26 +134,12 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
var absTime = 0.SI<Second>();
var dt = 0.SI<Second>();
// --------
outPort.Initialize(0.SI<NewtonMeter>(), 10.RPMtoRad());
outPort.Request(absTime, dt, 0.SI<NewtonMeter>(), 10.RPMtoRad());
Assert.AreEqual(10.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
Assert.AreEqual(5.002, nextRequest.Torque.Value(), Delta);
// --------
outPort.Initialize(100.SI<NewtonMeter>(), 1000.RPMtoRad());
outPort.Request(absTime, dt, 100.SI<NewtonMeter>(), 1000.RPMtoRad());
outPort.Initialize(cardanTorque.SI<NewtonMeter>(), cardanSpeed.RPMtoRad());
outPort.Request(absTime, dt, cardanTorque.SI<NewtonMeter>(), cardanSpeed.RPMtoRad());
Assert.AreEqual(1000.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
Assert.AreEqual(109, nextRequest.Torque.Value(), Delta);
Assert.AreEqual(cardanSpeed.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
Assert.AreEqual(cardanTorque + expectedRetarderLoss, nextRequest.Torque.Value(), Delta);
// --------
outPort.Initialize(50.SI<NewtonMeter>(), 1550.RPMtoRad());
outPort.Request(absTime, dt, 50.SI<NewtonMeter>(), 1550.RPMtoRad());
Assert.AreEqual(1550.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
Assert.AreEqual(50 + 13.89, nextRequest.Torque.Value(), Delta); // extrapolated
}
[TestCase]
......@@ -177,7 +190,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
outPort.Request(absTime, dt, 100.SI<NewtonMeter>(), 125.RPMtoRad());
Assert.AreEqual(125.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
Assert.AreEqual(100 + 5.065, nextRequest.Torque.Value(), Delta);
Assert.AreEqual(100 + 20.26, nextRequest.Torque.Value(), Delta);
}
}
}
\ No newline at end of file
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