From f6a05ddd5c62ea703df17ccffb5740439be766db Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Wed, 22 Jun 2022 09:12:45 +0200 Subject: [PATCH] fix parsing of powertrain position for Genset (passing position prefix as separate argument fix testcases: transmission type not set correctly, shiftpolygon-calc for hybrids --- .../VectoCommon/Models/PowertrainPosition.cs | 27 +++++++++++-------- .../XMLDeclarationVehicleDataProvider.cs | 2 +- ...ricMachinesDeclarationInputDataProvider.cs | 2 +- .../Simulation/Impl/PowertrainBuilder.cs | 1 + .../Integration/Hybrid/ParallelHybridTest.cs | 1 + 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/VectoCommon/VectoCommon/Models/PowertrainPosition.cs b/VectoCommon/VectoCommon/Models/PowertrainPosition.cs index 41b3a203fb..2c9753bde1 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 2012d6daea..43d1ac7330 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 a4abc2cbdf..6a73d928db 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 f9fc271aaa..3a9b506cfc 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 61e790c8f0..2f6c82d680 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 }; } -- GitLab