From 0bb1a19f1dd03b89a5fcb6947741512f45c51e3b Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <quaritsch@ivt.tugraz.at>
Date: Mon, 6 Mar 2023 14:03:31 +0100
Subject: [PATCH] hybrid strategy: bugfix vehicle propulsion torque limits and
 AT gearbox

---
 .../Strategies/HybridStrategy.cs                | 17 +++++++++++++----
 .../P2 Group 5_LimitVehiclePropTq.vecto         |  1 -
 .../P3 APT Group 5_LimitVehiclePropTq.vecto     |  1 -
 3 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
index 943ffed1da..b27574109a 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
@@ -572,8 +572,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 								dryRunResponse.ElectricMotor.AvgDrivetrainSpeed;
 					var gbxOutTqV = dryRunResponse.Gearbox.OutputTorque - emTq;
 
-					var prevGbxSpeed = (DataBus.GearboxInfo as AbstractGearbox<GearboxState>).PreviousState
-						.OutAngularVelocity;
+					var prevGbxSpeed = GetPrevGbxSpeed();
 					var gbxLoss = ModelData.GearboxData.Gears[gear.Gear].LossMap
 						.GetTorqueLoss((dryRunResponse.Gearbox.OutputSpeed + prevGbxSpeed) / 2.0, gbxOutTqV);
 					gbxInTq = gbxOutTqV / ModelData.GearboxData.Gears[gear.Gear].Ratio + gbxLoss.Value;
@@ -597,8 +596,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 						gbxInTorque = anglInTorque;
 					}
 					var gear = dryRunResponse.Gearbox.Gear;
-					var prevGbxSpeed = (DataBus.GearboxInfo as AbstractGearbox<GearboxState>).PreviousState
-						.OutAngularVelocity;
+					var prevGbxSpeed = GetPrevGbxSpeed();
 					var gbxLoss = ModelData.GearboxData.Gears[gear.Gear].LossMap
 						.GetTorqueLoss((dryRunResponse.Gearbox.OutputSpeed + prevGbxSpeed) / 2.0, gbxInTorque);
 					gbxInTq = gbxInTorque / ModelData.GearboxData.Gears[gear.Gear].Ratio + gbxLoss.Value;
@@ -609,6 +607,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 			return gbxInTq;
 		}
 
+		private PerSecond GetPrevGbxSpeed()
+		{
+			switch (DataBus.GearboxInfo) {
+				case Gearbox gbx:
+					return gbx.PreviousState.OutAngularVelocity;
+				case ATGearbox atGbx:
+					return atGbx.PreviousState.OutAngularVelocity;
+				default: throw new VectoException("Unsupported gearbox type!");
+			}
+		}
+
 		public void OperatingpointChangedDuringRequest(Second absTime, Second dt, NewtonMeter outTorque,
 			PerSecond outAngularVelocity,
 			bool dryRun, IResponse retVal)
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/2nd_AmendmDeclMode/JSON/P_HEV/Group5_P2/P2 Group 5_LimitVehiclePropTq.vecto b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/2nd_AmendmDeclMode/JSON/P_HEV/Group5_P2/P2 Group 5_LimitVehiclePropTq.vecto
index 1d9670246f..cd2de67757 100644
--- a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/2nd_AmendmDeclMode/JSON/P_HEV/Group5_P2/P2 Group 5_LimitVehiclePropTq.vecto	
+++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/2nd_AmendmDeclMode/JSON/P_HEV/Group5_P2/P2 Group 5_LimitVehiclePropTq.vecto	
@@ -17,7 +17,6 @@
     "AuxiliaryAssembly": "Classic",
     "AuxiliaryVersion": "CLASSIC",
     "AdvancedAuxiliaryFilePath": "",
-    "Aux": [],
     "Padd": 3000.0,
     "Padd_electric": 0.0,
     "VACC": "Vehicle\\Truck.vacc",
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/2nd_AmendmDeclMode/JSON/P_HEV/Group5_P3_APT/P3 APT Group 5_LimitVehiclePropTq.vecto b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/2nd_AmendmDeclMode/JSON/P_HEV/Group5_P3_APT/P3 APT Group 5_LimitVehiclePropTq.vecto
index 66759402c4..a739bc00dc 100644
--- a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/2nd_AmendmDeclMode/JSON/P_HEV/Group5_P3_APT/P3 APT Group 5_LimitVehiclePropTq.vecto	
+++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/2nd_AmendmDeclMode/JSON/P_HEV/Group5_P3_APT/P3 APT Group 5_LimitVehiclePropTq.vecto	
@@ -17,7 +17,6 @@
     "AuxiliaryAssembly": "Classic",
     "AuxiliaryVersion": "CLASSIC",
     "AdvancedAuxiliaryFilePath": "",
-    "Aux": [],
     "Padd": 3000.0,
     "Padd_electric": 0.0,
     "VACC": "Vehicle\\Truck.vacc",
-- 
GitLab