From a70c69049ba0098be31a759b3adf27d60203c991 Mon Sep 17 00:00:00 2001 From: Michael Krisper <michael.krisper@tugraz.at> Date: Tue, 19 Jul 2022 16:26:25 +0200 Subject: [PATCH] HybridStrategy, SerialHybridStrategy: Finally updated to TestPowertrain.UpdateComponents --- .../Strategies/HybridStrategy.cs | 262 ++---------------- .../Strategies/SerialHybridStrategy.cs | 174 +++--------- 2 files changed, 64 insertions(+), 372 deletions(-) diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs index 3aeec3604d..065d7794dc 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs @@ -6,7 +6,6 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics; using TUGraz.VectoCore.Models.Connector.Ports.Impl; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation; @@ -45,43 +44,18 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies protected override IResponse RequestDryRun(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, GearshiftPosition nextGear, HybridStrategyResponse cfg) { - if (DataBus.VehicleInfo.VehicleStopped) { - TestPowertrain.Gearbox.Gear = Controller.ShiftStrategy.NextGear; - } else if (PreviousState.GearboxEngaged) { - TestPowertrain.Gearbox.Gear = DataBus.GearboxInfo.Gear; - } else { - TestPowertrain.Gearbox.Gear = Controller.ShiftStrategy.NextGear; - } + TestPowertrain.UpdateComponents(); + TestPowertrain.Gearbox.Gear = DataBus.VehicleInfo.VehicleStopped ? Controller.ShiftStrategy.NextGear : PreviousState.GearboxEngaged ? DataBus.GearboxInfo.Gear : Controller.ShiftStrategy.NextGear; TestPowertrain.Gearbox.Disengaged = !nextGear.Engaged; TestPowertrain.Gearbox.DisengageGearbox = !nextGear.Engaged; TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>()); TestPowertrain.HybridController.ApplyStrategySettings(cfg); TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, Controller.PreviousState.OutAngularVelocity); - TestPowertrain.Clutch.Initialize(DataBus.ClutchInfo.ClutchLosses); - TestPowertrain.Battery?.Initialize(DataBus.BatteryInfo.StateOfCharge); - if (TestPowertrain.Battery != null) { - TestPowertrain.Battery.PreviousState.PulseDuration = - (DataBus.BatteryInfo as Battery).PreviousState.PulseDuration; - } - if (TestPowertrain.BatterySystem != null) { - var batSystem = DataBus.BatteryInfo as BatterySystem; - foreach (var bsKey in batSystem.Batteries.Keys) { - for (var i = 0; i < batSystem.Batteries[bsKey].Batteries.Count; i++) { - TestPowertrain.BatterySystem.Batteries[bsKey].Batteries[i] - .Initialize(batSystem.Batteries[bsKey].Batteries[i].StateOfCharge); - } - } - TestPowertrain.BatterySystem.PreviousState.PulseDuration = - (DataBus.BatteryInfo as BatterySystem).PreviousState.PulseDuration; - } - TestPowertrain.SuperCap?.Initialize(DataBus.BatteryInfo.StateOfCharge); TestPowertrain.Brakes.BrakePower = DataBus.Brakes.BrakePower; - - var currentGear = DataBus.VehicleInfo.VehicleStopped ? Controller.ShiftStrategy.NextGear : PreviousState.GearboxEngaged ? DataBus.GearboxInfo.Gear : Controller.ShiftStrategy.NextGear; - - if (nextGear.Engaged && !nextGear.Equals(currentGear)) { + + if (nextGear.Engaged && !nextGear.Equals(TestPowertrain.Gearbox.Gear)) { if (!AllowEmergencyShift && ModelData.GearboxData.Gears[nextGear.Gear].Ratio > ModelData.GearshiftParameters.RatioEarlyUpshiftFC) { return null; } @@ -94,11 +68,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies return null; } - var vDrop = DataBus.VehicleInfo.VehicleSpeed - estimatedVelocityPostShift; - var vehicleSpeedPostShift = estimatedVelocityPostShift; // DataBus.VehicleInfo.VehicleSpeed - vDrop * ModelData.GearshiftParameters.VelocityDropFactor; TestPowertrain.Gearbox.Gear = nextGear; - var init = TestPowertrain.Container.VehiclePort.Initialize( - vehicleSpeedPostShift, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>()); + var init = TestPowertrain.Container.VehiclePort.Initialize(estimatedVelocityPostShift, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>()); if (!AllowEmergencyShift && init.Engine.EngineSpeed.IsSmaller(ModelData.EngineData.IdleSpeed)) { return null; } @@ -106,68 +77,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies TestPowertrain.Gearbox._nextGear = Controller.ShiftStrategy.NextGear; TestPowertrain.Gearbox.Disengaged = !nextGear.Engaged; - - var combustionEngineInfo = DataBus.EngineInfo as CombustionEngine; - var enginePrevious = combustionEngineInfo.PreviousState; - TestPowertrain.CombustionEngine.Initialize(enginePrevious.EngineTorque, enginePrevious.EngineSpeed); - var testPreviousState = TestPowertrain.CombustionEngine.PreviousState; - testPreviousState.EngineOn = enginePrevious.EngineOn; - testPreviousState.EnginePower = enginePrevious.EnginePower; - testPreviousState.dt = enginePrevious.dt; - testPreviousState.EngineSpeed = enginePrevious.EngineSpeed; - testPreviousState.EngineTorque = enginePrevious.EngineTorque; - testPreviousState.EngineTorqueOut = enginePrevious.EngineTorqueOut; - testPreviousState.DynamicFullLoadTorque = enginePrevious.DynamicFullLoadTorque; - - switch (TestPowertrain.CombustionEngine.EngineAux) { - case EngineAuxiliary engineAux: - engineAux.PreviousState.AngularSpeed = - (combustionEngineInfo.EngineAux as EngineAuxiliary).PreviousState - .AngularSpeed; - break; - case BusAuxiliariesAdapter busAux: - busAux.PreviousState.AngularSpeed = - (combustionEngineInfo.EngineAux as BusAuxiliariesAdapter).PreviousState - .AngularSpeed; - if (busAux.ElectricStorage is SimpleBattery bat) { - bat.SOC = (combustionEngineInfo.EngineAux as BusAuxiliariesAdapter) - .ElectricStorage - .SOC; - } - break; - } - - if (TestPowertrain.DCDCConverter != null) { - TestPowertrain.DCDCConverter.PreviousState.ConsumedEnergy = - (DataBus.DCDCConverter as DCDCConverter).PreviousState.ConsumedEnergy; - } - - if (TestPowertrain.WHRCharger != null) { - TestPowertrain.WHRCharger.PreviousState.GeneratedEnergy = - DataBus.WHRCharger.PreviousState.GeneratedEnergy; - TestPowertrain.WHRCharger.PreviousState.ExcessiveEnergy = - DataBus.WHRCharger.PreviousState.ExcessiveEnergy; - } - - TestPowertrain.Gearbox.PreviousState.InAngularVelocity = - (DataBus.GearboxInfo as Gearbox).PreviousState.InAngularVelocity; - - TestPowertrain.Clutch.PreviousState.InAngularVelocity = - (DataBus.ClutchInfo as SwitchableClutch).PreviousState.InAngularVelocity; - TestPowertrain.Clutch.PreviousState.OutAngularVelocity = - (DataBus.ClutchInfo as SwitchableClutch).PreviousState.OutAngularVelocity; - - //} - + TestPowertrain.CombustionEngine.UpdateFrom(DataBus.EngineInfo); + TestPowertrain.Gearbox.UpdateFrom(DataBus.GearboxInfo); + TestPowertrain.Clutch.UpdateFrom(DataBus.ClutchInfo); var pos = ModelData.ElectricMachinesData.FirstOrDefault().Item1; - TestPowertrain.ElectricMotor.ThermalBuffer = - (DataBus.ElectricMotorInfo(pos) as ElectricMotor).ThermalBuffer; - TestPowertrain.ElectricMotor.DeRatingActive = - (DataBus.ElectricMotorInfo(pos) as ElectricMotor).DeRatingActive; - + TestPowertrain.ElectricMotor.UpdateFrom(DataBus.ElectricMotorInfo(pos)); foreach (var emPos in TestPowertrain.ElectricMotorsUpstreamTransmission.Keys) { - TestPowertrain.ElectricMotorsUpstreamTransmission[pos].PreviousState.EMSpeed = - DataBus.ElectricMotorInfo(emPos).ElectricMotorSpeed; + TestPowertrain.ElectricMotorsUpstreamTransmission[pos].PreviousState.EMSpeed = DataBus.ElectricMotorInfo(emPos).ElectricMotorSpeed; } var retVal = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, true); @@ -192,58 +108,28 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies //tmp.FuelCosts = double.NaN; // = Tuple.Create(true, response.Gearbox.Gear - 1); tmp.IgnoreReason |= HybridConfigurationIgnoreReason.EngineSpeedBelowDownshift; } - - } - } - // ===================================================== - - public class HybridStrategyAT : AbstractHybridStrategy<ATGearbox> { + public HybridStrategyAT(VectoRunData runData, IVehicleContainer vehicleContainer) : base(runData, vehicleContainer) + { } - public HybridStrategyAT(VectoRunData runData, IVehicleContainer vehicleContainer) : base(runData, - vehicleContainer) - { - - } - - protected override IResponse RequestDryRun(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, - GearshiftPosition nextGear, HybridStrategyResponse cfg) + protected override IResponse RequestDryRun(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, GearshiftPosition nextGear, HybridStrategyResponse cfg) { + TestPowertrain.UpdateComponents(); + TestPowertrain.Gearbox.Gear = PreviousState.GearboxEngaged ? DataBus.GearboxInfo.Gear : Controller.ShiftStrategy.NextGear; TestPowertrain.Gearbox.Disengaged = !nextGear.Engaged; TestPowertrain.Gearbox.DisengageGearbox = !nextGear.Engaged; TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>()); TestPowertrain.HybridController.ApplyStrategySettings(cfg); TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, Controller.PreviousState.OutAngularVelocity); - // TestPowertrain.Clutch.Initialize(DataBus.ClutchInfo.ClutchLosses); - TestPowertrain.Battery?.Initialize(DataBus.BatteryInfo.StateOfCharge); - if (TestPowertrain.Battery != null) { - TestPowertrain.Battery.PreviousState.PulseDuration = - (DataBus.BatteryInfo as Battery).PreviousState.PulseDuration; - } - if (TestPowertrain.BatterySystem != null) { - var batSystem = DataBus.BatteryInfo as BatterySystem; - foreach (var bsKey in batSystem.Batteries.Keys) { - for (var i = 0; i < batSystem.Batteries[bsKey].Batteries.Count; i++) { - TestPowertrain.BatterySystem.Batteries[bsKey].Batteries[i] - .Initialize(batSystem.Batteries[bsKey].Batteries[i].StateOfCharge); - } - } - TestPowertrain.BatterySystem.PreviousState.PulseDuration = - (DataBus.BatteryInfo as BatterySystem).PreviousState.PulseDuration; - } - TestPowertrain.SuperCap?.Initialize(DataBus.BatteryInfo.StateOfCharge); - + TestPowertrain.Brakes.BrakePower = DataBus.Brakes.BrakePower; - - var currentGear = PreviousState.GearboxEngaged ? DataBus.GearboxInfo.Gear : Controller.ShiftStrategy.NextGear; - - var gearboxInfo = DataBus.GearboxInfo as ATGearbox; - if (nextGear.Engaged && !nextGear.Equals(currentGear)) { + + if (nextGear.Engaged && !nextGear.Equals(TestPowertrain.Gearbox.Gear)) { if (!AllowEmergencyShift && ModelData.GearboxData.Gears[nextGear.Gear].Ratio > ModelData.GearshiftParameters.RatioEarlyUpshiftFC) { return null; } @@ -253,130 +139,44 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies } var vDrop = DataBus.DriverInfo.DriverAcceleration * ModelData.GearshiftParameters.ATLookAheadTime; - var vehicleSpeedPostShift = (DataBus.VehicleInfo.VehicleSpeed + vDrop * ModelData.GearshiftParameters.VelocityDropFactor).LimitTo( - 0.KMPHtoMeterPerSecond(), DataBus.DrivingCycleInfo.CycleData.LeftSample.VehicleTargetSpeed); - - //var estimatedVelocityPostShift = VelocityDropData.Interpolate(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>()); - //if (!AllowEmergencyShift && !estimatedVelocityPostShift.IsGreater(DeclarationData.GearboxTCU.MIN_SPEED_AFTER_TRACTION_INTERRUPTION)) { - // return null; - //} - + var vehicleSpeedPostShift = (DataBus.VehicleInfo.VehicleSpeed + vDrop * ModelData.GearshiftParameters.VelocityDropFactor).LimitTo(0.KMPHtoMeterPerSecond(), DataBus.DrivingCycleInfo.CycleData.LeftSample.VehicleTargetSpeed); if (nextGear.TorqueConverterLocked.HasValue && nextGear.TorqueConverterLocked.Value) { var inAngularVelocity = ModelData.GearboxData.Gears[nextGear.Gear].Ratio * outAngularVelocity; - if (inAngularVelocity.IsEqual(0)) { return null; } - var totalTransmissionRatio = inAngularVelocity / - (DataBus.VehicleInfo.VehicleSpeed + - DataBus.DriverInfo.DriverAcceleration * dt); - + var totalTransmissionRatio = inAngularVelocity / (DataBus.VehicleInfo.VehicleSpeed + DataBus.DriverInfo.DriverAcceleration * dt); var estimatedEngineSpeed = (vehicleSpeedPostShift * totalTransmissionRatio).Cast<PerSecond>(); if (estimatedEngineSpeed.IsSmaller(ModelData.GearshiftParameters.MinEngineSpeedPostUpshift)) { return null; } } - //var vDrop = DataBus.VehicleInfo.VehicleSpeed - estimatedVelocityPostShift; - //var vehicleSpeedPostShift = estimatedVelocityPostShift; // DataBus.VehicleInfo.VehicleSpeed - vDrop * ModelData.GearshiftParameters.VelocityDropFactor; TestPowertrain.Gearbox.Gear = nextGear; TestPowertrain.Gearbox.RequestAfterGearshift = true; - //var init = TestPowertrain.Container.VehiclePort.Initialize( - // vehicleSpeedPostShift, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>()); - //if (!AllowEmergencyShift && init.Engine.EngineSpeed.IsSmaller(ModelData.EngineData.IdleSpeed)) { - // return null; - //} } else { - TestPowertrain.Gearbox.RequestAfterGearshift = gearboxInfo.RequestAfterGearshift; + TestPowertrain.Gearbox.RequestAfterGearshift = DataBus.GearboxInfo.RequestAfterGearshift; } - //TestPowertrain.Gearbox.ShiftToLocked = (DataBus.GearboxInfo as ATGearbox).ShiftToLocked; - + if (!nextGear.Engaged) { - //TestPowertrain.Gearbox._nextGear = Controller.ShiftStrategy.NextGear; TestPowertrain.Gearbox.Disengaged = !nextGear.Engaged; } - //if (!PreviousState.GearboxEngaged) { - var engineInfo = DataBus.EngineInfo as CombustionEngine; - var enginePrevious = engineInfo.PreviousState; - TestPowertrain.CombustionEngine.Initialize(enginePrevious.EngineTorque, enginePrevious.EngineSpeed); - var testEnginePrevious = TestPowertrain.CombustionEngine.PreviousState; - testEnginePrevious.EngineOn = enginePrevious.EngineOn; - testEnginePrevious.EnginePower = enginePrevious.EnginePower; - testEnginePrevious.dt = enginePrevious.dt; - testEnginePrevious.EngineSpeed = enginePrevious.EngineSpeed; - testEnginePrevious.EngineTorque = enginePrevious.EngineTorque; - testEnginePrevious.EngineTorqueOut = enginePrevious.EngineTorqueOut; - testEnginePrevious.DynamicFullLoadTorque = enginePrevious.DynamicFullLoadTorque; - - switch (TestPowertrain.CombustionEngine.EngineAux) { - case EngineAuxiliary engineAux: - engineAux.PreviousState.AngularSpeed = (engineInfo.EngineAux as EngineAuxiliary).PreviousState.AngularSpeed; - break; - case BusAuxiliariesAdapter busAux: - busAux.PreviousState.AngularSpeed = (engineInfo.EngineAux as BusAuxiliariesAdapter).PreviousState.AngularSpeed; - if (busAux.ElectricStorage is SimpleBattery bat) { - bat.SOC = (engineInfo.EngineAux as BusAuxiliariesAdapter) - .ElectricStorage - .SOC; - } - break; - } - - if (TestPowertrain.DCDCConverter != null) { - TestPowertrain.DCDCConverter.PreviousState.ConsumedEnergy = - (DataBus.DCDCConverter as DCDCConverter).PreviousState.ConsumedEnergy; - } - - if (TestPowertrain.WHRCharger != null) { - TestPowertrain.WHRCharger.PreviousState.GeneratedEnergy = - DataBus.WHRCharger.PreviousState.GeneratedEnergy; - TestPowertrain.WHRCharger.PreviousState.ExcessiveEnergy = - DataBus.WHRCharger.PreviousState.ExcessiveEnergy; - } - - TestPowertrain.Gearbox.PreviousState.OutAngularVelocity = gearboxInfo.PreviousState.OutAngularVelocity; - TestPowertrain.Gearbox.PreviousState.InAngularVelocity = gearboxInfo.PreviousState.InAngularVelocity; - TestPowertrain.Gearbox._powershiftLossEnergy = gearboxInfo._powershiftLossEnergy; - TestPowertrain.Gearbox.PreviousState.PowershiftLossEnergy = gearboxInfo.PreviousState.PowershiftLossEnergy; - TestPowertrain.Gearbox.LastShift = gearboxInfo.LastShift; - TestPowertrain.Gearbox.PreviousState.Gear = gearboxInfo.PreviousState.Gear; - + TestPowertrain.CombustionEngine.UpdateFrom(DataBus.EngineInfo); + TestPowertrain.Gearbox.UpdateFrom(DataBus.GearboxInfo); if (nextGear.TorqueConverterLocked.HasValue && !nextGear.TorqueConverterLocked.Value) { - var dataBusTorqueConverterInfo = DataBus.TorqueConverterInfo as TorqueConverter; - var prev = dataBusTorqueConverterInfo.PreviousState; - var testTCPrevious = TestPowertrain.TorqueConverter.PreviousState; - testTCPrevious.InAngularVelocity = prev.InAngularVelocity; - testTCPrevious.InTorque = prev.InTorque; - testTCPrevious.OutAngularVelocity = prev.OutAngularVelocity; - testTCPrevious.IgnitionOn = prev.IgnitionOn; + TestPowertrain.TorqueConverter.UpdateFrom(DataBus.TorqueConverterInfo); } - //TestPowertrain.Clutch.PreviousState.InAngularVelocity = - // (DataBus.ClutchInfo as SwitchableClutch).PreviousState.InAngularVelocity; - - //} - var pos = ModelData.ElectricMachinesData.FirstOrDefault().Item1; - TestPowertrain.ElectricMotor.ThermalBuffer = - (DataBus.ElectricMotorInfo(pos) as ElectricMotor).ThermalBuffer; - TestPowertrain.ElectricMotor.DeRatingActive = - (DataBus.ElectricMotorInfo(pos) as ElectricMotor).DeRatingActive; - + TestPowertrain.ElectricMotor.UpdateFrom(DataBus.ElectricMotorInfo(pos)); foreach (var emPos in TestPowertrain.ElectricMotorsUpstreamTransmission.Keys) { - TestPowertrain.ElectricMotorsUpstreamTransmission[pos].PreviousState.EMSpeed = - DataBus.ElectricMotorInfo(emPos).ElectricMotorSpeed; + TestPowertrain.ElectricMotorsUpstreamTransmission[pos].PreviousState.EMSpeed = DataBus.ElectricMotorInfo(emPos).ElectricMotorSpeed; } try { - var retVal = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, - outAngularVelocity, false); - - //if (retVal.Source is TorqueConverter) { - // return null; - //} - + var retVal = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false); retVal.HybridController.StrategySettings = cfg; return retVal; } catch (Exception e) { @@ -422,22 +222,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies } - // ===================================================== - public abstract class AbstractHybridStrategy<T> : LoggingObject, IHybridControlStrategy where T : class, IHybridControlledGearbox, IGearbox { - public class StrategyState { public PerSecond AngularVelocity { get; set; } public HybridStrategyResponse Response { get; set; } public List<HybridResultEntry> Evaluations; public HybridResultEntry Solution { get; set; } - public bool GearboxEngaged { get; set; } - public Second ICEStartTStmp { get; set; } - public Second GearshiftTriggerTstmp { get; set; } public NewtonMeter MaxGbxTq { get; set; } public bool ICEOn { get; set; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs index 2b7d1dac35..78f5fa87f6 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs @@ -19,104 +19,47 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies { - public class SerialHybridStrategyAT : AbstractSerialHybridStrategy<APTNGearbox> { public SerialHybridStrategyAT(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) + protected override DrivetrainDemand GetDrivetrainPowerDemand(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, GenSetOperatingPoint maxPowerGenset) { - if (TestPowertrain.Gearbox != null) { - var gearboxInfo = DataBus.GearboxInfo as APTNGearbox; - if (gearboxInfo == null) { - throw new VectoException("AT Gearbox Required!"); - } - var currentGear = DataBus.VehicleInfo.VehicleStopped - ? gearboxInfo.NextGear - : DataBus.GearboxInfo.Gear; + TestPowertrain.UpdateComponents(); - TestPowertrain.Gearbox.PreviousState.InAngularVelocity = - gearboxInfo.PreviousState.InAngularVelocity; + if (TestPowertrain.Gearbox != null) { + var gearboxInfo = DataBus.GearboxInfo as APTNGearbox ?? throw new VectoException("AT Gearbox Required!"); + var currentGear = DataBus.VehicleInfo.VehicleStopped ? gearboxInfo.NextGear : DataBus.GearboxInfo.Gear; TestPowertrain.Gearbox.Disengaged = gearboxInfo.Disengaged; TestPowertrain.Gearbox.DisengageGearbox = gearboxInfo.DisengageGearbox; TestPowertrain.Gearbox.Gear = currentGear; TestPowertrain.Gearbox._nextGear = gearboxInfo.NextGear; } TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>()); - (TestPowertrain.Container.VehicleInfo as Vehicle).PreviousState.Velocity = - (DataBus.VehicleInfo as Vehicle).PreviousState.Velocity; - - TestPowertrain.ElectricMotor.ThermalBuffer = - (DataBus.ElectricMotorInfo(EmPosition) as ElectricMotor).ThermalBuffer; - TestPowertrain.ElectricMotor.DeRatingActive = - (DataBus.ElectricMotorInfo(EmPosition) as ElectricMotor).DeRatingActive; - - TestPowertrain.Battery?.Initialize(DataBus.BatteryInfo.StateOfCharge); - if (TestPowertrain.Battery != null) { - TestPowertrain.Battery.PreviousState.PulseDuration = - (DataBus.BatteryInfo as Battery).PreviousState.PulseDuration; - TestPowertrain.Battery.PreviousState.PowerDemand = - (DataBus.BatteryInfo as Battery).PreviousState.PowerDemand; - } - if (TestPowertrain.BatterySystem != null) { - var batSystem = DataBus.BatteryInfo as BatterySystem; - foreach (var bsKey in batSystem.Batteries.Keys) { - for (var i = 0; i < batSystem.Batteries[bsKey].Batteries.Count; i++) { - TestPowertrain.BatterySystem.Batteries[bsKey].Batteries[i] - .Initialize(batSystem.Batteries[bsKey].Batteries[i].StateOfCharge); - } - } - TestPowertrain.BatterySystem.PreviousState.PulseDuration = - (DataBus.BatteryInfo as BatterySystem).PreviousState.PulseDuration; - TestPowertrain.BatterySystem.PreviousState.PowerDemand = (DataBus.BatteryInfo as BatterySystem).PreviousState.PowerDemand; - } - - TestPowertrain.Charger.ChargingPower = maxPowerGenset.ElectricPower; - - if (TestPowertrain.WHRCharger != null) { - TestPowertrain.WHRCharger.PreviousState.GeneratedEnergy = - DataBus.WHRCharger.PreviousState.GeneratedEnergy; - TestPowertrain.WHRCharger.PreviousState.ExcessiveEnergy = - DataBus.WHRCharger.PreviousState.ExcessiveEnergy; - } - - TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, - Controller.PreviousState.OutAngularVelocity); - - if (TestPowertrain.Gearbox != null) { - var gearboxInfo = DataBus.GearboxInfo as APTNGearbox; - TestPowertrain.Gearbox.PreviousState.OutAngularVelocity = gearboxInfo.PreviousState.OutAngularVelocity; - TestPowertrain.Gearbox.PreviousState.InAngularVelocity = gearboxInfo.PreviousState.InAngularVelocity; - } - + TestPowertrain.Charger.UpdateFrom(maxPowerGenset); + TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, Controller.PreviousState.OutAngularVelocity); + TestPowertrain.Gearbox?.UpdateFrom(DataBus.GearboxInfo); + TestPowertrain.Brakes.BrakePower = DataBus.Brakes.BrakePower; - 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 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() { + 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 } @@ -131,77 +74,32 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies protected override DrivetrainDemand GetDrivetrainPowerDemand(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, GenSetOperatingPoint maxPowerGenset) { - if (TestPowertrain.Gearbox != null) { - var currentGear = DataBus.VehicleInfo.VehicleStopped - ? (DataBus.GearboxInfo as Gearbox).NextGear - : DataBus.GearboxInfo.Gear; - - TestPowertrain.Gearbox.PreviousState.InAngularVelocity = - (DataBus.GearboxInfo as Gearbox).PreviousState.InAngularVelocity; - TestPowertrain.Gearbox.Disengaged = (DataBus.GearboxInfo as Gearbox).Disengaged; - TestPowertrain.Gearbox.DisengageGearbox = (DataBus.GearboxInfo as Gearbox).DisengageGearbox; - TestPowertrain.Gearbox.Gear = currentGear; - TestPowertrain.Gearbox._nextGear = (DataBus.GearboxInfo as Gearbox).NextGear; - } - TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>()); + TestPowertrain.UpdateComponents(); - TestPowertrain.ElectricMotor.ThermalBuffer = - (DataBus.ElectricMotorInfo(EmPosition) as ElectricMotor).ThermalBuffer; - TestPowertrain.ElectricMotor.DeRatingActive = - (DataBus.ElectricMotorInfo(EmPosition) as ElectricMotor).DeRatingActive; - - TestPowertrain.Battery?.Initialize(DataBus.BatteryInfo.StateOfCharge); - if (TestPowertrain.Battery != null) { - TestPowertrain.Battery.PreviousState.PulseDuration = - (DataBus.BatteryInfo as Battery).PreviousState.PulseDuration; - TestPowertrain.Battery.PreviousState.PowerDemand = - (DataBus.BatteryInfo as Battery).PreviousState.PowerDemand; - } - if (TestPowertrain.BatterySystem != null) { - var batSystem = DataBus.BatteryInfo as BatterySystem; - foreach (var bsKey in batSystem.Batteries.Keys) { - for (var i = 0; i < batSystem.Batteries[bsKey].Batteries.Count; i++) { - TestPowertrain.BatterySystem.Batteries[bsKey].Batteries[i] - .Initialize(batSystem.Batteries[bsKey].Batteries[i].StateOfCharge); - } - } - TestPowertrain.BatterySystem.PreviousState.PulseDuration = - (DataBus.BatteryInfo as BatterySystem).PreviousState.PulseDuration; - TestPowertrain.BatterySystem.PreviousState.PowerDemand = (DataBus.BatteryInfo as BatterySystem).PreviousState.PowerDemand; - } - - TestPowertrain.Charger.ChargingPower = maxPowerGenset.ElectricPower; - - if (TestPowertrain.WHRCharger != null) { - TestPowertrain.WHRCharger.PreviousState.GeneratedEnergy = - DataBus.WHRCharger.PreviousState.GeneratedEnergy; - TestPowertrain.WHRCharger.PreviousState.ExcessiveEnergy = - DataBus.WHRCharger.PreviousState.ExcessiveEnergy; - } - - TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, - Controller.PreviousState.OutAngularVelocity); - TestPowertrain.Brakes.BrakePower = DataBus.Brakes.BrakePower; if (TestPowertrain.Gearbox != null) { - TestPowertrain.Gearbox.PreviousState.InAngularVelocity = - (DataBus.GearboxInfo as Gearbox).PreviousState.InAngularVelocity; + var g = DataBus.GearboxInfo as Gearbox ?? throw new VectoException("AMT Gearbox Required!"); + TestPowertrain.Gearbox.Disengaged = g.Disengaged; + TestPowertrain.Gearbox.DisengageGearbox = g.DisengageGearbox; + TestPowertrain.Gearbox.Gear = DataBus.VehicleInfo.VehicleStopped ? g.NextGear : DataBus.GearboxInfo.Gear; + TestPowertrain.Gearbox._nextGear = g.NextGear; } - var testResponse = - TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false); - TestPowertrain.HybridController.ApplyStrategySettings(new HybridStrategyResponse() { + TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>()); + TestPowertrain.Charger.UpdateFrom(maxPowerGenset); + TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, Controller.PreviousState.OutAngularVelocity); + TestPowertrain.Gearbox?.UpdateFrom(DataBus.GearboxInfo); + + TestPowertrain.Brakes.BrakePower = DataBus.Brakes.BrakePower; + + 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) - } + 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() { + 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, -- GitLab