From e4b59e2af3c7ff11fd5fdf52de44ed0b43cecae7 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Wed, 1 Jun 2022 10:07:47 +0200
Subject: [PATCH] PTO for S2 hbrids works

---
 .../Simulation/Impl/PowertrainBuilder.cs      | 31 +++++++++++++++++--
 .../VectoCore/Utils/ProviderExtensions.cs     | 13 ++++++++
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
index 81ffafc6af..1c27f14908 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
@@ -608,6 +608,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 						.AddComponent(GetRetarder(RetarderType.TransmissionOutputRetarder, data.Retarder, container))
 						.AddComponent(gearbox)
 						.AddComponent(GetRetarder(RetarderType.TransmissionInputRetarder, data.Retarder, container))
+						.AddComponent(GetPEVPTO(container, data))
 						.AddComponent(GetElectricMachine(PowertrainPosition.BatteryElectricE2,
 							data.ElectricMachinesData, container, es, ctl));
 					new ATClutchInfo(container);
@@ -637,7 +638,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 			ctl.GenSet.AddComponent(GetElectricMachine(PowertrainPosition.GEN, data.ElectricMachinesData, container, es, ctl))
 				.AddComponent(engine, idleController)
-				.AddAuxiliaries(container, data);
+				.AddAuxiliariesSerialHybrid(container, data);
 
 			return container;
 		}
@@ -725,7 +726,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 						.AddComponent(GetRetarder(RetarderType.TransmissionOutputRetarder, data.Retarder, container))
 						.AddComponent(gearbox)
 						.AddComponent(GetRetarder(RetarderType.TransmissionInputRetarder, data.Retarder, container))
-						.AddComponent(data.PTO != null ? GetPEVPTO(container, data): null)
+						.AddComponent(GetPEVPTO(container, data))
 						.AddComponent(em);
 
 					new ATClutchInfo(container);
@@ -1141,6 +1142,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 						.AddComponent(GetRetarder(RetarderType.TransmissionOutputRetarder, data.Retarder, container))
 						.AddComponent(gearbox)
 						.AddComponent(GetRetarder(RetarderType.TransmissionInputRetarder, data.Retarder, container))
+						.AddComponent(GetPEVPTO(container, data))
 						.AddComponent(GetElectricMachine(PowertrainPosition.BatteryElectricE2,
 							data.ElectricMachinesData, container, es, ctl));
 					break;
@@ -1479,6 +1481,31 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			return aux;
 		}
 
+		internal static EngineAuxiliary CreateAuxiliariesSerialHybrid(VectoRunData data,
+			IVehicleContainer container)
+		{
+			var aux = new EngineAuxiliary(container);
+			foreach (var auxData in data.Aux) {
+				// id's in upper case
+				var id = auxData.ID.ToUpper();
+
+				switch (auxData.DemandType) {
+					case AuxiliaryDemandType.Constant:
+						aux.AddConstant(id, auxData.PowerDemand);
+						break;
+					case AuxiliaryDemandType.Direct:
+						aux.AddCycle(id);
+						break;
+					default:
+						throw new ArgumentOutOfRangeException("AuxiliaryDemandType", auxData.DemandType.ToString());
+				}
+
+				container.ModalData?.AddAuxiliary(id);
+			}
+
+			return aux;
+		}
+
 		private EngineAuxiliary CreateSpeedDependentAuxiliaries(VectoRunData data, IVehicleContainer container)
 		{
 			var aux = new EngineAuxiliary(container);
diff --git a/VectoCore/VectoCore/Utils/ProviderExtensions.cs b/VectoCore/VectoCore/Utils/ProviderExtensions.cs
index a18d4ebe90..f41c29ba56 100644
--- a/VectoCore/VectoCore/Utils/ProviderExtensions.cs
+++ b/VectoCore/VectoCore/Utils/ProviderExtensions.cs
@@ -53,6 +53,19 @@ namespace TUGraz.VectoCore.Utils
 			}
 		}
 
+		public static void AddAuxiliariesSerialHybrid(this CombustionEngine engine, IVehicleContainer container,
+			VectoRunData data)
+		{
+			// aux --> engine
+			if (data.BusAuxiliaries != null) {
+				engine.Connect(PowertrainBuilder.CreateAdvancedAuxiliaries(data, container).Port());
+			} else {
+				if (data.Aux != null) {
+					engine.Connect(PowertrainBuilder.CreateAuxiliariesSerialHybrid(data, container).Port());
+				}
+			}
+		}
+
 		public static IDriver AddComponent(this IDrivingCycleInProvider prev, IDriver next)
 		{
 			prev.InPort().Connect(next.OutPort());
-- 
GitLab