diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index 6a2d303a6cfc07ceaed048ab5d56a599a5979ad9..e2b52bb8a48a93a9c21406388482062c5b8c2567 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -699,6 +699,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl var cycle = new DistanceBasedDrivingCycle(container, data.Cycle); + var powertrain = cycle .AddComponent(new Driver(container, data.DriverData, new DefaultDriverStrategy(container))) .AddComponent(new Vehicle(container, data.VehicleData, data.AirdragData)) @@ -752,6 +753,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl new DummyEngineInfo(container); + if (data.BusAuxiliaries != null) { if (!data.BusAuxiliaries.ElectricalUserInputsConfig.ConnectESToREESS) { throw new VectoException("BusAux must be supplied from REESS!"); @@ -777,9 +779,24 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl } dcdc.Connect(elAux); + + + if (data.PTO != null) + { + cycle.IdleController = GetIdleController(data.PTO, em, container) as IdleControllerSwitcher; + if (cycle.IdleController == null) + { + throw new VectoException("Could not assign IdleController to cycle"); + } + elAux.AddAuxiliary(new EPTO()); + } + + dcdc.Initialize(); } + + return container; } @@ -1439,6 +1456,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl ? engine.IdleController : new IdleControllerSwitcher(engine.IdleController, new PTOCycleController(container, pto.PTOCycle)); + private static IIdleController GetIdleController(PTOData pto, IElectricMotor electricMotor, + IVehicleContainer container) => + pto?.PTOCycle is null + ? electricMotor.IdleController + : new IdleControllerSwitcher(electricMotor.IdleController, new PTOCycleController(container, pto.PTOCycle)); + internal static IAuxInProvider CreateAdvancedAuxiliaries(VectoRunData data, IVehicleContainer container) { var conventionalAux = CreateAuxiliaries(data, container);