From 4ab5527e54745332460dafe5784d4b0ba21c9d01 Mon Sep 17 00:00:00 2001 From: "VKMTHD\\franzjosefkober" <franz.josef.kober@ivt.tugraz.at> Date: Wed, 15 Sep 2021 17:25:56 +0200 Subject: [PATCH] changed powertrain position handling --- .../VectoCommon/Models/PowertrainPosition.cs | 45 +---- .../XMLDeclarationVehicleDataProvider.cs | 171 +++++++++++++----- ...ricMachinesDeclarationInputDataProvider.cs | 5 +- 3 files changed, 133 insertions(+), 88 deletions(-) diff --git a/VectoCommon/VectoCommon/Models/PowertrainPosition.cs b/VectoCommon/VectoCommon/Models/PowertrainPosition.cs index 6634cbe8d8..cf25a4c8e7 100644 --- a/VectoCommon/VectoCommon/Models/PowertrainPosition.cs +++ b/VectoCommon/VectoCommon/Models/PowertrainPosition.cs @@ -25,13 +25,12 @@ namespace TUGraz.VectoCommon.InputData { public const string HybridPrefix = "Hybrid"; public const string BatteryElectriPrefix = "BatteryElectric"; - public static PowertrainPosition Parse(string pos, string schemaName) - { - return pos == nameof(PowertrainPosition.GEN) ? PowertrainPosition.GEN : Parse(GetPowertrainPositionType(pos, schemaName)); - } - public static PowertrainPosition Parse(string pos) { + if (pos.EndsWith(nameof(PowertrainPosition.GEN))) { + return PowertrainPosition.GEN; + } + if (pos.StartsWith("P",StringComparison.InvariantCultureIgnoreCase)) { return (HybridPrefix + pos).Replace(".", "_").ParseEnum<PowertrainPosition>(); } @@ -87,41 +86,5 @@ namespace TUGraz.VectoCommon.InputData { return false; } } - - private static string GetPowertrainPositionType(string pos, string schemaName) - { - switch (schemaName) { - case "Vehicle_HEV-Px_HeavyLorryDeclarationType": - case "Vehicle_HEV-Px_MediumLorryDeclarationType": - case "Vehicle_HEV-Px_PrimaryBusDeclarationType": - case "Components_HEV-Px_LorryType": - case "Components_HEV-Px_PrimaryBusType": - return $"P{pos}"; - case "Vehicle_HEV-Sx_HeavyLorryDeclarationType": - case "Vehicle_HEV-Sx_MediumLorryDeclarationType": - case "Vehicle_HEV-Sx_PrimaryBusDeclarationType": - case "Vehicle_HEV-IEPC-S_HeavyLorryDeclarationType": - case "Vehicle_HEV-IEPC-S_MediumLorryDeclarationType": - case "Vehicle_HEV-IEPC-S_PrimaryBusDeclarationType": - case "Vehicle_PEV_HeavyLorryDeclarationType": - case "Vehicle_PEV_MediumLorryDeclarationType": - case "Vehicle_PEV_PrimaryBusDeclarationType": - case "Components_HEV-S2_LorryType": - case "Components_HEV-S3_LorryType": - case "Components_HEV-S4_LorryType": - case "Components_HEV-S2_PrimaryBusType": - case "Components_HEV-S3_PrimaryBusType": - case "Components_HEV-S4_PrimaryBusType": - case "Components_PEV-E2_LorryType": - case "Components_PEV-E3_LorryType": - case "Components_PEV-E4_LorryType": - case "Components_PEV-E2_PrimaryBusType": - case "Components_PEV-E3_PrimaryBusType": - case "Components_PEV-E4_PrimaryBusType": - return $"E{pos}"; - default: - return null; - } - } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs index f1b59dbac9..581ed04d6f 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs @@ -1153,63 +1153,43 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider // --------------------------------------------------------------------------------------- - public class XMLDeclarationHEVPxHeavyLorryDataProviderV210 : XMLDeclarationVehicleDataProviderV20 + public abstract class XMLVehicleDataProviderHelperV201 : XMLDeclarationVehicleDataProviderV20 { - public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V210_JOBS; - public new const string XSD_TYPE = "Vehicle_HEV-Px_HeavyLorryDeclarationType"; - public new static readonly string QUALIFIED_XSD_TYPE = - XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + public virtual string PowertrainPositionPrefix => "P"; - public XMLDeclarationHEVPxHeavyLorryDataProviderV210( - IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) + protected XMLVehicleDataProviderHelperV201(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { } - #region Overrides of XMLDeclarationVehicleDataProviderV20 - - public override TankSystem? TankSystem => - ElementExists(XMLNames.Vehicle_NgTankSystem) - ? EnumHelper.ParseEnum<TankSystem>(GetString(XMLNames.Vehicle_NgTankSystem)) - : (TankSystem?)null; - - #endregion - - - #region Overrides of XMLDeclarationVehicleDataProviderV10 - - public override IList<ITorqueLimitInputData> TorqueLimits => - ElementExists(XMLNames.Vehicle_TorqueLimits) ? base.TorqueLimits : null; - - public override Dictionary<PowertrainPosition, List<Tuple<int, TableData>>> ElectricMotorTorqueLimits + + public override Dictionary<PowertrainPosition, List<Tuple<int, TableData>>> ElectricMotorTorqueLimits => ElementExists(XMLNames.ElectricMotorTorqueLimits) ? ReadElectricMotorTorqueLimits() : null; - + private Dictionary<PowertrainPosition, List<Tuple<int, TableData>>> ReadElectricMotorTorqueLimits() { var torqueLimitNodes = GetNodes(XMLNames.ElectricMotorTorqueLimits); var motorTorqueLimits = new Dictionary<PowertrainPosition, List<Tuple<int, TableData>>>(); - foreach (XmlNode torqueLimitNode in torqueLimitNodes) { - + foreach (XmlNode torqueLimitNode in torqueLimitNodes) + { var electricMachineNodes = GetNodes(XMLNames.ElectricMotorTorqueLimit_ElectricMachine, torqueLimitNode); if (electricMachineNodes == null || electricMachineNodes.Count == 0) return null; - - foreach (XmlNode electricMachineNode in electricMachineNodes) { + foreach (XmlNode electricMachineNode in electricMachineNodes) + { var powertrainPosition = - PowertrainPositionHelper.Parse( - GetString(XMLNames.ElectricMachine_Position, electricMachineNode), - BaseNode.SchemaInfo.SchemaType.Name); - - if(!motorTorqueLimits.ContainsKey(powertrainPosition)) + PowertrainPositionHelper.Parse(PowertrainPositionPrefix + GetString(XMLNames.ElectricMachine_Position, electricMachineNode)); + + if (!motorTorqueLimits.ContainsKey(powertrainPosition)) motorTorqueLimits.Add(powertrainPosition, new List<Tuple<int, TableData>>()); - - var voltageLevelNodes = GetNodes( XMLNames.ElectricMachine_VoltageLevel, electricMachineNode); - foreach (XmlNode voltageLevelNode in voltageLevelNodes) { + + var voltageLevelNodes = GetNodes(XMLNames.ElectricMachine_VoltageLevel, electricMachineNode); + foreach (XmlNode voltageLevelNode in voltageLevelNodes) + { var voltageLevel = ReadVoltageLevelNode(voltageLevelNode); motorTorqueLimits[powertrainPosition].Add(voltageLevel); } } - } return motorTorqueLimits.IsNullOrEmpty() ? null : motorTorqueLimits; @@ -1227,6 +1207,43 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider var maxTorqueCurve = XMLHelper.ReadTableData(mapping, entries); return new Tuple<int, TableData>(voltage, maxTorqueCurve); } + } + + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationHEVPxHeavyLorryDataProviderV210 : XMLVehicleDataProviderHelperV201 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V210_JOBS; + public new const string XSD_TYPE = "Vehicle_HEV-Px_HeavyLorryDeclarationType"; + public new static readonly string QUALIFIED_XSD_TYPE = + XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + #region Overrides of VehicleDataProviderHelper + + public override string PowertrainPositionPrefix => "P"; + + #endregion + + public XMLDeclarationHEVPxHeavyLorryDataProviderV210( + IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) + : base(jobData, xmlNode, sourceFile) { } + + #region Overrides of XMLDeclarationVehicleDataProviderV20 + + public override TankSystem? TankSystem => + ElementExists(XMLNames.Vehicle_NgTankSystem) + ? EnumHelper.ParseEnum<TankSystem>(GetString(XMLNames.Vehicle_NgTankSystem)) + : (TankSystem?)null; + + #endregion + + + #region Overrides of XMLDeclarationVehicleDataProviderV10 + + public override IList<ITorqueLimitInputData> TorqueLimits => + ElementExists(XMLNames.Vehicle_TorqueLimits) ? base.TorqueLimits : null; + public override TableData MaxPropulsionTorque => ElementExists(XMLNames.Vehicle_BoostingLimitation) @@ -1252,6 +1269,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public XMLDeclarationHEVPxMediumLorryDataProviderV210(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { } + #region Overrides of XMLDeclarationHEVPxHeavyLorryDataProviderV210 + + public override string PowertrainPositionPrefix => "P"; + + #endregion + #region Overrides of XMLDeclarationVehicleDataProviderV10 @@ -1268,7 +1291,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V210_JOBS; public new const string XSD_TYPE = "Vehicle_HEV-Px_PrimaryBusDeclarationType"; public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); - + + #region Overrides of XMLDeclarationHEVPxMediumLorryDataProviderV210 + + public override string PowertrainPositionPrefix => "P"; + + #endregion + public XMLDeclarationHEVPxPrimaryBusDataProviderV210(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { } } @@ -1280,7 +1309,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V210_JOBS; public new const string XSD_TYPE = "Vehicle_HEV-Sx_PrimaryBusDeclarationType"; public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); - + + #region Overrides of XMLDeclarationHEVPxMediumLorryDataProviderV210 + + public override string PowertrainPositionPrefix => "E"; + + #endregion + public XMLDeclarationHEVSxPrimaryBusDataProviderV210(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { } @@ -1302,7 +1337,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public new const string XSD_TYPE = "Vehicle_HEV-Sx_HeavyLorryDeclarationType"; public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); - + + #region Overrides of XMLDeclarationHEVPxHeavyLorryDataProviderV210 + + public override string PowertrainPositionPrefix => "E"; + + #endregion + public XMLDeclarationHEVSxHeavyLorryDataProviderV210(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { } @@ -1327,7 +1368,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V210_JOBS; public new const string XSD_TYPE = "Vehicle_HEV-Sx_MediumLorryDeclarationType"; public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); - + + #region Overrides of XMLDeclarationHEVSxHeavyLorryDataProviderV210 + + public override string PowertrainPositionPrefix => "E"; + + #endregion + public XMLDeclarationHEVSxMediumLorryDataProviderV210(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { } @@ -1342,12 +1389,18 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider // --------------------------------------------------------------------------------------- - public class XMLDeclarationHEVIEPCSHeavyLorryDataProviderV210 : XMLDeclarationVehicleDataProviderV20 + public class XMLDeclarationHEVIEPCSHeavyLorryDataProviderV210 : XMLVehicleDataProviderHelperV201 { public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V210_JOBS; public new const string XSD_TYPE = "Vehicle_HEV-IEPC-S_HeavyLorryDeclarationType"; public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); - + + #region Overrides of VehicleDataProviderHelper + + public override string PowertrainPositionPrefix => "E"; + + #endregion + public XMLDeclarationHEVIEPCSHeavyLorryDataProviderV210(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { } @@ -1380,6 +1433,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public new const string XSD_TYPE = "Vehicle_HEV-IEPC-S_MediumLorryDeclarationType"; public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + #region Overrides of XMLDeclarationHEVIEPCSHeavyLorryDataProviderV210 + + public override string PowertrainPositionPrefix => "E"; + + #endregion + public XMLDeclarationHEVIEPCSMediumLorryDataProviderV210(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { } @@ -1404,6 +1463,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public new const string XSD_TYPE = "Vehicle_HEV-IEPC-S_PrimaryBusDeclarationType"; public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + #region Overrides of XMLDeclarationHEVIEPCSHeavyLorryDataProviderV210 + + public override string PowertrainPositionPrefix => "E"; + + #endregion + public XMLDeclarationHEVIEPCSPrimaryBusDataProviderV210(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { } @@ -1425,6 +1490,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public new const string XSD_TYPE = "Vehicle_PEV_HeavyLorryDeclarationType"; public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + #region Overrides of XMLDeclarationHEVPxHeavyLorryDataProviderV210 + + public override string PowertrainPositionPrefix => "E"; + + #endregion public XMLDeclarationPEVHeavyLorryE2DataProviderV210(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { } @@ -1453,7 +1523,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V210_JOBS; public new const string XSD_TYPE = "Vehicle_PEV_MediumLorryDeclarationType"; public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); - + + #region Overrides of XMLDeclarationHEVPxHeavyLorryDataProviderV210 + + public override string PowertrainPositionPrefix => "E"; + + #endregion + public XMLDeclarationPEVMediumLorryExDataProviderV210(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { } @@ -1481,6 +1557,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V210_JOBS; public new const string XSD_TYPE = "Vehicle_PEV_PrimaryBusDeclarationType"; public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + #region Overrides of XMLDeclarationPEVMediumLorryExDataProviderV210 + + public override string PowertrainPositionPrefix => "E"; + + #endregion + public XMLDeclarationPEVPrimaryBusDataProviderV210(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMachinesDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMachinesDeclarationInputDataProvider.cs index 5733aea6d9..4a1e7c63a2 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMachinesDeclarationInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMachinesDeclarationInputDataProvider.cs @@ -39,9 +39,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider private List<ElectricMachineEntry<IElectricMotorDeclarationInputData>> GetEntries() { var machineEntry = new ElectricMachineEntry<IElectricMotorDeclarationInputData> { - Position = PowertrainPositionHelper.Parse( - GetString(XMLNames.ElectricMachine_PowertrainPosition), - BaseNode.ParentNode.SchemaInfo.SchemaType.Name), + Position = PowertrainPositionHelper.Parse(((XMLVehicleDataProviderHelperV201)_vehicle).PowertrainPositionPrefix + + GetString(XMLNames.ElectricMachine_PowertrainPosition)), Count = XmlConvert.ToInt32(GetString(XMLNames.ElectricMachine_Count)), ElectricMachine = ElectricMachineSystemReader.CreateElectricMachineSystem(GetNode(XMLNames.ElectricMachineSystem)), }; -- GitLab