From 8738ea59b2d5aea8b72caf871ea62d54a7d3c621 Mon Sep 17 00:00:00 2001 From: Michael Krisper <michael.krisper@tugraz.at> Date: Mon, 18 Jul 2022 18:06:19 +0200 Subject: [PATCH] SerialHybridStrategy finished refactoring to IUpdateable --- .../Simulation/Impl/PowertrainBuilder.cs | 6 +-- .../Strategies/SerialHybridStrategy.cs | 47 ++----------------- .../Integration/Hybrid/SerialHybridTest.cs | 2 +- 3 files changed, 8 insertions(+), 47 deletions(-) diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index 966448ffbe..ace82db767 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -542,8 +542,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl var container = new VehicleContainer(data.ExecutionMode, modData, sumWriter) { RunData = data }; var es = ConnectREESS(data, container); var strategy = data.GearboxData != null && data.GearboxData.Type.AutomaticTransmission() - ? (IHybridControlStrategy)new SerialHybridStrategyAT(data, container) - : new SerialHybridStrategy(data, container); + ? (IHybridControlStrategy)new SerialHybridStrategy<APTNGearbox>(data, container) + : new SerialHybridStrategy<Gearbox>(data, container); var aux = new ElectricAuxiliary(container); aux.AddConstant("P_aux_el", data.ElectricAuxDemand ?? 0.SI<Watt>()); @@ -957,7 +957,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl var container = new VehicleContainer(data.ExecutionMode, modData, _sumWriter) { RunData = data }; var es = ConnectREESS(data, container); - var strategy = new SerialHybridStrategy(data, container); + var strategy = new SerialHybridStrategy<Gearbox>(data, container); var ctl = new SerialHybridController(container, strategy, es); var engine = new StopStartCombustionEngine(container, data.EngineData); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs index 6898975b00..0c0257ab04 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs @@ -19,15 +19,14 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies { - - public class SerialHybridStrategyAT : AbstractSerialHybridStrategy<APTNGearbox> + public class SerialHybridStrategy<T> : AbstractSerialHybridStrategy<T> where T : class, IHybridControlledGearbox, IGearbox, IUpdateable { - public SerialHybridStrategyAT(VectoRunData runData, IVehicleContainer container) : base(runData, container) { } + public SerialHybridStrategy(VectoRunData runData, IVehicleContainer container) : base(runData, container) { } #region Overrides of AbstractSerialHybridStrategy<ATGearbox> protected override DrivetrainDemand GetDrivetrainPowerDemand(Second absTime, Second dt, NewtonMeter outTorque, - PerSecond outAngularVelocity, GenSetOperatingPoint maxPowerGenset) + PerSecond outAngularVelocity, GenSetOperatingPoint maxPowerGenset) { TestPowertrain.UpdateComponents(); TestPowertrain.Charger.UpdateFrom(maxPowerGenset); @@ -36,44 +35,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, Controller.PreviousState.OutAngularVelocity); TestPowertrain.Gearbox?.UpdateFrom((DataBus.GearboxInfo as AbstractGearbox<GearboxState>).PreviousState); - - var testResponse = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false); - TestPowertrain.HybridController.ApplyStrategySettings(new HybridStrategyResponse { - CombustionEngineOn = false, - MechanicalAssistPower = new Dictionary<PowertrainPosition, Tuple<PerSecond, NewtonMeter>> { - { EmPosition, Tuple.Create(testResponse.ElectricMotor.AvgDrivetrainSpeed, -testResponse.ElectricMotor.TorqueRequest) } } - }); - var testResponse2 = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false); - return new DrivetrainDemand { - AvgEmDrivetrainSpeed = testResponse2.ElectricMotor.AvgDrivetrainSpeed, - EmTorqueDemand = testResponse2.ElectricMotor.TorqueRequest, - ElectricPowerDemand = testResponse2.ElectricSystem.ConsumerPower, - Response = testResponse2 - }; - } - - #endregion - } - - // ======================================================================= - - - public class SerialHybridStrategy : AbstractSerialHybridStrategy<Gearbox> - { - - public SerialHybridStrategy(VectoRunData runData, IVehicleContainer container) : base(runData, container) { } - - protected override DrivetrainDemand GetDrivetrainPowerDemand(Second absTime, Second dt, NewtonMeter outTorque, - PerSecond outAngularVelocity, GenSetOperatingPoint maxPowerGenset) - { - TestPowertrain.UpdateComponents(); - TestPowertrain.Charger.UpdateFrom(maxPowerGenset); - TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>()); - TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, Controller.PreviousState.OutAngularVelocity); - - TestPowertrain.Gearbox?.UpdateFrom((DataBus.GearboxInfo as AbstractGearbox<GearboxState>).PreviousState); - var testResponse = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false); TestPowertrain.HybridController.ApplyStrategySettings(new HybridStrategyResponse { CombustionEngineOn = false, @@ -89,10 +51,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies }; } + #endregion } - // ======================================================================= - public abstract class AbstractSerialHybridStrategy<T> : LoggingObject, IHybridControlStrategy where T : class, IHybridControlledGearbox, IGearbox { diff --git a/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs b/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs index 8a6f72a615..24cc137eb5 100644 --- a/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs @@ -684,7 +684,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid var container = new VehicleContainer(ExecutionMode.Engineering, modData, x => { sumData?.Write(x, 1, 1, runData); }) { RunData = runData }; - var strategy = new SerialHybridStrategy(runData, container); + var strategy = new SerialHybridStrategy<Gearbox>(runData, container); var es = new ElectricSystem(container); var battery = new BatterySystem(container, batteryData); battery.Initialize(initialBatCharge); -- GitLab