From cfb2418dbef53dbe1fea81d42ce1b675c56f3052 Mon Sep 17 00:00:00 2001 From: "VKMTHD\\franzjosefkober" <franz.josef.kober@ivt.tugraz.at> Date: Tue, 5 Jul 2022 18:37:06 +0200 Subject: [PATCH] added electric machine system measured xml type --- .../VIFElectricMachineSystemMeasuredType.cs | 170 ++++++++++++++++++ .../IVIFReportFactory.cs | 2 + .../VIFNinjectModule.cs | 3 + 3 files changed, 175 insertions(+) create mode 100644 VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/Components/VIFElectricMachineSystemMeasuredType.cs diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/Components/VIFElectricMachineSystemMeasuredType.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/Components/VIFElectricMachineSystemMeasuredType.cs new file mode 100644 index 0000000000..66afcb4734 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/Components/VIFElectricMachineSystemMeasuredType.cs @@ -0,0 +1,170 @@ +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; + + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile.VehicleInformationFile_0_1.Components +{ + public interface IXmlElectricMachineSystemType + { + XElement GetElement(IElectricMotorDeclarationInputData em); + } + + + public class XmlElectricMachineSystemMeasuredType : AbstractVIFXmlType, IXmlElectricMachineSystemType + { + public XmlElectricMachineSystemMeasuredType(IVIFReportFactory vifFactory) : base(vifFactory) { } + + #region Implementation of IVIFElectricMachineSystemType + + public XElement GetElement(IElectricMotorDeclarationInputData em) + { + return new XElement(_vif + XMLNames.ElectricMachineSystem, + new XElement(_vif + XMLNames.ComponentDataWrapper, + new XAttribute(_xsi + "type", "vif:ElectricMachineSystemMeasuredDataDeclarationType"), + new XAttribute("id", em.DigestValue.Reference), + new XElement(_vif + XMLNames.Component_Manufacturer, em.Manufacturer), + new XElement(_vif + XMLNames.Component_Model, em.Model), + new XElement(_vif + XMLNames.Component_CertificationNumber, em.CertificationNumber), + new XElement(_vif + XMLNames.Component_Date, XmlConvert.ToString(em.Date, XmlDateTimeSerializationMode.Utc)), + new XElement(_vif + XMLNames.Component_AppVersion, em.AppVersion), + new XElement(_vif + XMLNames.ElectricMachine_ElectricMachineType, em.ElectricMachineType.ToString()), + new XElement(_vif + XMLNames.Component_CertificationMethod, em.CertificationMethod.ToXMLFormat()), + new XElement(_vif + XMLNames.ElectricMachine_R85RatedPower, em.R85RatedPower.ToXMLFormat()), + new XElement(_vif + XMLNames.ElectricMachine_RotationalInertia, em.Inertia.ToXMLFormat(2)), + new XElement(_vif + XMLNames.ElectricMachine_DcDcConverterIncluded, em.DcDcConverterIncluded), + new XElement(_vif + XMLNames.ElectricMachine_IHPCType, em.IHPCType), + GetVoltageLevels(em.VoltageLevels), + GetDragCurve(em.DragCurve), + GetConditioning(em.Conditioning) + ), + GetSignature(em.DigestValue) + ); + } + + #endregion + + + protected virtual List<XElement> GetVoltageLevels(IList<IElectricMotorVoltageLevel> voltageLevels) + { + var result = new List<XElement>(); + + foreach (var voltageLevel in voltageLevels) { + + var entry = new XElement(_vif + XMLNames.ElectricMachine_VoltageLevel, + new XElement(_vif + XMLNames.VoltageLevel_Voltage, voltageLevel.VoltageLevel.ToXMLFormat()), + new XElement(_vif + XMLNames.ElectricMachine_ContinuousTorque, voltageLevel.ContinuousTorque.ToXMLFormat(2)), + new XElement(_vif + XMLNames.ElectricMachine_TestSpeedContinuousTorque, voltageLevel.ContinuousTorqueSpeed.ToXMLFormat(2)), + new XElement(_vif + XMLNames.ElectricMachine_OverloadTorque, voltageLevel.OverloadTorque.ToXMLFormat(2)), + new XElement(_vif + XMLNames.ElectricMachine_TestSpeedOverloadTorque, voltageLevel.OverloadTestSpeed.ToXMLFormat(2)), + new XElement(_vif + XMLNames.ElectricMachine_OverloadDuration, voltageLevel.OverloadTime.ToXMLFormat(2)), + GetMaxTorqueCurve(voltageLevel.FullLoadCurve), + GetPowerMap(voltageLevel.PowerMap) + + ); + result.Add(entry); + } + + return result; + } + + + protected virtual XElement GetMaxTorqueCurve(DataTable maxTorqueData) + { + var maxTorqueCurveEntries = new List<XElement>(); + + for (int r = 0; r < maxTorqueData.Rows.Count; r++) + { + var row = maxTorqueData.Rows[r]; + var outShaftSpeed = row[XMLNames.MaxTorqueCurve_OutShaftSpeed]; + var maxTorque = row[XMLNames.MaxTorqueCurve_MaxTorque]; + var minTorque = row[XMLNames.MaxTorqueCurve_MinTorque]; + + var element = new XElement(_vif + XMLNames.MaxTorqueCurve_Entry, + new XAttribute(XMLNames.MaxTorqueCurve_OutShaftSpeed, outShaftSpeed), + new XAttribute(XMLNames.MaxTorqueCurve_MaxTorque, maxTorque), + new XAttribute(XMLNames.MaxTorqueCurve_MinTorque, minTorque) + ); + + maxTorqueCurveEntries.Add(element); + } + + return new XElement(XMLNames.MaxTorqueCurve, maxTorqueCurveEntries); + } + + protected virtual List<XElement> GetPowerMap(IList<IElectricMotorPowerMap> powerMapData) + { + var powerMaps = new List<XElement>(); + + foreach (var powerMapEntry in powerMapData) + { + + var entries = new List<XElement>(); + for (int r = 0; r < powerMapEntry.PowerMap.Rows.Count; r++) + { + var outShaftSpeed = powerMapEntry.PowerMap.Rows[r][XMLNames.PowerMap_OutShaftSpeed].ToString().ToDouble(); + var torque = powerMapEntry.PowerMap.Rows[r][XMLNames.PowerMap_Torque].ToString().ToDouble(); + var electricPower = powerMapEntry.PowerMap.Rows[r][XMLNames.PowerMap_ElectricPower].ToString().ToDouble(); + + var entry = new XElement(_vif + XMLNames.PowerMap_Entry, + new XAttribute(XMLNames.PowerMap_OutShaftSpeed, outShaftSpeed.ToXMLFormat(2)), + new XAttribute(XMLNames.PowerMap_Torque, torque.ToXMLFormat(2)), + new XAttribute(XMLNames.PowerMap_ElectricPower, electricPower.ToXMLFormat(2))); + entries.Add(entry); + } + + var powerEntry = new XElement(_vif + XMLNames.PowerMap, + new XAttribute(XMLNames.Gear_GearNumber_Attr, powerMapEntry.Gear), + entries); + + powerMaps.Add(powerEntry); + } + + return powerMaps; + } + + protected virtual XElement GetDragCurve(TableData dragCurve) + { + var entries = new List<XElement>(); + foreach (DataRow rowEntry in dragCurve.Rows) + { + var outShaftSpeed = rowEntry[XMLNames.DragCurve_OutShaftSpeed].ToString().ToDouble(); + var dragTorque = rowEntry[XMLNames.DragCurve_DragTorque].ToString().ToDouble(); + + var entry = new XElement(_vif + XMLNames.DragCurve_Entry, + new XAttribute(XMLNames.DragCurve_OutShaftSpeed, outShaftSpeed.ToXMLFormat(2)), + new XAttribute(XMLNames.DragCurve_DragTorque, dragTorque)); + + entries.Add(entry); + } + + return new XElement(_vif + XMLNames.DragCurve, entries); + } + + + protected virtual XElement GetConditioning(DataTable iepcData) + { + if (iepcData == null) + return null; + + var entries = new List<XElement>(); + for (int r = 0; r < iepcData.Rows.Count; r++) + { + + var coolantTempInLet = iepcData.Rows[r][XMLNames.Conditioning_CoolantTempInlet]; + var coolingPower = iepcData.Rows[r][XMLNames.Conditioning_CoolingPower]; + + entries.Add(new XElement(_vif + XMLNames.Conditioning_Entry, + new XAttribute(XMLNames.Conditioning_CoolantTempInlet, coolantTempInLet), + new XAttribute(XMLNames.Conditioning_CoolingPower, coolingPower))); + } + + return new XElement(_vif + XMLNames.Conditioning, 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 d1f2dadf3e..a21a649811 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 @@ -2,6 +2,7 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportGroupWriter; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile.VehicleInformationFile_0_1.Components; namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile.VehicleInformationFile_0_1 { @@ -40,6 +41,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF IXmlTypeWriter GetBoostingLimitationsType(); IXmlTypeWriter GetElectricEnergyStorageType(); IXmlTypeWriter GetElectricMachineGENType(); + IVIFElectricMachineSystemType GetElectricMachineSystemMeasuredType(); 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 8aa5affb21..0d3e4ada44 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 @@ -103,6 +103,9 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF Bind<IXmlTypeWriter>().To<VIFElectricMachineGENType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetElectricMachineGENType()); + Bind<IXmlElectricMachineSystemType>().To<XmlElectricMachineSystemMeasuredType>().When(AccessedViaVIFFactory) + .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetElectricMachineSystemMeasuredType()); + Bind<IXmlTypeWriter>().To<VIFElectricMotorTorqueLimitsType>().When(AccessedViaVIFFactory) .NamedLikeFactoryMethod((IVIFReportFactory f) => f.GetElectricMotorTorqueLimitsType()); -- GitLab