diff --git a/VECTO/Input Files/Battery.vb b/VECTO/Input Files/Battery.vb index e1923b4a0c0540f21da66f60f4cfba116cd59926..3fec3e90669ba49a2a544f55124a6abde3e2b3e0 100644 --- a/VECTO/Input Files/Battery.vb +++ b/VECTO/Input Files/Battery.vb @@ -223,12 +223,18 @@ Public Class Battery End Get End Property + Public ReadOnly Property BatteryType As BatteryType Implements IBatteryPackDeclarationInputData.BatteryType + Public ReadOnly Property Capacity As AmpereSecond Implements IBatteryPackDeclarationInputData.Capacity Get Return BatCapacity.SI(Unit.SI.Ampere.Hour).Cast(Of AmpereSecond) End Get End Property + Public ReadOnly Property ConnectorsSubsystemsIncluded As Boolean Implements IBatteryPackDeclarationInputData.ConnectorsSubsystemsIncluded + Public ReadOnly Property JunctionboxIncluded As Boolean Implements IBatteryPackDeclarationInputData.JunctionboxIncluded + Public ReadOnly Property TestingTemperature As Kelvin Implements IBatteryPackDeclarationInputData.TestingTemperature + Public ReadOnly Property InternalResistanceCurve As TableData Implements IBatteryPackDeclarationInputData.InternalResistanceCurve Get If Not File.Exists(_riCurvePath.FullPath) Then _ diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index 1f97ec2fa88d9b0609a626b8038bd7ab28bf8b78..a7caf65f06f273ea5f41a36a9e374d5d76896e01 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -984,7 +984,11 @@ Public Class ElectricStorageWrapper Public ReadOnly Property DigestValue As DigestData Implements IComponentInputData.DigestValue Public ReadOnly Property MinSOC As Double Implements IBatteryPackDeclarationInputData.MinSOC Public ReadOnly Property MaxSOC As Double Implements IBatteryPackDeclarationInputData.MaxSOC + Public ReadOnly Property BatteryType As BatteryType Implements IBatteryPackDeclarationInputData.BatteryType Public ReadOnly Property Capacity As AmpereSecond Implements IBatteryPackDeclarationInputData.Capacity + Public ReadOnly Property ConnectorsSubsystemsIncluded As Boolean Implements IBatteryPackDeclarationInputData.ConnectorsSubsystemsIncluded + Public ReadOnly Property JunctionboxIncluded As Boolean Implements IBatteryPackDeclarationInputData.JunctionboxIncluded + Public ReadOnly Property TestingTemperature As Kelvin Implements IBatteryPackDeclarationInputData.TestingTemperature Public ReadOnly Property InternalResistanceCurve As TableData Implements IBatteryPackDeclarationInputData.InternalResistanceCurve Public ReadOnly Property VoltageCurve As TableData Implements IBatteryPackDeclarationInputData.VoltageCurve Public ReadOnly Property MaxCurrentMap As TableData Implements IBatteryPackDeclarationInputData.MaxCurrentMap diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index 0431b29b56e369046f53d96ed52c963ab4d44423..858200a68fb7aee1ce4453844c396145a4132027 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -805,13 +805,20 @@ namespace TUGraz.VectoCommon.InputData public interface IBatteryPackDeclarationInputData : IREESSPackInputData { - double MinSOC { get; } double MaxSOC { get; } + BatteryType BatteryType { get; } + AmpereSecond Capacity { get; } + bool ConnectorsSubsystemsIncluded { get; } + + bool JunctionboxIncluded { get; } + + Kelvin TestingTemperature { get; } + TableData InternalResistanceCurve { get; } TableData VoltageCurve { get; } @@ -1103,5 +1110,29 @@ namespace TUGraz.VectoCommon.InputData } } + public enum BatteryType + { + HPBS, + HEBS + } + public static class BatteryTypeHelper + { + public static BatteryType Parse(string parse) + { + switch (parse) { + case nameof(BatteryType.HPBS): + return BatteryType.HPBS; + case nameof(BatteryType.HEBS): + return BatteryType.HEBS; + default: + throw new ArgumentOutOfRangeException(); + } + } + + public static string GetLabel(this BatteryType type) + { + return nameof(type); + } + } } \ No newline at end of file diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs index 74f812460a8d9255961f90008dce251dee57924e..88f2622dc2cf8dbc58069e84398c605e0e887588 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs +++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs @@ -1392,6 +1392,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to ElectricEnergyStorage. + /// </summary> + public static string Component_ElectricEnergyStorage { + get { + return ResourceManager.GetString("Component_ElectricEnergyStorage", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to ElectricMachine. /// </summary> @@ -1941,6 +1950,24 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to Battery. + /// </summary> + public static string ElectricEnergyStorage_Battery { + get { + return ResourceManager.GetString("ElectricEnergyStorage_Battery", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Capacitor. + /// </summary> + public static string ElectricEnergyStorage_Capacitor { + get { + return ResourceManager.GetString("ElectricEnergyStorage_Capacitor", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to ContinuousTorque. /// </summary> diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx index 6f9f544b5a259ea40f80b63403abb86aa00fa5ba..85480acf69afdea66407388c8fa812afd862ed89 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.resx +++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx @@ -1629,4 +1629,13 @@ <data name="ElectricMachineSystem" xml:space="preserve"> <value>ElectricMachineSystem</value> </data> + <data name="Component_ElectricEnergyStorage" xml:space="preserve"> + <value>ElectricEnergyStorage</value> + </data> + <data name="ElectricEnergyStorage_Battery" xml:space="preserve"> + <value>Battery</value> + </data> + <data name="ElectricEnergyStorage_Capacitor" xml:space="preserve"> + <value>Capacitor</value> + </data> </root> \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONBattery.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONBattery.cs index 41fa5ce3b234e2a74c548c10422bf7dbbf1bcbb8..a1da80d84cd82bb7e1640e653838b36f014434b3 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONBattery.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONBattery.cs @@ -29,8 +29,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public double MinSOC => Body.GetEx<double>("SOC_min") / 100.0; public double MaxSOC => Body.GetEx<double>("SOC_max") / 100.0; + public BatteryType BatteryType { get; } AmpereSecond IBatteryPackDeclarationInputData.Capacity => Body.GetEx<double>("Capacity").SI(Unit.SI.Ampere.Hour).Cast<AmpereSecond>(); + public bool ConnectorsSubsystemsIncluded { get; } + public bool JunctionboxIncluded { get; } + public Kelvin TestingTemperature => null; Farad ISuperCapDeclarationInputData.Capacity => Body.GetEx<double>("Capacity").SI<Farad>(); diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs index 1a6318cc194803991dae35b0438396c2713d3128..13070dc55b22f8c83dfd14172a031e86e4630556 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs @@ -60,6 +60,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider protected IXMLDeclarationVehicleData _vehicle; protected ITorqueConverterDeclarationInputData _torqueconverterInputData; protected IElectricMachinesDeclarationInputData _electricMachinesInputData; + protected IElectricStorageSystemDeclarationInputData _electricStorageSystemInputData; public XMLDeclarationComponentsDataProviderV10( @@ -94,7 +95,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public virtual IAxlesDeclarationInputData AxleWheels => _axleWheels ?? (_axleWheels = ComponentReader.AxlesDeclarationInputData); public virtual IBusAuxiliariesDeclarationData BusAuxiliaries => null; - public virtual IElectricStorageSystemDeclarationInputData ElectricStorage => null; + public virtual IElectricStorageSystemDeclarationInputData ElectricStorage => _electricStorageSystemInputData ?? (_electricStorageSystemInputData = ComponentReader.ElectricStorageSystem); public virtual IElectricMachinesDeclarationInputData ElectricMachines => _electricMachinesInputData ?? (_electricMachinesInputData = ComponentReader.ElectricMachines); diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs index edf664eebe745dd700790b7da5dad6fcd05acced..9d51cd067a036e0a1c038f43accdb4ef7440f962 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs @@ -1,8 +1,6 @@ using System.Collections.Generic; -using System.Runtime.CompilerServices; using System.Xml; using System.Xml.Linq; -using Castle.Components.DictionaryAdapter.Xml; using Castle.Core.Internal; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Resources; diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs new file mode 100644 index 0000000000000000000000000000000000000000..212c80e5b8e27b4623b768d2587a066e9401f123 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs @@ -0,0 +1,133 @@ +using System.Collections.Generic; +using System.Xml; +using System.Xml.Linq; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider +{ + public class XMLElectricStorageSystemDeclarationInputData : AbstractCommonComponentType, + IXMLElectricStorageSystemDeclarationInputData + { + public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V210_JOBS; + public const string XSD_TYPE = "ElectricEnergyStorageType"; + public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + private IList<IElectricStorageDeclarationInputData> _electricStorageElements; + + #region Implementation of IElectricStorageSystemDeclarationInputData + + public IList<IElectricStorageDeclarationInputData> ElectricStorageElements => + _electricStorageElements ?? (_electricStorageElements = GetElectricStorages()); + + #endregion + + public XMLElectricStorageSystemDeclarationInputData( + IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) + : base(componentNode, sourceFile) + { + + } + + #region Implementation of IXMLResource + + protected override XNamespace SchemaNamespace => NAMESPACE_URI; + protected override DataSourceType SourceType { get; } + + #endregion + + private IList<IElectricStorageDeclarationInputData> GetElectricStorages() + { + var electricStorages = new List<IElectricStorageDeclarationInputData>(); + + var batteries = GetNodes("Battery"); + if (!(batteries?.Count > 0)) + return null; + foreach (XmlNode battery in batteries) { + var electricStorage = new XMLElectricStorageDeclaration { + REESSPack = StorageTypeReader.CreateREESSInputData(battery, REESSType.Battery), + StringId = XmlConvert.ToInt32(GetString("StringID", battery)) + }; + electricStorages.Add(electricStorage); + } + + return electricStorages; + } + + #region Implementation of IXMLElectricStorageSystemDeclarationInputData + + public IXMLREESSReader StorageTypeReader { get; set; } + + #endregion + } + + public class XMLElectricStorageDeclaration : IElectricStorageDeclarationInputData + { + #region Implementation of IElectricStorageDeclarationInputData + + public IREESSPackInputData REESSPack { get; set; } + public int Count { get; set; } + public int StringId { get; set; } + + #endregion + } + + public class XMLBatteryPackDeclarationDeclarationInputData : AbstractCommonComponentType, + IXMLBatteryPackDeclarationInputData + { + public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V210_JOBS; + public const string XSD_TYPE = "REESSBatteryType"; + public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLBatteryPackDeclarationDeclarationInputData( XmlNode componentNode, string sourceFile) + : base(componentNode, sourceFile) + { + } + + #region Implementation of IREESSPackInputData + + public REESSType StorageType => REESSType.Battery; + + #endregion + + #region Implementation of IBatteryPackDeclarationInputData + + public double MinSOC => GetDouble("SOCmin", 0); + public double MaxSOC => GetDouble("SOCmax", 0); + public BatteryType BatteryType => BatteryTypeHelper.Parse(GetString("BatteryType")); + public AmpereSecond Capacity => GetDouble("RatedCapacity").SI<AmpereSecond>() * 3600; + public bool ConnectorsSubsystemsIncluded => GetBool("ConnectorsSubsystemsIncluded"); + public bool JunctionboxIncluded => GetBool("JunctionboxIncluded"); + public Kelvin TestingTemperature => GetDouble("TestingTemperature", 0).DegCelsiusToKelvin(); + + public TableData InternalResistanceCurve => ReadTableData("InternalResistance", "Entry", new Dictionary<string, string> { + {"SoC", "SoC"}, + {"R_2", "R_2"}, + {"R_10", "R_10"}, + {"R_20", "R_20"} + }); + + public TableData VoltageCurve => ReadTableData("OCV", "Entry", new Dictionary<string, string> { + {"SoC", "SoC"}, + {"OCV", "OCV"} + }); + + public TableData MaxCurrentMap => ReadTableData("CurrentLimits", "Entry", new Dictionary<string, string> { + {"SoC", "SoC"}, + {"maxChagingCurrent", "maxChagingCurrent"}, + {"maxDischargingCurrent", "maxDischargingCurrent"} + }); + + #endregion + + #region Overrides of AbstractXMLResource + + protected override XNamespace SchemaNamespace => NAMESPACE_URI; + protected override DataSourceType SourceType { get; } + + #endregion + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs index 1806663a47adb96eca29d16d794ed408787889ff..5c0df2a86d9b6b13ac33b19f28ef694929edd766 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs @@ -91,6 +91,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory IXMLElectricMotorDeclarationInputData CreateElectricMotorDeclarationInputData( string version, XmlNode componentNode, string sourceFile); + IXMLBatteryPackDeclarationInputData CreateBatteryPackDeclarationInputData( + string version, XmlNode componentNode, string sourceFile); + + ISuperCapDeclarationInputData CreateSuperCapDeclarationInputData( + string version, XmlNode componentNode, string sourceFile); + IXMLTorqueConverterDeclarationInputData CreateTorqueconverterData( string version, IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile); @@ -127,10 +133,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory IXMLElectricMachinesDeclarationInputData CreateElectricMachinesData(string version, IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile); - IXMLElectricMachineSystemReader CreateElectricMotorReader(string version, IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile); + IXMLElectricStorageSystemDeclarationInputData CreateElectricStorageSystemData(string version, + IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile); + + IXMLREESSReader CreateStorageTypeReader(string version, + IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile); + // --------------------------------------------------------------------------------------------- diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLBatteryPackDeclarationInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLBatteryPackDeclarationInputData.cs new file mode 100644 index 0000000000000000000000000000000000000000..ee563656beb13bdb0960115b0647de6c0f1c2057 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLBatteryPackDeclarationInputData.cs @@ -0,0 +1,8 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces +{ + public interface IXMLBatteryPackDeclarationInputData : IBatteryPackDeclarationInputData, IXMLResource + { + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLElectricStorageSystemDeclarationInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLElectricStorageSystemDeclarationInputData.cs new file mode 100644 index 0000000000000000000000000000000000000000..acf8421703e89ea90fbe0020f9b28831df5ef08a --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLElectricStorageSystemDeclarationInputData.cs @@ -0,0 +1,10 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces +{ + public interface IXMLElectricStorageSystemDeclarationInputData : IElectricStorageSystemDeclarationInputData, IXMLResource + { + IXMLREESSReader StorageTypeReader { set; } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLSuperCapDeclarationInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLSuperCapDeclarationInputData.cs new file mode 100644 index 0000000000000000000000000000000000000000..319cdb8f16af0fc4d2ae3722e0905d61ab6b77fd --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLSuperCapDeclarationInputData.cs @@ -0,0 +1,8 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces +{ + public interface IXMLSuperCapDeclarationInputData : ISuperCapDeclarationInputData, IXMLResource + { + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV210InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV210InjectModule.cs index f5b86de0bbb276448da84bdf4b54b5996e0d056b..48c48ce03f930bb14d371974cad0f35da2bbc13d 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV210InjectModule.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV210InjectModule.cs @@ -43,6 +43,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules Bind<IXMLElectricMachineSystemReader>().To<XMLElectricMachineSystemReaderV210>().Named(XMLElectricMachineSystemReaderV210.QUALIFIED_XSD_TYPE); + Bind<IXMLREESSReader>().To<XMLREESSReaderV210>().Named(XMLREESSReaderV210.QUALIFIED_XSD_TYPE); Bind<IXMLBusAuxiliariesDeclarationData>().To<XMLDeclarationCompletedBusAuxiliariesDataProviderV210>() .Named(XMLDeclarationCompletedBusAuxiliariesDataProviderV210.QUALIFIED_XSD_TYPE); @@ -84,6 +85,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules Bind<IXMLElectricMotorDeclarationInputData>().To<XMLElectricMotorDeclarationInputDataProvider>() .Named(XMLElectricMotorDeclarationInputDataProvider.QUALIFIED_XSD_TYPE); + Bind<IXMLElectricStorageSystemDeclarationInputData>().To<XMLElectricStorageSystemDeclarationInputData>() + .Named(XMLElectricStorageSystemDeclarationInputData.QUALIFIED_XSD_TYPE); + + Bind<IXMLBatteryPackDeclarationInputData>().To<XMLBatteryPackDeclarationDeclarationInputData>() + .Named(XMLBatteryPackDeclarationDeclarationInputData.QUALIFIED_XSD_TYPE); + Bind<IXMLComponentReader>().To<XMLComponentReaderV210_Lorry>() .Named(XMLComponentReaderV210_Lorry.QUALIFIED_XSD_TYPE); diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/IXMLComponentReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/IXMLComponentReader.cs index 86db3d619b5328d2369d535bd0fec1cfb625a418..ad5622b9150bcb0796e9f9825838d311cb87a85e 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/IXMLComponentReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/IXMLComponentReader.cs @@ -49,6 +49,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader ITorqueConverterDeclarationInputData TorqueConverterInputData { get; } IBusAuxiliariesDeclarationData BusAuxiliariesInputData { get; } IElectricMachinesDeclarationInputData ElectricMachines { get; } + IElectricStorageSystemDeclarationInputData ElectricStorageSystem { get; } + } public interface IXMLAxlesReader @@ -77,4 +79,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader IElectricMotorDeclarationInputData CreateElectricMachineSystem(XmlNode electricMachineSystem); } + public interface IXMLREESSReader + { + IREESSPackInputData CreateREESSInputData(XmlNode storageNode, REESSType reessType); + } + + } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs index dd8ce638357aa5ccd74721a492661fba600fb372..814c0e9a27c4c4ac7cf0dfe82c788cc4767d622f 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs @@ -74,6 +74,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl protected IAuxiliariesDeclarationInputData _auxiliaryInputData; protected ITorqueConverterDeclarationInputData _torqueConverterInputData; protected IElectricMachinesDeclarationInputData _electricMachinesInputData; + protected IElectricStorageSystemDeclarationInputData _electricStorageSystemInputData; [Inject] @@ -115,6 +116,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public virtual IElectricMachinesDeclarationInputData ElectricMachines => _electricMachinesInputData ?? (_electricMachinesInputData = GetElectricMachineEntries()); + public virtual IElectricStorageSystemDeclarationInputData ElectricStorageSystem => _electricStorageSystemInputData ?? + (_electricStorageSystemInputData = GetElectricEnergyStorageEntries()); public virtual ITransmissionInputData CreateGear(XmlNode gearNode) { @@ -283,11 +286,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl protected virtual IElectricMachinesDeclarationInputData GetElectricMachineEntries() { var electricMachines = new List<ElectricMachineEntry<IElectricMotorDeclarationInputData>>(); - var electricMachine = CreateComponent(XMLNames.Component_ElectricMachine, ElectricMachinesCreator,true); + var electricMachine = CreateComponent(XMLNames.Component_ElectricMachine, ElectricMachinesCreator, true); if(electricMachine?.Entries?.Any() == true) electricMachines.AddRange(electricMachine.Entries); - var electricMachineGEN = CreateComponent(XMLNames.Component_ElectricMachineGEN, ElectricMachinesCreator,true); + var electricMachineGEN = CreateComponent(XMLNames.Component_ElectricMachineGEN, ElectricMachinesCreator, true); if(electricMachineGEN?.Entries?.Any() == true) electricMachines.AddRange(electricMachineGEN.Entries); @@ -304,6 +307,28 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl electricMachine.ElectricMachineSystemReader = Factory.CreateElectricMotorReader(version, Vehicle, componentNode, sourcefile); return electricMachine; } + + protected virtual IElectricStorageSystemDeclarationInputData GetElectricEnergyStorageEntries() + { + return CreateComponent(XMLNames.Component_ElectricEnergyStorage, ElectricEnergyStorageCreator, true); + } + + protected virtual IElectricStorageSystemDeclarationInputData ElectricEnergyStorageCreator(string version, + XmlNode componentNode, string sourcefile) + { + if (componentNode == null) + return null; + + var electricStorage = Factory.CreateElectricStorageSystemData(version, Vehicle, componentNode, sourcefile); + electricStorage.StorageTypeReader = + Factory.CreateStorageTypeReader(version, Vehicle, componentNode, sourcefile); + + + return electricStorage; + } + + + } // --------------------------------------------------------------------------------------- @@ -520,7 +545,54 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl #endregion } - + + // --------------------------------------------------------------------------------------- + + public class XMLREESSReaderV210 : AbstractComponentReader, IXMLREESSReader + { + public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V210_JOBS; + public const string XSD_TYPE = "ElectricEnergyStorageType"; + public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + [Inject] public IDeclarationInjectFactory Factory { protected get; set; } + + public XMLREESSReaderV210(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, + string sourceFile) : base(vehicle, componentNode) { } + + #region Implementation of IXMLREESSReader + + public virtual IREESSPackInputData CreateREESSInputData(XmlNode reessNode, REESSType reessType) + { + var type = reessNode.SchemaInfo.SchemaType; + var version = XMLHelper.GetXsdType(type); + if (version == null) + return null; + + switch (reessType) { + case REESSType.Battery: + return BatteryPackCreator(version, reessNode, null); + case REESSType.SuperCap: + return SuperCapCreator(version, reessNode, null); + default: + return null; + } + } + + protected virtual IBatteryPackDeclarationInputData BatteryPackCreator(string version, + XmlNode componentNode, string sourcefile) + { + return Factory.CreateBatteryPackDeclarationInputData(version, componentNode, sourcefile); + } + + protected virtual ISuperCapDeclarationInputData SuperCapCreator(string version, + XmlNode componentNode, string sourcefile) + { + return Factory.CreateSuperCapDeclarationInputData(version, componentNode, sourcefile); + } + + #endregion + } + // --------------------------------------------------------------------------------------- public class XMLMultistagePrimaryVehicleBusComponentReaderV01 : XMLComponentReaderV20 diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index 98234e7c0e45a6e539c192208fa6f84d14547b60..d478452be88803d2f382a5a6932088d0885f2e52 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -171,6 +171,7 @@ <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationTorqueConverterDataProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationTyreDataProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLElectricMotorDeclarationInputDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLElectricStorageSystemDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLGearData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLAirdragDeclarationInputData.cs" /> @@ -180,16 +181,19 @@ <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLAxleDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLAxleGearInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLAxlesDeclarationInputData.cs" /> + <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLBatteryPackDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLBusAuxiliariesDeclarationData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLElectricMachinesDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLDeclarationJobInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLElectricMotorDeclarationInputData.cs" /> + <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLElectricStorageSystemDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLEngineDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLGearboxDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLGearData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLPTOTransmissionInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLResultsInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLRetarderInputData.cs" /> + <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLSuperCapDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLTorqueConverterDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLTyreDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLVehicleComponentsDeclaration.cs" /> diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/BatterySystemTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/BatterySystemTest.cs index f76e893e27b2605a47f2889cc1853896a52d28e3..cfd14d54e2f6ad8779a6a19c1b0e26c149a4ad26 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/BatterySystemTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/BatterySystemTest.cs @@ -350,7 +350,11 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent public double MinSOC => 0.2; public double MaxSOC => 0.8; + public BatteryType BatteryType { get; } public AmpereSecond Capacity { get; } + public bool ConnectorsSubsystemsIncluded { get; } + public bool JunctionboxIncluded { get; } + public Kelvin TestingTemperature => null; public TableData InternalResistanceCurve => VectoCSVFile.ReadStream( InputDataHelper.InputDataAsStream("SoC, Ri", diff --git a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs index 4255640d5bf1a640433c8e7243710599f8f839bb..5accdcdee1ee26854343960b777e25e7b820f799 100644 --- a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs +++ b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs @@ -248,12 +248,15 @@ namespace TUGraz.VectoCore.Tests.XML Assert.IsNotNull(vehicle.Components.AngledriveInputData);//optional Assert.IsNotNull(vehicle.Components.RetarderInputData);//optional Assert.IsNotNull(vehicle.Components.AxleGearInputData); - Assert.IsNotNull(vehicle.Components.AxleWheels); -// Assert.IsNotNull(vehicle.Components.AuxiliaryInputData); + Assert.IsNotNull(vehicle.Components.AxleWheels); + Assert.IsNotNull(vehicle.Components.AuxiliaryInputData); Assert.IsNull(vehicle.Components.BusAuxiliaries); Assert.IsNotNull(vehicle.Components.AirdragInputData); - // Assert.IsNotNull(vehicle.Components.ElectricStorage); + Assert.IsNotNull(vehicle.Components.ElectricStorage); + TestElectricStorageElements(vehicle.Components.ElectricStorage.ElectricStorageElements); + + Assert.IsNotNull(vehicle.Components.PTOTransmissionInputData); Assert.AreEqual(0.SI<CubicMeter>(), vehicle.CargoVolume); Assert.IsNotNull(vehicle.TorqueLimits); @@ -349,6 +352,33 @@ namespace TUGraz.VectoCore.Tests.XML #endregion + #region Test ElectricStorage Element Reader + + private void TestElectricStorageElements(IList<IElectricStorageDeclarationInputData> elements) + { + Assert.IsNotNull(elements); + Assert.AreEqual(2, elements.Count); + + foreach (var entry in elements) { + TestREESS(entry); + } + + + + } + + private void TestREESS(IElectricStorageDeclarationInputData storage) + { + Assert.AreEqual(1, storage.StringId); + } + + + + + #endregion + + + #region Test existence of torque converter