diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/Components/VIFIepcType.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/Components/VIFIepcType.cs new file mode 100644 index 0000000000000000000000000000000000000000..c50126ef3cfd2b843450372b38ede0a9591196ef --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/Components/VIFIepcType.cs @@ -0,0 +1,193 @@ +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 VIFIepcType : AbstractVIFXmlType, IXmlTypeWriter + { + public VIFIepcType(IVIFReportFactory vifFactory) : base(vifFactory) { } + + #region Implementation of IXmlTypeWriter + + public XElement GetElement(IDeclarationInputDataProvider inputData) + { + var iepc = inputData.JobInputData.Vehicle.Components.IEPC; + + return new XElement(_vif + XMLNames.Component_IEPC, + new XElement(_vif + XMLNames.ComponentDataWrapper, + new XAttribute(_xsi + "type", "vif:IEPCMeasuredDataDeclarationType"), + new XElement(_vif + XMLNames.Component_Manufacturer, iepc.Manufacturer), + new XElement(_vif + XMLNames.Component_Model, iepc.Model), + new XElement(_vif + XMLNames.Component_CertificationNumber, iepc.CertificationNumber), + new XElement(_vif + XMLNames.Component_Date, XmlConvert.ToString(iepc.Date, XmlDateTimeSerializationMode.Utc)), + new XElement(_vif + XMLNames.Component_AppVersion, iepc.AppVersion), + new XElement(_vif + XMLNames.ElectricMachine_ElectricMachineType, iepc.ElectricMachineType.ToString()), + new XElement(_vif + XMLNames.Component_CertificationMethod, iepc.CertificationMethod.ToXMLFormat()), + new XElement(_vif + XMLNames.ElectricMachine_R85RatedPower, iepc.R85RatedPower.ToXMLFormat()), + new XElement(_vif + XMLNames.ElectricMachine_RotationalInertia, iepc.Inertia.ToXMLFormat(2)), + new XElement(_vif + XMLNames.IEPC_DifferentialIncluded, iepc.DifferentialIncluded), + new XElement(_vif + XMLNames.IEPC_DesignTypeWheelMotor, iepc.DesignTypeWheelMotor), + iepc.NrOfDesignTypeWheelMotorMeasured == null + ? null + : new XElement(_vif + XMLNames.IEPC_NrOfDesignTypeWheelMotorMeasured, iepc.NrOfDesignTypeWheelMotorMeasured.Value), + GetGears(iepc.Gears), + GetDragCurves(iepc.DragCurves), + GetConditioning(iepc.Conditioning) + ) + ); + } + + #endregion + + + private XElement GetGears(IList<IGearEntry> gearsData) + { + var gears = new List<XElement>(); + + foreach (var gearEntry in gearsData) { + + var currentGear = new XElement(_vif + XMLNames.Gear_EntryName, + new XAttribute("number", gearEntry.GearNumber.ToString()), + new XElement(_vif + XMLNames.GearRatio_Ratio, gearEntry.Ratio.ToXMLFormat(3), + gearEntry.MaxOutputShaftTorque == null + ? null + : new XElement(_vif + XMLNames.Gear_MaxOutputShaftTorque, gearEntry.MaxOutputShaftTorque.ToXMLFormat()), + + gearEntry.MaxOutputShaftSpeed == null + ? null + : new XElement(_vif + XMLNames.Gear_MaxOutputShaftSpeed, gearEntry.MaxOutputShaftSpeed.ToXMLFormat())) + ); + gears.Add(currentGear); + } + + return new XElement(_vif + XMLNames.Gearbox_Gears, gears); + } + + + private IList<XElement> GetVoltageLevels(IList<IElectricMotorVoltageLevel> voltageData) + { + var voltageLevels = new List<XElement>(); + + foreach (var voltageEntry in voltageData) { + + var voltage = new XElement(_vif + XMLNames.ElectricMachine_VoltageLevel, + new XElement(_vif + XMLNames.VoltageLevel_Voltage, voltageEntry.VoltageLevel.ToXMLFormat()), + new XElement(_vif + XMLNames.ElectricMachine_ContinuousTorque, voltageEntry.ContinuousTorque.ToXMLFormat(2)), + new XElement(_vif + XMLNames.ElectricMachine_TestSpeedContinuousTorque, voltageEntry.ContinuousTorqueSpeed.ToXMLFormat(2)), + new XElement(_vif + XMLNames.ElectricMachine_OverloadTorque, voltageEntry.OverloadTorque.ToXMLFormat(2)), + new XElement(_vif + XMLNames.ElectricMachine_TestSpeedOverloadTorque, voltageEntry.OverloadTestSpeed.ToXMLFormat(2)), + new XElement(_vif + XMLNames.ElectricMachine_OverloadDuration, voltageEntry.OverloadTime.ToXMLFormat(2)), + GetMaxTorqueCurve(voltageEntry.FullLoadCurve), + GetPowerMap(voltageEntry.PowerMap) + ); + + voltageLevels.Add(voltage); + } + + return voltageLevels; + } + + + private 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(_v23 + 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); + } + + private 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; + } + + private IList<XElement> GetDragCurves(IList<IDragCurve> dragCurves) + { + var result = new List<XElement>(); + + foreach (var dragCurve in dragCurves) { + var entries = new List<XElement>(); + for (int r = 0; r < dragCurve.DragCurve.Rows.Count; r++) { + var outShaftSpeed = dragCurve.DragCurve.Rows[r][XMLNames.DragCurve_OutShaftSpeed].ToString().ToDouble(); + var dragTorque = dragCurve.DragCurve.Rows[r][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); + } + + result.Add(new XElement(_vif + XMLNames.DragCurve, + new XAttribute(XMLNames.DragCurve_Gear, dragCurve.Gear.Value), + entries)); + } + + return result; + } + + private 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 3288d87e7d9f7dfd6f8973123b51cdae992b3624..43345823404638dc4be5cf17ca47be3db7472da3 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 @@ -39,6 +39,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF IXmlTypeWriter GetElectricMotorTorqueLimitsType(); IXmlTypeWriter GetEngineType(); IXmlTypeWriter GetTorqueConvertType(); + IXmlTypeWriter GetIepcType(); IXmlTypeWriter GetTorqueLimitsType(); IXmlTypeWriter GetTransmissionType(); 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 5f94a2bbf1f4c84223c38a57410e4b12beb38e85..029bf58455f73292e0cbfa192914511a7aff395e 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 @@ -83,6 +83,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF .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)