diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/Components/VIFElectricEnergyStorageType.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/Components/VIFElectricEnergyStorageType.cs new file mode 100644 index 0000000000000000000000000000000000000000..16eb87b9a9b7c4048ba92c7038510b023f7da2cb --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/Components/VIFElectricEnergyStorageType.cs @@ -0,0 +1,173 @@ +using System.Collections.Generic; +using System.Data; +using System.Xml; +using System.Xml.Linq; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile.VehicleInformationFile_0_1.Components +{ + public class VIFElectricEnergyStorageType : AbstractVIFXmlType, IXmlTypeWriter + { + public VIFElectricEnergyStorageType(IVIFReportFactory vifFactory) : base(vifFactory) { } + + #region Implementation of IXmlTypeWriter + + public XElement GetElement(IDeclarationInputDataProvider inputData) + { + var electricStorages = inputData.JobInputData.Vehicle.Components.ElectricStorage.ElectricStorageElements; + + var result = new List<XElement>(); + + foreach (var entry in electricStorages) { + switch (entry.REESSPack.StorageType) { + case REESSType.SuperCap: + result.Add(GetCapacitor(entry as ISuperCapDeclarationInputData)); + break; + case REESSType.Battery: + result.Add(GetBattery(entry as IBatteryPackDeclarationInputData, entry.StringId)); + break; + } + } + + return new XElement(_vif + XMLNames.Component_ElectricEnergyStorage, result); + } + + #endregion + + private XElement GetCapacitor(ISuperCapDeclarationInputData capacitor) + { + if(capacitor == null) + return null; + + return new XElement(_vif + XMLNames.ElectricEnergyStorage_Capacitor, + new XElement(_vif + XMLNames.ComponentDataWrapper, + new XAttribute(_xsi + "type", "vif:CapacitorSystemDataType"), + new XAttribute("id", capacitor.DigestValue.Reference), + new XElement(_vif + XMLNames.Component_Manufacturer, capacitor.Manufacturer), + new XElement(_vif + XMLNames.Component_Model, capacitor.Model), + new XElement(_vif + XMLNames.Report_Component_CertificationNumber, capacitor.CertificationNumber), + new XElement(_vif + XMLNames.Component_Date, XmlConvert.ToString( capacitor.Date, XmlDateTimeSerializationMode.Utc)), + new XElement(_vif + XMLNames.Component_AppVersion, capacitor.AppVersion), + new XElement(_vif + XMLNames.Component_CertificationMethod, capacitor.CertificationMethod.ToXMLFormat()), + new XElement(_vif + XMLNames.Capacitor_Capacitance, capacitor.Capacity.ToXMLFormat(2)), + new XElement(_vif + XMLNames.Capacitor_InternalResistance, capacitor.InternalResistance.ToXMLFormat(2)), + new XElement(_vif + XMLNames.Capacitor_MinVoltage, capacitor.MinVoltage.ToXMLFormat(2)), + new XElement(_vif + XMLNames.Capacitor_MaxVoltage, capacitor.MaxVoltage.ToXMLFormat(2)), + new XElement(_vif + XMLNames.Capacitor_MaxChargingCurrent, capacitor.MaxCurrentCharge.ToXMLFormat(2)), + new XElement(_vif + XMLNames.Capacitor_MaxDischargingCurrent, capacitor.MaxCurrentDischarge.ToXMLFormat(2)), + capacitor.TestingTemperature == null + ? null + : new XElement(_vif + XMLNames.REESS_TestingTemperature, capacitor.TestingTemperature.ToXMLFormat()) + )); + } + + + private XElement GetBattery(IBatteryPackDeclarationInputData battery, int id) + { + if (battery == null) + return null; + + var result = new XElement(_vif + XMLNames.ElectricEnergyStorage_Battery, + new XElement(_vif + XMLNames.Battery_StringID, id), + new XElement(_vif + "REESS", + GetReess(battery), + GetSignature(battery.DigestValue)) + ); + + return result; + } + + + private XElement GetReess(IBatteryPackDeclarationInputData battery) + { + return new XElement(_vif + XMLNames.ComponentDataWrapper, + new XAttribute(_xsi + "type", "vif:BatterySystemDataType"), + new XAttribute("id", battery.DigestValue.Reference), + new XElement(_vif + XMLNames.Component_Manufacturer, battery.Manufacturer), + new XElement(_vif + XMLNames.Component_Model, battery.Model), + new XElement(_vif + XMLNames.Report_Component_CertificationNumber, battery.CertificationNumber), + new XElement(_vif + XMLNames.Component_Date, + XmlConvert.ToString(battery.Date, XmlDateTimeSerializationMode.Utc)), + new XElement(_vif + XMLNames.Component_AppVersion, battery.AppVersion), + new XElement(_vif + XMLNames.Component_CertificationMethod, battery.CertificationMethod.ToXMLFormat()), + new XElement(_vif + XMLNames.REESS_BatteryType, battery.BatteryType.ToString()), + new XElement(_vif + XMLNames.REESS_RatedCapacity, battery.Capacity.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.ToXMLFormat()), + GetOcv(battery.VoltageCurve), + GetInternalResistance(battery.InternalResistanceCurve), + GetCurrentLimits(battery.MaxCurrentMap) + ); + + } + + + private XElement GetOcv(DataTable voltageCurve) + { + var entries = new List<XElement>(); + + foreach (DataRow row in voltageCurve.Rows) { + var soc = row[XMLNames.REESS_OCV_SoC]; + var ocv = row[XMLNames.REESS_OCV_OCV].ToString().ToDouble(); + + entries.Add(new XElement(_vif + XMLNames.REESS_MapEntry, + new XAttribute(XMLNames.REESS_OCV_SoC, soc), + new XAttribute(XMLNames.REESS_OCV_OCV, ocv.ToXMLFormat(2)))); + } + return new XElement(_vif + XMLNames.REESS_OCV, entries); + } + + + private XElement GetInternalResistance(DataTable internalResistance) + { + var entries = new List<XElement>(); + + foreach (DataRow row in internalResistance.Rows) { + var soc = row[XMLNames.REESS_OCV_SoC]; + var r2 = row[XMLNames.REESS_InternalResistanceCurve_R2].ToString().ToDouble(); + var r10 = row[XMLNames.REESS_InternalResistanceCurve_R10].ToString().ToDouble(); + var r20 = row[XMLNames.REESS_InternalResistanceCurve_R20].ToString().ToDouble(); + var r120 = row[XMLNames.REESS_InternalResistanceCurve_R120].ToString(); + + entries.Add(new XElement(_vif + XMLNames.REESS_MapEntry, + new XAttribute(XMLNames.REESS_OCV_SoC, soc), + new XAttribute(XMLNames.REESS_InternalResistanceCurve_R2, r2.ToXMLFormat(2)), + new XAttribute(XMLNames.REESS_InternalResistanceCurve_R10, r10.ToXMLFormat(2)), + new XAttribute(XMLNames.REESS_InternalResistanceCurve_R20, r20.ToXMLFormat(2)), + r120.IsNullOrEmpty() ? + null : new XAttribute(XMLNames.REESS_InternalResistanceCurve_R120, r120.ToDouble().ToXMLFormat(2)) + )); + } + + return new XElement(_vif + XMLNames.REESS_InternalResistanceCurve, entries); + } + + + private XElement GetCurrentLimits(DataTable batteryMaxCurrentMap) + { + var entries = new List<XElement>(); + + foreach (DataRow row in batteryMaxCurrentMap.Rows) + { + var soc = row[XMLNames.REESS_CurrentLimits_SoC]; + var maxChargingCurrent = row[XMLNames.REESS_CurrentLimits_MaxChargingCurrent].ToString().ToDouble(); + var maxDischargingCurrent = row[XMLNames.REESS_CurrentLimits_MaxDischargingCurrent].ToString().ToDouble(); + + entries.Add(new XElement(_vif + XMLNames.REESS_MapEntry, + new XAttribute(XMLNames.REESS_OCV_SoC, soc), + new XAttribute(XMLNames.REESS_CurrentLimits_MaxChargingCurrent, maxChargingCurrent.ToXMLFormat(2)), + new XAttribute(XMLNames.REESS_CurrentLimits_MaxDischargingCurrent, maxDischargingCurrent.ToXMLFormat(2)) + )); + } + + return new XElement(_vif + XMLNames.REESS_CurrentLimits, entries); + } + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/IVIFReportFactory.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/IVIFReportFactory.cs index 43345823404638dc4be5cf17ca47be3db7472da3..96788d7c03f298d85af0d77cb5811d84bc423ded 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/IVIFReportFactory.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/IVIFReportFactory.cs @@ -1,11 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; -using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportGroupWriter; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; @@ -36,6 +30,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF IXmlTypeWriter GetAxlegearType(); IXmlTypeWriter GetAxleWheelsType(); IXmlTypeWriter GetBoostingLimitationsType(); + IXmlTypeWriter GetElectricEnergyStorageType(); IXmlTypeWriter GetElectricMotorTorqueLimitsType(); IXmlTypeWriter GetEngineType(); IXmlTypeWriter GetTorqueConvertType(); diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/VIFNinjectModule.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/VIFNinjectModule.cs index 029bf58455f73292e0cbfa192914511a7aff395e..261dde3a08be482b9bd3dc43d6436f6c89539c88 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/VIFNinjectModule.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/VIFNinjectModule.cs @@ -67,26 +67,40 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF Bind<IXmlTypeWriter>().To<VIFAdasType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetAdasType()); + Bind<IXmlTypeWriter>().To<VIFAngleDriveType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetAngelDriveType()); + Bind<IXmlTypeWriter>().To<VIFAuxiliaryType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetAuxiliaryType()); + Bind<IXmlTypeWriter>().To<VIFAxlegearType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetAxlegearType()); + Bind<IXmlTypeWriter>().To<VIFAxleWheelsType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetAxleWheelsType()); + Bind<IXmlTypeWriter>().To<VIFBoostingLimitationsType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetBoostingLimitationsType()); + + Bind<IXmlTypeWriter>().To<VIFElectricEnergyStorageType>().When(AccessedViaVIFFactory) + .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetElectricEnergyStorageType()); + Bind<IXmlTypeWriter>().To<VIFElectricMotorTorqueLimitsType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetElectricMotorTorqueLimitsType()); + Bind<IXmlTypeWriter>().To<VIFEngineType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetEngineType()); + Bind<IXmlTypeWriter>().To<VIFTorqueConverterType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetTorqueConvertType()); + Bind<IXmlTypeWriter>().To<VIFIepcType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetIepcType()); + Bind<IXmlTypeWriter>().To<VIFTorqueLimitsType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetTorqueLimitsType()); + Bind<IXmlTypeWriter>().To<VIFTransmissionType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetTransmissionType());