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

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

corrected basic Gearbox Request Test

parent a88e1f4f
No related branches found
No related tags found
No related merge requests found
......@@ -113,18 +113,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
public NewtonMeter GearboxInTorque(PerSecond inAngularVelocity, NewtonMeter outTorque)
{
try {
var limitedAngularVelocity = VectoMath.Limit(inAngularVelocity, _minSpeed, _maxSpeed).Value();
var limitedTorque = VectoMath.Limit(outTorque, _minTorque, _maxTorque).Value();
//var limitedAngularVelocity = VectoMath.Limit(inAngularVelocity, _minSpeed, _maxSpeed).Value();
//var limitedTorque = VectoMath.Limit(outTorque, _minTorque, _maxTorque).Value();
var inTorque = _lossMap.Interpolate(limitedAngularVelocity, limitedTorque).SI<NewtonMeter>();
Logger<TransmissionLossMap>().Debug("GearboxLoss: {0}", inTorque - outTorque);
var inTorque = _lossMap.Interpolate(inAngularVelocity.Value(), outTorque.Value()).SI<NewtonMeter>();
Log.Debug("GearboxLoss: {0}", inTorque - outTorque);
// Limit input torque to a maximum value without losses (just torque/ratio)
return VectoMath.Max(inTorque, outTorque / _ratio);
} catch (VectoException) {
Logger<TransmissionLossMap>()
.Error("Failed to interpolate in TransmissionLossMap. angularVelocity: {0}, torque: {1}", inAngularVelocity,
outTorque);
Log.Error("Failed to interpolate in TransmissionLossMap. angularVelocity: {0}, torque: {1}", inAngularVelocity,
outTorque);
return outTorque / _ratio;
}
}
......
......@@ -229,25 +229,22 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
Log.Debug("Gearbox engaged gear {0}", Gear);
}
PerSecond inEngineSpeed;
var inEngineSpeed = outEngineSpeed * Data.Gears[Gear].Ratio;
NewtonMeter inTorque;
if (outEngineSpeed.IsEqual(0)) {
inEngineSpeed = outEngineSpeed;
inTorque = outTorque;
inTorque = outTorque / Data.Gears[Gear].Ratio;
} else {
inEngineSpeed = outEngineSpeed * Data.Gears[Gear].Ratio;
inTorque = Data.Gears[Gear].LossMap.GearboxInTorque(inEngineSpeed, outTorque);
_powerLoss = inTorque * inEngineSpeed - outTorque * outEngineSpeed;
var torqueLossInertia = !inEngineSpeed.IsEqual(0)
? Formulas.InertiaPower(inEngineSpeed, _previousInEnginespeed, Data.Inertia, dt) / inEngineSpeed
: 0.SI<NewtonMeter>();
_previousInEnginespeed = inEngineSpeed;
inTorque += torqueLossInertia;
_powerLossInertia = torqueLossInertia * inEngineSpeed;
}
_powerLoss = inTorque * inEngineSpeed - outTorque * outEngineSpeed;
var torqueLossInertia = !inEngineSpeed.IsEqual(0)
? Formulas.InertiaPower(inEngineSpeed, _previousInEnginespeed, Data.Inertia, dt) / inEngineSpeed
: 0.SI<NewtonMeter>();
_previousInEnginespeed = inEngineSpeed;
inTorque += torqueLossInertia;
_powerLossInertia = torqueLossInertia * inEngineSpeed;
if (dryRun) {
var dryRunResponse = NextComponent.Request(absTime, dt, inTorque, inEngineSpeed, true);
......
......@@ -198,26 +198,24 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
// the first element 0.0 is just a placeholder for axlegear, not used in this test
var expected = new[] {
new { gear = 1, t = -1000, n = 800, loss = 29.108, responseType = typeof(ResponseSuccess) },
new { gear = 2, t = -1000, n = 800, loss = 29.108, responseType = typeof(ResponseSuccess) },
new { gear = 7, t = -1000, n = 1200, loss = 16.132, responseType = typeof(ResponseSuccess) },
new { gear = 7, t = 850, n = 1200, loss = 15.382, responseType = typeof(ResponseSuccess) },
new { gear = 7, t = 2450, n = 1200, loss = 23.382, responseType = typeof(ResponseSuccess) },
new { gear = 1, t = 50, n = 800, loss = 10.108, responseType = typeof(ResponseSuccess) },
new { gear = 1, t = -1000, n = 600, loss = 28.096, responseType = typeof(ResponseSuccess) },
new { gear = 2, t = -1000, n = 600, loss = 28.096, responseType = typeof(ResponseSuccess) },
new { gear = 7, t = -1000, n = 600, loss = 13.096, responseType = typeof(ResponseSuccess) },
new { gear = 7, t = 850, n = 600, loss = 12.346, responseType = typeof(ResponseSuccess) },
new { gear = 7, t = 2050, n = 1200, loss = 21.382, responseType = typeof(ResponseSuccess) },
new { gear = 1, t = 50, n = 600, loss = 9.096, responseType = typeof(ResponseSuccess) },
new { gear = 1, t = 2450, n = 800, loss = 58.11, responseType = typeof(ResponseSuccess) },
new { gear = 1, t = 850, n = 800, loss = 26.11, responseType = typeof(ResponseSuccess) },
new { gear = 1, t = 850, n = 0, loss = 22.06, responseType = typeof(ResponseSuccess) },
new { gear = 1, t = 850, n = 0, loss = 0.0, responseType = typeof(ResponseSuccess) },
new { gear = 1, t = 850, n = 200, loss = 23.07, responseType = typeof(ResponseSuccess) },
new { gear = 2, t = 50, n = 800, loss = 10.108, responseType = typeof(ResponseSuccess) },
new { gear = 2, t = 2450, n = 800, loss = 58.11, responseType = typeof(ResponseGearShift) },
new { gear = 2, t = 50, n = 600, loss = 9.096, responseType = typeof(ResponseSuccess) },
new { gear = 2, t = 2050, n = 1200, loss = 52.132, responseType = typeof(ResponseSuccess) },
new { gear = 2, t = 850, n = 800, loss = 26.11, responseType = typeof(ResponseSuccess) },
new { gear = 2, t = 850, n = 0, loss = 22.06, responseType = typeof(ResponseGearShift) },
new { gear = 2, t = 850, n = 400, loss = 11.334, responseType = typeof(ResponseGearShift) },
new { gear = 2, t = 850, n = 2000, loss = 32.18, responseType = typeof(ResponseGearShift) },
new { gear = 7, t = -1000, n = 0, loss = 10.06, responseType = typeof(ResponseGearShift) },
new { gear = 7, t = 850, n = 0, loss = 9.31, responseType = typeof(ResponseGearShift) },
new { gear = 7, t = 850, n = 2000, loss = 19.43, responseType = typeof(ResponseGearShift) },
new { gear = 7, t = 2450, n = 0, loss = 17.31, responseType = typeof(ResponseGearShift) },
new { gear = 2, t = 850, n = 0, loss = 0.0, responseType = typeof(ResponseSuccess) },
new { gear = 2, t = 850, n = 600, loss = 25.096, responseType = typeof(ResponseSuccess) },
new { gear = 7, t = -1000, n = 0, loss = 0.0, responseType = typeof(ResponseSuccess) },
new { gear = 7, t = 850, n = 0, loss = 0.0, responseType = typeof(ResponseSuccess) },
new { gear = 7, t = 2450, n = 0, loss = 0.0, responseType = typeof(ResponseSuccess) },
};
var absTime = 0.SI<Second>();
......
......@@ -29,8 +29,8 @@ namespace TUGraz.VectoCore.Tests.Utils
Source = this,
GearboxPowerRequest = torque * angularVelocity,
EnginePowerRequest = torque * angularVelocity,
DeltaFullLoad = -100000.SI<Watt>(),
DeltaDragLoad = -500.SI<Watt>()
DeltaFullLoad = (torque - 2300.SI<NewtonMeter>()) * angularVelocity,
DeltaDragLoad = (torque - -100.SI<NewtonMeter>()) * angularVelocity
};
}
......
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