From 50104751c37afbec9f2565f95e41ca8a7e5c2f0f Mon Sep 17 00:00:00 2001
From: "VKMTHD\\franzjosefkober" <franz.josef.kober@ivt.tugraz.at>
Date: Thu, 28 Oct 2021 17:40:44 +0200
Subject: [PATCH] adjusted interface and reader of IEPC and added tests

---
 .../InputData/DeclarationInputData.cs         |  10 +-
 .../Resources/XMLNames.Designer.cs            |   9 ++
 .../VectoCommon/Resources/XMLNames.resx       |   3 +
 ...ectricMotorDeclarationInputDataProvider.cs |  95 +++++++++++++---
 ...XMLDeclarationInputDataV210InjectModule.cs |   3 +
 .../HEV-S_heavyLorry_IEPC-S_n_opt.xml         |  16 +++
 .../HEV-S_mediumLorry_IEPC-S_n_opt.xml        |  16 +++
 .../HEV-S_primaryBus_IEPC-S_n_opt.xml         |  16 +++
 .../IEPC_heavyLorry_n_opt.xml                 |  16 +++
 .../IEPC_mediumLorry_n_opt.xml                |  16 +++
 .../IEPC_primaryBus_n_opt.xml                 |  16 +++
 .../XML/XMLDeclarationInputv210.cs            | 103 +++++++++++++-----
 12 files changed, 277 insertions(+), 42 deletions(-)

diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
index 36f5bed0a2..a2162a5e5a 100644
--- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
@@ -823,11 +823,19 @@ namespace TUGraz.VectoCommon.InputData
 
 		IList<IElectricMotorVoltageLevel> VoltageLevels { get; }
 
-		TableData DragCurve { get; }
+		IList<IDragCurve> DragCurves { get; }
 
 		TableData Conditioning { get; }
 	}
 
+	public interface IDragCurve
+	{
+		int? Gear { get; }
+
+		TableData DragCurve { get; }
+	}
+
+
 	public interface IGearEntry
 	{
 		int GearNumber { get; }
diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
index 356eed6783..7fcdf080b1 100644
--- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
+++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
@@ -1878,6 +1878,15 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to gear.
+        /// </summary>
+        public static string DragCurve_Gear {
+            get {
+                return ResourceManager.GetString("DragCurve_Gear", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to outShaftSpeed.
         /// </summary>
diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx
index 248828c7a5..6df12b7238 100644
--- a/VectoCommon/VectoCommon/Resources/XMLNames.resx
+++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx
@@ -1860,4 +1860,7 @@
   <data name="PowerMap_Gear" xml:space="preserve">
     <value>gear</value>
   </data>
+  <data name="DragCurve_Gear" xml:space="preserve">
+    <value>gear</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs
index 4aba1e71a7..ea37fe8a60 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs
@@ -59,17 +59,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IElectricMotorVoltageLevel
 
-		public virtual Volt VoltageLevel => GetDouble(XMLNames.VoltageLevel_Voltage).SI<Volt>();
+		public virtual Volt VoltageLevel => ElementExists(XMLNames.VoltageLevel_Voltage) ? 
+			GetDouble(XMLNames.VoltageLevel_Voltage).SI<Volt>() : null ;
 
 		public virtual TableData FullLoadCurve => ReadFullLoadCurve();
 		
 
-		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
@@ -102,7 +97,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		
 		protected virtual IList<IElectricMotorVoltageLevel> GetVoltageLevels()
 		{
-			var voltageLevelNodes = GetNodes(XMLNames.ElectricMachine_VoltageLevel);
+			var voltageLevelNodes = GetNodes(XMLNames.ElectricMachine_VoltageLevel, BaseNode);
 			if (voltageLevelNodes.IsNullOrEmpty())
 				return null;
 
@@ -248,8 +243,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 				var certMethod = GetString(XMLNames.Component_Gearbox_CertificationMethod, required: false) ??
 								GetString(XMLNames.Component_CertificationMethod, required: false);
 
-				if (certMethod != null && certMethod == "Measured for complete component")
-					return CertificationMethod.Measured;
+				if (certMethod != null) {
+					switch (certMethod) {
+						case "Measured for complete component":
+						case "Measured for EM and standard values for other components":
+							return CertificationMethod.Measured;
+						case "Standard values for all components":
+							return CertificationMethod.StandardValues;
+					}
+				}
 
 				return certMethod != null
 					? EnumHelper.ParseEnum<CertificationMethod>(certMethod)
@@ -278,12 +280,26 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		public virtual IList<IElectricMotorVoltageLevel> VoltageLevels =>
 			_voltageLevels ?? (_voltageLevels = GetVoltageLevels());
 
-		public virtual TableData DragCurve => ReadDragCurve();
+		public IList<IDragCurve> DragCurves => GetDragCurves();
 
 		public virtual TableData Conditioning => ElementExists(XMLNames.Conditioning)
 			? ReadConditioning() : null;
 
 		#endregion
+
+		private IList<IDragCurve> GetDragCurves()
+		{
+			var dragCurveNodes = GetNodes(XMLNames.DragCurve, BaseNode);
+			if (dragCurveNodes.IsNullOrEmpty())
+				return null;
+
+			var dragCurves = new List<IDragCurve>();
+			foreach (XmlNode dragCurve in dragCurveNodes) {
+				dragCurves.Add(new DragCurveEntry(dragCurve));
+			}
+			return dragCurves;
+		}
+
 		
 		private IList<IGearEntry> GetGearEntries()
 		{
@@ -292,11 +308,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 				return null;
 
 			var gears = new List<IGearEntry>();
-			foreach (XmlNode gearNode in gearNodes)
-			{
+			foreach (XmlNode gearNode in gearNodes) {
 				gears.Add(new GearEntry(gearNode));
 			}
-
 			return gears;
 		}
 
@@ -321,6 +335,40 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			#endregion
 		}
 		
+		public class DragCurveEntry : AbstractXMLType, IDragCurve
+		{
+			private Dictionary<string, string> dargCurveMapping = new Dictionary<string, string> {
+				{XMLNames.DragCurve_OutShaftSpeed, XMLNames.DragCurve_OutShaftSpeed },
+				{XMLNames.DragCurve_DragTorque, XMLNames.DragCurve_DragTorque }
+			};
+			
+			public DragCurveEntry(XmlNode node) : base(node) { }
+
+			#region Implementation of IDragCurve
+			
+			public int? Gear
+			{
+				get
+				{
+					var gear = GetAttribute(BaseNode, XMLNames.DragCurve_Gear);
+					return gear != null ? Convert.ToInt32(gear) : (int?)null;
+				}
+			}
+
+			public TableData DragCurve
+			{
+				get
+				{
+					var dragCurveEntryNodes = GetNodes(XMLNames.DragCurve_Entry);
+					return XMLHelper.ReadTableData(dargCurveMapping, dragCurveEntryNodes);
+				}
+			}
+
+			#endregion
+		}
+
+
+
 		#region Overrides of AbstractXMLResource
 
 		protected override XNamespace SchemaNamespace => NAMESPACE_URI;
@@ -329,4 +377,23 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		#endregion
 	}
 
+
+	// ---------------------------------------------------------------------------------------
+	
+	public class XMLElectricMotorIEPCIStandardInputDataProviderV2101 : XMLElectricMotorIEPCIInputDataProviderV2101
+	{
+		public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V2101_JOBS;
+		public new const string XSD_TYPE = "IEPCStandardValuesDataDeclarationType";
+		public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE);
+
+		public XMLElectricMotorIEPCIStandardInputDataProviderV2101(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) 
+			: base(vehicle, componentNode, sourceFile) { }
+
+
+		#region Overrides of XMLElectricMotorIEPCIInputDataProviderV2101
+
+		public override TableData Conditioning => null;
+
+		#endregion
+	}
 }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV210InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV210InjectModule.cs
index 6d1b87e58d..cc9a7e1694 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV210InjectModule.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV210InjectModule.cs
@@ -283,6 +283,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules
 			Bind<IXMLIEPCInputData>().To<XMLElectricMotorIEPCIInputDataProviderV2101>()
 				.Named(XMLElectricMotorIEPCIInputDataProviderV2101.QUALIFIED_XSD_TYPE);
 
+			Bind<IXMLIEPCInputData>().To<XMLElectricMotorIEPCIStandardInputDataProviderV2101>()
+				.Named(XMLElectricMotorIEPCIStandardInputDataProviderV2101.QUALIFIED_XSD_TYPE);
+			
 			Bind<IXMLElectricStorageSystemDeclarationInputData>().To<XMLElectricStorageSystemDeclarationInputData>()
 				.Named(XMLElectricStorageSystemDeclarationInputData.QUALIFIED_XSD_TYPE);
 			
diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV-S_heavyLorry_IEPC-S_n_opt.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV-S_heavyLorry_IEPC-S_n_opt.xml
index 1743872061..8cd5aa2613 100644
--- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV-S_heavyLorry_IEPC-S_n_opt.xml
+++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV-S_heavyLorry_IEPC-S_n_opt.xml
@@ -271,6 +271,12 @@
 							<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="1500.00"/>
+							<Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1500.00"/>
+							<Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="25000.00"/>
+							<Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-25000.00"/>
+						</PowerMap>
 					</VoltageLevel>
 					<VoltageLevel>
 						<Voltage>600</Voltage>
@@ -284,11 +290,21 @@
 							<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="1500.00"/>
+							<Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1500.00"/>
+							<Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="25000.00"/>
+							<Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-25000.00"/>
+						</PowerMap>
 					</VoltageLevel>
 					<DragCurve gear="1">
 						<Entry outShaftSpeed="0.00" dragTorque="10.00"/>
 						<Entry outShaftSpeed="4000.00" dragTorque="30.00"/>
 					</DragCurve>
+					<DragCurve gear="2">
+						<Entry outShaftSpeed="0.00" dragTorque="15.00"/>
+						<Entry outShaftSpeed="4500.00" dragTorque="35.00"/>
+					</DragCurve>
 					<Conditioning>
 						<Entry coolantTempInlet="30" coolingPower="5000"/>
 					</Conditioning>
diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV-S_mediumLorry_IEPC-S_n_opt.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV-S_mediumLorry_IEPC-S_n_opt.xml
index 809781d9a0..76c2721e7f 100644
--- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV-S_mediumLorry_IEPC-S_n_opt.xml
+++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV-S_mediumLorry_IEPC-S_n_opt.xml
@@ -267,6 +267,12 @@
 							<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="1500.00"/>
+							<Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1500.00"/>
+							<Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="25000.00"/>
+							<Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-25000.00"/>
+						</PowerMap>
 					</VoltageLevel>
 					<VoltageLevel>
 						<Voltage>600</Voltage>
@@ -280,11 +286,21 @@
 							<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="1500.00"/>
+							<Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1500.00"/>
+							<Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="25000.00"/>
+							<Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-25000.00"/>
+						</PowerMap>
 					</VoltageLevel>
 					<DragCurve gear="1">
 						<Entry outShaftSpeed="0.00" dragTorque="10.00"/>
 						<Entry outShaftSpeed="4000.00" dragTorque="30.00"/>
 					</DragCurve>
+					<DragCurve gear="2">
+						<Entry outShaftSpeed="0.00" dragTorque="15.00"/>
+						<Entry outShaftSpeed="4500.00" dragTorque="35.00"/>
+					</DragCurve>
 					<Conditioning>
 						<Entry coolantTempInlet="30" coolingPower="5000"/>
 					</Conditioning>
diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV-S_primaryBus_IEPC-S_n_opt.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV-S_primaryBus_IEPC-S_n_opt.xml
index 9cc047fe7f..2a2333200e 100644
--- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV-S_primaryBus_IEPC-S_n_opt.xml
+++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/HEV-S_primaryBus_IEPC-S_n_opt.xml
@@ -264,6 +264,12 @@
 							<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="1500.00"/>
+							<Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1500.00"/>
+							<Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="25000.00"/>
+							<Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-25000.00"/>
+						</PowerMap>
 					</VoltageLevel>
 					<VoltageLevel>
 						<Voltage>600</Voltage>
@@ -277,11 +283,21 @@
 							<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="1500.00"/>
+							<Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1500.00"/>
+							<Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="25000.00"/>
+							<Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-25000.00"/>
+						</PowerMap>
 					</VoltageLevel>
 					<DragCurve gear="1">
 						<Entry outShaftSpeed="0.00" dragTorque="10.00"/>
 						<Entry outShaftSpeed="4000.00" dragTorque="30.00"/>
 					</DragCurve>
+					<DragCurve gear="2">
+						<Entry outShaftSpeed="0.00" dragTorque="15.00"/>
+						<Entry outShaftSpeed="4500.00" dragTorque="35.00"/>
+					</DragCurve>
 					<Conditioning>
 						<Entry coolantTempInlet="30" coolingPower="5000"/>
 					</Conditioning>
diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/IEPC_heavyLorry_n_opt.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/IEPC_heavyLorry_n_opt.xml
index c04a3fb5db..a26b88b211 100644
--- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/IEPC_heavyLorry_n_opt.xml
+++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/IEPC_heavyLorry_n_opt.xml
@@ -69,6 +69,12 @@
 							<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="1500.00"/>
+							<Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1500.00"/>
+							<Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="25000.00"/>
+							<Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-25000.00"/>
+						</PowerMap>
 					</VoltageLevel>
 					<VoltageLevel>
 						<Voltage>600</Voltage>
@@ -82,11 +88,21 @@
 							<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="1500.00"/>
+							<Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1500.00"/>
+							<Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="25000.00"/>
+							<Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-25000.00"/>
+						</PowerMap>
 					</VoltageLevel>
 					<DragCurve gear="1">
 						<Entry outShaftSpeed="0.00" dragTorque="10.00"/>
 						<Entry outShaftSpeed="4000.00" dragTorque="30.00"/>
 					</DragCurve>
+					<DragCurve gear="2">
+						<Entry outShaftSpeed="0.00" dragTorque="15.00"/>
+						<Entry outShaftSpeed="4500.00" dragTorque="35.00"/>
+					</DragCurve>
 					<Conditioning>
 						<Entry coolantTempInlet="30" coolingPower="5000"/>
 					</Conditioning>
diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/IEPC_mediumLorry_n_opt.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/IEPC_mediumLorry_n_opt.xml
index 816e0d19ce..407b61d680 100644
--- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/IEPC_mediumLorry_n_opt.xml
+++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/IEPC_mediumLorry_n_opt.xml
@@ -63,6 +63,12 @@
 							<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="1500.00"/>
+							<Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1500.00"/>
+							<Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="25000.00"/>
+							<Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-25000.00"/>
+						</PowerMap>
 					</VoltageLevel>
 					<VoltageLevel>
 						<Voltage>600</Voltage>
@@ -76,11 +82,21 @@
 							<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="1500.00"/>
+							<Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1500.00"/>
+							<Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="25000.00"/>
+							<Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-25000.00"/>
+						</PowerMap>
 					</VoltageLevel>
 					<DragCurve gear="1">
 						<Entry outShaftSpeed="0.00" dragTorque="10.00"/>
 						<Entry outShaftSpeed="4000.00" dragTorque="30.00"/>
 					</DragCurve>
+					<DragCurve gear="2">
+						<Entry outShaftSpeed="0.00" dragTorque="15.00"/>
+						<Entry outShaftSpeed="4500.00" dragTorque="35.00"/>
+					</DragCurve>
 					<Conditioning>
 						<Entry coolantTempInlet="30" coolingPower="5000"/>
 					</Conditioning>
diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/IEPC_primaryBus_n_opt.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/IEPC_primaryBus_n_opt.xml
index 8f3806b937..03963e3f82 100644
--- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/IEPC_primaryBus_n_opt.xml
+++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/IEPC_primaryBus_n_opt.xml
@@ -62,6 +62,12 @@
 							<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="1500.00"/>
+							<Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1500.00"/>
+							<Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="25000.00"/>
+							<Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-25000.00"/>
+						</PowerMap>
 					</VoltageLevel>
 					<VoltageLevel>
 						<Voltage>600</Voltage>
@@ -75,11 +81,21 @@
 							<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="1500.00"/>
+							<Entry outShaftSpeed="0.00" torque="-500.00" electricPower="-1500.00"/>
+							<Entry outShaftSpeed="5000.00" torque="5000.00" electricPower="25000.00"/>
+							<Entry outShaftSpeed="5000.00" torque="-5000.00" electricPower="-25000.00"/>
+						</PowerMap>
 					</VoltageLevel>
 					<DragCurve gear="1">
 						<Entry outShaftSpeed="0.00" dragTorque="10.00"/>
 						<Entry outShaftSpeed="4000.00" dragTorque="30.00"/>
 					</DragCurve>
+					<DragCurve gear="2">
+						<Entry outShaftSpeed="0.00" dragTorque="15.00"/>
+						<Entry outShaftSpeed="4500.00" dragTorque="35.00"/>
+					</DragCurve>
 					<Conditioning>
 						<Entry coolantTempInlet="30" coolingPower="5000"/>
 					</Conditioning>
diff --git a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs
index d0fcd1521c..8df773d179 100644
--- a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs
@@ -398,25 +398,38 @@ namespace TUGraz.VectoCore.Tests.XML
 				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 >= 1) 
+				TestPowerMapData01(powerMap[0]);
+			
+			if (powerMap.Count >= 2) 
+				TestPowerMapData02(powerMap[1]);
+			
+			if (powerMap.Count == 3) 
+				TestPowerMapData03(powerMap[2]);
+		}
 
-			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]);
-			}
+		private void TestPowerMapData01(IElectricMotorPowerMap powerMap)
+		{
+			TestPowerMapEntry("0.00", "400.00", "1000.00", powerMap.PowerMap.Rows[0]);
+			TestPowerMapEntry("0.00", "-400.00", "-1000.00", powerMap.PowerMap.Rows[1]);
+			TestPowerMapEntry("4000.00", "4000.00", "20000.00", powerMap.PowerMap.Rows[2]);
+			TestPowerMapEntry("4000.00", "-4000.00", "-20000.00", powerMap.PowerMap.Rows[3]);
+		}
+
+		private void TestPowerMapData02(IElectricMotorPowerMap powerMap)
+		{
+			TestPowerMapEntry("0.00", "500.00", "1500.00", powerMap.PowerMap.Rows[0]);
+			TestPowerMapEntry("0.00", "-500.00", "-1500.00", powerMap.PowerMap.Rows[1]);
+			TestPowerMapEntry("5000.00", "5000.00", "25000.00", powerMap.PowerMap.Rows[2]);
+			TestPowerMapEntry("5000.00", "-5000.00", "-25000.00", powerMap.PowerMap.Rows[3]);
+		}
+
+		private void TestPowerMapData03(IElectricMotorPowerMap powerMap)
+		{
+			TestPowerMapEntry("0.00", "600.00", "1200.00", powerMap.PowerMap.Rows[0]);
+			TestPowerMapEntry("0.00", "-600.00", "-1200.00", powerMap.PowerMap.Rows[1]);
+			TestPowerMapEntry("6000.00", "6000.00", "40000.00", powerMap.PowerMap.Rows[2]);
+			TestPowerMapEntry("6000.00", "-6000.00", "-40000.00", powerMap.PowerMap.Rows[3]);
 		}
 
 
@@ -441,11 +454,23 @@ namespace TUGraz.VectoCore.Tests.XML
 		}
 
 		private void TestDragCurve(TableData dragCurve)
+		{
+			TestDragCurveData01(dragCurve);
+		}
+
+		private void TestDragCurveData01(TableData dragCurve)
 		{
 			TestDragCurveEntry("0.00", "10.00", dragCurve.Rows[0]);
 			TestDragCurveEntry("4000.00", "30.00", dragCurve.Rows[1]);
 		}
 
+		private void TestDragCurveData02(TableData dragCurve)
+		{
+			TestDragCurveEntry("0.00", "15.00", dragCurve.Rows[0]);
+			TestDragCurveEntry("4500.00", "35.00", dragCurve.Rows[1]);
+		}
+
+
 		private void TestDragCurveEntry(string outShaftSpeed, string dragTorque, DataRow row)
 		{
 			Assert.AreEqual(outShaftSpeed, row[XMLNames.DragCurve_OutShaftSpeed]);
@@ -1306,11 +1331,18 @@ namespace TUGraz.VectoCore.Tests.XML
 
 			TestGearsData(iepcData.Gears);
 			TestVoltageLevel(iepcData.VoltageLevels);
-			TestDragCurve(iepcData.DragCurve);
+			TestDragCurves(iepcData.DragCurves);
+		}
 
+		private void TestDragCurves(IList<IDragCurve> dragCurves)
+		{
+			Assert.AreEqual(1, dragCurves[0].Gear);
+			TestDragCurveData01(dragCurves[0].DragCurve);
 			
+			Assert.AreEqual(2, dragCurves[1].Gear);
+			TestDragCurveData02(dragCurves[1].DragCurve);
 		}
-
+		
 		private void TestGearsData(IList<IGearEntry> gears)
 		{
 			Assert.IsNotNull(gears);
@@ -2026,9 +2058,30 @@ namespace TUGraz.VectoCore.Tests.XML
 			var dataProvider = xmlInputReader.CreateDeclaration(XmlReader.Create(filename));
 			Assert.NotNull(dataProvider.JobInputData);
 			var vehicle = dataProvider.JobInputData.Vehicle;
-
-			Assert.IsNotNull(vehicle.Components.IEPC);
+			
+			var iepc = vehicle.Components.IEPC;
+			Assert.IsNotNull(iepc);
+			Assert.AreEqual(ElectricMachineType.ASM, iepc.ElectricMachineType);
+			Assert.AreEqual(CertificationMethod.StandardValues, vehicle.Components.IEPC.CertificationMethod);
+			
+			Assert.AreEqual(1.SI<Watt>(), iepc.R85RatedPower);
+			Assert.AreEqual(0.10.SI<KilogramSquareMeter>(), iepc.Inertia);//RotationalInertia
+			Assert.AreEqual(200.00.SI<NewtonMeter>(), iepc.ContinuousTorque);
+			Assert.AreEqual(2000.00.SI<PerSecond>(), iepc.ContinuousTorqueSpeed);//TestSpeedContinuousTorque
+			Assert.AreEqual(400.00.SI<NewtonMeter>(), iepc.OverloadTorque);
+			Assert.AreEqual(2000.00.SI<PerSecond>(), iepc.OverloadTestSpeed);//TestSpeedOverloadTorque
+			Assert.AreEqual(30.00.SI<Second>(), iepc.OverloadTime);//OverloadDuration
+			Assert.AreEqual(false, iepc.DifferentialIncluded);
+			Assert.AreEqual(false, iepc.DesignTypeWheelMotor);
+            Assert.AreEqual(1, iepc.NrOfDesignTypeWheelMotorMeasured);
+
+			TestGearsData(iepc.Gears);
+			Assert.AreEqual(1, iepc.VoltageLevels.Count);
+			TestMaxTorqueCurve(iepc.VoltageLevels[0].FullLoadCurve);
+			TestPowerMapData01(iepc.VoltageLevels[0].PowerMap[0]);
+			TestDragCurve(iepc.DragCurves[0].DragCurve);
 		}
+		
 
 
 		#region Test existence of torque converter
@@ -2046,10 +2099,6 @@ namespace TUGraz.VectoCore.Tests.XML
 		}
 
 		#endregion
-
-
-
-
-
+		
 	}
 }
\ No newline at end of file
-- 
GitLab