diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs index 1914c84b12eb144d7233750807c983bd5c5e7c4b..db25da347b4f141c6fb5132e1831ce181cc29485 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs @@ -696,6 +696,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies var tmp = TestGenSet.ElectricMotor.Request(absTime, dt, 0.SI<NewtonMeter>(), iceSpeed, true) as ResponseDryRun; delta = tmp.DeltaFullLoad; } + + var origIceSpeed = iceSpeed; iceSpeed = SearchAlgorithm.Search(iceSpeed, delta, iceSpeed * 0.01, getYValue: r => { var dryRun = r as ResponseDryRun; @@ -713,6 +715,28 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies return searchFullLoad ? dryRun.DeltaFullLoad.Value() : dryRun.DeltaDragLoad.Value(); }, searcher: this); + if (!iceSpeed.IsBetween(DataBus.EngineInfo.EngineIdleSpeed, DataBus.EngineInfo.EngineN95hSpeed)) { + iceSpeed = SearchAlgorithm.Search(origIceSpeed, delta, origIceSpeed * 0.01, + getYValue: r => { + var dryRun = r as ResponseDryRun; + return searchFullLoad ? dryRun.DeltaFullLoad : dryRun.DeltaDragLoad; + }, + evaluateFunction: x => { + var tmp = TestGenSet.ElectricMotor.Request(absTime, dt, 0.SI<NewtonMeter>(), x, true); + tmpEmTqDt = tqDt?.LimitTo(tmp.ElectricMotor.MaxDriveTorque ?? 0.SI<NewtonMeter>(), + tmp.ElectricMotor.MaxRecuperationTorque ?? 0.SI<NewtonMeter>()); + TestGenSet.ElectricMotorCtl.EMTorque = tmpEmTqDt; + return TestGenSet.ElectricMotor.Request(absTime, dt, 0.SI<NewtonMeter>(), x, true); + }, + criterion: r => { + var dryRun = r as ResponseDryRun; + return searchFullLoad ? dryRun.DeltaFullLoad.Value() : dryRun.DeltaDragLoad.Value(); + }, + searcher: this, forceLineSearch: true); + } + if (!iceSpeed.IsBetween(DataBus.EngineInfo.EngineIdleSpeed, DataBus.EngineInfo.EngineN95hSpeed)) { + throw new VectoException("failed to find ICE speed for GenSet"); + } emTqDt = tmpEmTqDt; TestGenSet.ElectricMotorCtl.EMTorque = emTqDt; var r1 = TestGenSet.ElectricMotor.Request(absTime, dt, 0.SI<NewtonMeter>(), iceSpeed);