diff --git a/VectoCommon/VectoCommon/Models/PowertrainPosition.cs b/VectoCommon/VectoCommon/Models/PowertrainPosition.cs index 41b3a203fbe3579061951bf0cc748329eae6b439..2c9753bde1da886c019e15285802d62fffc786db 100644 --- a/VectoCommon/VectoCommon/Models/PowertrainPosition.cs +++ b/VectoCommon/VectoCommon/Models/PowertrainPosition.cs @@ -29,28 +29,33 @@ namespace TUGraz.VectoCommon.InputData public const string HybridPrefix = "Hybrid"; public const string BatteryElectricPrefix = "BatteryElectric"; - public static PowertrainPosition Parse(string pos) + public static PowertrainPosition Parse(string prefix, string pos) { if (pos.Equals(nameof(PowertrainPosition.GEN))) { return PowertrainPosition.GEN; } - - if (pos.StartsWith("P", StringComparison.InvariantCultureIgnoreCase)) { - return (HybridPrefix + pos).Replace(".", "_").ParseEnum<PowertrainPosition>(); + if (pos.Equals(nameof(PowertrainPosition.IHPC), StringComparison.InvariantCultureIgnoreCase)) { + return PowertrainPosition.IHPC; } - if (pos.StartsWith("B", StringComparison.InvariantCultureIgnoreCase)) { - return (BatteryElectricPrefix + pos.Replace("B", "E")).ParseEnum<PowertrainPosition>(); + if (prefix.Equals("P", StringComparison.InvariantCultureIgnoreCase)) { + return (HybridPrefix + prefix + pos).Replace(".", "_").ParseEnum<PowertrainPosition>(); } - if (pos.StartsWith("E", StringComparison.InvariantCultureIgnoreCase)) { - return (BatteryElectricPrefix + pos).ParseEnum<PowertrainPosition>(); + + if (prefix.Equals("B", StringComparison.InvariantCultureIgnoreCase) || prefix.Equals("E", StringComparison.InvariantCultureIgnoreCase)) { + return (BatteryElectricPrefix + prefix + pos.Replace("B", "E")).ParseEnum<PowertrainPosition>(); } + + throw new VectoException("invalid powertrain position {0}", pos); + } - if (pos.Equals(nameof(PowertrainPosition.IHPC), StringComparison.InvariantCultureIgnoreCase)) { - return PowertrainPosition.IHPC; + public static PowertrainPosition Parse(string pos) + { + if (pos.Length > 1 && pos[0].IsOneOf('B', 'P', 'E')) { + return Parse(pos.Substring(0, 1), pos.Substring(1)); } - throw new VectoException("invalid powertrain position {0}", pos); + return Parse("", pos); } public static string GetName(this PowertrainPosition pos) diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs index 2012d6daea235ebf055ff5108872254d1106f20e..43d1ac73300e541ac0d9354cd1abab13c3acbeaf 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs @@ -712,7 +712,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider foreach (XmlNode electricMachineNode in electricMachineNodes) { var powertrainPosition = - PowertrainPositionHelper.Parse(PowertrainPositionPrefix + GetString(XMLNames.ElectricMachine_Position, electricMachineNode)); + PowertrainPositionHelper.Parse(PowertrainPositionPrefix, GetString(XMLNames.ElectricMachine_Position, electricMachineNode)); if (!motorTorqueLimits.ContainsKey(powertrainPosition)) motorTorqueLimits.Add(powertrainPosition, new List<Tuple<Volt, TableData>>()); diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMachinesDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMachinesDeclarationInputDataProvider.cs index a4abc2cbdf8deb6c05f504c065eef5d6ee35a5e2..6a73d928db4c734bbbc058fbead8467010dc0b0b 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMachinesDeclarationInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMachinesDeclarationInputDataProvider.cs @@ -38,7 +38,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider private List<ElectricMachineEntry<IElectricMotorDeclarationInputData>> GetEntries() { var machineEntry = new ElectricMachineEntry<IElectricMotorDeclarationInputData> { - Position = PowertrainPositionHelper.Parse(((AbstractXMLVehicleDataProviderV24)_vehicle).PowertrainPositionPrefix + + Position = PowertrainPositionHelper.Parse(((AbstractXMLVehicleDataProviderV24)_vehicle).PowertrainPositionPrefix, GetString(XMLNames.ElectricMachine_PowertrainPosition)), Count = XmlConvert.ToInt32(GetString(XMLNames.ElectricMachine_Count)), ElectricMachine = ElectricMachineSystemReader.CreateElectricMachineSystem(GetNode(XMLNames.ElectricMachineSystem)), diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index 7566e08ec0a5f1ed6b45613ed5682e3248bd52d7..0fae92d6312ad372e901b6a82813e084be0dcfcf 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -1567,6 +1567,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl case GearboxType.AMT: switch (runData.JobType) { case VectoSimulationJobType.ConventionalVehicle: + case VectoSimulationJobType.ParallelHybridVehicle: runData.ShiftStrategy = AMTShiftStrategyOptimized.Name; return new AMTShiftStrategyOptimized(container); case VectoSimulationJobType.BatteryElectricVehicle: diff --git a/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs b/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs index 61e790c8f0188195b11e842ea5cfb6fdd8dd5098..2f6c82d6805506cfcd7a12c0d28ed21409a90d83 100644 --- a/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs @@ -1900,6 +1900,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid })).ToDictionary(k => k.Item1 + 1, v => v.Item2), Inertia = 0.SI<KilogramSquareMeter>(), TractionInterruption = 1.SI<Second>(), + Type = GearboxType.AMT }; }