From d244e854ae69ac4fbf161391863d37f359542f30 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Fri, 17 Apr 2020 16:41:14 +0200 Subject: [PATCH] adapting MRF and CIF of heavy lorries --- .../XML/AbstractXMLManufacturerReport.cs | 122 ++++++++++-------- .../OutputData/XML/XMLCustomerReport.cs | 59 +++++---- .../Resources/XSD/VectoOutputCustomer.0.8.xsd | 24 ++-- 3 files changed, 120 insertions(+), 85 deletions(-) diff --git a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs index 6879eab7b2..920521811c 100644 --- a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs @@ -110,93 +110,105 @@ namespace TUGraz.VectoCore.OutputData.XML public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) { _allSuccess &= resultEntry.Status == VectoRun.Status.Success; - Results.Add( - new XElement( - tns + XMLNames.Report_Result_Result, - new XAttribute( - XMLNames.Report_Result_Status_Attr, - resultEntry.Status == VectoRun.Status.Success ? "success" : "error"), - new XElement(tns + XMLNames.Report_Result_Mission, resultEntry.Mission.ToXMLFormat()), - GetResults(resultEntry))); - + Results.Add( + resultEntry.Status == VectoRun.Status.Success ? GetSuccessResult(resultEntry) : GetErrorResult(resultEntry)); } - protected virtual object[] GetResults( XMLDeclarationReport.ResultEntry resultEntry) + protected virtual XElement GetErrorResult( XMLDeclarationReport.ResultEntry resultEntry) { + var content = new object[] {}; switch (resultEntry.Status) { case VectoRun.Status.Pending: case VectoRun.Status.Running: - return new object[] { + content = new object[] { GetSimulationParameters(resultEntry), new XElement( tns + XMLNames.Report_Results_Error, string.Format("Simulation not finished! Status: {0}", resultEntry.Status)), new XElement(tns + XMLNames.Report_Results_ErrorDetails, ""), }; // should not happen! - case VectoRun.Status.Success: return GetSuccessResultEntry(resultEntry); + break; case VectoRun.Status.Canceled: case VectoRun.Status.Aborted: - return new object[] { + content = new object[] { GetSimulationParameters(resultEntry), new XElement(tns + XMLNames.Report_Results_Error, resultEntry.Error), new XElement(tns + XMLNames.Report_Results_ErrorDetails, resultEntry.StackTrace), }; + break; default: throw new ArgumentOutOfRangeException(); } + + return new XElement( + tns + XMLNames.Report_Result_Result, + new XAttribute( + XMLNames.Report_Result_Status_Attr, "error"), + new XAttribute(xsi + "type", "ResultErrorType"), + new XElement(tns + XMLNames.Report_Result_Mission, resultEntry.Mission.ToXMLFormat()), + content); } - protected virtual object[] GetSuccessResultEntry(XMLDeclarationReport.ResultEntry result) + protected virtual XElement GetSuccessResult(XMLDeclarationReport.ResultEntry result) { - return new object[] { + return new XElement( + tns + XMLNames.Report_Result_Result, + new XAttribute( + XMLNames.Report_Result_Status_Attr, "success"), + new XAttribute(xsi + "type", "ResultSuccessType"), + new XElement(tns + XMLNames.Report_Result_Mission, result.Mission.ToXMLFormat()), new XElement( tns + XMLNames.Report_ResultEntry_Distance, new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_km), result.Distance.ConvertToKiloMeter().ToXMLFormat(3)), GetSimulationParameters(result), + GetVehiclePerformance(result), + //FC + XMLDeclarationReport.GetResults(result, tns, true).Cast<object>().ToArray() + ); + } + + private XElement GetVehiclePerformance(XMLDeclarationReport.ResultEntry result) + { + return new XElement( + tns + XMLNames.Report_ResultEntry_VehiclePerformance, new XElement( - tns + XMLNames.Report_ResultEntry_VehiclePerformance, - new XElement( - tns + XMLNames.Report_ResultEntry_AverageSpeed, - XMLHelper.ValueAsUnit(result.AverageSpeed, XMLNames.Unit_kmph, 1)), - new XElement( - tns + XMLNames.Report_ResultEntry_AvgDrivingSpeed, - XMLHelper.ValueAsUnit(result.AverageDrivingSpeed, XMLNames.Unit_kmph, 1)), - new XElement( - tns + XMLNames.Report_ResultEntry_MinSpeed, XMLHelper.ValueAsUnit(result.MinSpeed, XMLNames.Unit_kmph, 1)), - new XElement( - tns + XMLNames.Report_ResultEntry_MaxSpeed, XMLHelper.ValueAsUnit(result.MaxSpeed, XMLNames.Unit_kmph, 1)), - new XElement( - tns + XMLNames.Report_ResultEntry_MaxDeceleration, - XMLHelper.ValueAsUnit(result.MaxDeceleration, XMLNames.Unit_mps2, 2)), - new XElement( - tns + XMLNames.Report_ResultEntry_MaxAcceleration, - XMLHelper.ValueAsUnit(result.MaxAcceleration, XMLNames.Unit_mps2, 2)), - new XElement( - tns + XMLNames.Report_ResultEntry_FullLoadDrivingtimePercentage, - result.FullLoadPercentage.ToXMLFormat(2)), - new XElement(tns + XMLNames.Report_ResultEntry_GearshiftCount, result.GearshiftCount.ToXMLFormat(0)), + tns + XMLNames.Report_ResultEntry_AverageSpeed, + XMLHelper.ValueAsUnit(result.AverageSpeed, XMLNames.Unit_kmph, 1)), + new XElement( + tns + XMLNames.Report_ResultEntry_AvgDrivingSpeed, + XMLHelper.ValueAsUnit(result.AverageDrivingSpeed, XMLNames.Unit_kmph, 1)), + new XElement( + tns + XMLNames.Report_ResultEntry_MinSpeed, XMLHelper.ValueAsUnit(result.MinSpeed, XMLNames.Unit_kmph, 1)), + new XElement( + tns + XMLNames.Report_ResultEntry_MaxSpeed, XMLHelper.ValueAsUnit(result.MaxSpeed, XMLNames.Unit_kmph, 1)), + new XElement( + tns + XMLNames.Report_ResultEntry_MaxDeceleration, + XMLHelper.ValueAsUnit(result.MaxDeceleration, XMLNames.Unit_mps2, 2)), + new XElement( + tns + XMLNames.Report_ResultEntry_MaxAcceleration, + XMLHelper.ValueAsUnit(result.MaxAcceleration, XMLNames.Unit_mps2, 2)), + new XElement( + tns + XMLNames.Report_ResultEntry_FullLoadDrivingtimePercentage, + result.FullLoadPercentage.ToXMLFormat(2)), + new XElement(tns + XMLNames.Report_ResultEntry_GearshiftCount, result.GearshiftCount.ToXMLFormat(0)), + new XElement( + tns + XMLNames.Report_ResultEntry_EngineSpeedDriving, new XElement( - tns + XMLNames.Report_ResultEntry_EngineSpeedDriving, - new XElement( - tns + XMLNames.Report_ResultEntry_EngineSpeedDriving_Min, - XMLHelper.ValueAsUnit(result.EngineSpeedDrivingMin, XMLNames.Unit_RPM, 1)), - new XElement( - tns + XMLNames.Report_ResultEntry_EngineSpeedDriving_Avg, - XMLHelper.ValueAsUnit(result.EngineSpeedDrivingAvg, XMLNames.Unit_RPM, 1)), - new XElement( - tns + XMLNames.Report_ResultEntry_EngineSpeedDriving_Max, - XMLHelper.ValueAsUnit(result.EngineSpeedDrivingMax, XMLNames.Unit_RPM, 1)) - ), + tns + XMLNames.Report_ResultEntry_EngineSpeedDriving_Min, + XMLHelper.ValueAsUnit(result.EngineSpeedDrivingMin, XMLNames.Unit_RPM, 1)), new XElement( - tns + XMLNames.Report_Results_AverageGearboxEfficiency, - XMLHelper.ValueAsUnit(result.AverageGearboxEfficiency, XMLNames.UnitPercent, 2)), + tns + XMLNames.Report_ResultEntry_EngineSpeedDriving_Avg, + XMLHelper.ValueAsUnit(result.EngineSpeedDrivingAvg, XMLNames.Unit_RPM, 1)), new XElement( - tns + XMLNames.Report_Results_AverageAxlegearEfficiency, - XMLHelper.ValueAsUnit(result.AverageAxlegearEfficiency, XMLNames.UnitPercent, 2)) + tns + XMLNames.Report_ResultEntry_EngineSpeedDriving_Max, + XMLHelper.ValueAsUnit(result.EngineSpeedDrivingMax, XMLNames.Unit_RPM, 1)) ), - - //FC - XMLDeclarationReport.GetResults(result, tns, true).Cast<object>().ToArray() - }; + new XElement( + tns + XMLNames.Report_Results_AverageGearboxEfficiency, + XMLHelper.ValueAsUnit(result.AverageGearboxEfficiency, XMLNames.UnitPercent, 2)), + new XElement( + tns + XMLNames.Report_Results_AverageAxlegearEfficiency, + XMLHelper.ValueAsUnit(result.AverageAxlegearEfficiency, XMLNames.UnitPercent, 2)) + ); } protected virtual XElement GetSimulationParameters(XMLDeclarationReport.ResultEntry result) diff --git a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs index f6abd85ecd..930e034798 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs @@ -69,6 +69,7 @@ namespace TUGraz.VectoCore.OutputData.XML protected KilogramPerMeter _weightedCo2 = 0.SI<KilogramPerMeter>(); protected Kilogram _weightedPayload = 0.SI<Kilogram>(); + private double _passengerCount; public XMLCustomerReport() @@ -174,45 +175,58 @@ namespace TUGraz.VectoCore.OutputData.XML public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) { //foreach (var resultEntry in entry.ResultEntry) { - _allSuccess &= resultEntry.Status == VectoRun.Status.Success; - if (resultEntry.Status == VectoRun.Status.Success) { - _weightedPayload += resultEntry.Payload * resultEntry.WeightingFactor; - _weightedCo2 += resultEntry.CO2Total / resultEntry.Distance * resultEntry.WeightingFactor; - } - Results.Add(new XElement(tns + XMLNames.Report_Result_Result, - new XAttribute(XMLNames.Report_Result_Status_Attr, - resultEntry.Status == VectoRun.Status.Success ? "success" : "error"), - new XElement(tns + XMLNames.Report_Result_Mission, resultEntry.Mission.ToXMLFormat()), - GetResults(resultEntry))); - //} + _allSuccess &= resultEntry.Status == VectoRun.Status.Success; + if (resultEntry.Status == VectoRun.Status.Success) { + _weightedPayload += resultEntry.Payload * resultEntry.WeightingFactor; + _weightedCo2 += resultEntry.CO2Total / resultEntry.Distance * resultEntry.WeightingFactor; + _passengerCount += (resultEntry.PassengerCount ?? 0) * resultEntry.WeightingFactor; + } + Results.Add(resultEntry.Status == VectoRun.Status.Success ? GetSuccessResult(resultEntry) : GetErrorResult(resultEntry)); } - private object[] GetResults(XMLDeclarationReport.ResultEntry resultEntry) + private XElement GetErrorResult(XMLDeclarationReport.ResultEntry resultEntry) { + var content = new object[] { }; switch (resultEntry.Status) { case VectoRun.Status.Pending: case VectoRun.Status.Running: - return null; // should not happen! - case VectoRun.Status.Success: - return GetSuccessResultEntry(resultEntry); + content = null; // should not happen! + break; case VectoRun.Status.Canceled: case VectoRun.Status.Aborted: - return new object[] { + content = new object[] { new XElement(tns + "Error", resultEntry.Error) }; + break; default: throw new ArgumentOutOfRangeException(); } + + return new XElement(tns + XMLNames.Report_Result_Result, + new XAttribute(XMLNames.Report_Result_Status_Attr, "error"), + new XAttribute(xsi + "type", "ResultErrorType"), + new XElement(tns + XMLNames.Report_Result_Mission, resultEntry.Mission.ToXMLFormat()), + content); } - private object[] GetSuccessResultEntry(XMLDeclarationReport.ResultEntry result) + private XElement GetSuccessResult(XMLDeclarationReport.ResultEntry result) { - return new object[] { - new XElement(tns + XMLNames.Report_Result_Payload, XMLHelper.ValueAsUnit(result.Payload, XMLNames.Unit_kg, 0)), - new XElement(tns + XMLNames.Report_Result_FuelMode, result.FuelData.Count > 1 ? XMLNames.Report_Result_FuelMode_Val_Dual : XMLNames.Report_Result_FuelMode_Val_Single), + return new XElement( + tns + XMLNames.Report_Result_Result, + new XAttribute(XMLNames.Report_Result_Status_Attr, "success"), + new XAttribute(xsi + "type", "ResultSuccessType"), + new XElement(tns + XMLNames.Report_Result_Mission, result.Mission.ToXMLFormat()), + new XElement(tns + XMLNames.Report_ResultEntry_TotalVehicleMass, + XMLHelper.ValueAsUnit(result.TotalVehicleMass, XMLNames.Unit_kg)), + new XElement(tns + XMLNames.Report_ResultEntry_Payload, XMLHelper.ValueAsUnit(result.Payload, XMLNames.Unit_kg)), + result.PassengerCount.HasValue && result.PassengerCount.Value > 0 + ? new XElement(tns + "PassengerCount", result.PassengerCount.Value.ToMinSignificantDigits(3, 1)) + : null, + new XElement(tns + XMLNames.Report_Result_FuelMode, + result.FuelData.Count > 1 ? XMLNames.Report_Result_FuelMode_Val_Dual : XMLNames.Report_Result_FuelMode_Val_Single), new XElement(tns + XMLNames.Report_Results_AverageSpeed, XMLHelper.ValueAsUnit(result.AverageSpeed, XMLNames.Unit_kmph, 1)), XMLDeclarationReport.GetResults(result, tns, false).Cast<object>().ToArray() - }; + ); } private XElement GetApplicationInfo() @@ -244,7 +258,8 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.Report_AveragePayload, new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_t), _weightedPayload.ConvertToTon().ToXMLFormat(3) - ) + ), + _passengerCount > 0 ? new XElement(tns + "AveragePAssengerCount", _passengerCount.ToMinSignificantDigits(2)) : null ) : null; results.Add(summary); diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.8.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.8.xsd index 2910ced337..105dbe8412 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.8.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.8.xsd @@ -320,7 +320,7 @@ </xs:simpleContent> </xs:complexType> </xs:element> - <xs:element name="AveragePassengerCount" type="xs:double"/> + <xs:element name="AveragePassengerCount" type="xs:double" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> @@ -520,16 +520,24 @@ <xs:documentation>P046 / II.1.2.9 // arithmetic average of RRC over all truck tires</xs:documentation> </xs:annotation> </xs:element> - <xs:element name="AverageFuelEfficiencyLabelMotorVehicleTyres"> + <xs:element name="FuelEfficiencyLabelMotorVehicleTyre" maxOccurs="4"> <xs:annotation> <xs:documentation>II.1.2.10 // classification of AverageRRCMotorVehicleTyres according to 1222/2009 C3 tyres </xs:documentation> </xs:annotation> - <xs:simpleType> - <xs:restriction base="xs:string"> - <xs:minLength value="1"/> - <xs:maxLength value="1"/> - </xs:restriction> - </xs:simpleType> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="axleNbr" use="required"> + <xs:simpleType> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + <xs:maxInclusive value="4"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> </xs:element> <xs:element name="InputDataSignature" type="vdecdef:SignatureType"/> </xs:sequence> -- GitLab