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

Skip to content
Snippets Groups Projects
Commit 334498a5 authored by Markus QUARITSCH's avatar Markus QUARITSCH
Browse files

fix testcases: mock gearbox has to return geearinfo, measured speed / pwheel...

fix testcases: mock gearbox has to return geearinfo, measured speed / pwheel mode cope with EngineSpeedTooHigh response
parent d68108f3
No related branches found
No related tags found
No related merge requests found
...@@ -181,8 +181,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -181,8 +181,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
var avgEngineSpeed = (PreviousState.EngineSpeed + angularVelocity) / 2.0; var avgEngineSpeed = (PreviousState.EngineSpeed + angularVelocity) / 2.0;
var engineSpeedLimit = VectoMath.Min(DataBus.GetGearData(DataBus.Gear).MaxSpeed, var engineSpeedLimit = GetEngineSpeedLimit();
ModelData.FullLoadCurves[0].N95hSpeed);
if (!dryRun && avgEngineSpeed.IsGreater(engineSpeedLimit, Constants.SimulationSettings.LineSearchTolerance)) { if (!dryRun && avgEngineSpeed.IsGreater(engineSpeedLimit, Constants.SimulationSettings.LineSearchTolerance)) {
return new ResponseEngineSpeedTooHigh() { DeltaEngineSpeed = avgEngineSpeed - engineSpeedLimit }; return new ResponseEngineSpeedTooHigh() { DeltaEngineSpeed = avgEngineSpeed - engineSpeedLimit };
} }
...@@ -294,6 +293,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -294,6 +293,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
}; };
} }
protected virtual PerSecond GetEngineSpeedLimit()
{
return DataBus.Gear == 0
? ModelData.FullLoadCurves[0].N95hSpeed
: VectoMath.Min(DataBus.GetGearData(DataBus.Gear).MaxSpeed,
ModelData.FullLoadCurves[0].N95hSpeed);
}
private NewtonMeter ComputeDelta(NewtonMeter torqueOut, NewtonMeter totalTorqueDemand, NewtonMeter maxEngineTorque) private NewtonMeter ComputeDelta(NewtonMeter torqueOut, NewtonMeter totalTorqueDemand, NewtonMeter maxEngineTorque)
{ {
var deltaEngine = totalTorqueDemand - maxEngineTorque; var deltaEngine = totalTorqueDemand - maxEngineTorque;
...@@ -577,7 +584,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -577,7 +584,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
nextAngularSpeed = velocitySlope < 0 nextAngularSpeed = velocitySlope < 0
? VectoMath.LimitTo(VectoMath.Max(_engineTargetSpeed, nextAngularSpeed), _engine.EngineIdleSpeed, engineMaxSpeed) ? VectoMath.LimitTo(VectoMath.Max(_engineTargetSpeed, nextAngularSpeed), _engine.EngineIdleSpeed, engineMaxSpeed)
: VectoMath.LimitTo(VectoMath.Min(_engineTargetSpeed, nextAngularSpeed), _engine.EngineIdleSpeed, engineMaxSpeed); : VectoMath.LimitTo(VectoMath.Min(_engineTargetSpeed, nextAngularSpeed), _engine.EngineIdleSpeed, engineMaxSpeed);
var retVal = RequestPort.Request(absTime, dt, 0.SI<NewtonMeter>(), nextAngularSpeed); var retVal = RequestPort.Request(absTime, dt, 0.SI<NewtonMeter>(), nextAngularSpeed);
retVal.Switch(). retVal.Switch().
......
...@@ -109,5 +109,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -109,5 +109,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
} }
return requestedEngineTorque; return requestedEngineTorque;
} }
protected override PerSecond GetEngineSpeedLimit()
{
return ModelData.FullLoadCurves[0].N95hSpeed;
}
} }
} }
\ No newline at end of file
...@@ -211,8 +211,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -211,8 +211,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
y => ((ResponseDryRun)y).DeltaFullLoad.Value()); y => ((ResponseDryRun)y).DeltaFullLoad.Value());
Log.Info( Log.Info(
"Found operating point for driver acceleration. absTime: {0}, dt: {1}, acceleration: {2}, gradient: {3}", "Found operating point for driver acceleration. absTime: {0}, dt: {1}, acceleration: {2}, gradient: {3}",
absTime, absTime, dt, acceleration, gradient);
dt, acceleration, gradient);
} else { } else {
DataBus.BrakePower = SearchAlgorithm.Search(DataBus.BrakePower, r.Delta, -r.Delta, DataBus.BrakePower = SearchAlgorithm.Search(DataBus.BrakePower, r.Delta, -r.Delta,
getYValue: result => DataBus.ClutchClosed(absTime) getYValue: result => DataBus.ClutchClosed(absTime)
...@@ -243,6 +242,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -243,6 +242,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
} }
response = NextComponent.Request(absTime, dt, acceleration, gradient); response = NextComponent.Request(absTime, dt, acceleration, gradient);
}) })
.Case<ResponseEngineSpeedTooHigh>(r => {
acceleration = SearchAlgorithm.Search(acceleration, r.DeltaEngineSpeed,
Constants.SimulationSettings.OperatingPointInitialSearchIntervalAccelerating,
getYValue: result => ((ResponseDryRun)result).DeltaEngineSpeed,
evaluateFunction: x => NextComponent.Request(absTime, dt, x, gradient, true),
criterion:
y => ((ResponseDryRun)y).DeltaEngineSpeed.Value());
Log.Info(
"Found operating point for driver acceleration. absTime: {0}, dt: {1}, acceleration: {2}, gradient: {3}",
absTime, dt, acceleration, gradient);
})
.Case<ResponseFailTimeInterval>(r => { dt = r.DeltaT; }) .Case<ResponseFailTimeInterval>(r => { dt = r.DeltaT; })
.Case<ResponseSuccess>() .Case<ResponseSuccess>()
.Default( .Default(
......
...@@ -35,6 +35,7 @@ using System.Linq; ...@@ -35,6 +35,7 @@ using System.Linq;
using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils; using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.Models.Connector.Ports; using TUGraz.VectoCore.Models.Connector.Ports;
using TUGraz.VectoCore.Models.Connector.Ports.Impl; using TUGraz.VectoCore.Models.Connector.Ports.Impl;
using TUGraz.VectoCore.Models.Simulation; using TUGraz.VectoCore.Models.Simulation;
...@@ -117,7 +118,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -117,7 +118,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
debug.Add(response); debug.Add(response);
response.Switch() response.Switch()
.Case<ResponseGearShift>( .Case<ResponseGearShift>(
() => response = NextComponent.Request(absTime, dt, CycleIterator.LeftSample.Torque, angularVelocity)) () => response = NextComponent.Request(absTime, dt, CurrentState.InTorque, angularVelocity))
.Case<ResponseUnderload>(r => { .Case<ResponseUnderload>(r => {
var torqueInterval = -r.Delta / (angularVelocity.IsEqual(0) ? 10.RPMtoRad() : angularVelocity); var torqueInterval = -r.Delta / (angularVelocity.IsEqual(0) ? 10.RPMtoRad() : angularVelocity);
var torque = SearchAlgorithm.Search(CycleIterator.LeftSample.Torque, r.Delta, torqueInterval, var torque = SearchAlgorithm.Search(CycleIterator.LeftSample.Torque, r.Delta, torqueInterval,
...@@ -135,6 +136,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -135,6 +136,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
response = NextComponent.Request(absTime, dt, torque, angularVelocity); response = NextComponent.Request(absTime, dt, torque, angularVelocity);
CurrentState.InAngularVelocity = angularVelocity; CurrentState.InAngularVelocity = angularVelocity;
}) })
.Case<ResponseEngineSpeedTooHigh>(r => {
angularVelocity = SearchAlgorithm.Search(angularVelocity, r.DeltaEngineSpeed,
1.RPMtoRad(),
getYValue: result => ((ResponseDryRun)result).DeltaEngineSpeed,
evaluateFunction: x => NextComponent.Request(absTime, dt, CurrentState.InTorque, x, true),
criterion: y => ((ResponseDryRun)y).DeltaEngineSpeed.Value());
})
.Case<ResponseFailTimeInterval>(r => { dt = r.DeltaT; }) .Case<ResponseFailTimeInterval>(r => { dt = r.DeltaT; })
.Case<ResponseSuccess>(() => { }) .Case<ResponseSuccess>(() => { })
.Default( .Default(
......
...@@ -115,6 +115,7 @@ namespace TUGraz.VectoCore.Tests.Integration.EngineOnlyCycle ...@@ -115,6 +115,7 @@ namespace TUGraz.VectoCore.Tests.Integration.EngineOnlyCycle
var vehicleContainer = new VehicleContainer(ExecutionMode.Engineering); var vehicleContainer = new VehicleContainer(ExecutionMode.Engineering);
var engine = new CombustionEngine(vehicleContainer, MockSimulationDataFactory.CreateEngineDataFromFile(EngineFile, 0)); var engine = new CombustionEngine(vehicleContainer, MockSimulationDataFactory.CreateEngineDataFromFile(EngineFile, 0));
var gbx = new MockGearbox(vehicleContainer) { Gear = 0 };
var absTime = 0.SI<Second>(); var absTime = 0.SI<Second>();
var dt = 1.SI<Second>(); var dt = 1.SI<Second>();
......
...@@ -78,6 +78,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent ...@@ -78,6 +78,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
var vehicle = new VehicleContainer(ExecutionMode.Engineering); var vehicle = new VehicleContainer(ExecutionMode.Engineering);
var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(CoachEngine, 0); var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(CoachEngine, 0);
var engine = new CombustionEngine(vehicle, engineData); var engine = new CombustionEngine(vehicle, engineData);
var gearbox = new MockGearbox(vehicle) { Gear = 0 };
var port = engine.OutPort(); var port = engine.OutPort();
...@@ -94,8 +95,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent ...@@ -94,8 +95,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
public void TestSimpleModalData() public void TestSimpleModalData()
{ {
var vehicle = new VehicleContainer(ExecutionMode.Engineering); var vehicle = new VehicleContainer(ExecutionMode.Engineering);
var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(CoachEngine,0); var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(CoachEngine, 0);
var engine = new CombustionEngine(vehicle, engineData); var engine = new CombustionEngine(vehicle, engineData);
var gearbox = new MockGearbox(vehicle) { Gear = 0 };
var port = engine.OutPort(); var port = engine.OutPort();
var absTime = 0.SI<Second>(); var absTime = 0.SI<Second>();
...@@ -220,6 +222,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent ...@@ -220,6 +222,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
var vehicleContainer = new VehicleContainer(ExecutionMode.Engineering); var vehicleContainer = new VehicleContainer(ExecutionMode.Engineering);
var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(engineFile, 0); var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(engineFile, 0);
var engine = new CombustionEngine(vehicleContainer, engineData); var engine = new CombustionEngine(vehicleContainer, engineData);
var gearbox = new MockGearbox(vehicleContainer) { Gear = 0 };
var expectedResults = VectoCSVFile.Read(resultFile); var expectedResults = VectoCSVFile.Read(resultFile);
......
...@@ -70,7 +70,7 @@ namespace TUGraz.VectoCore.Tests.Utils ...@@ -70,7 +70,7 @@ namespace TUGraz.VectoCore.Tests.Utils
get { return 1.SI<Second>(); } get { return 1.SI<Second>(); }
} }
public uint NumGears { get; set; } public uint NumGears { get; set; }
public MeterPerSecond StartSpeed public MeterPerSecond StartSpeed
{ {
...@@ -96,7 +96,7 @@ namespace TUGraz.VectoCore.Tests.Utils ...@@ -96,7 +96,7 @@ namespace TUGraz.VectoCore.Tests.Utils
public GearData GetGearData(uint gear) public GearData GetGearData(uint gear)
{ {
throw new NotImplementedException(); return new GearData();
} }
public void Connect(ITnOutPort other) public void Connect(ITnOutPort other)
......
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