diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs index 09fc2a59f3350851db1fd61ebefe1c0b7c324ad3..e48a3bf27c6a1019c686987e37686491008c65c9 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs @@ -62,28 +62,30 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl true); var deltaEngine = (engineResponse.DeltaFullLoad > 0 ? engineResponse.DeltaFullLoad : 0.SI<Watt>()) + (engineResponse.DeltaDragLoad < 0 ? -engineResponse.DeltaDragLoad : 0.SI<Watt>()); - if (deltaTorqueConverter.IsEqual(0)) { - if (deltaEngine.IsEqual(0)) { - return new ResponseDryRun { - Source = this, - DeltaFullLoad = 0.SI<Watt>(), - DeltaDragLoad = 0.SI<Watt>(), - TorqueConverterOperatingPoint = dryOperatingPoint - }; - } + if (deltaTorqueConverter.IsEqual(0) && deltaEngine.IsEqual(0)) { return new ResponseDryRun { Source = this, - DeltaFullLoad = engineResponse.DeltaFullLoad, - DeltaDragLoad = engineResponse.DeltaDragLoad, + DeltaFullLoad = 0.SI<Watt>(), + DeltaDragLoad = 0.SI<Watt>(), TorqueConverterOperatingPoint = dryOperatingPoint }; } + if (engineResponse.DeltaFullLoad > 0 || engineResponse.DeltaDragLoad < 0) { + // engine is overloaded with current operating point, reduce torque... + dryOperatingPoint = + ModelData.GetOutTorqueAndSpeed( + outTorque > 0 ? engineResponse.EngineMaxTorqueOut : engineResponse.EngineDragTorque, + dryOperatingPoint.InAngularVelocity); + } + - var delta = deltaTorqueConverter.Value() * (deltaEngine.IsEqual(0) ? 1 : deltaEngine.Value()); + var delta = (outTorque - dryOperatingPoint.OutTorque) * + (PreviousState.OutAngularVelocity + dryOperatingPoint.OutAngularVelocity) / 2.0; + //deltaTorqueConverter.Value() * (deltaEngine.IsEqual(0) ? 1 : deltaEngine.Value()); return new ResponseDryRun() { Source = this, - DeltaFullLoad = delta.SI<Watt>(), - DeltaDragLoad = delta.SI<Watt>(), + DeltaFullLoad = delta, + DeltaDragLoad = delta, TorqueConverterOperatingPoint = dryOperatingPoint }; }