From e87bd059a5452e5de9615c0576a852fe5444fa22 Mon Sep 17 00:00:00 2001 From: Stefanos Doumpoulakis <dubulak@gmail.com> Date: Tue, 25 Feb 2025 13:51:45 +0200 Subject: [PATCH] fix: monitoring report for dual fuel vehicles --- .../Resources/XMLNames.Designer.cs | 9 + .../VectoCommon/Resources/XMLNames.resx | 57 +- .../MonitoringReport/XMLMonitoringReport.cs | 45 +- .../Resources/XSD/VectoMonitoring.1.1.xsd | 870 ++++++++++++++++++ .../Resources/XSD/VectoMonitoring.xsd | 3 +- VectoCore/VectoCore/Utils/XMLDefinitions.cs | 2 +- .../XML/Reports/MonitoringReportWriterTest.cs | 35 +- 7 files changed, 975 insertions(+), 46 deletions(-) create mode 100644 VectoCore/VectoCore/Resources/XSD/VectoMonitoring.1.1.xsd diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs index 72f6cc145b..20e32a5922 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs +++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs @@ -3768,6 +3768,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to FuelType. + /// </summary> + public static string MonitoringFuelType { + get { + return ResourceManager.GetString("MonitoringFuelType", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Gearbox. /// </summary> diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx index 00afee7541..b431cbcd5b 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.resx +++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="utf-8"?> <root> - <!-- - Microsoft ResX Schema - + <!-- + Microsoft ResX Schema + Version 2.0 - - The primary goals of this format is to allow a simple XML format - that is mostly human readable. The generation and parsing of the - various data types are done through the TypeConverter classes + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes associated with the data types. - + Example: - + ... ado.net/XML headers & schema ... <resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="version">2.0</resheader> @@ -26,36 +26,36 @@ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> <comment>This is a comment</comment> </data> - - There are any number of "resheader" rows that contain simple + + There are any number of "resheader" rows that contain simple name/value pairs. - - Each data row contains a name, and value. The row also contains a - type or mimetype. Type corresponds to a .NET class that support - text/value conversion through the TypeConverter architecture. - Classes that don't support this are serialized and stored with the + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the mimetype set. - - The mimetype is used for serialized objects, and tells the - ResXResourceReader how to depersist the object. This is currently not + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not extensible. For a given mimetype the value must be set accordingly: - - Note - application/x-microsoft.net.object.binary.base64 is the format - that the ResXResourceWriter will generate, however the reader can + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can read any of the formats listed below. - + mimetype: application/x-microsoft.net.object.binary.base64 - value : The object must be serialized with + value : The object must be serialized with : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : and then encoded with base64 encoding. - + mimetype: application/x-microsoft.net.object.soap.base64 - value : The object must be serialized with + value : The object must be serialized with : System.Runtime.Serialization.Formatters.Soap.SoapFormatter : and then encoded with base64 encoding. mimetype: application/x-microsoft.net.object.bytearray.base64 - value : The object must be serialized into a byte array + value : The object must be serialized into a byte array : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> @@ -2196,4 +2196,7 @@ <data name="Component_FuelCell" xml:space="preserve"> <value>FuelCell</value> </data> + <data name="MonitoringFuelType" xml:space="preserve"> + <value>FuelType</value> + </data> </root> \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/MonitoringReport/XMLMonitoringReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/MonitoringReport/XMLMonitoringReport.cs index f7d5c3ec01..c209c4cc07 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/MonitoringReport/XMLMonitoringReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/MonitoringReport/XMLMonitoringReport.cs @@ -470,21 +470,36 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.MonitoringReport } protected object[] GetEngineData() - { - return new object[] { - GetStandardFields(PlaceHolder.ENGINE.ToString()), - new XElement( - _tns + XMLNames.MonitoringWHTC, - new XElement(_tns + XMLNames.MonitoringCO2, double.NaN.ValueAsUnit(XMLNames.GramsPerKWattHour, 0)), - new XElement(_tns + XMLNames.MonitoringFuelConsumption, double.NaN.ValueAsUnit(XMLNames.GramsPerKWattHour, 0)) - ), - new XElement( - _tns + XMLNames.MonitoringWHSC, - new XElement(_tns + XMLNames.MonitoringCO2, double.NaN.ValueAsUnit(XMLNames.GramsPerKWattHour, 0)), - new XElement(_tns + XMLNames.MonitoringFuelConsumption, double.NaN.ValueAsUnit(XMLNames.GramsPerKWattHour, 0)) - ), - new XElement(_tns + XMLNames.MonitoringTypeApprovalNumber, GetPlaceholder(PlaceHolder.TYPE_APPROVAL_NUMBER)) - }; + { + var elements = new List<object>() { GetStandardFields(PlaceHolder.ENGINE.ToString()) }; + + foreach (var fuel in _modelData.EngineData.Fuels) + { + elements.Add( + new XElement( + _tns + XMLNames.MonitoringWHTC, + new XElement(_tns + XMLNames.MonitoringFuelType, fuel.FuelData.FuelType.ToXMLFormat()), + new XElement(_tns + XMLNames.MonitoringCO2, double.NaN.ValueAsUnit(XMLNames.GramsPerKWattHour, 0)), + new XElement(_tns + XMLNames.MonitoringFuelConsumption, double.NaN.ValueAsUnit(XMLNames.GramsPerKWattHour, 0)) + ) + ); + } + + foreach (var fuel in _modelData.EngineData.Fuels) + { + elements.Add( + new XElement( + _tns + XMLNames.MonitoringWHSC, + new XElement(_tns + XMLNames.MonitoringFuelType, fuel.FuelData.FuelType.ToXMLFormat()), + new XElement(_tns + XMLNames.MonitoringCO2, double.NaN.ValueAsUnit(XMLNames.GramsPerKWattHour, 0)), + new XElement(_tns + XMLNames.MonitoringFuelConsumption, double.NaN.ValueAsUnit(XMLNames.GramsPerKWattHour, 0)) + ) + ); + } + + elements.Add(new XElement(_tns + XMLNames.MonitoringTypeApprovalNumber, GetPlaceholder(PlaceHolder.TYPE_APPROVAL_NUMBER))); + + return elements.ToArray(); } protected object[] GetAxleData() diff --git a/VectoCore/VectoCore/Resources/XSD/VectoMonitoring.1.1.xsd b/VectoCore/VectoCore/Resources/XSD/VectoMonitoring.1.1.xsd new file mode 100644 index 0000000000..fc1d3c70d6 --- /dev/null +++ b/VectoCore/VectoCore/Resources/XSD/VectoMonitoring.1.1.xsd @@ -0,0 +1,870 @@ +<?xml version="1.0" encoding="utf-8"?> + +<xs:schema + xmlns="urn:tugraz:ivt:VectoAPI:MonitoringOutput:v1.1" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" + xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.9" + targetNamespace="urn:tugraz:ivt:VectoAPI:MonitoringOutput:v1.1" + elementFormDefault="qualified" + attributeFormDefault="unqualified" + > + + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.9" schemaLocation="VectoOutputManufacturer.0.9.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> + + <xs:element name="VectoMonitoring" type="VectoMonitoringOutputType"/> + + <xs:complexType name="VectoMonitoringOutputType" abstract="true"> + <xs:attribute name="schemaVersion" type="xs:decimal" use="required"/> + </xs:complexType> + + <!-- VectoMonitoring Output Types--> + <xs:complexType name="ConventionalLorryDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:ConventionalLorryManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="Conventional_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="ConventionalPrimaryBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:ConventionalPrimaryBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="Conventional_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="ConventionalCompletedBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:ConventionalCompletedBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="Completed_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="HEV-Px_IHPCLorryDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:HEV-Px_IHPCLorryManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="HEV-Px_IHPC_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="HEV-Px_IHPCPrimaryBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:HEV-Px_IHPCPrimaryBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="HEV-Px_IHPC_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="HEV-S2_LorryDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:HEV-S2_LorryManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="HEV-S2_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="HEV-S2_PrimaryBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:HEV-S2_PrimaryBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="HEV-S2_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="HEV-S3_LorryDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:HEV-S3_LorryManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="HEV-S3_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="HEV-S3_PrimaryBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:HEV-S3_PrimaryBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="HEV-S3_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="HEV-S4_LorryDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:HEV-S4_LorryManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="HEV-S4_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="HEV-S4_PrimaryBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:HEV-S4_PrimaryBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="HEV-S4_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="HEV-IEPC-S_LorryDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:HEV-IEPC-S_LorryManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="HEV-IEPC-S_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="HEV-IEPC-S_PrimaryBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:HEV-IEPC-S_PrimaryBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="HEV-IEPC-S_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="HEVCompletedBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:HEVCompletedBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="Completed_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="PEV-E2_LorryDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:PEV-E2_LorryManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="PEV-E2_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="PEV-E2_PrimaryBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:PEV-E2_PrimaryBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="PEV-E2_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="PEV-E3_LorryDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:PEV-E3_LorryManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="PEV-E3_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="PEV-E3_PrimaryBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:PEV-E3_PrimaryBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="PEV-E3_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="PEV-E4_LorryDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:PEV-E4_LorryManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="PEV-E4_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="PEV-E4_PrimaryBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:PEV-E4_PrimaryBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="PEV-E4_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="PEV-IEPC_LorryDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:PEV-IEPC_LorryManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="PEV-IEPC_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="PEV-IEPC_PrimaryBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:PEV-IEPC_PrimaryBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="PEV-IEPC_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="PEVCompletedBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:PEVCompletedBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="Completed_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="ExemptedLorryDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:ExemptedLorryManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="Exempted_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="ExemptedPrimaryBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:ExemptedPrimaryBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="Exempted_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="ExemptedCompletedBusDataType"> + <xs:complexContent> + <xs:extension base="VectoMonitoringOutputType"> + <xs:sequence> + <xs:element name="ManufacturerRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data" type="mrf:ExemptedCompletedBusManufacturerOutputDataType"/> + <xs:element name="Signature" type="v1.0:SignatureType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AdditionalData" type="Exempted_DataType"></xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <!-- MonitoringData Vehicle Data Types--> + <xs:complexType name="Completed_DataType"> + <xs:sequence> + <xs:group ref="BaseVehicleData"/> + <xs:element name="AdvancedReducingTechnologies" type="AdvReducingTechDataType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="Exempted_DataType"> + <xs:sequence> + <xs:group ref="BaseVehicleData"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="Conventional_DataType"> + <xs:sequence> + <xs:group ref="BaseVehicleData"/> + <xs:group ref="FullConventionalComponents"/> + <xs:element name="AdvancedReducingTechnologies" type="AdvReducingTechDataType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="HEV-Px_IHPC_DataType"> + <xs:sequence> + <xs:group ref="BaseVehicleData"/> + <xs:group ref="FullConventionalComponents"/> + <xs:group ref="xEV-ElectricComponents"/> + <xs:element name="AdvancedReducingTechnologies" type="AdvReducingTechDataType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="HEV-S2_DataType"> + <xs:sequence> + <xs:group ref="BaseVehicleData"/> + <xs:group ref="FullConventionalComponents"/> + <xs:group ref="HEV-Sx-ElectricComponents"/> + <xs:element name="AdvancedReducingTechnologies" type="AdvReducingTechDataType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="HEV-S3_DataType"> + <xs:sequence> + <xs:group ref="BaseVehicleData"/> + <xs:group ref="NoGearboxConventionalComponents"/> + <xs:group ref="HEV-Sx-ElectricComponents"/> + <xs:element name="AdvancedReducingTechnologies" type="AdvReducingTechDataType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="HEV-S4_DataType"> + <xs:sequence> + <xs:group ref="BaseVehicleData"/> + <xs:group ref="NoGearboxNoAxlegearConventionalComponents"/> + <xs:group ref="HEV-Sx-ElectricComponents"/> + <xs:element name="AdvancedReducingTechnologies" type="AdvReducingTechDataType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="HEV-IEPC-S_DataType"> + <xs:sequence> + <xs:group ref="BaseVehicleData"/> + <xs:group ref="NoGearboxOptionalAxlegearConventionalComponents"/> + <xs:group ref="HEV-Sx-ElectricComponents"/> + <xs:element name="AdvancedReducingTechnologies" type="AdvReducingTechDataType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="PEV-E2_DataType"> + <xs:sequence> + <xs:group ref="BaseVehicleData"/> + <xs:group ref="NoEngineConventionalComponents"/> + <xs:group ref="xEV-ElectricComponents"/> + <xs:element name="AdvancedReducingTechnologies" type="AdvReducingTechDataType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="PEV-E3_DataType"> + <xs:sequence> + <xs:group ref="BaseVehicleData"/> + <xs:group ref="NoEngineNoGearboxConventionalComponents"/> + <xs:group ref="xEV-ElectricComponents"/> + <xs:element name="AdvancedReducingTechnologies" type="AdvReducingTechDataType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="PEV-E4_DataType"> + <xs:sequence> + <xs:group ref="BaseVehicleData"/> + <xs:group ref="AxleWheelsConventionalComponents"/> + <xs:group ref="xEV-ElectricComponents"/> + <xs:element name="AdvancedReducingTechnologies" type="AdvReducingTechDataType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="PEV-IEPC_DataType"> + <xs:sequence> + <xs:group ref="BaseVehicleData"/> + <xs:group ref="OptionalAxlegearConventionalComponents"/> + <xs:group ref="xEV-ElectricComponents"/> + <xs:element name="AdvancedReducingTechnologies" type="AdvReducingTechDataType"/> + </xs:sequence> + </xs:complexType> + <!-- MonitoringData Component Groups--> + <xs:group name="FullConventionalComponents"> + <xs:sequence> + <xs:element name="Engine" type="EngineDataType"/> + <xs:element name="Gearbox" type="GearboxDataType"/> + <xs:element name="Axlegear" type="AxlegearDataType"/> + <xs:element name="AxleWheels" type="AxleWheelsDataType"/> + </xs:sequence> + </xs:group> + <xs:group name="NoEngineConventionalComponents"> + <xs:sequence> + <xs:element name="Gearbox" type="GearboxDataType"/> + <xs:element name="Axlegear" type="AxlegearDataType"/> + <xs:element name="AxleWheels" type="AxleWheelsDataType"/> + </xs:sequence> + </xs:group> + <xs:group name="NoGearboxConventionalComponents"> + <xs:sequence> + <xs:element name="Engine" type="EngineDataType"/> + <xs:element name="Axlegear" type="AxlegearDataType"/> + <xs:element name="AxleWheels" type="AxleWheelsDataType"/> + </xs:sequence> + </xs:group> + <xs:group name="NoGearboxNoAxlegearConventionalComponents"> + <xs:sequence> + <xs:element name="Engine" type="EngineDataType"/> + <xs:element name="AxleWheels" type="AxleWheelsDataType"/> + </xs:sequence> + </xs:group> + <xs:group name="NoGearboxOptionalAxlegearConventionalComponents"> + <xs:sequence> + <xs:element name="Engine" type="EngineDataType"/> + <xs:element name="Axlegear" type="AxlegearDataType" minOccurs="0"/> + <xs:element name="AxleWheels" type="AxleWheelsDataType"/> + </xs:sequence> + </xs:group> + <xs:group name="NoEngineNoGearboxConventionalComponents"> + <xs:sequence> + <xs:element name="Axlegear" type="AxlegearDataType"/> + <xs:element name="AxleWheels" type="AxleWheelsDataType"/> + </xs:sequence> + </xs:group> + <xs:group name="OptionalAxlegearConventionalComponents"> + <xs:sequence> + <xs:element name="Axlegear" type="AxlegearDataType" minOccurs="0"/> + <xs:element name="AxleWheels" type="AxleWheelsDataType"/> + </xs:sequence> + </xs:group> + <xs:group name="AxleWheelsConventionalComponents"> + <xs:sequence> + <xs:element name="AxleWheels" type="AxleWheelsDataType"/> + </xs:sequence> + </xs:group> + <xs:group name="BaseVehicleData"> + <xs:sequence> + <xs:element name="VectoLicenseNbr" type="xs:string"> + <xs:annotation> + <xs:documentation>#72</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Vehicle" type="VehicleDataType"/> + </xs:sequence> + </xs:group> + <xs:group name="xEV-ElectricComponents"> + <xs:sequence> + <xs:element name="ElectricMachine" type="ElectricMachineDataType"/> + <xs:element name="ElectricEnergyStorage" type="ElectricEnergyStorageDataType"/> + </xs:sequence> + </xs:group> + <xs:group name="HEV-Sx-ElectricComponents"> + <xs:sequence> + <xs:group ref="xEV-ElectricComponents"/> + <xs:element name="ElectricMachineGEN" type="ElectricMachineGENDataType" /> + </xs:sequence> + </xs:group> + <!-- MonitoringData Component Types--> + <xs:complexType name="VehicleDataType"> + <xs:sequence> + <xs:element name="Make" type="xs:string"> + <xs:annotation> + <xs:documentation>#15</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="EngineDataType"> + <xs:sequence> + <xs:element name="Manufacturer" type="xs:string"/> + <xs:element name="ManufacturerAddress" type="xs:string"/> + <xs:element name="Make" type="xs:string"/> + <xs:element name="WHTC" maxOccurs="2"> + <xs:complexType> + <xs:sequence> + <xs:element name="FuelType" type="v1.0:FuelTypeType"> + <xs:annotation> + <xs:documentation>P193</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CO2"> + <xs:annotation> + <xs:documentation>#75</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="g/kWh"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="FuelConsumption"> + <xs:annotation> + <xs:documentation>#76</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="g/kWh"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="WHSC" maxOccurs="2"> + <xs:complexType> + <xs:sequence> + <xs:element name="FuelType" type="v1.0:FuelTypeType"> + <xs:annotation> + <xs:documentation>P193</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CO2"> + <xs:annotation> + <xs:documentation>#77</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="g/kWh"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="FuelConsumption"> + <xs:annotation> + <xs:documentation>#78</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="g/kWh"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="TypeApprovalNumber" type="xs:string"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="GearboxDataType"> + <xs:sequence> + <xs:element name="Manufacturer" type="xs:string"> + <xs:annotation> + <xs:documentation>#24</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ManufacturerAddress" type="xs:string"> + <xs:annotation> + <xs:documentation>#24</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Make" type="xs:string"> + <xs:annotation> + <xs:documentation>#25</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AxlegearDataType"> + <xs:sequence> + <xs:element name="Manufacturer" type="xs:string"> + <xs:annotation> + <xs:documentation>#32</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ManufacturerAddress" type="xs:string"> + <xs:annotation> + <xs:documentation>#32</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Make" type="xs:string"> + <xs:annotation> + <xs:documentation>#33</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AxleWheelsDataType"> + <xs:sequence> + <xs:element name="Axle" minOccurs="2" maxOccurs="4"> + <xs:complexType> + <xs:sequence> + <xs:element name="Tyre"> + <xs:complexType> + <xs:sequence> + <xs:element name="Manufacturer" type="xs:string"> + <xs:annotation> + <xs:documentation>#39</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ManufacturerAddress" type="xs:string"> + <xs:annotation> + <xs:documentation>#39</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Make" type="xs:string"> + <xs:annotation> + <xs:documentation>#40</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:attribute name="axleNumber" use="required"> + <xs:simpleType> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + <xs:maxInclusive value="4"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AdvReducingTechDataType"> + <xs:annotation> + <xs:documentation>#74</xs:documentation> + </xs:annotation> + <xs:sequence> + <xs:element name="Entry" minOccurs="0" maxOccurs="unbounded"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="category" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="advanced aerodynamic measures"/> + <xs:enumeration value="advanced rolling resistance measures"/> + <xs:enumeration value="advanced drivetrain technologies"/> + <xs:enumeration value="advanced engine technologies"/> + <xs:enumeration value="advanced auxiliary technologies"/> + <xs:enumeration value="additional ADAS technologies"/> + <xs:enumeration value="advanced powertrain integration and hybridisation"/> + <xs:enumeration value="other"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="ElectricMachineDataType"> + <xs:sequence> + <xs:element name="Manufacturer" type="xs:string"/> + <xs:element name="ManufacturerAddress" type="xs:string"/> + <xs:element name="Make" type="xs:string"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="ElectricEnergyStorageDataType"> + <xs:sequence> + <xs:element name="Manufacturer" type="xs:string"/> + <xs:element name="ManufacturerAddress" type="xs:string"/> + <xs:element name="Make" type="xs:string"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="ElectricMachineGENDataType"> + <xs:sequence> + <xs:element name="Manufacturer" type="xs:string"/> + <xs:element name="ManufacturerAddress" type="xs:string"/> + <xs:element name="Make" type="xs:string"/> + </xs:sequence> + </xs:complexType> +</xs:schema> \ No newline at end of file diff --git a/VectoCore/VectoCore/Resources/XSD/VectoMonitoring.xsd b/VectoCore/VectoCore/Resources/XSD/VectoMonitoring.xsd index 1f038fc2e2..962edfc821 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoMonitoring.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoMonitoring.xsd @@ -3,12 +3,13 @@ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:all_mon="urn:tugraz:ivt:VectoAPI:MonitoringOutput" xmlns:mon0.7="urn:tugraz:ivt:VectoAPI:MonitoringOutput:v0.7" targetNamespace="urn:tugraz:ivt:VectoAPI:MonitoringOutput" elementFormDefault="qualified" attributeFormDefault="unqualified" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd"> <!-- - This is a convienience file that imports the schema for all supported versions of customer information file and all supported declaration definitions + This is a convienience file that imports the schema for all supported versions of monitoring report file and all supported declaration definitions --> <xs:import namespace="urn:tugraz:ivt:VectoAPI:MonitoringOutput:v0.7" schemaLocation="VectoMonitoring.0.7.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:MonitoringOutput:v0.7.1" schemaLocation="VectoMonitoring.0.7.1.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:MonitoringOutput:v0.8" schemaLocation="VectoMonitoring.0.8.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:MonitoringOutput:v1.0" schemaLocation="VectoMonitoring.1.0.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:MonitoringOutput:v1.1" schemaLocation="VectoMonitoring.1.1.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput" schemaLocation="VectoOutputManufacturer.xsd"/> </xs:schema> diff --git a/VectoCore/VectoCore/Utils/XMLDefinitions.cs b/VectoCore/VectoCore/Utils/XMLDefinitions.cs index 7c6d79f032..c00e927e7e 100644 --- a/VectoCore/VectoCore/Utils/XMLDefinitions.cs +++ b/VectoCore/VectoCore/Utils/XMLDefinitions.cs @@ -123,7 +123,7 @@ namespace TUGraz.VectoCore.Utils public const string MONITORING_NAMESPACE = "urn:tugraz:ivt:VectoAPI:MonitoringOutput"; - public const string MONITORING_SCHEMA_VERSION = "1.0"; + public const string MONITORING_SCHEMA_VERSION = "1.1"; public const string MONITORING_NAMESPACE_URI = MONITORING_NAMESPACE + ":v" + MONITORING_SCHEMA_VERSION; diff --git a/VectoCore/VectoCoreTest/XML/Reports/MonitoringReportWriterTest.cs b/VectoCore/VectoCoreTest/XML/Reports/MonitoringReportWriterTest.cs index dec64c93e0..3460a9ceea 100644 --- a/VectoCore/VectoCoreTest/XML/Reports/MonitoringReportWriterTest.cs +++ b/VectoCore/VectoCoreTest/XML/Reports/MonitoringReportWriterTest.cs @@ -109,13 +109,44 @@ namespace TUGraz.VectoCore.Tests.XML.Reports : null : null; - return new VectoRunData() { + var engineData = (dataProvider is IMultistepBusInputDataProvider) + ? null + : (dataProvider.JobInputData.Vehicle.Components != null) + ? (dataProvider.JobInputData.Vehicle.Components.EngineInputData != null) + ? new CombustionEngineData() + : null + : null; + + if (engineData != null) + { + var fuelTypes = new List<FuelType>(); + + foreach (var mode in dataProvider.JobInputData.Vehicle.Components.EngineInputData.EngineModes) + { + var types = mode.Fuels.Select(x => x.FuelType); + + foreach (var type in types) + { + if (!fuelTypes.Contains(type)) + { + fuelTypes.Add(type); + } + } + } + + engineData.Fuels = fuelTypes.Select(x => new CombustionEngineFuelData() { + FuelData = DeclarationData.FuelData.Lookup(x, dataProvider.JobInputData.Vehicle.TankSystem) + } ).ToList(); + } + + return new VectoRunData() { InputData = dataProvider, VehicleData = new VehicleData() { OffVehicleCharging = false, AxleData = axleData }, - AxleGearData = axleGearData + AxleGearData = axleGearData, + EngineData = engineData }; } -- GitLab