From 6e3494831994eed46b8bbe8e9226689f73847af1 Mon Sep 17 00:00:00 2001
From: Michael Krisper <michael.krisper@tugraz.at>
Date: Mon, 20 Dec 2021 12:06:52 +0100
Subject: [PATCH] HybridStrategy: corrected AllowICEoff bug (added special case
 for P1+PCC+ESS)

---
 .../SimulationComponent/Strategies/HybridStrategy.cs | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
index 29e6547b26..dd7fc2e800 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
@@ -994,8 +994,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 
 		protected virtual bool AllowICEOff(Second absTime)
 		{
-			return PreviousState.ICEStartTStmp == null
-					|| (PreviousState.ICEStartTStmp + StrategyParameters.MinICEOnTime).IsSmaller(absTime);
+			//VECTO-1493 special case for P1: only allow turning ICE off if ESS is activated and PCC is currently active
+			var isPCC = DataBus.DriverInfo.PCCState.IsOneOf(PCCStates.UseCase1, PCCStates.UseCase2);
+			var isP1 = DataBus.PowertrainInfo.ElectricMotorPositions.Contains(PowertrainPosition.HybridP1);
+			if (isP1 && (!ModelData.VehicleData.ADAS.EngineStopStart || !isPCC))
+				return false;
+			
+			//normal case: only turn of ICE if ESS is activated and the minimal ICE on time is exceeded.
+			var MinICEonTimeExceeded = PreviousState.ICEStartTStmp is null
+				|| absTime.IsGreaterOrEqual(PreviousState.ICEStartTStmp + StrategyParameters.MinICEOnTime);
+			return ModelData.VehicleData.ADAS.EngineStopStart && MinICEonTimeExceeded;
 		}
 
 		protected virtual void HandleBrakeAction(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, bool dryRun, List<HybridResultEntry> eval)
-- 
GitLab