From 97d15d730201ff9903f58c3b097227a3e0681b45 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <quaritsch@ivt.tugraz.at>
Date: Tue, 4 Apr 2023 15:33:03 +0200
Subject: [PATCH] implement reading XML battery standard values, writing
 battery with standard values to VIF

---
 .../InputData/DeclarationInputData.cs           |  4 ++--
 .../InputData/FileIO/JSON/JSONBattery.cs        |  4 ++--
 ...ElectricStorageSystemDeclarationInputData.cs | 17 ++++++++++++-----
 .../VIFElectricEnergyStorageType.cs             | 11 +++++------
 .../SimulationComponent/BatterySystemTest.cs    |  4 ++--
 5 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
index e800a6395a..c7fb3c10c1 100644
--- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
@@ -968,9 +968,9 @@ namespace TUGraz.VectoCommon.InputData
 
 		AmpereSecond Capacity { get; }
 
-		bool ConnectorsSubsystemsIncluded { get; }
+		bool? ConnectorsSubsystemsIncluded { get; }
 
-		bool JunctionboxIncluded { get; }
+		bool? JunctionboxIncluded { get; }
 
 		Kelvin TestingTemperature { get; }
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONBattery.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONBattery.cs
index fb0b35237a..8032df8da4 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONBattery.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONBattery.cs
@@ -32,8 +32,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		public BatteryType BatteryType { get; }
 
 		AmpereSecond IBatteryPackDeclarationInputData.Capacity => Body.GetEx<double>("Capacity").SI(Unit.SI.Ampere.Hour).Cast<AmpereSecond>();
-		public bool ConnectorsSubsystemsIncluded => Body.ContainsKey("ConnectorsSubsystemsIncluded") && Body.GetEx<bool>("ConnectorsSubsystemsIncluded");
-		public bool JunctionboxIncluded => Body.ContainsKey("JunctionboxIncluded") && Body.GetEx<bool>("JunctionboxIncluded");
+		public bool? ConnectorsSubsystemsIncluded => Body.ContainsKey("ConnectorsSubsystemsIncluded") && Body.GetEx<bool>("ConnectorsSubsystemsIncluded");
+		public bool? JunctionboxIncluded => Body.ContainsKey("JunctionboxIncluded") && Body.GetEx<bool>("JunctionboxIncluded");
 
 		public Kelvin TestingTemperature => Body.ContainsKey("TestingTemperature")
 			? Body.GetEx<double>("TestingTemperature").DegCelsiusToKelvin()
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs
index 14f4a797ec..8c61a6e62a 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs
@@ -4,6 +4,7 @@ using System.Xml;
 using System.Xml.Linq;
 using TUGraz.IVT.VectoXML;
 using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
@@ -117,12 +118,18 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public virtual BatteryType BatteryType => GetString(XMLNames.REESS_BatteryType).ParseEnum<BatteryType>();
 		public virtual AmpereSecond Capacity => GetDouble(XMLNames.REESS_RatedCapacity).SI(Unit.SI.Ampere.Hour).Cast<AmpereSecond>();
-		public virtual bool ConnectorsSubsystemsIncluded => GetBool(XMLNames.REESS_ConnectorsSubsystemsIncluded);
-		public virtual bool JunctionboxIncluded => GetBool(XMLNames.REESS_JunctionboxIncluded);
 
-		public virtual Kelvin TestingTemperature =>
-				ElementExists(XMLNames.REESS_TestingTemperature)
-					? GetDouble(XMLNames.REESS_TestingTemperature).DegCelsiusToKelvin() : null;
+		public virtual bool? ConnectorsSubsystemsIncluded => CertificationMethod == CertificationMethod.StandardValues
+			? (bool?)null
+			: GetBool(XMLNames.REESS_ConnectorsSubsystemsIncluded);
+
+		public virtual bool? JunctionboxIncluded => CertificationMethod == CertificationMethod.StandardValues
+			? (bool?)null
+			: GetBool(XMLNames.REESS_JunctionboxIncluded);
+
+		public virtual Kelvin TestingTemperature => CertificationMethod != CertificationMethod.StandardValues
+			? GetDouble(XMLNames.REESS_TestingTemperature).DegCelsiusToKelvin()
+			: null;
 
 		public virtual TableData InternalResistanceCurve => ReadTableData(XMLNames.REESS_InternalResistanceCurve, XMLNames.REESS_MapEntry,
 			AttributeMappings.InternalResistanceMap);
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/PrimaryComponents/VIFElectricEnergyStorageType.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/PrimaryComponents/VIFElectricEnergyStorageType.cs
index 1c0a89d14a..abc987c825 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/PrimaryComponents/VIFElectricEnergyStorageType.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/PrimaryComponents/VIFElectricEnergyStorageType.cs
@@ -100,8 +100,9 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 
 		private XElement GetReess(IBatteryPackDeclarationInputData battery)
 		{
+			var stdValues = battery.CertificationMethod == CertificationMethod.StandardValues;
 			return new XElement(_vif + XMLNames.ComponentDataWrapper,
-				new XAttribute(_xsi + XMLNames.XSIType, "BatterySystemDataType"),
+				new XAttribute(_xsi + XMLNames.XSIType, stdValues ? "BatterySystemStandardValuesDataType" : "BatterySystemDataType"),
 				new XElement(_vif + XMLNames.Component_Manufacturer, battery.Manufacturer),
 				new XElement(_vif + XMLNames.Component_Model, battery.Model),
 				new XElement(_vif + XMLNames.Component_CertificationMethod, battery.CertificationMethod.ToXMLFormat()),
@@ -113,11 +114,9 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 				new XElement(_vif + XMLNames.Component_AppVersion, battery.AppVersion),
 				new XElement(_vif + XMLNames.REESS_BatteryType, battery.BatteryType.ToString()),
 				new XElement(_vif + XMLNames.REESS_RatedCapacity, battery.Capacity.AsAmpHour.ToXMLFormat(2)),
-				new XElement(_vif + XMLNames.REESS_ConnectorsSubsystemsIncluded, battery.ConnectorsSubsystemsIncluded),
-				new XElement(_vif + XMLNames.REESS_JunctionboxIncluded, battery.JunctionboxIncluded),
-				battery.TestingTemperature == null
-					? null
-					: new XElement(_vif + XMLNames.REESS_TestingTemperature, battery.TestingTemperature.AsDegCelsius.ToXMLFormat(0)),
+				stdValues ? null : new XElement(_vif + XMLNames.REESS_ConnectorsSubsystemsIncluded, battery.ConnectorsSubsystemsIncluded),
+				stdValues ? null : new XElement(_vif + XMLNames.REESS_JunctionboxIncluded, battery.JunctionboxIncluded),
+				stdValues ? null : new XElement(_vif + XMLNames.REESS_TestingTemperature, battery.TestingTemperature.AsDegCelsius.ToXMLFormat(0)),
 				GetOcv(battery.VoltageCurve),
 				GetCurrentLimits(battery.MaxCurrentMap)
 			);
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/BatterySystemTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/BatterySystemTest.cs
index ef1426456a..36d5b1acf2 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponent/BatterySystemTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/BatterySystemTest.cs
@@ -353,8 +353,8 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 		public double? MaxSOC => 0.8;
 		public BatteryType BatteryType { get; }
 		public AmpereSecond Capacity { get; }
-		public bool ConnectorsSubsystemsIncluded { get; }
-		public bool JunctionboxIncluded { get; }
+		public bool? ConnectorsSubsystemsIncluded { get; }
+		public bool? JunctionboxIncluded { get; }
 		public Kelvin TestingTemperature => null;
 
 		public TableData InternalResistanceCurve => VectoCSVFile.ReadStream(
-- 
GitLab