diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs index 630f2da8bb0477bc49dc528f6f174cd6247bb5c5..8ef923828af37da0c9bc0a5704a39d2b8658f64d 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs @@ -505,6 +505,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var losses = (CurrentState.EmTorqueMap ?? 0.SI<NewtonMeter>()) * avgEMSpeed - CurrentState.ElectricPowerToBattery; var contribution = (losses - ModelData.Overload.ContinuousPowerLoss) * simulationInterval; + if (DeRatingActive && contribution.IsGreater(0)) { + contribution = 0.SI<WattSecond>(); + } + + if (ThermalBuffer + contribution > ModelData.Overload.OverloadBuffer) { + contribution = (ModelData.Overload.OverloadBuffer - ThermalBuffer).Cast<WattSecond>(); + } if (ModelData.Overload.OverloadBuffer.Value() != 0) { // mk2021-08-03 overloadbuffer was 0 in Test Case: "ADASTestPEV.TestPCCEngineeringSampleCases G5Eng PCC12 Case A" container[ModalResultField.ElectricMotor_OvlBuffer_, Position] = VectoMath.Max(0, (ThermalBuffer + contribution) / ModelData.Overload.OverloadBuffer); } @@ -518,7 +525,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { var avgSpeed = (PreviousState.EMSpeed + CurrentState.EMSpeed) / 2; var losses = (CurrentState.EMTorque ?? 0.SI<NewtonMeter>()) * avgSpeed - CurrentState.ElectricPowerToBattery; - ThermalBuffer += (losses - ModelData.Overload.ContinuousPowerLoss) * simulationInterval; + var contribution = (losses - ModelData.Overload.ContinuousPowerLoss) * simulationInterval; + if (DeRatingActive && contribution.IsGreater(0)) { + contribution = 0.SI<WattSecond>(); + } + if (ThermalBuffer + contribution > ModelData.Overload.OverloadBuffer) { + contribution = (ModelData.Overload.OverloadBuffer - ThermalBuffer).Cast<WattSecond>(); + } + ThermalBuffer += contribution; + if (ThermalBuffer < 0) { ThermalBuffer = 0.SI<Joule>(); } @@ -528,7 +543,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl DeRatingActive = false; } } else { - if (ThermalBuffer.IsGreater(ModelData.Overload.OverloadBuffer)) { + if (ThermalBuffer.IsGreaterOrEqual(ModelData.Overload.OverloadBuffer)) { DeRatingActive = true; } }