diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index 130b101db9c37c2ff4e16d074d33ee5e25c7ae49..219722f28dafbfa8223ffad1e0f2d0a4e1f8f686 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -762,8 +762,17 @@ namespace TUGraz.VectoCommon.InputData TableData FullLoadCurve { get; } //MaxTorqueCurve TableData EfficiencyMap { get; } //PowerMap + + IList<IElectricMotorPowerMap> PowerMap { get; } } + public interface IElectricMotorPowerMap + { + int Gear { get; } + + TableData PowerMap { get; } + } + public interface IElectricMachinesDeclarationInputData { IList<ElectricMachineEntry<IElectricMotorDeclarationInputData>> Entries { get; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs index 00df8d8010d96c6130f2547ae1cbdb0f58dc574f..78991cd90a8aaa92a4310daa6eecfa8269dec9a8 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs @@ -7,27 +7,24 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Common; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider { - public class XMLElectricMotorDeclarationInputDataProviderV2101 : AbstractCommonComponentType, IXMLElectricMotorDeclarationInputData, IElectricMotorVoltageLevel + public abstract class XMLCommonElectricMotorDeclarationInputData : AbstractCommonComponentType, IComponentInputData, + IPowerRatingInputData, IElectricMotorVoltageLevel { - public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V2101_JOBS; - public const string XSD_TYPE = "ElectricMachineSystemMeasuredDataDeclarationType"; - public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); - private IList<IElectricMotorVoltageLevel> _voltageLevels; - - public XMLElectricMotorDeclarationInputDataProviderV2101( - XmlNode componentNode, string sourceFile) : base(componentNode, sourceFile) + protected XMLCommonElectricMotorDeclarationInputData(XmlNode node, string source) : base(node, source) { SourceType = DataSourceType.XMLEmbedded; } - + #region Implementation of IPowerRatingInputData - public virtual ElectricMachineType ElectricMachineType => + + public virtual ElectricMachineType ElectricMachineType => GetString(XMLNames.ElectricMachine_ElectricMachineType).ParseEnum<ElectricMachineType>(); public virtual Watt R85RatedPower => @@ -50,72 +47,156 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public virtual Second OverloadTime => GetDouble(XMLNames.ElectricMachine_OverloadDuration).SI<Second>(); - - #endregion - - #region Implementation of IElectricMotorDeclarationInputData - - public virtual Volt TestVoltageOverload => - GetDouble(XMLNames.ElectricMachine_TestVoltageOverload).SI<Volt>(); - - public virtual bool DcDcConverterIncluded => GetBool(XMLNames.ElectricMachine_DcDcConverterIncluded); - public virtual string IHPCType => GetString(XMLNames.ElectricMachine_IHPCType); - - public virtual IList<IElectricMotorVoltageLevel> VoltageLevels => - _voltageLevels ?? (_voltageLevels = GetVoltageLevels()); + #endregion - public virtual TableData DragCurve => - ReadTableData(XMLNames.DragCurve, XMLNames.DragCurve_Entry, new Dictionary<string, string> - { - {XMLNames.DragCurve_OutShaftSpeed, XMLNames.DragCurve_OutShaftSpeed}, - {XMLNames.DragCurve_DragTorque, XMLNames.DragCurve_DragTorque} - }); + #region Overrides of AbstractXMLResource - public virtual TableData Conditioning => ElementExists(XMLNames.Conditioning) - ? ReadTableData(XMLNames.Conditioning, XMLNames.Conditioning_Entry, new Dictionary<string, string> { - {XMLNames.Conditioning_CoolantTempInlet, XMLNames.Conditioning_CoolantTempInlet}, - {XMLNames.Conditioning_CoolingPower, XMLNames.Conditioning_CoolingPower} - }) - : null; - - public virtual double OverloadRecoveryFactor { get; } + protected override XNamespace SchemaNamespace { get; } + protected override DataSourceType SourceType { get; } #endregion #region Implementation of IElectricMotorVoltageLevel - public Volt VoltageLevel => GetDouble(XMLNames.VoltageLevel_Voltage).SI<Volt>(); + public virtual Volt VoltageLevel => GetDouble(XMLNames.VoltageLevel_Voltage).SI<Volt>(); - public TableData FullLoadCurve => ReadTableData(XMLNames.MaxTorqueCurve, XMLNames.MaxTorqueCurve_Entry, new Dictionary<string, string> { - {XMLNames.MaxTorqueCurve_OutShaftSpeed, XMLNames.MaxTorqueCurve_OutShaftSpeed}, - {XMLNames.MaxTorqueCurve_MaxTorque, XMLNames.MaxTorqueCurve_MaxTorque}, - {XMLNames.MaxTorqueCurve_MinTorque, XMLNames.MaxTorqueCurve_MinTorque} - }); + public virtual TableData FullLoadCurve => ReadFullLoadCurve(); + - public TableData EfficiencyMap => ReadTableData(XMLNames.PowerMap, XMLNames.PowerMap_Entry, new Dictionary<string, string> { + public virtual TableData EfficiencyMap => ReadTableData(XMLNames.PowerMap, XMLNames.PowerMap_Entry, new Dictionary<string, string> { { XMLNames.PowerMap_OutShaftSpeed, XMLNames.PowerMap_OutShaftSpeed }, { XMLNames.PowerMap_Torque, XMLNames.PowerMap_Torque }, { XMLNames.PowerMap_ElectricPower, XMLNames.PowerMap_ElectricPower } }); + public virtual IList<IElectricMotorPowerMap> PowerMap => GetPowerMaps(); + #endregion - private IList<IElectricMotorVoltageLevel> GetVoltageLevels() + protected virtual TableData ReadFullLoadCurve() + { + return ReadTableData(XMLNames.MaxTorqueCurve, XMLNames.MaxTorqueCurve_Entry, new Dictionary<string, string> { + { XMLNames.MaxTorqueCurve_OutShaftSpeed, XMLNames.MaxTorqueCurve_OutShaftSpeed }, + { XMLNames.MaxTorqueCurve_MaxTorque, XMLNames.MaxTorqueCurve_MaxTorque }, + { XMLNames.MaxTorqueCurve_MinTorque, XMLNames.MaxTorqueCurve_MinTorque } + }); + } + + protected virtual TableData ReadDragCurve() + { + return ReadTableData(XMLNames.DragCurve, XMLNames.DragCurve_Entry, new Dictionary<string, string> + { + {XMLNames.DragCurve_OutShaftSpeed, XMLNames.DragCurve_OutShaftSpeed}, + {XMLNames.DragCurve_DragTorque, XMLNames.DragCurve_DragTorque} + }); + } + + protected virtual TableData ReadConditioning() + { + return ReadTableData(XMLNames.Conditioning, XMLNames.Conditioning_Entry, new Dictionary<string, string> { + { XMLNames.Conditioning_CoolantTempInlet, XMLNames.Conditioning_CoolantTempInlet }, + { XMLNames.Conditioning_CoolingPower, XMLNames.Conditioning_CoolingPower } + }); + } + + protected virtual IList<IElectricMotorVoltageLevel> GetVoltageLevels() { var voltageLevelNodes = GetNodes(XMLNames.ElectricMachine_VoltageLevel); if (voltageLevelNodes.IsNullOrEmpty()) return null; - + var voltageLevels = new List<IElectricMotorVoltageLevel>(); - + foreach (XmlNode voltageLevelNode in voltageLevelNodes) { - voltageLevels.Add(new XMLElectricMotorDeclarationInputDataProviderV2101(voltageLevelNode, null)); + voltageLevels.Add(new XMLElectricMotorIEPCIInputDataProviderV2101(null, voltageLevelNode, null)); } return voltageLevels; } + + private IList<IElectricMotorPowerMap> GetPowerMaps() + { + var powerMapNodes = GetNodes(XMLNames.PowerMap); + if (powerMapNodes.IsNullOrEmpty()) + return null; + + var powerMaps = new List<IElectricMotorPowerMap>(); + foreach (XmlNode powerMapNode in powerMapNodes) + { + powerMaps.Add(new ElectricMotorPowerMap(powerMapNode)); + } + + return powerMaps; + } + + + public class ElectricMotorPowerMap : AbstractXMLType, IElectricMotorPowerMap + { + private Dictionary<string, string> powerMapMapping = new Dictionary<string, string> { + { XMLNames.PowerMap_OutShaftSpeed, XMLNames.PowerMap_OutShaftSpeed }, + { XMLNames.PowerMap_Torque, XMLNames.PowerMap_Torque }, + { XMLNames.PowerMap_ElectricPower, XMLNames.PowerMap_ElectricPower } + }; + + public ElectricMotorPowerMap(XmlNode xmlNode) : base(xmlNode) { } + + #region Implementation of IElectricMotorPowerMap + + public virtual int Gear => Convert.ToInt32(GetAttribute(BaseNode, "gear")); + public virtual TableData PowerMap => ReadPowerMap(); + + private TableData ReadPowerMap() + { + var powerMapEntryNodes = GetNodes(XMLNames.PowerMap_Entry); + return XMLHelper.ReadTableData(powerMapMapping, powerMapEntryNodes); + } + + #endregion + } + } + + + // --------------------------------------------------------------------------------------- + + + public class XMLElectricMotorDeclarationInputDataProviderV2101 : XMLCommonElectricMotorDeclarationInputData, + IXMLElectricMotorDeclarationInputData + { + public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V2101_JOBS; + public const string XSD_TYPE = "ElectricMachineSystemMeasuredDataDeclarationType"; + public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + private IList<IElectricMotorVoltageLevel> _voltageLevels; + + public XMLElectricMotorDeclarationInputDataProviderV2101( + XmlNode componentNode, string sourceFile) : base(componentNode, sourceFile) + { + SourceType = DataSourceType.XMLEmbedded; + } + + #region Implementation of IElectricMotorDeclarationInputData + + public virtual Volt TestVoltageOverload => + GetDouble(XMLNames.ElectricMachine_TestVoltageOverload).SI<Volt>(); + + public virtual bool DcDcConverterIncluded => GetBool(XMLNames.ElectricMachine_DcDcConverterIncluded); + + public virtual string IHPCType => GetString(XMLNames.ElectricMachine_IHPCType); + + public virtual IList<IElectricMotorVoltageLevel> VoltageLevels => + _voltageLevels ?? (_voltageLevels = GetVoltageLevels()); + + public virtual TableData DragCurve => ReadDragCurve(); + + + public virtual TableData Conditioning => ElementExists(XMLNames.Conditioning) + ? ReadConditioning() : null; + + public virtual double OverloadRecoveryFactor { get; } + + #endregion #region Overrides of AbstractXMLResource @@ -125,6 +206,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider #endregion } + // --------------------------------------------------------------------------------------- public class XMLElectricMotorIHPCDeclarationInputDataProviderV2101 : XMLElectricMotorDeclarationInputDataProviderV2101 @@ -134,16 +216,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); public XMLElectricMotorIHPCDeclarationInputDataProviderV2101(XmlNode componentNode, string sourceFile) - : base(componentNode, sourceFile) - { - - } + : base(componentNode, sourceFile) { } } // --------------------------------------------------------------------------------------- - public class XMLElectricMotorIEPCIInputDataProviderV2101 : AbstractCommonComponentType, IXMLIEPCInputData, - IElectricMotorVoltageLevel, IGearEntry + public class XMLElectricMotorIEPCIInputDataProviderV2101 : XMLCommonElectricMotorDeclarationInputData, IXMLIEPCInputData { public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V2101_JOBS; public const string XSD_TYPE = "IEPCMeasuredDataDeclarationType"; @@ -153,6 +231,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider private IList<IElectricMotorVoltageLevel> _voltageLevels; private IList<IGearEntry> _gears; + public XMLElectricMotorIEPCIInputDataProviderV2101(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) : base(componentNode, sourceFile) { @@ -181,34 +260,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider #endregion - #region Implementation of IPowerRatingInputData - - public virtual ElectricMachineType ElectricMachineType => - GetString(XMLNames.ElectricMachine_ElectricMachineType).ParseEnum<ElectricMachineType>(); - - public virtual Watt R85RatedPower => - GetDouble(XMLNames.ElectricMachine_R85RatedPower).SI<Watt>(); - - public virtual KilogramSquareMeter Inertia => - GetDouble(XMLNames.ElectricMachine_RotationalInertia).SI<KilogramSquareMeter>(); - - public virtual NewtonMeter ContinuousTorque => - GetDouble(XMLNames.ElectricMachine_ContinuousTorque).SI<NewtonMeter>(); - - public virtual PerSecond ContinuousTorqueSpeed => - GetDouble(XMLNames.ElectricMachine_TestSpeedContinuousTorque).SI<PerSecond>(); - - public virtual NewtonMeter OverloadTorque => - GetDouble(XMLNames.ElectricMachine_OverloadTorque).SI<NewtonMeter>(); - - public virtual PerSecond OverloadTestSpeed => - GetDouble(XMLNames.ElectricMachine_TestSpeedOverloadTorque).SI<PerSecond>(); - - public virtual Second OverloadTime => - GetDouble(XMLNames.ElectricMachine_OverloadDuration).SI<Second>(); - - #endregion - #region Implementation of IIEPCDeclarationInputData public virtual Volt TestVoltageOverload => @@ -223,77 +274,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public virtual IList<IGearEntry> Gears => _gears ?? (_gears = GetGearEntries()); - - + public virtual IList<IElectricMotorVoltageLevel> VoltageLevels => _voltageLevels ?? (_voltageLevels = GetVoltageLevels()); - public virtual TableData DragCurve => - ReadTableData(XMLNames.DragCurve, XMLNames.DragCurve_Entry, new Dictionary<string, string> - { - {XMLNames.DragCurve_OutShaftSpeed, XMLNames.DragCurve_OutShaftSpeed}, - {XMLNames.DragCurve_DragTorque, XMLNames.DragCurve_DragTorque} - }); + public virtual TableData DragCurve => ReadDragCurve(); public virtual TableData Conditioning => ElementExists(XMLNames.Conditioning) - ? ReadTableData(XMLNames.Conditioning, XMLNames.Conditioning_Entry, new Dictionary<string, string> { - {XMLNames.Conditioning_CoolantTempInlet, XMLNames.Conditioning_CoolantTempInlet}, - {XMLNames.Conditioning_CoolingPower, XMLNames.Conditioning_CoolingPower} - }) - : null; - - #endregion - - #region Implementation of IElectricMotorVoltageLevel - - public virtual Volt VoltageLevel => GetDouble(XMLNames.VoltageLevel_Voltage).SI<Volt>(); - - public virtual TableData FullLoadCurve => ReadTableData(XMLNames.MaxTorqueCurve, XMLNames.MaxTorqueCurve_Entry, new Dictionary<string, string> { - {XMLNames.MaxTorqueCurve_OutShaftSpeed, XMLNames.MaxTorqueCurve_OutShaftSpeed}, - {XMLNames.MaxTorqueCurve_MaxTorque, XMLNames.MaxTorqueCurve_MaxTorque}, - {XMLNames.MaxTorqueCurve_MinTorque, XMLNames.MaxTorqueCurve_MinTorque} - }); - - public virtual TableData EfficiencyMap => ReadTableData(XMLNames.PowerMap, XMLNames.PowerMap_Entry, new Dictionary<string, string> { - { XMLNames.PowerMap_OutShaftSpeed, XMLNames.PowerMap_OutShaftSpeed }, - { XMLNames.PowerMap_Torque, XMLNames.PowerMap_Torque }, - { XMLNames.PowerMap_ElectricPower, XMLNames.PowerMap_ElectricPower } - }); - - #endregion - - private IList<IElectricMotorVoltageLevel> GetVoltageLevels() - { - var voltageLevelNodes = GetNodes(XMLNames.ElectricMachine_VoltageLevel); - if (voltageLevelNodes.IsNullOrEmpty()) - return null; - - var voltageLevels = new List<IElectricMotorVoltageLevel>(); - - foreach (XmlNode voltageLevelNode in voltageLevelNodes) - { - voltageLevels.Add(new XMLElectricMotorIEPCIInputDataProviderV2101(null, voltageLevelNode, null)); - } - - return voltageLevels; - } - - #region Implementation of IGearEntry - - public int GearNumber => Convert.ToInt32(GetAttribute(BaseNode, XMLNames.Gear_GearNumber_Attr)); - - public double Ratio => GetDouble(XMLNames.Gear_Ratio); - - public NewtonMeter MaxOutputShaftTorque => ElementExists(XMLNames.Gear_MaxOutputShaftTorque) - ? GetDouble(XMLNames.Gear_MaxOutputShaftTorque).SI<NewtonMeter>() - : null; - - public PerSecond MaxOutputShaftSpeed => ElementExists(XMLNames.Gear_MaxOutputShaftSpeed) - ? GetDouble(XMLNames.Gear_MaxOutputShaftSpeed).SI<PerSecond>() - : null; + ? ReadConditioning() : null; #endregion - + private IList<IGearEntry> GetGearEntries() { var gearNodes = GetNodes(XMLNames.Gear_EntryName); @@ -303,12 +294,33 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider var gears = new List<IGearEntry>(); foreach (XmlNode gearNode in gearNodes) { - gears.Add(new XMLElectricMotorIEPCIInputDataProviderV2101(null, gearNode, null)); + gears.Add(new GearEntry(gearNode)); } return gears; } + public class GearEntry : AbstractXMLType, IGearEntry + { + public GearEntry(XmlNode node) : base(node) { } + + #region Implementation of IGearEntry + + public virtual int GearNumber => Convert.ToInt32(GetAttribute(BaseNode, XMLNames.Gear_GearNumber_Attr)); + + public virtual double Ratio => GetDouble(XMLNames.Gear_Ratio); + + public virtual NewtonMeter MaxOutputShaftTorque => ElementExists(XMLNames.Gear_MaxOutputShaftTorque) + ? GetDouble(XMLNames.Gear_MaxOutputShaftTorque).SI<NewtonMeter>() + : null; + + public virtual PerSecond MaxOutputShaftSpeed => ElementExists(XMLNames.Gear_MaxOutputShaftSpeed) + ? GetDouble(XMLNames.Gear_MaxOutputShaftSpeed).SI<PerSecond>() + : null; + + #endregion + } + #region Overrides of AbstractXMLResource protected override XNamespace SchemaNamespace => NAMESPACE_URI; diff --git a/VectoCore/VectoCore/InputData/Impl/InputData.cs b/VectoCore/VectoCore/InputData/Impl/InputData.cs index 2698a04d73177f815255910925a8a77fb18f1d76..ec6ed4039d32a1e946dbec120f0b85c9b211b511 100644 --- a/VectoCore/VectoCore/InputData/Impl/InputData.cs +++ b/VectoCore/VectoCore/InputData/Impl/InputData.cs @@ -300,6 +300,7 @@ namespace TUGraz.VectoCore.InputData.Impl public Volt VoltageLevel { get; internal set; } public TableData FullLoadCurve { get; internal set; } public TableData EfficiencyMap { get; internal set; } + public IList<IElectricMotorPowerMap> PowerMap { get; internal set; } #endregion } diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/HEV-S_heavyLorry_AMT_S2_ADC.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/HEV-S_heavyLorry_AMT_S2_ADC.xml index 4074dbc3c67f34e57710a89c1b23e408a082db92..6e921a50675bf5f6cd433c0e2d4897946234133c 100644 --- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/HEV-S_heavyLorry_AMT_S2_ADC.xml +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/HEV-S_heavyLorry_AMT_S2_ADC.xml @@ -137,7 +137,7 @@ <Entry outShaftSpeed="0.00" maxTorque="450.00" minTorque="-450.00"/> <Entry outShaftSpeed="4000.00" maxTorque="100.00" minTorque="-100.00"/> </MaxTorqueCurve> - <PowerMap> + <PowerMap gear="1"> <Entry outShaftSpeed="0.00" torque="400.00" electricPower="1000.00"/> <Entry outShaftSpeed="0.00" torque="-400.00" electricPower="-1000.00"/> <Entry outShaftSpeed="4000.00" torque="4000.00" electricPower="20000.00"/> @@ -150,7 +150,7 @@ <Entry outShaftSpeed="0.00" maxTorque="450.00" minTorque="-450.00"/> <Entry outShaftSpeed="4000.00" maxTorque="100.00" minTorque="-100.00"/> </MaxTorqueCurve> - <PowerMap> + <PowerMap gear="1"> <Entry outShaftSpeed="0.00" torque="400.00" electricPower="1000.00"/> <Entry outShaftSpeed="0.00" torque="-400.00" electricPower="-1000.00"/> <Entry outShaftSpeed="4000.00" torque="4000.00" electricPower="20000.00"/> @@ -300,7 +300,7 @@ <Entry outShaftSpeed="0.00" maxTorque="450.00" minTorque="-450.00"/> <Entry outShaftSpeed="4000.00" maxTorque="100.00" minTorque="-100.00"/> </MaxTorqueCurve> - <PowerMap> + <PowerMap gear="1"> <Entry outShaftSpeed="0.00" torque="400.00" electricPower="1000.00"/> <Entry outShaftSpeed="0.00" torque="-400.00" electricPower="-1000.00"/> <Entry outShaftSpeed="4000.00" torque="4000.00" electricPower="20000.00"/> @@ -313,7 +313,7 @@ <Entry outShaftSpeed="0.00" maxTorque="450.00" minTorque="-450.00"/> <Entry outShaftSpeed="4000.00" maxTorque="100.00" minTorque="-100.00"/> </MaxTorqueCurve> - <PowerMap> + <PowerMap gear="1"> <Entry outShaftSpeed="0.00" torque="400.00" electricPower="1000.00"/> <Entry outShaftSpeed="0.00" torque="-400.00" electricPower="-1000.00"/> <Entry outShaftSpeed="4000.00" torque="4000.00" electricPower="20000.00"/> diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/HEV_heavyLorry_AMT_Px_Capacitor.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/HEV_heavyLorry_AMT_Px_Capacitor.xml index 09356427df928b6795c2720fa096fe740b4702d3..8688665f966c6a261d6ac1531d729feda48509c4 100644 --- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/HEV_heavyLorry_AMT_Px_Capacitor.xml +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/HEV_heavyLorry_AMT_Px_Capacitor.xml @@ -122,7 +122,7 @@ <Entry outShaftSpeed="0.00" maxTorque="450.00" minTorque="-450.00"/> <Entry outShaftSpeed="4000.00" maxTorque="100.00" minTorque="-100.00"/> </MaxTorqueCurve> - <PowerMap> + <PowerMap gear="1"> <Entry outShaftSpeed="0.00" torque="400.00" electricPower="1000.00"/> <Entry outShaftSpeed="0.00" torque="-400.00" electricPower="-1000.00"/> <Entry outShaftSpeed="4000.00" torque="4000.00" electricPower="20000.00"/> @@ -135,7 +135,7 @@ <Entry outShaftSpeed="0.00" maxTorque="450.00" minTorque="-450.00"/> <Entry outShaftSpeed="4000.00" maxTorque="100.00" minTorque="-100.00"/> </MaxTorqueCurve> - <PowerMap> + <PowerMap gear="1"> <Entry outShaftSpeed="0.00" torque="400.00" electricPower="1000.00"/> <Entry outShaftSpeed="0.00" torque="-400.00" electricPower="-1000.00"/> <Entry outShaftSpeed="4000.00" torque="4000.00" electricPower="20000.00"/> diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV_heavyLorry_AMT_Px_n_opt.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV_heavyLorry_AMT_Px_n_opt.xml index f4bcef59696cea17b2dc3ff12834891685f02e47..21a4c2af92f8d2184a7c2c280980cab3029401f1 100644 --- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV_heavyLorry_AMT_Px_n_opt.xml +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV_heavyLorry_AMT_Px_n_opt.xml @@ -1 +1 @@ -<?xml version="1.0" encoding="UTF-8"?> <tns:VectoInputDeclaration xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.10.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaVersion="2.0" xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" xmlns:di="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationJob V:\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:v2.10.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.10.1" xmlns:v2.10.2="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.10.2"> <v2.0:Vehicle xsi:type="Vehicle_HEV-Px_HeavyLorryDeclarationType" id="a"> <Manufacturer>TU Graz</Manufacturer> <ManufacturerAddress>Inffeldgasse 19</ManufacturerAddress> <Model>HEV Heavy Lorry Px</Model> <VIN>1234</VIN> <Date>2017-01-01T00:00:00Z</Date> <LegislativeCategory>N3</LegislativeCategory> <ChassisConfiguration>Rigid Lorry</ChassisConfiguration> <AxleConfiguration>4x2</AxleConfiguration> <CorrectedActualMass>6000</CorrectedActualMass> <TechnicalPermissibleMaximumLadenMass>12000</TechnicalPermissibleMaximumLadenMass> <IdlingSpeed>650</IdlingSpeed> <RetarderType>Losses included in Gearbox</RetarderType> <RetarderRatio>2.000</RetarderRatio> <AngledriveType>Separate Angledrive</AngledriveType> <PTO xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="v2.0:PTOType"> <v2.0:PTOShaftsGearWheels>none</v2.0:PTOShaftsGearWheels> <v2.0:PTOOtherElements>none</v2.0:PTOOtherElements> </PTO> <ZeroEmissionVehicle>true</ZeroEmissionVehicle> <VocationalVehicle>true</VocationalVehicle> <SleeperCab>true</SleeperCab> <VehicleTypeApprovalNumber>ASDF</VehicleTypeApprovalNumber> <ArchitectureID>P2.5</ArchitectureID> <OvcHev>true</OvcHev> <MaxChargingPower>11</MaxChargingPower> <ADAS xsi:type="ADAS_HEV_Type"> <v2.10.2:EngineStopStart>true</v2.10.2:EngineStopStart> <v2.10.2:PredictiveCruiseControl>1,2,3</v2.10.2:PredictiveCruiseControl> </ADAS> <Components xsi:type="Components_HEV-Px_LorryType"> <Engine> <v2.0:Data xsi:type="v1.0:EngineDataDeclarationType" id="ENG-gooZah3D" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0"> <Manufacturer>Generic Engine Manufacturer</Manufacturer> <Model>Generic 40t Long Haul Truck Engine</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-02-15T11:00:00Z</Date> <AppVersion>VectoEngine x.y</AppVersion> <Displacement>12730</Displacement> <IdlingSpeed>560</IdlingSpeed> <RatedSpeed>2200</RatedSpeed> <RatedPower>380000</RatedPower> <MaxEngineTorque>2300</MaxEngineTorque> <WHTCUrban>1.0097</WHTCUrban> <WHTCRural>1.0035</WHTCRural> <WHTCMotorway>1.0200</WHTCMotorway> <BFColdHot>1.0000</BFColdHot> <CFRegPer>1.0000</CFRegPer> <CFNCV>1.0000</CFNCV> <FuelType>NG</FuelType> <FuelConsumptionMap> <Entry engineSpeed="560.00" torque="-149.00" fuelConsumption="0.00"/> <Entry engineSpeed="560.00" torque="1180.00" fuelConsumption="12869.00"/> <Entry engineSpeed="2100.00" torque="-320.00" fuelConsumption="0.00"/> <Entry engineSpeed="2100.00" torque="1100.00" fuelConsumption="50653.00"/> </FuelConsumptionMap> <FullLoadAndDragCurve> <Entry engineSpeed="560.00" maxTorque="1180.00" dragTorque="-149.00"/> <Entry engineSpeed="1800.00" maxTorque="1800.00" dragTorque="-300.00"/> <Entry engineSpeed="2100.00" maxTorque="1100.00" dragTorque="-320.00"/> </FullLoadAndDragCurve> </v2.0:Data> <v2.0:Signature> <di:Reference> <di:DigestMethod Algorithm=""/> <di:DigestValue/> </di:Reference> </v2.0:Signature> </Engine> <ElectricMachine> <PowertrainPosition>2</PowertrainPosition> <Count>1</Count> <ElectricMachineSystem> <v2.10.1:Data xsi:type="v2.10.1:ElectricMachineSystemMeasuredDataDeclarationType" id="EM-1234" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.10.1"> <Manufacturer>a</Manufacturer> <Model>a</Model> <CertificationNumber>token</CertificationNumber> <Date>2017-01-01T00:00:00Z</Date> <AppVersion>aaaaa</AppVersion> <ElectricMachineType>ASM</ElectricMachineType> <CertificationMethod>Measured</CertificationMethod> <R85RatedPower>1</R85RatedPower> <RotationalInertia>0.10</RotationalInertia> <ContinuousTorque>200.00</ContinuousTorque> <TestSpeedContinuousTorque>2000.00</TestSpeedContinuousTorque> <OverloadTorque>400.00</OverloadTorque> <TestSpeedOverloadTorque>2000.00</TestSpeedOverloadTorque> <OverloadDuration>30.00</OverloadDuration> <TestVoltageOverload>483</TestVoltageOverload> <DcDcConverterIncluded>true</DcDcConverterIncluded> <IHPCType>None</IHPCType> <VoltageLevel> <Voltage>400</Voltage> <MaxTorqueCurve> <Entry outShaftSpeed="0.00" maxTorque="450.00" minTorque="-450.00"/> <Entry outShaftSpeed="4000.00" maxTorque="100.00" minTorque="-100.00"/> </MaxTorqueCurve> <PowerMap gear="1"> <Entry outShaftSpeed="0.00" torque="400.00" electricPower="1000.00"/> <Entry outShaftSpeed="0.00" torque="-400.00" electricPower="-1000.00"/> <Entry outShaftSpeed="4000.00" torque="4000.00" electricPower="20000.00"/> <Entry outShaftSpeed="4000.00" torque="-4000.00" electricPower="-20000.00"/> </PowerMap> </VoltageLevel> <VoltageLevel> <Voltage>600</Voltage> <MaxTorqueCurve> <Entry outShaftSpeed="0.00" maxTorque="450.00" minTorque="-450.00"/> <Entry outShaftSpeed="4000.00" maxTorque="100.00" minTorque="-100.00"/> </MaxTorqueCurve> <PowerMap gear="1"> <Entry outShaftSpeed="0.00" torque="400.00" electricPower="1000.00"/> <Entry outShaftSpeed="0.00" torque="-400.00" electricPower="-1000.00"/> <Entry outShaftSpeed="4000.00" torque="4000.00" electricPower="20000.00"/> <Entry outShaftSpeed="4000.00" torque="-4000.00" electricPower="-20000.00"/> </PowerMap> </VoltageLevel> <DragCurve> <Entry outShaftSpeed="0.00" dragTorque="10.00"/> <Entry outShaftSpeed="4000.00" dragTorque="30.00"/> </DragCurve> </v2.10.1:Data> <v2.10.1:Signature> <di:Reference> <di:DigestMethod Algorithm=""/> <di:DigestValue/> </di:Reference> </v2.10.1:Signature> </ElectricMachineSystem> <P2.5GearRatios><!-- only for P2.5 HEV --> <Ratio gear="1">1.000</Ratio> <Ratio gear="2">2.000</Ratio> </P2.5GearRatios> </ElectricMachine> <ElectricEnergyStorage> <Battery> <StringID>0</StringID> <REESS> <v2.10.2:Data id="BAT-asdf" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.10.1"> <Manufacturer>a</Manufacturer> <Model>a</Model> <CertificationNumber>tokena</CertificationNumber> <Date>2017-01-01T00:00:00Z</Date> <AppVersion>aaaaa</AppVersion> <CertificationMethod>Measured</CertificationMethod> <BatteryType>HPBS</BatteryType> <RatedCapacity>72.00</RatedCapacity> <ConnectorsSubsystemsIncluded>true</ConnectorsSubsystemsIncluded> <JunctionboxIncluded>true</JunctionboxIncluded> <TestingTemperature>20</TestingTemperature> <OCV> <Entry SoC="0" OCV="620.00"/> <Entry SoC="100" OCV="640.00"/> </OCV> <InternalResistance> <Entry SoC="0" R_2="10.00" R_10="11.00" R_20="12.00"/> <Entry SoC="100" R_2="12.00" R_10="14.00" R_20="16.00"/> </InternalResistance> <CurrentLimits> <Entry SoC="0" maxChargingCurrent="50.00" maxDischargingCurrent="0.00"/> <Entry SoC="100" maxChargingCurrent="0.00" maxDischargingCurrent="50.00"/> </CurrentLimits> </v2.10.2:Data> <Signature> <di:Reference> <di:DigestMethod Algorithm="asf"/> <di:DigestValue/> </di:Reference> </Signature> </REESS> <SOCmin>20</SOCmin> <SOCmax>80</SOCmax> </Battery> <Battery> <StringID>1</StringID> <REESS> <v2.10.2:Data id="BAT-asdf" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.10.1"> <Manufacturer>b</Manufacturer> <Model>b</Model> <CertificationNumber>tokenb</CertificationNumber> <Date>2017-02-02T00:00:00Z</Date> <AppVersion>bbbbb</AppVersion> <CertificationMethod>Measured</CertificationMethod> <BatteryType>HPBS</BatteryType> <RatedCapacity>73.00</RatedCapacity> <ConnectorsSubsystemsIncluded>true</ConnectorsSubsystemsIncluded> <JunctionboxIncluded>true</JunctionboxIncluded> <TestingTemperature>20</TestingTemperature> <OCV> <Entry SoC="0" OCV="621.00"/> <Entry SoC="100" OCV="641.00"/> </OCV> <InternalResistance> <Entry SoC="0" R_2="11.00" R_10="12.00" R_20="13.00"/> <Entry SoC="100" R_2="12.00" R_10="14.00" R_20="16.00"/> </InternalResistance> <CurrentLimits> <Entry SoC="0" maxChargingCurrent="51.00" maxDischargingCurrent="0.00"/> <Entry SoC="100" maxChargingCurrent="0.00" maxDischargingCurrent="50.00"/> </CurrentLimits> </v2.10.2:Data> <Signature> <di:Reference> <di:DigestMethod Algorithm="bsf"/> <di:DigestValue/> </di:Reference> </Signature> </REESS> </Battery> </ElectricEnergyStorage> <Gearbox> <v2.0:Data id="gbx-vi2Oak2N" xsi:type="v2.0:GearboxDataDeclarationType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0"> <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> <Model>Generic 40t Long Haul Truck Gearbox</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-01-11T11:00:00Z</Date> <AppVersion>3.0.1</AppVersion> <TransmissionType>AMT</TransmissionType> <MainCertificationMethod>Standard values</MainCertificationMethod> <Gears xsi:type="GearsDeclarationType"> <Gear number="1"> <Ratio>14.930</Ratio> <MaxTorque>1900</MaxTorque> <MaxSpeed>2000</MaxSpeed> <TorqueLossMap> <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> </TorqueLossMap> </Gear> <Gear number="2"> <Ratio>11.640</Ratio> <MaxTorque>1900</MaxTorque> <MaxSpeed>2000</MaxSpeed> <TorqueLossMap> <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> </TorqueLossMap> </Gear> </Gears> </v2.0:Data> <v2.0:Signature> <di:Reference URI="#gbx-vi2Oak2N"> <di:Transforms> <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </di:Transforms> <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <di:DigestValue>ieNmjofFObDBGnB7+GX9of3HYe3ydK/ra+YvmULVJIk=</di:DigestValue> </di:Reference> </v2.0:Signature> </Gearbox> <TorqueConverter><!-- optional --> <v2.0:Data xsi:type="v1.0:TorqueConverterDataDeclarationType" id="TQ-1234" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0"> <Manufacturer>Some Manufacturer</Manufacturer> <Model>Some Model</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-02-15T11:00:00Z</Date> <AppVersion>TC CalcApp 123</AppVersion> <CertificationMethod>Standard values</CertificationMethod> <Characteristics> <Entry speedRatio="0.0000" torqueRatio="1.00" inputTorqueRef="300.00"/> <Entry speedRatio="0.5000" torqueRatio="1.00" inputTorqueRef="200.00"/> <Entry speedRatio="0.9000" torqueRatio="0.90" inputTorqueRef="200.00"/> </Characteristics> </v2.0:Data> <v2.0:Signature> <di:Reference> <di:DigestMethod Algorithm=""></di:DigestMethod> <di:DigestValue></di:DigestValue> </di:Reference> </v2.0:Signature> </TorqueConverter> <Axlegear> <v2.0:Data id="AXL-EC3ohnoh" xsi:type="v2.0:AxlegearDataDeclarationType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0"> <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> <Model>Generic 40t Long Haul Truck AxleGear</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-01-11T11:00:00Z</Date> <AppVersion>3.0.1</AppVersion> <LineType>Single portal axle</LineType> <Ratio>2.590</Ratio> <CertificationMethod>Standard values</CertificationMethod> <TorqueLossMap> <Entry inputSpeed="0.00" inputTorque="-5000.00" torqueLoss="115.00"/> <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="40.00"/> <Entry inputSpeed="0.00" inputTorque="15000.00" torqueLoss="265.00"/> <Entry inputSpeed="2100.00" inputTorque="-5000.00" torqueLoss="115.00"/> <Entry inputSpeed="2100.00" inputTorque="0.00" torqueLoss="40.00"/> <Entry inputSpeed="2100.00" inputTorque="35000.00" torqueLoss="565.00"/> </TorqueLossMap> </v2.0:Data> <v2.0:Signature> <di:Reference URI="#AXL-EC3ohnoh"> <di:Transforms> <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </di:Transforms> <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <di:DigestValue>o4nYTajmWKaduxys5ShmnfJbYd23rpxZ01JbuG6dmzU=</di:DigestValue> </di:Reference> </v2.0:Signature> </Axlegear> <AxleWheels> <v2.0:Data xsi:type="v2.0:AxleWheelsDataDeclarationType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0"> <Axles> <Axle axleNumber="1" xsi:type="AxleDataDeclarationType"> <AxleType>VehicleNonDriven</AxleType> <TwinTyres>false</TwinTyres> <Steered>true</Steered> <Tyre> <Data id="WHL-5432198760-315-70-R22.5" xsi:type="TyreDataDeclarationType"> <Manufacturer>Generic Wheels Manufacturer</Manufacturer> <Model>Generic Wheel</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-01-11T14:00:00Z</Date> <AppVersion>Tyre Generation App 1.0</AppVersion> <Dimension>315/70 R22.5</Dimension> <RRCDeclared>0.0055</RRCDeclared> <FzISO>31300</FzISO> </Data> <Signature> <di:Reference URI="#WHL-5432198760-315-70-R22.5"> <di:Transforms> <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </di:Transforms> <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <di:DigestValue>4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=</di:DigestValue> </di:Reference> </Signature> </Tyre> </Axle> <Axle axleNumber="2" xsi:type="AxleDataDeclarationType"> <AxleType>VehicleDriven</AxleType> <TwinTyres>true</TwinTyres> <Steered>false</Steered> <Tyre> <Data id="WHL-5432198760-315-70-R22.5" xsi:type="TyreDataDeclarationType"> <Manufacturer>Generic Wheels Manufacturer</Manufacturer> <Model>Generic Wheel</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-01-11T14:00:00Z</Date> <AppVersion>Tyre Generation App 1.0</AppVersion> <Dimension>315/70 R22.5</Dimension> <RRCDeclared>0.0063</RRCDeclared> <FzISO>31300</FzISO> </Data> <Signature> <di:Reference URI="#WHL-5432198760-315-70-R22.5"> <di:Transforms> <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </di:Transforms> <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <di:DigestValue>KljvtvGUUQ/L7MiLVAqU+bckL5PNDNNwdeLH9kUVrfM=</di:DigestValue> </di:Reference> </Signature> </Tyre> </Axle> </Axles> </v2.0:Data> </AxleWheels> <Auxiliaries> <Data xsi:type="AUX_HEV-P_LorryDataType"> <Fan> <Technology>Hydraulic driven - Constant displacement pump</Technology> </Fan> <SteeringPump> <Technology axleNumber="1">Variable displacement elec. controlled</Technology> </SteeringPump> <ElectricSystem> <Technology>Standard technology - LED headlights, all</Technology> </ElectricSystem> <PneumaticSystem> <Technology>Medium Supply 2-stage</Technology> </PneumaticSystem> <HVAC> <Technology>Default</Technology> </HVAC> </Data> </Auxiliaries> </Components> </v2.0:Vehicle> </tns:VectoInputDeclaration> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8"?> <tns:VectoInputDeclaration xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.10.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaVersion="2.0" xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" xmlns:di="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationJob V:\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:v2.10.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.10.1" xmlns:v2.10.2="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.10.2"> <v2.0:Vehicle xsi:type="Vehicle_HEV-Px_HeavyLorryDeclarationType" id="a"> <Manufacturer>TU Graz</Manufacturer> <ManufacturerAddress>Inffeldgasse 19</ManufacturerAddress> <Model>HEV Heavy Lorry Px</Model> <VIN>1234</VIN> <Date>2017-01-01T00:00:00Z</Date> <LegislativeCategory>N3</LegislativeCategory> <ChassisConfiguration>Rigid Lorry</ChassisConfiguration> <AxleConfiguration>4x2</AxleConfiguration> <CorrectedActualMass>6000</CorrectedActualMass> <TechnicalPermissibleMaximumLadenMass>12000</TechnicalPermissibleMaximumLadenMass> <IdlingSpeed>650</IdlingSpeed> <RetarderType>Losses included in Gearbox</RetarderType> <RetarderRatio>2.000</RetarderRatio> <AngledriveType>Separate Angledrive</AngledriveType> <PTO xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="v2.0:PTOType"> <v2.0:PTOShaftsGearWheels>none</v2.0:PTOShaftsGearWheels> <v2.0:PTOOtherElements>none</v2.0:PTOOtherElements> </PTO> <ZeroEmissionVehicle>true</ZeroEmissionVehicle> <VocationalVehicle>true</VocationalVehicle> <SleeperCab>true</SleeperCab> <VehicleTypeApprovalNumber>ASDF</VehicleTypeApprovalNumber> <ArchitectureID>P2.5</ArchitectureID> <OvcHev>true</OvcHev> <MaxChargingPower>11</MaxChargingPower> <ADAS xsi:type="ADAS_HEV_Type"> <v2.10.2:EngineStopStart>true</v2.10.2:EngineStopStart> <v2.10.2:PredictiveCruiseControl>1,2,3</v2.10.2:PredictiveCruiseControl> </ADAS> <Components xsi:type="Components_HEV-Px_LorryType"> <Engine> <v2.0:Data xsi:type="v1.0:EngineDataDeclarationType" id="ENG-gooZah3D" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0"> <Manufacturer>Generic Engine Manufacturer</Manufacturer> <Model>Generic 40t Long Haul Truck Engine</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-02-15T11:00:00Z</Date> <AppVersion>VectoEngine x.y</AppVersion> <Displacement>12730</Displacement> <IdlingSpeed>560</IdlingSpeed> <RatedSpeed>2200</RatedSpeed> <RatedPower>380000</RatedPower> <MaxEngineTorque>2300</MaxEngineTorque> <WHTCUrban>1.0097</WHTCUrban> <WHTCRural>1.0035</WHTCRural> <WHTCMotorway>1.0200</WHTCMotorway> <BFColdHot>1.0000</BFColdHot> <CFRegPer>1.0000</CFRegPer> <CFNCV>1.0000</CFNCV> <FuelType>NG</FuelType> <FuelConsumptionMap> <Entry engineSpeed="560.00" torque="-149.00" fuelConsumption="0.00"/> <Entry engineSpeed="560.00" torque="1180.00" fuelConsumption="12869.00"/> <Entry engineSpeed="2100.00" torque="-320.00" fuelConsumption="0.00"/> <Entry engineSpeed="2100.00" torque="1100.00" fuelConsumption="50653.00"/> </FuelConsumptionMap> <FullLoadAndDragCurve> <Entry engineSpeed="560.00" maxTorque="1180.00" dragTorque="-149.00"/> <Entry engineSpeed="1800.00" maxTorque="1800.00" dragTorque="-300.00"/> <Entry engineSpeed="2100.00" maxTorque="1100.00" dragTorque="-320.00"/> </FullLoadAndDragCurve> </v2.0:Data> <v2.0:Signature> <di:Reference> <di:DigestMethod Algorithm=""/> <di:DigestValue/> </di:Reference> </v2.0:Signature> </Engine> <ElectricMachine> <PowertrainPosition>2</PowertrainPosition> <Count>1</Count> <ElectricMachineSystem> <v2.10.1:Data xsi:type="v2.10.1:ElectricMachineSystemMeasuredDataDeclarationType" id="EM-1234" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.10.1"> <Manufacturer>a</Manufacturer> <Model>a</Model> <CertificationNumber>token</CertificationNumber> <Date>2017-01-01T00:00:00Z</Date> <AppVersion>aaaaa</AppVersion> <ElectricMachineType>ASM</ElectricMachineType> <CertificationMethod>Measured</CertificationMethod> <R85RatedPower>1</R85RatedPower> <RotationalInertia>0.10</RotationalInertia> <ContinuousTorque>200.00</ContinuousTorque> <TestSpeedContinuousTorque>2000.00</TestSpeedContinuousTorque> <OverloadTorque>400.00</OverloadTorque> <TestSpeedOverloadTorque>2000.00</TestSpeedOverloadTorque> <OverloadDuration>30.00</OverloadDuration> <TestVoltageOverload>483</TestVoltageOverload> <DcDcConverterIncluded>true</DcDcConverterIncluded> <IHPCType>None</IHPCType> <VoltageLevel> <Voltage>400</Voltage> <MaxTorqueCurve> <Entry outShaftSpeed="0.00" maxTorque="450.00" minTorque="-450.00"/> <Entry outShaftSpeed="4000.00" maxTorque="100.00" minTorque="-100.00"/> </MaxTorqueCurve> <PowerMap gear="1"> <Entry outShaftSpeed="0.00" torque="400.00" electricPower="1000.00"/> <Entry outShaftSpeed="0.00" torque="-400.00" electricPower="-1000.00"/> <Entry outShaftSpeed="4000.00" torque="4000.00" electricPower="20000.00"/> <Entry outShaftSpeed="4000.00" torque="-4000.00" electricPower="-20000.00"/> </PowerMap> <PowerMap gear="2"> <Entry outShaftSpeed="0.00" torque="500.00" electricPower="1100.00"/> <Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1100.00"/> <Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="30000.00"/> <Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-30000.00"/> </PowerMap> <PowerMap gear="3"> <Entry outShaftSpeed="0.00" torque="600.00" electricPower="1200.00"/> <Entry outShaftSpeed="0.00" torque="-600.00" electricPower="-1200.00"/> <Entry outShaftSpeed="6000.00" torque="6000.00" electricPower="40000.00"/> <Entry outShaftSpeed="6000.00" torque="-6000.00" electricPower="-40000.00"/> </PowerMap> </VoltageLevel> <VoltageLevel> <Voltage>600</Voltage> <MaxTorqueCurve> <Entry outShaftSpeed="0.00" maxTorque="450.00" minTorque="-450.00"/> <Entry outShaftSpeed="4000.00" maxTorque="100.00" minTorque="-100.00"/> </MaxTorqueCurve> <PowerMap gear="1"> <Entry outShaftSpeed="0.00" torque="400.00" electricPower="1000.00"/> <Entry outShaftSpeed="0.00" torque="-400.00" electricPower="-1000.00"/> <Entry outShaftSpeed="4000.00" torque="4000.00" electricPower="20000.00"/> <Entry outShaftSpeed="4000.00" torque="-4000.00" electricPower="-20000.00"/> </PowerMap> <PowerMap gear="2"> <Entry outShaftSpeed="0.00" torque="500.00" electricPower="1100.00"/> <Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1100.00"/> <Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="30000.00"/> <Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-30000.00"/> </PowerMap> </VoltageLevel> <DragCurve> <Entry outShaftSpeed="0.00" dragTorque="10.00"/> <Entry outShaftSpeed="4000.00" dragTorque="30.00"/> </DragCurve> </v2.10.1:Data> <v2.10.1:Signature> <di:Reference> <di:DigestMethod Algorithm=""/> <di:DigestValue/> </di:Reference> </v2.10.1:Signature> </ElectricMachineSystem> <P2.5GearRatios><!-- only for P2.5 HEV --> <Ratio gear="1">1.000</Ratio> <Ratio gear="2">2.000</Ratio> </P2.5GearRatios> </ElectricMachine> <ElectricEnergyStorage> <Battery> <StringID>0</StringID> <REESS> <v2.10.2:Data id="BAT-asdf" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.10.1"> <Manufacturer>a</Manufacturer> <Model>a</Model> <CertificationNumber>tokena</CertificationNumber> <Date>2017-01-01T00:00:00Z</Date> <AppVersion>aaaaa</AppVersion> <CertificationMethod>Measured</CertificationMethod> <BatteryType>HPBS</BatteryType> <RatedCapacity>72.00</RatedCapacity> <ConnectorsSubsystemsIncluded>true</ConnectorsSubsystemsIncluded> <JunctionboxIncluded>true</JunctionboxIncluded> <TestingTemperature>20</TestingTemperature> <OCV> <Entry SoC="0" OCV="620.00"/> <Entry SoC="100" OCV="640.00"/> </OCV> <InternalResistance> <Entry SoC="0" R_2="10.00" R_10="11.00" R_20="12.00"/> <Entry SoC="100" R_2="12.00" R_10="14.00" R_20="16.00"/> </InternalResistance> <CurrentLimits> <Entry SoC="0" maxChargingCurrent="50.00" maxDischargingCurrent="0.00"/> <Entry SoC="100" maxChargingCurrent="0.00" maxDischargingCurrent="50.00"/> </CurrentLimits> </v2.10.2:Data> <Signature> <di:Reference> <di:DigestMethod Algorithm="asf"/> <di:DigestValue/> </di:Reference> </Signature> </REESS> <SOCmin>20</SOCmin> <SOCmax>80</SOCmax> </Battery> <Battery> <StringID>1</StringID> <REESS> <v2.10.2:Data id="BAT-asdf" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.10.1"> <Manufacturer>b</Manufacturer> <Model>b</Model> <CertificationNumber>tokenb</CertificationNumber> <Date>2017-02-02T00:00:00Z</Date> <AppVersion>bbbbb</AppVersion> <CertificationMethod>Measured</CertificationMethod> <BatteryType>HPBS</BatteryType> <RatedCapacity>73.00</RatedCapacity> <ConnectorsSubsystemsIncluded>true</ConnectorsSubsystemsIncluded> <JunctionboxIncluded>true</JunctionboxIncluded> <TestingTemperature>20</TestingTemperature> <OCV> <Entry SoC="0" OCV="621.00"/> <Entry SoC="100" OCV="641.00"/> </OCV> <InternalResistance> <Entry SoC="0" R_2="11.00" R_10="12.00" R_20="13.00"/> <Entry SoC="100" R_2="12.00" R_10="14.00" R_20="16.00"/> </InternalResistance> <CurrentLimits> <Entry SoC="0" maxChargingCurrent="51.00" maxDischargingCurrent="0.00"/> <Entry SoC="100" maxChargingCurrent="0.00" maxDischargingCurrent="50.00"/> </CurrentLimits> </v2.10.2:Data> <Signature> <di:Reference> <di:DigestMethod Algorithm="bsf"/> <di:DigestValue/> </di:Reference> </Signature> </REESS> </Battery> </ElectricEnergyStorage> <Gearbox> <v2.0:Data id="gbx-vi2Oak2N" xsi:type="v2.0:GearboxDataDeclarationType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0"> <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> <Model>Generic 40t Long Haul Truck Gearbox</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-01-11T11:00:00Z</Date> <AppVersion>3.0.1</AppVersion> <TransmissionType>AMT</TransmissionType> <MainCertificationMethod>Standard values</MainCertificationMethod> <Gears xsi:type="GearsDeclarationType"> <Gear number="1"> <Ratio>14.930</Ratio> <MaxTorque>1900</MaxTorque> <MaxSpeed>2000</MaxSpeed> <TorqueLossMap> <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> </TorqueLossMap> </Gear> <Gear number="2"> <Ratio>11.640</Ratio> <MaxTorque>1900</MaxTorque> <MaxSpeed>2000</MaxSpeed> <TorqueLossMap> <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> </TorqueLossMap> </Gear> </Gears> </v2.0:Data> <v2.0:Signature> <di:Reference URI="#gbx-vi2Oak2N"> <di:Transforms> <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </di:Transforms> <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <di:DigestValue>ieNmjofFObDBGnB7+GX9of3HYe3ydK/ra+YvmULVJIk=</di:DigestValue> </di:Reference> </v2.0:Signature> </Gearbox> <TorqueConverter><!-- optional --> <v2.0:Data xsi:type="v1.0:TorqueConverterDataDeclarationType" id="TQ-1234" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0"> <Manufacturer>Some Manufacturer</Manufacturer> <Model>Some Model</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-02-15T11:00:00Z</Date> <AppVersion>TC CalcApp 123</AppVersion> <CertificationMethod>Standard values</CertificationMethod> <Characteristics> <Entry speedRatio="0.0000" torqueRatio="1.00" inputTorqueRef="300.00"/> <Entry speedRatio="0.5000" torqueRatio="1.00" inputTorqueRef="200.00"/> <Entry speedRatio="0.9000" torqueRatio="0.90" inputTorqueRef="200.00"/> </Characteristics> </v2.0:Data> <v2.0:Signature> <di:Reference> <di:DigestMethod Algorithm=""></di:DigestMethod> <di:DigestValue></di:DigestValue> </di:Reference> </v2.0:Signature> </TorqueConverter> <Axlegear> <v2.0:Data id="AXL-EC3ohnoh" xsi:type="v2.0:AxlegearDataDeclarationType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0"> <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> <Model>Generic 40t Long Haul Truck AxleGear</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-01-11T11:00:00Z</Date> <AppVersion>3.0.1</AppVersion> <LineType>Single portal axle</LineType> <Ratio>2.590</Ratio> <CertificationMethod>Standard values</CertificationMethod> <TorqueLossMap> <Entry inputSpeed="0.00" inputTorque="-5000.00" torqueLoss="115.00"/> <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="40.00"/> <Entry inputSpeed="0.00" inputTorque="15000.00" torqueLoss="265.00"/> <Entry inputSpeed="2100.00" inputTorque="-5000.00" torqueLoss="115.00"/> <Entry inputSpeed="2100.00" inputTorque="0.00" torqueLoss="40.00"/> <Entry inputSpeed="2100.00" inputTorque="35000.00" torqueLoss="565.00"/> </TorqueLossMap> </v2.0:Data> <v2.0:Signature> <di:Reference URI="#AXL-EC3ohnoh"> <di:Transforms> <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </di:Transforms> <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <di:DigestValue>o4nYTajmWKaduxys5ShmnfJbYd23rpxZ01JbuG6dmzU=</di:DigestValue> </di:Reference> </v2.0:Signature> </Axlegear> <AxleWheels> <v2.0:Data xsi:type="v2.0:AxleWheelsDataDeclarationType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0"> <Axles> <Axle axleNumber="1" xsi:type="AxleDataDeclarationType"> <AxleType>VehicleNonDriven</AxleType> <TwinTyres>false</TwinTyres> <Steered>true</Steered> <Tyre> <Data id="WHL-5432198760-315-70-R22.5" xsi:type="TyreDataDeclarationType"> <Manufacturer>Generic Wheels Manufacturer</Manufacturer> <Model>Generic Wheel</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-01-11T14:00:00Z</Date> <AppVersion>Tyre Generation App 1.0</AppVersion> <Dimension>315/70 R22.5</Dimension> <RRCDeclared>0.0055</RRCDeclared> <FzISO>31300</FzISO> </Data> <Signature> <di:Reference URI="#WHL-5432198760-315-70-R22.5"> <di:Transforms> <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </di:Transforms> <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <di:DigestValue>4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=</di:DigestValue> </di:Reference> </Signature> </Tyre> </Axle> <Axle axleNumber="2" xsi:type="AxleDataDeclarationType"> <AxleType>VehicleDriven</AxleType> <TwinTyres>true</TwinTyres> <Steered>false</Steered> <Tyre> <Data id="WHL-5432198760-315-70-R22.5" xsi:type="TyreDataDeclarationType"> <Manufacturer>Generic Wheels Manufacturer</Manufacturer> <Model>Generic Wheel</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-01-11T14:00:00Z</Date> <AppVersion>Tyre Generation App 1.0</AppVersion> <Dimension>315/70 R22.5</Dimension> <RRCDeclared>0.0063</RRCDeclared> <FzISO>31300</FzISO> </Data> <Signature> <di:Reference URI="#WHL-5432198760-315-70-R22.5"> <di:Transforms> <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </di:Transforms> <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <di:DigestValue>KljvtvGUUQ/L7MiLVAqU+bckL5PNDNNwdeLH9kUVrfM=</di:DigestValue> </di:Reference> </Signature> </Tyre> </Axle> </Axles> </v2.0:Data> </AxleWheels> <Auxiliaries> <Data xsi:type="AUX_HEV-P_LorryDataType"> <Fan> <Technology>Hydraulic driven - Constant displacement pump</Technology> </Fan> <SteeringPump> <Technology axleNumber="1">Variable displacement elec. controlled</Technology> </SteeringPump> <ElectricSystem> <Technology>Standard technology - LED headlights, all</Technology> </ElectricSystem> <PneumaticSystem> <Technology>Medium Supply 2-stage</Technology> </PneumaticSystem> <HVAC> <Technology>Default</Technology> </HVAC> </Data> </Auxiliaries> </Components> </v2.0:Vehicle> </tns:VectoInputDeclaration> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs index 823ee6d13662dbc654139686a22fffaeb461d530..7b4f7eedfbe98424e02b72d21bf304d9f7a6d369 100644 --- a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs +++ b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs @@ -380,25 +380,50 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual(2, voltageLevels.Count); var voltageLevel = voltageLevels[0]; Assert.AreEqual(400.SI<Volt>(), voltageLevel.VoltageLevel); - - TestMaxTorqueCurveEntry("0.00","450.00","-450.00", voltageLevel.FullLoadCurve.Rows[0]); - TestMaxTorqueCurveEntry("4000.00", "100.00", "-100.00", voltageLevel.FullLoadCurve.Rows[1]); - - TestPowerMapEntry("0.00", "400.00", "1000.00", voltageLevel.EfficiencyMap.Rows[0]); - TestPowerMapEntry("0.00", "-400.00", "-1000.00", voltageLevel.EfficiencyMap.Rows[1]); - TestPowerMapEntry("4000.00", "4000.00", "20000.00", voltageLevel.EfficiencyMap.Rows[2]); - TestPowerMapEntry("4000.00", "-4000.00", "-20000.00", voltageLevel.EfficiencyMap.Rows[3]); + + TestMaxTorqueCurve(voltageLevel.FullLoadCurve); + TestPowerMap(voltageLevel.PowerMap); voltageLevel = voltageLevels[1]; Assert.AreEqual(600.SI<Volt>(), voltageLevel.VoltageLevel); - TestMaxTorqueCurveEntry("0.00", "450.00", "-450.00", voltageLevel.FullLoadCurve.Rows[0]); - TestMaxTorqueCurveEntry("4000.00", "100.00", "-100.00", voltageLevel.FullLoadCurve.Rows[1]); + TestMaxTorqueCurve(voltageLevel.FullLoadCurve); + TestPowerMap(voltageLevel.PowerMap); + + } + + private void TestPowerMap(IList<IElectricMotorPowerMap> powerMap) + { + for (int i = 1; i <= powerMap.Count; i++) { + Assert.AreEqual(i, powerMap[i-1].Gear); + } + + if (powerMap.Count >= 1) { + TestPowerMapEntry("0.00", "400.00", "1000.00", powerMap[0].PowerMap.Rows[0]); + TestPowerMapEntry("0.00", "-400.00", "-1000.00", powerMap[0].PowerMap.Rows[1]); + TestPowerMapEntry("4000.00", "4000.00", "20000.00", powerMap[0].PowerMap.Rows[2]); + TestPowerMapEntry("4000.00", "-4000.00", "-20000.00", powerMap[0].PowerMap.Rows[3]); + } + if (powerMap.Count >= 2) { + TestPowerMapEntry("0.00", "500.00", "1100.00", powerMap[1].PowerMap.Rows[0]); + TestPowerMapEntry("0.00", "-500.00", "-1100.00", powerMap[1].PowerMap.Rows[1]); + TestPowerMapEntry("5000.00", "5000.00", "30000.00", powerMap[1].PowerMap.Rows[2]); + TestPowerMapEntry("5000.00", "-5000.00", "-30000.00", powerMap[1].PowerMap.Rows[3]); + } + + if (powerMap.Count == 3) { + TestPowerMapEntry("0.00", "600.00", "1200.00", powerMap[2].PowerMap.Rows[0]); + TestPowerMapEntry("0.00", "-600.00", "-1200.00", powerMap[2].PowerMap.Rows[1]); + TestPowerMapEntry("6000.00", "6000.00", "40000.00", powerMap[2].PowerMap.Rows[2]); + TestPowerMapEntry("6000.00", "-6000.00", "-40000.00", powerMap[2].PowerMap.Rows[3]); + } + } - TestPowerMapEntry("0.00", "400.00", "1000.00", voltageLevel.EfficiencyMap.Rows[0]); - TestPowerMapEntry("0.00", "-400.00", "-1000.00", voltageLevel.EfficiencyMap.Rows[1]); - TestPowerMapEntry("4000.00", "4000.00", "20000.00", voltageLevel.EfficiencyMap.Rows[2]); - TestPowerMapEntry("4000.00", "-4000.00", "-20000.00", voltageLevel.EfficiencyMap.Rows[3]); + + private void TestMaxTorqueCurve(TableData torqueCurve) + { + TestMaxTorqueCurveEntry("0.00", "450.00", "-450.00", torqueCurve.Rows[0]); + TestMaxTorqueCurveEntry("4000.00", "100.00", "-100.00", torqueCurve.Rows[1]); } private void TestMaxTorqueCurveEntry(string outShaftSpeed, string maxTorque, string minTorque, DataRow row)