From 075fd2b8fc33c50f29b4b3a05385b5b56ce9e35a Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Tue, 15 May 2018 15:31:57 +0200
Subject: [PATCH] generating manufacturer xml report for schema version 0.5

---
 .../OutputData/XML/XMLDeclarationReport.cs    | 19 +++++++++++++++++++
 .../OutputData/XML/XMLManufacturerReport.cs   | 11 +++++++++--
 .../XSD/VectoOutputManufacturer.0.5.xsd       |  2 +-
 VectoCore/VectoCore/VectoCore.csproj          |  3 +++
 4 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
index 6cddaf27a9..295efdb091 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
@@ -30,6 +30,7 @@
 */
 
 using System.Collections.Generic;
+using System.Data;
 using System.Linq;
 using System.Text;
 using System.Xml;
@@ -55,6 +56,8 @@ namespace TUGraz.VectoCore.OutputData.XML
 		{
 			public MeterPerSecond AverageSpeed { get; private set; }
 
+			public MeterPerSecond AverageDrivingSpeed { get; private set; }
+
 			public Joule EnergyConsumptionTotal { get; private set; }
 
 			public Kilogram CO2Total { get; private set; }
@@ -88,6 +91,9 @@ namespace TUGraz.VectoCore.OutputData.XML
 			public Kilogram TotalVehicleWeight { get; private set; }
 
 			public CubicMeter CargoVolume { get; private set; }
+			public PerSecond EngineSpeedDrivingMin { get; private set; }
+			public PerSecond EngineSpeedDrivingAvg { get; private set; }
+			public PerSecond EngineSpeedDrivingMax { get; private set; }
 
 
 			public virtual void SetResultData(VectoRunData runData, IModalDataContainer data)
@@ -100,6 +106,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 				Error = data.Error;
 				StackTrace = data.StackTrace;
 				AverageSpeed = data.Speed();
+				
 				MinSpeed = data.MinSpeed();
 				MaxSpeed = data.MaxSpeed();
 				MaxAcceleration = data.MaxAcceleration();
@@ -107,6 +114,18 @@ namespace TUGraz.VectoCore.OutputData.XML
 				FullLoadPercentage = data.EngineMaxLoadTimeShare();
 				GearshiftCount = data.GearshiftCount();
 
+				var entriesDriving = data.GetValues(
+					r => new {
+						dt = r.Field<Second>((int)ModalResultField.simulationInterval),
+						v = r.Field<MeterPerSecond>((int)ModalResultField.v_act),
+						nEng = r.Field<PerSecond>((int)ModalResultField.n_eng_avg)
+					}).Where(x => x.v.IsGreater(0)).ToArray();
+				var drivingTime = entriesDriving.Sum(x => x.dt);
+
+				AverageDrivingSpeed = entriesDriving.Sum(x => x.v * x.dt) / drivingTime;
+				EngineSpeedDrivingAvg = (entriesDriving.Sum(x => (x.nEng * x.dt).Value()) / drivingTime.Value()).SI<PerSecond>();
+				EngineSpeedDrivingMin = entriesDriving.Min(x => x.nEng);
+				EngineSpeedDrivingMax = entriesDriving.Max(x => x.nEng);
 				Distance = data.Distance();
 
 				FuelConsumptionTotal = data.TimeIntegral<Kilogram>(ModalResultField.FCFinal);
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs
index 7ee4656e47..28a494d1a2 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs
@@ -52,7 +52,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 {
 	public class XMLManufacturerReport
 	{
-		public const string CURRENT_SCHEMA_VERSION = "0.4";
+		public const string CURRENT_SCHEMA_VERSION = "0.5";
 		
 		protected XElement VehiclePart;
 		
@@ -315,6 +315,8 @@ namespace TUGraz.VectoCore.OutputData.XML
 				new XElement(tns + XMLNames.Report_ResultEntry_VehiclePerformance,
 					new XElement(tns + XMLNames.Report_ResultEntry_AverageSpeed,
 						new XAttribute(XMLNames.Report_Results_Unit_Attr, "km/h"), result.AverageSpeed.AsKmph.ToXMLFormat(1)),
+					new XElement(tns + "AverageDrivingSpeed", 
+						new XAttribute(XMLNames.Report_Results_Unit_Attr, "km/h"), result.AverageDrivingSpeed.AsKmph.ToXMLFormat(1)),
 					new XElement(tns + XMLNames.Report_ResultEntry_MinSpeed, new XAttribute(XMLNames.Report_Results_Unit_Attr, "km/h"),
 						result.MinSpeed.AsKmph.ToXMLFormat(1)),
 					new XElement(tns + XMLNames.Report_ResultEntry_MaxSpeed, new XAttribute(XMLNames.Report_Results_Unit_Attr, "km/h"),
@@ -325,7 +327,12 @@ namespace TUGraz.VectoCore.OutputData.XML
 						new XAttribute(XMLNames.Report_Results_Unit_Attr, "m/s²"), result.MaxAcceleration.ToXMLFormat(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_GearshiftCount, result.GearshiftCount.ToXMLFormat(0)),
+					new XElement(tns + "EngineSpeedDriving", 
+						new XElement(tns + "Min", new XAttribute(XMLNames.Report_Results_Unit_Attr, "rpm"), result.EngineSpeedDrivingMin.AsRPM.ToXMLFormat(1)),
+						new XElement(tns + "Average", new XAttribute(XMLNames.Report_Results_Unit_Attr, "rpm"), result.EngineSpeedDrivingAvg.AsRPM.ToXMLFormat(1)),
+						new XElement(tns + "Max", new XAttribute(XMLNames.Report_Results_Unit_Attr, "rpm"), result.EngineSpeedDrivingMax.AsRPM.ToXMLFormat(1))
+						)
 					),
 				//FC
 				XMLDeclarationReport.GetResults(result, tns, true).Cast<object>().ToArray()
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.5.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.5.xsd
index 2fbbac9c2d..b2c124bc5f 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.5.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.5.xsd
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) -->
 <!--W3C XML Schema generated by XMLSpy vXMLSpy Professional Edition v2016 rel. 2 (x64) (http://www.altova.com)-->
-<xs:schema xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.4" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.4" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.4">
+<xs:schema xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.5" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.5" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.5">
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/>
 	<xs:element name="VectoOutput">
 		<xs:annotation>
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index d9d686776b..937990fa1e 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -446,6 +446,9 @@
     <EmbeddedResource Include="Resources\XSD\VectoComponent.1.0.xsd">
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="Resources\XSD\VectoOutputManufacturer.0.5.xsd">
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
     <None Include="Utils\VectoVersionCore.tt">
       <Generator>TextTemplatingFileGenerator</Generator>
       <LastGenOutput>VectoVersionCore.cs</LastGenOutput>
-- 
GitLab