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

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

Introduce EngineIdleController Class and Interface(s)

parent 0fd7dcb1
No related branches found
No related tags found
No related merge requests found
Showing
with 94 additions and 31 deletions
......@@ -70,8 +70,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
break;
}
var engine = new CombustionEngine(_container, data.EngineData);
// gearbox --> clutch
tmp = AddComponent(tmp, new Clutch(_container, data.EngineData));
tmp = AddComponent(tmp, new Clutch(_container, data.EngineData, engine.GetIdleController()));
// clutch --> direct aux --> ... --> aux_XXX --> directAux
......@@ -94,7 +95,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
tmp = AddComponent(tmp, aux);
}
// connect aux --> engine
AddComponent(tmp, new CombustionEngine(_container, data.EngineData));
AddComponent(tmp, engine);
return _container;
}
......
......@@ -6,5 +6,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent
/// <summary>
/// Defines Interfaces for a combustion engine.
/// </summary>
public interface ICombustionEngine : ITnOutProvider, IEngineInfo {}
public interface ICombustionEngine : ITnOutProvider, IEngineInfo
{
ICombustionEngineIdleController GetIdleController();
}
}
\ No newline at end of file
using TUGraz.VectoCore.Models.Connector.Ports;
using TUGraz.VectoCore.Models.SimulationComponent.Impl;
namespace TUGraz.VectoCore.Models.SimulationComponent
{
public interface ICombustionEngineIdleController : ITnOutPort
{
void SetRequestPort(ITnOutPort tnOutPort);
}
}
\ No newline at end of file
......@@ -34,7 +34,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
if (angularVelocity.IsEqual(0)) {
BreakTorque = torque;
} else {
BreakTorque = Formulas.PowerToTorque(BreakPower, angularVelocity);
BreakTorque = BreakPower / angularVelocity;
}
}
if (!dryRun && BreakPower < 0) {
......
......@@ -17,12 +17,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
private const double ClutchEff = 1;
private ClutchState _clutchState = SimulationComponent.ClutchState.ClutchSlipping;
protected ICombustionEngineIdleController IdleController;
public Clutch(IVehicleContainer cockpit, CombustionEngineData engineData)
public Clutch(IVehicleContainer cockpit, CombustionEngineData engineData,
ICombustionEngineIdleController idleController)
: base(cockpit)
{
_idleSpeed = engineData.IdleSpeed;
_ratedSpeed = engineData.FullLoadCurve.RatedSpeed;
IdleController = idleController;
}
public ClutchState State()
......@@ -56,7 +60,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
public IResponse Request(Second absTime, Second dt, NewtonMeter torque, PerSecond angularVelocity, bool dryRun = false)
{
if (angularVelocity == null) {
var retval = NextComponent.Request(absTime, dt, torque, null, dryRun);
//var retval = NextComponent.Request(absTime, dt, torque, null, dryRun);
var retval = IdleController.Request(absTime, dt, torque, null, dryRun);
retval.ClutchPowerRequest = 0.SI<Watt>();
return retval;
}
......
......@@ -79,6 +79,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
get { return Data.FullLoadCurve.RatedSpeed; }
}
public ICombustionEngineIdleController GetIdleController()
{
return IdleController ?? new CombustionEngineIdleController(this);
}
protected CombustionEngineIdleController IdleController { get; set; }
#endregion
#region ITnOutProvider
......@@ -450,6 +457,32 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
#endregion
public class CombustionEngineIdleController {}
protected class CombustionEngineIdleController : ICombustionEngineIdleController
{
protected CombustionEngine Engine;
protected ITnOutPort OutPort;
public CombustionEngineIdleController(CombustionEngine combustionEngine)
{
Engine = combustionEngine;
}
public void SetRequestPort(ITnOutPort tnOutPort)
{
OutPort = tnOutPort;
}
public IResponse Request(Second absTime, Second dt, NewtonMeter torque, PerSecond angularVelocity,
bool dryRun = false)
{
throw new NotImplementedException();
}
public IResponse Initialize(NewtonMeter torque, PerSecond angularVelocity)
{
return new ResponseSuccess() { Source = this };
}
}
}
}
\ No newline at end of file
......@@ -155,6 +155,7 @@
<Compile Include="Models\SimulationComponent\Data\GearboxType.cs" />
<Compile Include="Models\SimulationComponent\IAuxiliary.cs" />
<Compile Include="Models\SimulationComponent\IBrakes.cs" />
<Compile Include="Models\SimulationComponent\ICombustionEngineIdleController.cs" />
<Compile Include="Models\SimulationComponent\IDriverActions.cs" />
<Compile Include="Models\SimulationComponent\IDriverStrategy.cs" />
<Compile Include="Models\SimulationComponent\IDrivingCycleInfo.cs" />
......
......@@ -48,6 +48,7 @@ namespace TUGraz.VectoCore.Tests.Integration
var vehicleData = CreateVehicleData(3300.SI<Kilogram>());
var driverData = CreateDriverData(AccelerationFile);
var engine = new CombustionEngine(container, engineData);
var cycle = new DistanceBasedDrivingCycle(container, cycleData);
dynamic tmp = Port.AddComponent(cycle, new Driver(container, driverData, new DefaultDriverStrategy()));
tmp = Port.AddComponent(tmp, new Vehicle(container, vehicleData));
......@@ -55,14 +56,14 @@ namespace TUGraz.VectoCore.Tests.Integration
tmp = Port.AddComponent(tmp, new Brakes(container));
tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
tmp = Port.AddComponent(tmp, new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)));
tmp = Port.AddComponent(tmp, new Clutch(container, engineData));
tmp = Port.AddComponent(tmp, new Clutch(container, engineData, engine.GetIdleController()));
var aux = new Auxiliary(container);
aux.AddConstant("", 0.SI<Watt>());
tmp = Port.AddComponent(tmp, aux);
Port.AddComponent(tmp, new CombustionEngine(container, engineData));
Port.AddComponent(tmp, engine);
return container;
}
......
......@@ -82,7 +82,7 @@ namespace TUGraz.VectoCore.Tests.Integration.EngineOnlyCycle
var angularVelocity = 644.4445.RPMtoRad();
var power = 2329.973.SI<Watt>();
gearbox.OutPort().Request(absTime, dt, Formulas.PowerToTorque(power, angularVelocity), angularVelocity);
gearbox.OutPort().Request(absTime, dt, power / angularVelocity, angularVelocity);
foreach (var sc in vehicleContainer.SimulationComponents()) {
sc.CommitSimulationStep(dataWriter);
......
......@@ -58,8 +58,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
var gbx = new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container));
tmp = Port.AddComponent(tmp, gbx);
tmp = Port.AddComponent(tmp, new Clutch(container, engineData));
Port.AddComponent(tmp, new CombustionEngine(container, engineData));
var engine = new CombustionEngine(container, engineData);
tmp = Port.AddComponent(tmp, new Clutch(container, engineData, engine.GetIdleController()));
Port.AddComponent(tmp, engine);
cyclePort.Initialize();
......@@ -114,8 +115,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
var gbx = new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container));
tmp = Port.AddComponent(tmp, gbx);
tmp = Port.AddComponent(tmp, new Clutch(container, engineData));
Port.AddComponent(tmp, new CombustionEngine(container, engineData));
var engine = new CombustionEngine(container, engineData);
tmp = Port.AddComponent(tmp, new Clutch(container, engineData, engine.GetIdleController()));
Port.AddComponent(tmp, engine);
cyclePort.Initialize();
......@@ -186,8 +188,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
tmp = Port.AddComponent(tmp, new Brakes(container));
tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
tmp = Port.AddComponent(tmp, new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)));
tmp = Port.AddComponent(tmp, new Clutch(container, engineData));
Port.AddComponent(tmp, new CombustionEngine(container, engineData));
var engine = new CombustionEngine(container, engineData);
tmp = Port.AddComponent(tmp, new Clutch(container, engineData, engine.GetIdleController()));
Port.AddComponent(tmp, engine);
cyclePort.Initialize();
......
......@@ -53,8 +53,8 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
tmp = Port.AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius));
tmp = Port.AddComponent(tmp, new AxleGear(vehicleContainer, axleGearData));
tmp = Port.AddComponent(tmp, new Clutch(vehicleContainer, engineData));
var engine = new CombustionEngine(vehicleContainer, engineData);
tmp = Port.AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController()));
Port.AddComponent(tmp, engine);
var gbx = new MockGearbox(vehicleContainer);
......@@ -104,8 +104,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
tmp = Port.AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius));
tmp = Port.AddComponent(tmp, new Brakes(vehicleContainer));
tmp = Port.AddComponent(tmp, new AxleGear(vehicleContainer, axleGearData));
tmp = Port.AddComponent(tmp, new Clutch(vehicleContainer, engineData));
Port.AddComponent(tmp, new CombustionEngine(vehicleContainer, engineData));
var engine = new CombustionEngine(vehicleContainer, engineData);
tmp = Port.AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController()));
Port.AddComponent(tmp, engine);
var gbx = new MockGearbox(vehicleContainer);
......@@ -173,8 +174,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
tmp = Port.AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius));
tmp = Port.AddComponent(tmp, new Brakes(vehicleContainer));
tmp = Port.AddComponent(tmp, new AxleGear(vehicleContainer, axleGearData));
tmp = Port.AddComponent(tmp, new Clutch(vehicleContainer, engineData));
Port.AddComponent(tmp, new CombustionEngine(vehicleContainer, engineData));
var engine = new CombustionEngine(vehicleContainer, engineData);
tmp = Port.AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController()));
Port.AddComponent(tmp, engine);
var gbx = new MockGearbox(vehicleContainer);
......
......@@ -55,6 +55,7 @@ namespace TUGraz.VectoCore.Tests.Integration
var vehicleData = CreateVehicleData(massExtra, loading);
var driverData = CreateDriverData(AccelerationFile);
var engine = new CombustionEngine(container, engineData);
var cycle = new DistanceBasedDrivingCycle(container, cycleData);
dynamic tmp = Port.AddComponent(cycle, new Driver(container, driverData, new DefaultDriverStrategy()));
tmp = Port.AddComponent(tmp, new Vehicle(container, vehicleData));
......@@ -62,14 +63,16 @@ namespace TUGraz.VectoCore.Tests.Integration
tmp = Port.AddComponent(tmp, new Brakes(container));
tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
tmp = Port.AddComponent(tmp, new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)));
tmp = Port.AddComponent(tmp, new Clutch(container, engineData));
var clutch = new Clutch(container, engineData, engine.GetIdleController());
engine.GetIdleController().SetRequestPort(clutch);
tmp = Port.AddComponent(tmp, clutch);
var aux = new Auxiliary(container);
aux.AddConstant("", 0.SI<Watt>());
tmp = Port.AddComponent(tmp, aux);
Port.AddComponent(tmp, new CombustionEngine(container, engineData));
Port.AddComponent(tmp, engine);
return container;
}
......
......@@ -74,7 +74,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
Assert.AreEqual(absTime, outPort.AbsTime);
Assert.AreEqual(dt, outPort.Dt);
Assert.AreEqual(743.2361.RPMtoRad(), outPort.AngularVelocity);
Assert.AreEqual(Formulas.PowerToTorque(2779.576.SI<Watt>(), 743.2361.RPMtoRad()), outPort.Torque);
Assert.AreEqual(2779.576.SI<Watt>() / 743.2361.RPMtoRad(), outPort.Torque);
// ========================
......@@ -95,7 +95,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
Assert.AreEqual(absTime, outPort.AbsTime);
Assert.AreEqual(dt, outPort.Dt);
Assert.AreEqual(1584.731.RPMtoRad(), outPort.AngularVelocity);
Assert.AreEqual(Formulas.PowerToTorque(3380.548.SI<Watt>(), 1584.731.RPMtoRad()), outPort.Torque);
Assert.AreEqual(3380.548.SI<Watt>() / 1584.731.RPMtoRad(), outPort.Torque);
absTime += dt;
}
......
......@@ -22,7 +22,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
var engineData = EngineeringModeSimulationDataReader.CreateEngineDataFromFile(CoachEngine);
var gearbox = new MockGearbox(container);
var clutch = new Clutch(container, engineData);
var clutch = new Clutch(container, engineData, null);
var inPort = clutch.InPort();
var outPort = new MockTnOutPort();
......
......@@ -206,7 +206,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
var engineData = EngineeringModeSimulationDataReader.CreateEngineDataFromFile(CoachEngine);
var engine = new CombustionEngine(container, engineData);
var clutch = new Clutch(container, engineData);
var clutch = new Clutch(container, engineData, engine.GetIdleController());
var driver = new MockDriver(container);
......
......@@ -50,7 +50,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
dynamic tmp = AddComponent(driver, new Vehicle(vehicleContainer, vehicleData));
tmp = AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius));
tmp = AddComponent(tmp, new Clutch(vehicleContainer, engineData));
tmp = AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController()));
AddComponent(tmp, engine);
var gbx = new MockGearbox(vehicleContainer) { Gear = 1 };
......@@ -105,7 +105,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
dynamic tmp = AddComponent(driver, new Vehicle(vehicleContainer, vehicleData));
tmp = AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius));
tmp = AddComponent(tmp, new Clutch(vehicleContainer, engineData));
tmp = AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController()));
AddComponent(tmp, engine);
var gbx = new MockGearbox(vehicleContainer);
......@@ -163,8 +163,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
dynamic tmp = AddComponent(driver, new Vehicle(vehicleContainer, vehicleData));
tmp = AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius));
tmp = AddComponent(tmp, new Clutch(vehicleContainer, engineData));
AddComponent(tmp, new CombustionEngine(vehicleContainer, engineData));
var engine = new CombustionEngine(vehicleContainer, engineData);
tmp = AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController()));
AddComponent(tmp, engine);
var gbx = new MockGearbox(vehicleContainer);
......
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