diff --git a/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index f3832255fbb093c9d13a5998c8bfb3109a000f06..99cc19853cc3880c32bd2b38bf4224e0c493f8c3 100644 --- a/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -71,8 +71,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl } var engine = new CombustionEngine(_container, data.EngineData); + var clutch = new Clutch(_container, data.EngineData, engine.IdleController); + + engine.IdleController.RequestPort = clutch.IdleControlPort; + // gearbox --> clutch - tmp = AddComponent(tmp, new Clutch(_container, data.EngineData, engine.GetIdleController())); + tmp = AddComponent(tmp, clutch); // clutch --> direct aux --> ... --> aux_XXX --> directAux diff --git a/VectoCore/Models/SimulationComponent/IClutch.cs b/VectoCore/Models/SimulationComponent/IClutch.cs index 64ee08e9f8675a4c6090c74624d2e06b6db7b943..78ca0c1358d6098cd94a4c9f6a778dbe97432cf9 100644 --- a/VectoCore/Models/SimulationComponent/IClutch.cs +++ b/VectoCore/Models/SimulationComponent/IClutch.cs @@ -1,4 +1,6 @@ -namespace TUGraz.VectoCore.Models.SimulationComponent +using TUGraz.VectoCore.Models.Connector.Ports; + +namespace TUGraz.VectoCore.Models.SimulationComponent { public enum ClutchState { @@ -7,5 +9,8 @@ ClutchSlipping } - public interface IClutch : IPowerTrainComponent {} + public interface IClutch : IPowerTrainComponent + { + ITnOutPort IdleControlPort { get; } + } } \ No newline at end of file diff --git a/VectoCore/Models/SimulationComponent/ICombustionEngine.cs b/VectoCore/Models/SimulationComponent/ICombustionEngine.cs index 34b0eaf1c0731c025e6445259fb4e12dc41130fb..d795974b9a05d7e26b65d21e73252c9a4c3b69e0 100644 --- a/VectoCore/Models/SimulationComponent/ICombustionEngine.cs +++ b/VectoCore/Models/SimulationComponent/ICombustionEngine.cs @@ -8,6 +8,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent /// </summary> public interface ICombustionEngine : ITnOutProvider, IEngineInfo { - ICombustionEngineIdleController GetIdleController(); + ICombustionEngineIdleController IdleController { get; } } } \ No newline at end of file diff --git a/VectoCore/Models/SimulationComponent/ICombustionEngineIdleController.cs b/VectoCore/Models/SimulationComponent/ICombustionEngineIdleController.cs index 1b2f61d94cf3a2203a9a97a6202a11396094c1ec..41dcc182b985f399a7879ce498f228f92d14f061 100644 --- a/VectoCore/Models/SimulationComponent/ICombustionEngineIdleController.cs +++ b/VectoCore/Models/SimulationComponent/ICombustionEngineIdleController.cs @@ -5,6 +5,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent { public interface ICombustionEngineIdleController : ITnOutPort { - void SetRequestPort(ITnOutPort tnOutPort); + ITnOutPort RequestPort { set; } } } \ No newline at end of file diff --git a/VectoCore/Models/SimulationComponent/Impl/Clutch.cs b/VectoCore/Models/SimulationComponent/Impl/Clutch.cs index 14661335e7c93c7d45f5a101e23034d4a68b2076..791a25fc7b8e0cd9b19f97d0fe4ce770377e7425 100644 --- a/VectoCore/Models/SimulationComponent/Impl/Clutch.cs +++ b/VectoCore/Models/SimulationComponent/Impl/Clutch.cs @@ -57,6 +57,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return this; } + public ITnOutPort IdleControlPort + { + get { return NextComponent; } + } + public IResponse Request(Second absTime, Second dt, NewtonMeter torque, PerSecond angularVelocity, bool dryRun = false) { if (angularVelocity == null) { diff --git a/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs b/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs index f9e1ef202791d7a68e3eddbdf26cd3d00ae6b711..190182cdcf0b2c0c00813113cf282f6a0dcef6bd 100644 --- a/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs +++ b/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs @@ -79,12 +79,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl get { return Data.FullLoadCurve.RatedSpeed; } } - public ICombustionEngineIdleController GetIdleController() + public ICombustionEngineIdleController IdleController { - return IdleController ?? new CombustionEngineIdleController(this); + get { return EngineIdleController ?? new CombustionEngineIdleController(this); } } - protected CombustionEngineIdleController IdleController { get; set; } + protected CombustionEngineIdleController EngineIdleController { get; set; } #endregion @@ -468,9 +468,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl Engine = combustionEngine; } - public void SetRequestPort(ITnOutPort tnOutPort) + public ITnOutPort RequestPort { - OutPort = tnOutPort; + set { OutPort = value; } } public IResponse Request(Second absTime, Second dt, NewtonMeter torque, PerSecond angularVelocity, diff --git a/VectoCoreTest/Integration/CoachPowerTrain.cs b/VectoCoreTest/Integration/CoachPowerTrain.cs index 003829bcd263553e47a2e77450cf3261518c0f1b..a6f09c1b11068a55ff78c837ca9f0515c935b548 100644 --- a/VectoCoreTest/Integration/CoachPowerTrain.cs +++ b/VectoCoreTest/Integration/CoachPowerTrain.cs @@ -48,15 +48,18 @@ 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); + var engine = new CombustionEngine(container, engineData); + var clutch = new Clutch(container, engineData, engine.IdleController); + engine.IdleController.RequestPort = clutch.IdleControlPort; + dynamic tmp = Port.AddComponent(cycle, new Driver(container, driverData, new DefaultDriverStrategy())); tmp = Port.AddComponent(tmp, new Vehicle(container, vehicleData)); tmp = Port.AddComponent(tmp, new Wheels(container, vehicleData.DynamicTyreRadius)); 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, engine.GetIdleController())); + tmp = Port.AddComponent(tmp, clutch); var aux = new Auxiliary(container); aux.AddConstant("", 0.SI<Watt>()); diff --git a/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs b/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs index 4784c93be460a336b49769e76c00ef394a1c2e3b..b3f6592d56e5dc588a7c2d0f63fc962097ab6222 100644 --- a/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs +++ b/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs @@ -59,7 +59,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns var gbx = new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)); tmp = Port.AddComponent(tmp, gbx); var engine = new CombustionEngine(container, engineData); - tmp = Port.AddComponent(tmp, new Clutch(container, engineData, engine.GetIdleController())); + var clutch = new Clutch(container, engineData, engine.IdleController); + engine.IdleController.RequestPort = clutch.IdleControlPort; + tmp = Port.AddComponent(tmp, clutch); Port.AddComponent(tmp, engine); cyclePort.Initialize(); @@ -116,7 +118,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns var gbx = new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)); tmp = Port.AddComponent(tmp, gbx); var engine = new CombustionEngine(container, engineData); - tmp = Port.AddComponent(tmp, new Clutch(container, engineData, engine.GetIdleController())); + var clutch = new Clutch(container, engineData, engine.IdleController); + engine.IdleController.RequestPort = clutch.IdleControlPort; + tmp = Port.AddComponent(tmp, clutch); Port.AddComponent(tmp, engine); cyclePort.Initialize(); @@ -189,7 +193,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData)); tmp = Port.AddComponent(tmp, new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container))); var engine = new CombustionEngine(container, engineData); - tmp = Port.AddComponent(tmp, new Clutch(container, engineData, engine.GetIdleController())); + var clutch = new Clutch(container, engineData, engine.IdleController); + engine.IdleController.RequestPort = clutch.IdleControlPort; + tmp = Port.AddComponent(tmp, clutch); Port.AddComponent(tmp, engine); cyclePort.Initialize(); diff --git a/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs b/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs index b59165ec3e5743377933c0cba0bb8cdd90fee5ae..6354e58a9a470ff2ecd9d81fb146a1f488adeb07 100644 --- a/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs +++ b/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs @@ -54,7 +54,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns tmp = Port.AddComponent(tmp, new AxleGear(vehicleContainer, axleGearData)); var engine = new CombustionEngine(vehicleContainer, engineData); - tmp = Port.AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController())); + var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController); + engine.IdleController.RequestPort = clutch.IdleControlPort; + tmp = Port.AddComponent(tmp, clutch); Port.AddComponent(tmp, engine); var gbx = new MockGearbox(vehicleContainer); @@ -105,7 +107,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns tmp = Port.AddComponent(tmp, new Brakes(vehicleContainer)); tmp = Port.AddComponent(tmp, new AxleGear(vehicleContainer, axleGearData)); var engine = new CombustionEngine(vehicleContainer, engineData); - tmp = Port.AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController())); + var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController); + engine.IdleController.RequestPort = clutch.IdleControlPort; + tmp = Port.AddComponent(tmp, clutch); Port.AddComponent(tmp, engine); var gbx = new MockGearbox(vehicleContainer); @@ -175,7 +179,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns tmp = Port.AddComponent(tmp, new Brakes(vehicleContainer)); tmp = Port.AddComponent(tmp, new AxleGear(vehicleContainer, axleGearData)); var engine = new CombustionEngine(vehicleContainer, engineData); - tmp = Port.AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController())); + var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController); + engine.IdleController.RequestPort = clutch.IdleControlPort; + tmp = Port.AddComponent(tmp, clutch); Port.AddComponent(tmp, engine); var gbx = new MockGearbox(vehicleContainer); diff --git a/VectoCoreTest/Integration/Truck40tPowerTrain.cs b/VectoCoreTest/Integration/Truck40tPowerTrain.cs index d0cf2c748b7b9273fdaeae291970cf8e6db54d8e..eda9db83474f16242f0686f116dc624d79895604 100644 --- a/VectoCoreTest/Integration/Truck40tPowerTrain.cs +++ b/VectoCoreTest/Integration/Truck40tPowerTrain.cs @@ -55,16 +55,17 @@ 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); + var engine = new CombustionEngine(container, engineData); + var clutch = new Clutch(container, engineData, engine.IdleController); + engine.IdleController.RequestPort = clutch.IdleControlPort; + dynamic tmp = Port.AddComponent(cycle, new Driver(container, driverData, new DefaultDriverStrategy())); tmp = Port.AddComponent(tmp, new Vehicle(container, vehicleData)); tmp = Port.AddComponent(tmp, new Wheels(container, vehicleData.DynamicTyreRadius)); 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))); - var clutch = new Clutch(container, engineData, engine.GetIdleController()); - engine.GetIdleController().SetRequestPort(clutch); tmp = Port.AddComponent(tmp, clutch); var aux = new Auxiliary(container); diff --git a/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs b/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs index 671e92727f4e3923def0909dbcf827a1ae10782f..308c9d3c947d316d83239011712b0948710f4d25 100644 --- a/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs @@ -204,9 +204,10 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var container = new VehicleContainer(); var gearbox = new MockGearbox(container); var engineData = EngineeringModeSimulationDataReader.CreateEngineDataFromFile(CoachEngine); - var engine = new CombustionEngine(container, engineData); - var clutch = new Clutch(container, engineData, engine.GetIdleController()); + var engine = new CombustionEngine(container, engineData); + var clutch = new Clutch(container, engineData, engine.IdleController); + engine.IdleController.RequestPort = clutch.IdleControlPort; var driver = new MockDriver(container); diff --git a/VectoCoreTest/Models/SimulationComponent/DriverTest.cs b/VectoCoreTest/Models/SimulationComponent/DriverTest.cs index 0857517930696ad307727a1e63f7dc2a93ae3990..f9466a24b6ff807e8a1bd70f7bbc1c4d4e783c22 100644 --- a/VectoCoreTest/Models/SimulationComponent/DriverTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/DriverTest.cs @@ -47,10 +47,11 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var driver = new Driver(vehicleContainer, driverData, new DefaultDriverStrategy()); var engine = new CombustionEngine(vehicleContainer, engineData); - + var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController); + engine.IdleController.RequestPort = clutch.IdleControlPort; dynamic tmp = AddComponent(driver, new Vehicle(vehicleContainer, vehicleData)); tmp = AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius)); - tmp = AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController())); + tmp = AddComponent(tmp, clutch); AddComponent(tmp, engine); var gbx = new MockGearbox(vehicleContainer) { Gear = 1 }; @@ -102,10 +103,12 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var driver = new Driver(vehicleContainer, driverData, new DefaultDriverStrategy()); var engine = new CombustionEngine(vehicleContainer, engineData); + var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController); + engine.IdleController.RequestPort = clutch.IdleControlPort; dynamic tmp = AddComponent(driver, new Vehicle(vehicleContainer, vehicleData)); tmp = AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius)); - tmp = AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController())); + tmp = AddComponent(tmp, clutch); AddComponent(tmp, engine); var gbx = new MockGearbox(vehicleContainer); @@ -164,7 +167,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent dynamic tmp = AddComponent(driver, new Vehicle(vehicleContainer, vehicleData)); tmp = AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius)); var engine = new CombustionEngine(vehicleContainer, engineData); - tmp = AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController())); + var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController); + engine.IdleController.RequestPort = clutch.IdleControlPort; + tmp = AddComponent(tmp, clutch); AddComponent(tmp, engine); var gbx = new MockGearbox(vehicleContainer);