Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 3523283f authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

make engineering xml writing tests work

parent f45a608a
No related branches found
No related tags found
No related merge requests found
......@@ -38,8 +38,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
public IList<ICycleData> Cycles
{
get
{
get {
var retVal = new List<ICycleData>();
var cycles = Navigator.Select(Helper.Query(XBasePath, XMLNames.VectoJob_MissionCycles,
Helper.QueryConstraint(XMLNames.Missions_Cycle, XMLNames.ExtResource_Type_Attr,
......@@ -72,8 +71,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
public bool EngineOnlyMode
{
get
{
get {
return ElementExists(XMLNames.VectoJob_EngineOnlyMode) &&
XmlConvert.ToBoolean(GetElementValue(XMLNames.VectoJob_EngineOnlyMode));
}
......@@ -81,8 +79,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
protected internal Second DownshiftAfterUpshiftDelay
{
get
{
get {
return
ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
"DownshiftAfterUpshiftDelay"))
......@@ -94,8 +91,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
protected internal Second UpshiftAfterDownshiftDelay
{
get
{
get {
return
ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
"UpshiftAfterDownshiftDelay"))
......@@ -107,8 +103,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
protected internal MeterPerSquareSecond UpshiftMinAcceleration
{
get
{
get {
return
ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
"UpshiftMinAcceleration"))
......@@ -122,18 +117,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
public string JobName
{
get
{
get {
return InputData.JobInputData().EngineOnlyMode
? InputData.EngineInputData.TechnicalReportId
? InputData.EngineInputData.Model
: InputData._vehicleInputData.GetVehicleID;
}
}
public double TorqueReserve
{
get
{
get {
return
ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve))
......@@ -145,8 +138,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
public Second MinTimeBetweenGearshift
{
get
{
get {
return
ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift))
......@@ -158,8 +150,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
public MeterPerSecond StartSpeed
{
get
{
get {
return
ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed))
......@@ -171,8 +162,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
public MeterPerSquareSecond StartAcceleration
{
get
{
get {
return
ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration))
......@@ -184,8 +174,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
public double StartTorqueReserve
{
get
{
get {
return
ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve))
......@@ -198,8 +187,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
public Second PowershiftShiftTime
{
get
{
get {
return
ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
"PowershiftShiftTime"))
......@@ -211,8 +199,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
public MeterPerSquareSecond CCUpshiftMinAcceleration
{
get
{
get {
return
ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
"CCUpshiftMinAcceleration"))
......@@ -224,8 +211,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
public MeterPerSquareSecond CLUpshiftMinAcceleration
{
get
{
get {
return
ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
"CLUpshiftMinAcceleration"))
......
......@@ -20,7 +20,7 @@ namespace TUGraz.IVT.VectoXML.Writer
protected XNamespace rootNamespace;
protected XNamespace di;
private const string Creator = "TU Graz, IVT-EM XML Exporter";
protected const string Creator = "TU Graz, IVT-EM XML Exporter";
protected readonly string Vendor;
protected readonly string BasePath;
......@@ -34,28 +34,6 @@ namespace TUGraz.IVT.VectoXML.Writer
di = "http://www.w3.org/2000/09/xmldsig#";
}
protected XElement[] GetDefaultComponentElements(string componentId, string makeAndModel)
{
return new[] {
new XElement(tns + XMLNames.Component_Manufacturer, string.Format("{0,-5}", Vendor)),
new XElement(tns + XMLNames.Component_Model, string.Format("{0,-10}", makeAndModel)),
new XElement(tns + XMLNames.Component_TechnicalReportId, string.Format("{0,-10}", componentId)),
new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)),
new XElement(tns + XMLNames.Component_AppVersion, "VectoCore"),
};
}
protected XElement[] GetDefaultComponentElements(string vin, string makeAndModel, string address)
{
return new[] {
new XElement(tns + XMLNames.Component_Manufacturer, String.Format("{0,-5}", Vendor)),
new XElement(tns + XMLNames.Component_ManufacturerAddress, address),
new XElement(tns + XMLNames.Component_Model, string.Format("{0,-10}", makeAndModel)),
new XElement(tns + XMLNames.Vehicle_VIN, string.Format("{0,-10}", vin)),
new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)),
};
}
protected object[] EmbedDataTable(DataTable table, Dictionary<string, string> mapping, string tagName = "Entry",
Dictionary<string, uint> precision = null)
{
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using DocumentFormat.OpenXml.Drawing.Diagrams;
using TUGraz.IVT.VectoXML;
......@@ -98,20 +99,20 @@ namespace TUGraz.VectoCore.OutputData.XML
return new XElement(tns + XMLNames.Component_Vehicle,
new XAttribute(XMLNames.Component_ID_Attr, "VEH-" + vehicle.Model),
GetDefaultComponentElements(vehicle.TechnicalReportId, vehicle.Model, "N.A."),
new XElement(tns + "LegislativeClass", "N3"),
new XElement(tns + XMLNames.Vehicle_LegislativeClass, "N3"),
new XElement(tns + XMLNames.Vehicle_VehicleCategory, GetVehicleCategoryXML(vehicle.VehicleCategory)),
new XElement(tns + XMLNames.Vehicle_AxleConfiguration, vehicle.AxleConfiguration.GetName()),
new XElement(tns + XMLNames.Vehicle_CurbMassChassis, vehicle.CurbMassChassis.ToXMLFormat(0)),
new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, vehicle.GrossVehicleMassRating.ToXMLFormat(0)),
new XElement(tns + "IdlingSpeed", data.EngineInputData.IdleSpeed.ToXMLFormat(0)),
new XElement(tns + XMLNames.Vehicle_IdlingSpeed, data.EngineInputData.IdleSpeed.ToXMLFormat(0)),
new XElement(tns + XMLNames.Vehicle_RetarderType, GetRetarterTypeXML(retarder.Type)),
retarder.Type.IsDedicatedComponent()
? new XElement(tns + XMLNames.Vehicle_RetarderRatio, retarder.Ratio.ToXMLFormat(3))
: null,
new XElement(tns + XMLNames.Vehicle_AngledriveType, angledrive.Type.ToXMLFormat()),
new XElement(tns + "PTO",
new XElement(tns + "PTOShaftsGearWheels", "none"),
new XElement(tns + "PTOOtherElements", "none")),
new XElement(tns + XMLNames.Vehicle_PTO,
new XElement(tns + XMLNames.Vehicle_PTO_ShaftsGearWheels, "none"),
new XElement(tns + XMLNames.Vehicle_PTO_OtherElements, "none")),
// ToDo: TorqueLimits
new XElement(tns + XMLNames.Vehicle_Components,
CreateEngine(data.EngineInputData),
......@@ -131,22 +132,22 @@ namespace TUGraz.VectoCore.OutputData.XML
var id = string.Format("ENG-{0}", data.Model.RemoveWhitespace());
var fld = EngineFullLoadCurve.Create(data.FullLoadCurve, true);
return new XElement(tns + XMLNames.Component_Engine,
new XAttribute("certificationNumber", string.Format("ENG-{0}", data.Model)),
new XAttribute(XMLNames.Component_CertificationNumber, string.Format("ENG-{0}", data.Model)),
new XElement(tns + XMLNames.ComponentDataWrapper,
new XAttribute(XMLNames.Component_ID_Attr, id),
GetDefaultComponentElements(string.Format("ENG-{0}", data.Model), data.Model),
new XElement(tns + XMLNames.Engine_Displacement, (data.Displacement.Value() * 1000 * 1000).ToXMLFormat(0)),
new XElement(tns + XMLNames.Engine_IdlingSpeed, data.IdleSpeed.AsRPM.ToXMLFormat(0)),
new XElement(tns + "RatedSpeed", fld.RatedSpeed.AsRPM.ToXMLFormat(0)),
new XElement(tns + "RatedPower", fld.FullLoadStationaryPower(fld.RatedSpeed).ToXMLFormat(0)),
new XElement(tns + "MaxEngineTorque", fld.MaxLoadTorque.ToXMLFormat(0)),
new XElement(tns + XMLNames.Engine_RatedSpeed, fld.RatedSpeed.AsRPM.ToXMLFormat(0)),
new XElement(tns + XMLNames.Engine_RatedPower, fld.FullLoadStationaryPower(fld.RatedSpeed).ToXMLFormat(0)),
new XElement(tns + XMLNames.Engine_MaxTorque, fld.MaxLoadTorque.ToXMLFormat(0)),
new XElement(tns + XMLNames.Engine_WHTCUrban, data.WHTCUrban.ToXMLFormat(4)),
new XElement(tns + XMLNames.Engine_WHTCRural, data.WHTCRural.ToXMLFormat(4)),
new XElement(tns + XMLNames.Engine_WHTCMotorway, data.WHTCMotorway.ToXMLFormat(4)),
new XElement(tns + XMLNames.Engine_ColdHotBalancingFactor, data.ColdHotBalancingFactor.ToXMLFormat(4)),
new XElement(tns + "CFRegPer", "1.0000"),
new XElement(tns + "CFNCV", "1.0000"),
new XElement(tns + "FuelType", "Diesel CI"),
new XElement(tns + XMLNames.Engine_CorrectionFactor_RegPer, "1.0000"),
new XElement(tns + XMLNames.Engine_CorrecionFactor_NCV, "1.0000"),
new XElement(tns + XMLNames.Engine_FuelType, "Diesel CI"),
new XElement(tns + XMLNames.Engine_FuelConsumptionMap,
EmbedDataTable(data.FuelConsumptionMap, AttributeMappings.FuelConsumptionMapMapping)),
new XElement(tns + XMLNames.Engine_FullLoadAndDragCurve,
......@@ -177,12 +178,12 @@ namespace TUGraz.VectoCore.OutputData.XML
}
var id = string.Format("GBX-{0}", gbxData.Model.RemoveWhitespace());
return new XElement(tns + XMLNames.Component_Gearbox,
new XAttribute("certificationNumber", string.Format("GBX-{0}", gbxData.Model)),
new XAttribute(XMLNames.Component_CertificationNumber, string.Format("GBX-{0}", gbxData.Model)),
new XElement(tns + XMLNames.ComponentDataWrapper,
new XAttribute(XMLNames.Component_ID_Attr, id),
GetDefaultComponentElements(string.Format("GBX-{0}", gbxData.Model), gbxData.Model),
new XElement(tns + XMLNames.Gearbox_TransmissionType, gbxData.Type.ToXMLFormat()),
new XElement(tns + "MainCertificationMethod", "Standard values"),
new XElement(tns + XMLNames.Component_Gearbox_CertificationMethod, "Standard values"),
gears
),
AddSignatureDummy(id),
......@@ -198,11 +199,11 @@ namespace TUGraz.VectoCore.OutputData.XML
}
var id = string.Format("TC-{0}", data.Model.RemoveWhitespace());
return new XElement(tns + XMLNames.Component_TorqueConverter,
new XAttribute("certificationNumber", id),
new XAttribute(XMLNames.Component_CertificationNumber, id),
new XElement(tns + XMLNames.ComponentDataWrapper,
new XAttribute(XMLNames.Component_ID_Attr, id),
GetDefaultComponentElements(data.TechnicalReportId, data.Model),
new XElement(tns + "CertificationMethod", "Standard values"),
new XElement(tns + XMLNames.Component_CertificationMethod, "Standard values"),
new XElement(tns + XMLNames.TorqueConverter_Characteristics,
EmbedDataTable(data.TCData, AttributeMappings.TorqueConverterDataMapping,
precision: new Dictionary<string, uint>() {
......@@ -217,12 +218,12 @@ namespace TUGraz.VectoCore.OutputData.XML
{
var id = string.Format("ANGL-{0}", data.Model.RemoveWhitespace());
return new XElement(tns + XMLNames.Component_Angledrive,
new XAttribute("certificationNumber", "ANGL-" + data.Model),
new XAttribute(XMLNames.Component_CertificationNumber, "ANGL-" + data.Model),
new XElement(tns + XMLNames.ComponentDataWrapper,
new XAttribute(XMLNames.Component_ID_Attr, id),
GetDefaultComponentElements(data.TechnicalReportId, data.Model),
new XElement(tns + XMLNames.AngleDrive_Ratio, data.Ratio.ToXMLFormat(3)),
new XElement(tns + "CertificationMethod", "Standard values"),
new XElement(tns + XMLNames.Component_CertificationMethod, "Standard values"),
new XElement(tns + XMLNames.AngleDrive_TorqueLossMap,
EmbedDataTable(data.LossMap, AttributeMappings.TransmissionLossmapMapping))),
AddSignatureDummy(id));
......@@ -232,11 +233,11 @@ namespace TUGraz.VectoCore.OutputData.XML
{
var id = string.Format("RET-{0}", data.Model.RemoveWhitespace());
return new XElement(tns + XMLNames.Component_Retarder,
new XAttribute("certificationNumber", "RET-none"),
new XAttribute(XMLNames.Component_CertificationNumber, "RET-none"),
new XElement(tns + XMLNames.ComponentDataWrapper,
new XAttribute(XMLNames.Component_ID_Attr, id),
GetDefaultComponentElements(data.TechnicalReportId, data.Model),
new XElement(tns + "CertificationMethod", "Standard values"),
new XElement(tns + XMLNames.Component_CertificationMethod, "Standard values"),
new XElement(tns + XMLNames.Retarder_RetarderLossMap,
EmbedDataTable(data.LossMap, AttributeMappings.RetarderLossmapMapping)
)
......@@ -249,13 +250,13 @@ namespace TUGraz.VectoCore.OutputData.XML
{
var typeId = string.Format("AXLGEAR-{0:0.000}", data.Ratio);
return new XElement(tns + XMLNames.Component_Axlegear,
new XAttribute("certificationNumber", string.Format("AXL-{0}", data.Model)),
new XAttribute(XMLNames.Component_CertificationNumber, string.Format("AXL-{0}", data.Model)),
new XElement(tns + XMLNames.ComponentDataWrapper,
new XAttribute(XMLNames.Component_ID_Attr, typeId),
GetDefaultComponentElements(typeId, "N.A."),
new XElement(tns + "LineType", "Single portal axle"),
new XElement(tns + XMLNames.Axlegear_Ratio, data.Ratio.ToXMLFormat(3)),
new XElement(tns + "CertificationMethod", "Standard values"),
new XElement(tns + XMLNames.Component_CertificationMethod, "Standard values"),
new XElement(tns + XMLNames.Axlegear_TorqueLossMap,
EmbedDataTable(data.LossMap, AttributeMappings.TransmissionLossmapMapping))),
AddSignatureDummy(typeId)
......@@ -274,7 +275,7 @@ namespace TUGraz.VectoCore.OutputData.XML
new XElement(tns + XMLNames.AxleWheels_Axles_Axle_AxleType_Attr,
i == 1 ? AxleType.VehicleDriven.ToString() : AxleType.VehicleNonDriven.ToString()),
new XElement(tns + XMLNames.AxleWheels_Axles_Axle_TwinTyres_Attr, axle.TwinTyres),
new XElement(tns + "Steered", i == 0),
new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Steered, i == 0),
CreateTyre(axle)
));
}
......@@ -291,7 +292,7 @@ namespace TUGraz.VectoCore.OutputData.XML
{
var id = string.Format("TYRE-{0}", axle.Wheels).RemoveWhitespace().Replace("/", "_");
return new XElement(tns + "Tyre",
new XAttribute("certificationNumber", id),
new XAttribute(XMLNames.Component_CertificationNumber, id),
new XElement(tns + XMLNames.ComponentDataWrapper,
new XAttribute(XMLNames.Component_ID_Attr, id),
GetDefaultComponentElements(string.Format("TYRE-{0}", axle.Wheels), axle.Wheels),
......@@ -326,7 +327,7 @@ namespace TUGraz.VectoCore.OutputData.XML
{
var id = string.Format("Airdrag-{0}", data.Model);
return new XElement(tns + XMLNames.Component_AirDrag,
new XAttribute("certificationNumber", string.Format("TYRE-{0}", data.Model)),
new XAttribute(XMLNames.Component_CertificationNumber, string.Format("AD-{0}", data.Model)),
new XElement(tns + XMLNames.ComponentDataWrapper,
new XAttribute(XMLNames.Component_ID_Attr, id),
GetDefaultComponentElements(data.Model, "N.A."),
......@@ -345,20 +346,43 @@ namespace TUGraz.VectoCore.OutputData.XML
private XElement AddSignatureDummy(string id)
{
return new XElement(tns + "Signature",
new XElement(di + "Reference",
new XAttribute("URI", "#" + id),
new XElement(di + "Transforms",
new XElement(di + "Transform",
new XAttribute("Algorithm", "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments")),
new XElement(di + "Transform",
new XAttribute("Algorithm", "urn:vecto:xml:2017:canonicalization"))
return new XElement(tns + XMLNames.DI_Signature,
new XElement(di + XMLNames.DI_Signature_Reference,
new XAttribute(XMLNames.DI_Signature_Reference_URI_Attr, "#" + id),
new XElement(di + XMLNames.DI_Signature_Reference_Transforms,
new XElement(di + XMLNames.DI_Signature_Reference_Transforms_Transform,
new XAttribute(XMLNames.DI_Signature_Algorithm_Attr,
"http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments")),
new XElement(di + XMLNames.DI_Signature_Reference_Transforms_Transform,
new XAttribute(XMLNames.DI_Signature_Algorithm_Attr, "urn:vecto:xml:2017:canonicalization"))
),
new XElement(di + "DigestMethod",
new XAttribute("Algorithm", "http://www.w3.org/2001/04/xmlenc#sha256")),
new XElement(di + "DigestValue", "")
new XElement(di + XMLNames.DI_Signature_Reference_DigestMethod,
new XAttribute(XMLNames.DI_Signature_Algorithm_Attr, "http://www.w3.org/2001/04/xmlenc#sha256")),
new XElement(di + XMLNames.DI_Signature_Reference_DigestValue, "")
)
);
}
protected XElement[] GetDefaultComponentElements(string componentId, string makeAndModel)
{
return new[] {
new XElement(tns + XMLNames.Component_Manufacturer, Vendor),
new XElement(tns + XMLNames.Component_Model, makeAndModel),
new XElement(tns + XMLNames.Component_TechnicalReportId, componentId),
new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)),
new XElement(tns + XMLNames.Component_AppVersion, "VectoCore"),
};
}
protected XElement[] GetDefaultComponentElements(string vin, string makeAndModel, string address)
{
return new[] {
new XElement(tns + XMLNames.Component_Manufacturer, Vendor),
new XElement(tns + XMLNames.Component_ManufacturerAddress, address),
new XElement(tns + XMLNames.Component_Model, makeAndModel),
new XElement(tns + XMLNames.Vehicle_VIN, vin),
new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)),
};
}
}
}
\ No newline at end of file
......@@ -3,12 +3,15 @@ using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Linq;
using TUGraz.IVT.VectoXML;
using TUGraz.IVT.VectoXML.Writer;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.InputData.Reader.ComponentData;
using TUGraz.VectoCore.Resources;
using TUGraz.VectoCore.Utils;
......@@ -182,7 +185,6 @@ namespace TUGraz.VectoCore.OutputData.XML
var retarder = data.RetarderInputData;
var gearbox = data.GearboxInputData;
var vehicle = data.VehicleInputData;
var airdrag = data.AirdragInputData;
var angledrive = data.AngledriveInputData;
var pto = data.PTOTransmissionInputData;
......@@ -191,18 +193,18 @@ namespace TUGraz.VectoCore.OutputData.XML
GetDefaultComponentElements(vehicle.TechnicalReportId, vehicle.Model),
new XElement(tns + XMLNames.Vehicle_VehicleCategory, GetVehicleCategoryXML(vehicle.VehicleCategory)),
new XElement(tns + XMLNames.Vehicle_AxleConfiguration, vehicle.AxleConfiguration.GetName()),
new XElement(tns + XMLNames.Vehicle_CurbWeightChassis, vehicle.CurbMassChassis.Value()),
new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, vehicle.GrossVehicleMassRating.Value()),
new XElement(tns + XMLNames.Vehicle_AirDragArea, airdrag.AirDragArea.Value()),
new XElement(tns + XMLNames.Vehicle_CurbMassChassis, vehicle.CurbMassChassis.Value().ToXMLFormat(0)),
new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, vehicle.GrossVehicleMassRating.Value().ToXMLFormat(0)),
//new XElement(tns + XMLNames.Vehicle_AirDragArea, airdrag.AirDragArea.Value()),
new XElement(tns + XMLNames.Vehicle_RetarderType, GetRetarterTypeXML(retarder.Type)),
retarder.Type.IsDedicatedComponent() ? new XElement(tns + XMLNames.Vehicle_RetarderRatio, retarder.Ratio) : null,
new XElement(tns + XMLNames.Vehicle_AngledriveType, angledrive.Type),
retarder.Type.IsDedicatedComponent()
? new XElement(tns + XMLNames.Vehicle_RetarderRatio, retarder.Ratio.ToXMLFormat(3))
: null,
new XElement(tns + XMLNames.Vehicle_AngledriveType, angledrive.Type.ToXMLFormat()),
new XElement(tns + XMLNames.Vehicle_PTOType, pto.PTOTransmissionType),
GetPTOData(pto),
new XElement(tns + XMLNames.Vehicle_CurbWeightExtra, vehicle.CurbMassExtra.Value()),
new XElement(tns + XMLNames.Vehicle_CurbMassExtra, vehicle.CurbMassExtra.Value()),
new XElement(tns + XMLNames.Vehicle_Loading, vehicle.Loading.Value()),
new XElement(tns + XMLNames.Vehicle_CrossWindCorrectionMode, GetCorrectionModeXML(airdrag.CrossWindCorrectionMode)),
GetCrossWindCorrectionData(airdrag),
new XElement(tns + XMLNames.Vehicle_Components,
CreateEngine(data.EngineInputData),
CreateGearbox(gearbox, gearbox.TorqueConverter),
......@@ -210,7 +212,8 @@ namespace TUGraz.VectoCore.OutputData.XML
retarder.Type.IsDedicatedComponent() ? CreateRetarder(retarder) : null,
CreateAxlegear(data.AxleGearInputData),
CreateAxleWheels(data.VehicleInputData),
CreateAuxiliaries(data.AuxiliaryInputData(), RemoveInvalidFileCharacters(data.VehicleInputData.Model))
CreateAuxiliaries(data.AuxiliaryInputData(), RemoveInvalidFileCharacters(data.VehicleInputData.Model)),
CreateAirdrag(data.AirdragInputData)
),
new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist,
new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist_EngineStartStop,
......@@ -267,9 +270,10 @@ namespace TUGraz.VectoCore.OutputData.XML
new XElement(tns + XMLNames.ComponentDataWrapper,
new XAttribute(XMLNames.Component_ID_Attr, "ANGL-" + data.Model),
GetDefaultComponentElements(data.TechnicalReportId, data.Model),
new XElement(tns + XMLNames.AngleDrive_Ratio, data.Ratio),
new XElement(tns + XMLNames.AngleDrive_Ratio, data.Ratio.ToXMLFormat(3)),
data.LossMap == null
? new XElement(tns + XMLNames.AngleDrive_Efficiency, data.Efficiency)
? new XElement(tns + XMLNames.AngleDrive_TorqueLossMap,
new XElement(tns + XMLNames.AngleDrive_Efficiency, data.Efficiency))
: new XElement(tns + XMLNames.AngleDrive_TorqueLossMap, GetTransmissionLossMap(data.LossMap))));
//if (_singleFile) {
return angledrive;
......@@ -308,7 +312,9 @@ namespace TUGraz.VectoCore.OutputData.XML
}
var aux = new XElement(tns + XMLNames.Component_Auxiliaries,
new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, "AUX-none"), auxList));
new XElement(tns + XMLNames.ComponentDataWrapper,
//new XAttribute(XMLNames.Component_ID_Attr, "AUX-none"),
auxList));
if (_singleFile) {
return aux;
}
......@@ -324,10 +330,11 @@ namespace TUGraz.VectoCore.OutputData.XML
var axle = axleData[i];
axles.Add(new XElement(tns + XMLNames.AxleWheels_Axles_Axle,
new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, i + 1),
new XAttribute(XMLNames.AxleWheels_Axles_Axle_TwinTyres_Attr, axle.TwinTyres),
new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleType_Attr,
i == 1 ? AxleType.VehicleDriven.ToString() : AxleType.VehicleNonDriven.ToString()),
GetDefaultComponentElements(string.Format("WHEEL-{0}_{1}", i, axle.Wheels), axle.Wheels),
new XElement(tns + XMLNames.AxleWheels_Axles_Axle_AxleType,
i == 1 ? AxleType.VehicleDriven.ToString() : AxleType.VehicleNonDriven.ToString()),
new XElement(tns + XMLNames.AxleWheels_Axles_Axle_TwinTyres_Attr, axle.TwinTyres),
new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Steered, i == 0),
string.IsNullOrWhiteSpace(axle.Wheels)
? null
: new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Dimension, axle.Wheels),
......@@ -351,14 +358,32 @@ namespace TUGraz.VectoCore.OutputData.XML
String.Format("AXLWHL-{0}.xml", data.AxleConfiguration.GetName()));
}
//private XElement CreateTyre(IAxleDeclarationInputData axle)
//{
// var id = string.Format("TYRE-{0}", axle.Wheels).RemoveWhitespace().Replace("/", "_");
// return new XElement(tns + "Tyre",
// new XAttribute(XMLNames.Component_CertificationNumber, id),
// new XElement(tns + XMLNames.ComponentDataWrapper,
// GetDefaultComponentElements(string.Format("TYRE-{0}", axle.Wheels), axle.Wheels),
// string.IsNullOrWhiteSpace(axle.Wheels)
// ? null
// : new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Dimension, axle.Wheels),
// new XElement(tns + XMLNames.AxleWheels_Axles_Axle_RRCISO, axle.RollResistanceCoefficient.ToXMLFormat(4)),
// new XElement(tns + XMLNames.AxleWheels_Axles_Axle_FzISO, axle.TyreTestLoad.Value().ToXMLFormat(0))
// )
// );
//}
public XElement CreateAxlegear(IAxleGearInputData data)
{
var typeId = string.Format("AXLGEAR-{0:0.000}", data.Ratio);
var axl = new XElement(tns + XMLNames.Component_Axlegear,
new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, typeId),
GetDefaultComponentElements(typeId, "N.A."), new XElement(tns + XMLNames.Axlegear_Ratio, data.Ratio),
GetDefaultComponentElements(typeId, "N.A."),
new XElement(tns + XMLNames.Axlegear_Ratio, data.Ratio.ToXMLFormat(3)),
data.LossMap == null
? new XElement(tns + XMLNames.Axlegear_Efficiency, data.Efficiency)
? new XElement(tns + XMLNames.Axlegear_TorqueLossMap,
new XElement(tns + XMLNames.Axlegear_Efficiency, data.Efficiency))
: new XElement(tns + XMLNames.Axlegear_TorqueLossMap, GetTransmissionLossMap(data.LossMap))));
if (_singleFile) {
return axl;
......@@ -390,14 +415,15 @@ namespace TUGraz.VectoCore.OutputData.XML
foreach (var gearData in data.Gears) {
var gear = new XElement(tns + XMLNames.Gearbox_Gears_Gear,
new XAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, i++),
new XElement(tns + XMLNames.Gearbox_Gear_Ratio, gearData.Ratio),
new XElement(tns + XMLNames.Gearbox_Gear_Ratio, gearData.Ratio.ToXMLFormat(3)),
gearData.MaxTorque != null
? new XElement(tns + XMLNames.Gearbox_Gears_MaxTorque, gearData.MaxTorque.Value())
: null);
if (gearData.LossMap != null) {
gear.Add(new XElement(tns + XMLNames.Gearbox_Gear_TorqueLossMap, GetTransmissionLossMap(gearData.LossMap)));
} else {
gear.Add(new XElement(tns + XMLNames.Gearbox_Gear_Efficiency, gearData.Efficiency));
gear.Add(new XElement(tns + XMLNames.Gearbox_Gear_TorqueLossMap,
new XElement(tns + XMLNames.Gearbox_Gear_Efficiency, gearData.Efficiency)));
}
if (gearData.ShiftPolygon != null) {
gear.Add(new XElement(tns + XMLNames.Gearbox_Gears_Gear_ShiftPolygon, CreateShiftPolygon(gearData.ShiftPolygon)));
......@@ -424,10 +450,15 @@ namespace TUGraz.VectoCore.OutputData.XML
{
var tc = new XElement(tns + XMLNames.Component_TorqueConverter,
new XElement(tns + XMLNames.ComponentDataWrapper,
new XElement(tns + XMLNames.TorqueConverter_ReferenceRPM, torqueConverterData.ReferenceRPM.AsRPM),
new XAttribute(XMLNames.Component_ID_Attr, string.Format("TC-{0}", torqueConverterData.Model)),
GetDefaultComponentElements(string.Format("TC-{0}", torqueConverterData.Model), torqueConverterData.Model),
new XElement(tns + XMLNames.TorqueConverter_ReferenceRPM, torqueConverterData.ReferenceRPM.AsRPM.ToXMLFormat()),
new XElement(tns + XMLNames.TorqueConverter_Characteristics,
_singleFile
? EmbedDataTable(torqueConverterData.TCData, AttributeMappings.TorqueConverterDataMapping)
? EmbedDataTable(torqueConverterData.TCData, AttributeMappings.TorqueConverterDataMapping,
precision: new Dictionary<string, uint>() {
{ TorqueConverterDataReader.Fields.SpeedRatio, 4 }
})
: ExtCSVResource(torqueConverterData.TCData, Path.GetFileName(torqueConverterData.TCData.Source))),
new XElement(tns + XMLNames.TorqueConverter_Inertia, torqueConverterData.Inertia.Value())));
if (_singleFile) {
......@@ -459,10 +490,10 @@ namespace TUGraz.VectoCore.OutputData.XML
new XElement(tns + XMLNames.ComponentDataWrapper,
new XAttribute(XMLNames.Component_ID_Attr, string.Format("ENG-{0}", data.Model)),
GetDefaultComponentElements(string.Format("ENG-{0}", data.Model), data.Model),
new XElement(tns + XMLNames.Engine_Displacement, data.Displacement.Value() * 1000 * 1000),
new XElement(tns + XMLNames.Engine_IdlingSpeed, data.IdleSpeed.AsRPM),
new XElement(tns + XMLNames.Engine_Displacement, (data.Displacement.Value() * 1000 * 1000).ToXMLFormat(0)),
new XElement(tns + XMLNames.Engine_IdlingSpeed, data.IdleSpeed.AsRPM.ToXMLFormat(0)),
new XElement(tns + XMLNames.Engine_Inertia, data.Inertia.Value()),
new XElement(tns + XMLNames.Engine_WHTCEngineering, data.WHTCEngineering),
new XElement(tns + XMLNames.Engine_WHTCEngineering, data.WHTCEngineering.ToXMLFormat(4)),
new XElement(tns + XMLNames.Engine_FuelConsumptionMap, GetFuelConsumptionMap(data)),
new XElement(tns + XMLNames.Engine_FullLoadAndDragCurve, GetFullLoadDragCurve(data))));
if (!allowSeparateFile || _singleFile) {
......@@ -471,6 +502,19 @@ namespace TUGraz.VectoCore.OutputData.XML
return ExtComponent(XMLNames.Component_Engine, engine, string.Format("ENG-{0}.xml", data.Model));
}
private XElement CreateAirdrag(IAirdragEngineeringInputData data)
{
var id = string.Format("Airdrag-{0}", data.Model);
return new XElement(tns + XMLNames.Component_AirDrag,
new XElement(tns + XMLNames.ComponentDataWrapper,
new XAttribute(XMLNames.Component_ID_Attr, id),
GetDefaultComponentElements(data.Model, "N.A."),
new XElement(tns + XMLNames.Vehicle_CrossWindCorrectionMode, GetCorrectionModeXML(data.CrossWindCorrectionMode)),
new XElement(tns + XMLNames.Vehicle_AirDragArea, data.AirDragArea.Value().ToXMLFormat(2))),
GetCrossWindCorrectionData(data)
);
}
private XElement ExtComponent(string component, XElement componentXML, string filename)
{
GenerateComponentDocument(componentXML).Save(Path.Combine(BasePath, filename));
......@@ -511,5 +555,16 @@ namespace TUGraz.VectoCore.OutputData.XML
new XAttribute(XMLNames.ExtResource_File_Attr, filename))
};
}
protected XElement[] GetDefaultComponentElements(string componentId, string makeAndModel)
{
return new[] {
new XElement(tns + XMLNames.Component_Manufacturer, Vendor),
new XElement(tns + XMLNames.Component_Model, makeAndModel),
new XElement(tns + XMLNames.Component_Creator, Creator),
new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)),
new XElement(tns + XMLNames.Component_AppVersion, "VectoCore"),
};
}
}
}
\ No newline at end of file
......@@ -686,5 +686,71 @@
</data>
<data name="Component_AppVersion" xml:space="preserve">
<value>AppVersion</value>
</data>
<data name="Component_CertificationMethod" xml:space="preserve">
<value>CertificationMethod</value>
</data>
<data name="Component_Gearbox_CertificationMethod" xml:space="preserve">
<value>MainCertificationMethod</value>
</data>
<data name="Engine_RatedSpeed" xml:space="preserve">
<value>RatedSpeed</value>
</data>
<data name="Engine_RatedPower" xml:space="preserve">
<value>RatedPower</value>
</data>
<data name="Engine_MaxTorque" xml:space="preserve">
<value>MaxEngineTorque</value>
</data>
<data name="Engine_FuelType" xml:space="preserve">
<value>FuelType</value>
</data>
<data name="Engine_CorrecionFactor_NCV" xml:space="preserve">
<value>CFNCV</value>
</data>
<data name="Engine_CorrectionFactor_RegPer" xml:space="preserve">
<value>CFRegPer</value>
</data>
<data name="Vehicle_PTO" xml:space="preserve">
<value>PTO</value>
</data>
<data name="Vehicle_PTO_ShaftsGearWheels" xml:space="preserve">
<value>PTOShaftsGearWheels</value>
</data>
<data name="Vehicle_PTO_OtherElements" xml:space="preserve">
<value>PTOOtherElements</value>
</data>
<data name="Vehicle_IdlingSpeed" xml:space="preserve">
<value>IdlingSpeed</value>
</data>
<data name="Vehicle_LegislativeClass" xml:space="preserve">
<value>LegislativeClass</value>
</data>
<data name="DI_Signature" xml:space="preserve">
<value>Signature</value>
</data>
<data name="DI_Signature_Reference" xml:space="preserve">
<value>Reference</value>
</data>
<data name="DI_Signature_Reference_URI_Attr" xml:space="preserve">
<value>URI</value>
</data>
<data name="DI_Signature_Reference_Transforms" xml:space="preserve">
<value>Transforms</value>
</data>
<data name="DI_Signature_Reference_Transforms_Transform" xml:space="preserve">
<value>Transform</value>
</data>
<data name="DI_Signature_Algorithm_Attr" xml:space="preserve">
<value>Algorithm</value>
</data>
<data name="DI_Signature_Reference_DigestMethod" xml:space="preserve">
<value>DigestMethod</value>
</data>
<data name="DI_Signature_Reference_DigestValue" xml:space="preserve">
<value>DigestValue</value>
</data>
<data name="Component_ManufacturerAddress" xml:space="preserve">
<value>ManufacturerAddress</value>
</data>
</root>
\ No newline at end of file
......@@ -579,47 +579,51 @@
</xs:complexType>
<xs:complexType name="TorqueConverterComponentEngineeringType"/>
<xs:complexType name="TorqueConverterEngineeringDataType">
<xs:sequence>
<xs:element name="ReferenceRPM" type="tns:TorqueConverterReferenceRPMType">
<xs:annotation>
<xs:documentation>P092 - [1/min]</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Characteristics">
<xs:complexType>
<xs:choice>
<xs:element name="Entry" type="vdecdef:TorqueConverterCharacteristicsEntryType" minOccurs="2" maxOccurs="unbounded"/>
<xs:element name="Resource" type="tns:ExtResourceEngineeringType">
<xs:annotation>
<xs:documentation>P091</xs:documentation>
</xs:annotation>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="Inertia" type="tns:TorqueConverterInertiaType">
<xs:annotation>
<xs:documentation>P127 - [kgm²]</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ShiftPolygon" minOccurs="0">
<xs:complexType>
<xs:choice>
<xs:element name="Entry" type="tns:ShiftPolygonEntryType" minOccurs="2" maxOccurs="unbounded"/>
<xs:element name="Resource" type="tns:ExtResourceEngineeringType">
<xs:annotation>
<xs:documentation>P091</xs:documentation>
</xs:annotation>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="MaxInputSpeed" type="tns:TorqueConverterMaxInputSpeedType" minOccurs="0">
<xs:annotation>
<xs:documentation>P187 - [rpm]</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:complexContent>
<xs:extension base="tns:EngineeringPowertrainComponentType">
<xs:sequence>
<xs:element name="ReferenceRPM" type="tns:TorqueConverterReferenceRPMType">
<xs:annotation>
<xs:documentation>P092 - [1/min]</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Characteristics">
<xs:complexType>
<xs:choice>
<xs:element name="Entry" type="vdecdef:TorqueConverterCharacteristicsEntryType" minOccurs="2" maxOccurs="unbounded"/>
<xs:element name="Resource" type="tns:ExtResourceEngineeringType">
<xs:annotation>
<xs:documentation>P091</xs:documentation>
</xs:annotation>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="Inertia" type="tns:TorqueConverterInertiaType">
<xs:annotation>
<xs:documentation>P127 - [kgm²]</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ShiftPolygon" minOccurs="0">
<xs:complexType>
<xs:choice>
<xs:element name="Entry" type="tns:ShiftPolygonEntryType" minOccurs="2" maxOccurs="unbounded"/>
<xs:element name="Resource" type="tns:ExtResourceEngineeringType">
<xs:annotation>
<xs:documentation>P091</xs:documentation>
</xs:annotation>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="MaxInputSpeed" type="tns:TorqueConverterMaxInputSpeedType" minOccurs="0">
<xs:annotation>
<xs:documentation>P187 - [rpm]</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="VectoComponentEngineeringType">
<xs:choice>
......
......@@ -43,7 +43,7 @@ namespace TUGraz.VectoCore.Tests.XML
var xml = new XMLEngineeringInputDataProvider(outFile, true);
Assert.IsNotNull(xml);
Assert.AreEqual("ENG-175kW 6.8l Engine", xml.JobInputData().JobName);
Assert.AreEqual("175kW 6.8l Engine", xml.JobInputData().JobName);
}
[TestMethod]
......@@ -59,7 +59,7 @@ namespace TUGraz.VectoCore.Tests.XML
var xml = new XMLEngineeringInputDataProvider(outFile, true);
Assert.IsNotNull(xml);
Assert.AreEqual("VEH-N/A", xml.JobInputData().JobName);
Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName);
}
[TestMethod]
......@@ -75,7 +75,7 @@ namespace TUGraz.VectoCore.Tests.XML
var xml = new XMLEngineeringInputDataProvider(outFile, true);
Assert.IsNotNull(xml);
Assert.AreEqual("VEH-N/A", xml.JobInputData().JobName);
Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName);
}
[TestMethod]
......@@ -93,7 +93,7 @@ namespace TUGraz.VectoCore.Tests.XML
var xml = new XMLEngineeringInputDataProvider(Path.Combine(outDir, outFile), true);
Assert.IsNotNull(xml);
Assert.AreEqual("VEH-N/A", xml.JobInputData().JobName);
Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName);
}
[TestMethod]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment