diff --git a/Build/Packaging.targets b/Build/Packaging.targets index 9741e3664a320f3ebf9385ae8739ebb78437a08e..b27eb7e453b4e15a60cf2b885f3077a1d812ef2b 100644 --- a/Build/Packaging.targets +++ b/Build/Packaging.targets @@ -66,10 +66,12 @@ <VectoXMLExamples Include="$(SolutionDir)VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\*-sample.xml"/> <UserManual Include="$(SolutionDir)Documentation\User Manual\help.html"/> <UserManual Include="$(SolutionDir)Documentation\VectoHashingTool\HashingToolHelp.html"/> - <UserManual Include="$(SolutionDir)Documentation\XML\*.png"/> - <UserManual Include="$(SolutionDir)Documentation\XML\VectoParameterDocumentation.html"/> <UserManual Include="$(SolutionDir)Documentation\User Manual Source\JIRA Quick Start Guide.pdf"/> <UserManual Include="$(SolutionDir)Documentation\Cdv_Generator_VECTO3.2.xlsx"/> + <XMLParamDoc Include="$(SolutionDir)Documentation\XML\*.png"/> + <XMLParamDoc Include="$(SolutionDir)Documentation\XML\VectoParameterDocumentation.html"/> + <XMLParamDoc Include="$(SolutionDir)Documentation\XML\data.js"/> + <XMLParamDocStyle Include="$(SolutionDir)Documentation\XML\CSS\styles.css"/> <ReleaseNotes Include="$(SolutionDir)Documentation\User Manual Source\Release Notes Vecto3.x.pdf"/> <HashingTool Include="$(SolutionDir)HashingTool\bin\Release\HashingTool.exe"/> @@ -88,6 +90,8 @@ <Copy SourceFiles="@(VectoXMLExamples)" DestinationFolder="$(OutputPath)\XML\Examples" /> <Copy SourceFiles="@(VectoXSD)" DestinationFolder="$(OutputPath)\XML\XSD" /> <Copy SourceFiles="@(UserManual)" DestinationFolder="$(OutputPath)\User Manual" /> + <Copy SourceFiles="@(XMLParamDoc)" DestinationFolder="$(OutputPath)\User Manual" /> + <Copy SourceFiles="@(XMLParamDocStyle)" DestinationFolder="$(OutputPath)\User Manual\CSS" /> <Copy SourceFiles="@(ReleaseNotes)" DestinationFiles="$(OutputPath)\User Manual\Release Notes.pdf" /> <Copy SourceFiles="@(VectoConfigurationSample)" DestinationFolder="$(OutputPath)"/> <Copy SourceFiles="$(SolutionDir)\Documentation\User Manual Source\README for Mission Profiles Directory.txt" DestinationFiles="$(OutputPath)\Mission Profiles\!! README !!.TXT"/> diff --git a/Documentation/User Manual/3-simulation-models/Engine_Speed_Torque_limitations.md b/Documentation/User Manual/3-simulation-models/Engine_Speed_Torque_limitations.md index 64d5a4cda29e77365b0b2b5ab23c6d377dc79dc5..4048036bb13dd3575ce51cd19fc13cd8567b6183 100644 --- a/Documentation/User Manual/3-simulation-models/Engine_Speed_Torque_limitations.md +++ b/Documentation/User Manual/3-simulation-models/Engine_Speed_Torque_limitations.md @@ -29,8 +29,8 @@ In Declaration Mode, the following rules restrict the limitations of engine torq ### Vehicle defined Torque Limitations * For higher 50% of gears (i.e., gears 7 to 12 for a 12-gear transmission): - - Torque limit > 95% of engine max torque: max. torque limitation *not* applicable (VECTO extrapolates loss-maps) - - Torque limit <= 90% of engine max torque: max. torque limitation applicable + - Torque limit > 95% of engine max torque: max. torque limitation *not* applicable + - Torque limit <= 95% of engine max torque: max. torque limitation applicable * For lower 50% of gears (i.e., gears 1 to 6 for a 12-gear transmission): - Torque limit is *not* applicable diff --git a/Documentation/User Manual/help.html b/Documentation/User Manual/help.html index 70d7c610193be62b0e998e04d8cfc38dc1094219..339817ba47dc30d090d033096cc564cb6678c5b3 100644 --- a/Documentation/User Manual/help.html +++ b/Documentation/User Manual/help.html @@ -3475,8 +3475,8 @@ transmission): transmission): <ul> <li>Torque limit > 95% of engine max torque: max. torque limitation -<em>not</em> applicable (VECTO extrapolates loss-maps)</li> -<li>Torque limit <= 90% of engine max torque: max. torque limitation +<em>not</em> applicable</li> +<li>Torque limit <= 95% of engine max torque: max. torque limitation applicable</li> </ul></li> <li>For lower 50% of gears (i.e., gears 1 to 6 for a 12-gear diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index 254fea169a06f628743c6b5c14f663cfc36a8b5e..5af6047346975aa21182261841c59c249ca1eef1 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -802,6 +802,12 @@ Public Class Vehicle Public Property EcoRollReleaseLockupClutch As Boolean + Public ReadOnly Property NumSteeredAxles As Integer? Implements IAxlesDeclarationInputData.NumSteeredAxles + get + return nothing + End Get + End Property + Public ReadOnly Property IAxlesEngineeringInputData_DataSource As DataSource Implements IAxlesEngineeringInputData.DataSource get Return New DataSource() With {.SourceType = DataSourceType.JSONFile} diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index 2421cbe2065bc3ec2b34889b725abf4a11e94bc9..af7bc5200ecf3444f5c062e8e4dcfc5f312768a0 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -201,6 +201,8 @@ namespace TUGraz.VectoCommon.InputData /// cf. VECTO Input Parameters.xlsx /// </summary> IList<IAxleDeclarationInputData> AxlesDeclaration { get; } + + int? NumSteeredAxles { get; } } public interface IAdvancedDriverAssistantSystemDeclarationInputData @@ -370,6 +372,8 @@ namespace TUGraz.VectoCommon.InputData ITyreDeclarationInputData Tyre { get; } + bool Steered { get; } + DataSource DataSource { get; } } diff --git a/VectoCommon/VectoHashing/Impl/XmlHashProvider.cs b/VectoCommon/VectoHashing/Impl/XmlHashProvider.cs index bdebe2e948617b5722226c020b22d171193a8972..9d9f8c27c5bd009fcda86dc5484969b7dcb0b011 100644 --- a/VectoCommon/VectoHashing/Impl/XmlHashProvider.cs +++ b/VectoCommon/VectoHashing/Impl/XmlHashProvider.cs @@ -96,6 +96,8 @@ namespace TUGraz.VectoHashing.Impl throw new Exception(string.Format("CanonicalizationMethod(s) {0} not supported!", string.Join(", ", unsupported))); } + // load any HMAC algorithm so that the key is also available. the HVAC algorithm used is the one set in the Reference object below + var hmac = HMAC.Create("HMACSHA256"); var signedXml = new SignedXml(doc); var reference = new Reference("#" + elementId) { DigestMethod = digestMethod @@ -105,7 +107,7 @@ namespace TUGraz.VectoHashing.Impl } signedXml.AddReference(reference); - signedXml.ComputeSignature(HMAC.Create()); + signedXml.ComputeSignature(hmac); var xmlDigitalSignature = reference.GetXml(); var sigdoc = new XmlDocument(); diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index be3ecca2512156b4eb389e0ba3900657f196dfc7..43f1205544d04391c4b77299c52c8b022e8f5d9f 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -388,6 +388,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public virtual Watt MaxNetPower2 { get { return null; } } + public int? NumSteeredAxles => null; + IVehicleComponentsDeclaration IVehicleDeclarationInputData.Components { get { return this; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs index a07ffe3a345b5d9cb92ea9cc8cbdb5c50cf346f8..2f11975df472a4b9e88526b429c898e6c0209c5e 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs @@ -52,6 +52,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider protected ITyreDeclarationInputData _tyre; protected bool? _twinTyre; protected AxleType? _axleType; + private bool? _steered; public XMLDeclarationAxleDataProviderV10(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) : base(componentNode, sourceFile) @@ -80,6 +81,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return _tyre ?? (_tyre = Reader.Tyre); } } + public bool Steered => + _steered ?? (_steered = XmlConvert.ToBoolean(GetString(XMLNames.AxleWheels_Axles_Axle_Steered))).Value; + #endregion diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs index a0edec339ca65c2d438ca08db62027bdb68e2698..0473b13816982df3d2d762bf3cf5ec9c01d56cbf 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs @@ -30,6 +30,7 @@ */ using System.Collections.Generic; +using System.Linq; using System.Xml; using System.Xml.Linq; using TUGraz.VectoCommon.Exceptions; @@ -48,7 +49,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public const string XSD_TYPE = "AxleWheelsDataDeclarationType"; - public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + public static readonly string QUALIFIED_XSD_TYPE = + XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); protected IAxleDeclarationInputData[] _axles; @@ -67,7 +69,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public virtual IList<IAxleDeclarationInputData> AxlesDeclaration { - get { + get + { if (_axles != null) { return _axles; } @@ -83,6 +86,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider if (axleNumber < 1 || axleNumber > _axles.Length) { throw new VectoException("Axle #{0} exceeds axle count", axleNumber); } + if (_axles[axleNumber - 1] != null) { throw new VectoException("Axle #{0} defined multiple times!", axleNumber); } @@ -94,6 +98,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider } } + public int? NumSteeredAxles + { + get { return AxlesDeclaration.Count(x => x.Steered); } + } + #endregion #region Implementation of IXMLResource diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs index d1385740a198f56240eaa3141b990efc4346c03e..4e7e1eaa94c666542c9a47205918f5ade4b5b41e 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs @@ -422,7 +422,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter public IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData, - MissionType mission, VehicleClass hvdClass) + MissionType mission, VehicleClass hvdClass, int? numSteeredAxles) { if (!auxInputData.SavedInDeclarationMode) { WarnDeclarationMode("AuxiliariesData"); @@ -453,6 +453,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter aux.ID = Constants.Auxiliaries.IDs.Fan; break; case AuxiliaryType.SteeringPump: + if (numSteeredAxles.HasValue && auxData.Technology.Count != numSteeredAxles.Value) { + throw new VectoException($"Number of steering pump technologies does not match number of steered axles ({numSteeredAxles.Value}, {auxData.Technology.Count})"); + } aux.PowerDemand = DeclarationData.SteeringPump.Lookup(mission, hvdClass, auxData.Technology); aux.ID = Constants.Auxiliaries.IDs.SteeringPump; break; diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs index c24aefdf5bd7ae4ff92d44038e8a14a375f9901d..9a9222af851eee7dcdd62010f563444368c96162 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs @@ -253,7 +253,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl AxleGearData = _axlegearData, AngledriveData = _angledriveData, Aux = _dao.CreateAuxiliaryData(vehicle.Components.AuxiliaryInputData, mission.MissionType, - _segment.VehicleClass), + _segment.VehicleClass, vehicle.Components.AxleWheels.NumSteeredAxles), Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), Retarder = _retarderData, DriverData = _driverdata, diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs index 644710f86c35b802aeb2636a926c2c273c3fb5b5..95b9a88f4d4d96b732ad7d83412b0d0a20185e84 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs @@ -100,7 +100,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl Dao.CreateAuxiliaryData( JobInputData.Vehicle.Components.AuxiliaryInputData, Segment.Missions.First().MissionType, - Segment.VehicleClass), + Segment.VehicleClass, + JobInputData.Vehicle.Components.AxleWheels.NumSteeredAxles), }; powertrainConfig.VehicleData.VehicleClass = Segment.VehicleClass; Report.InputDataHash = JobInputData.VectoJobHash; @@ -181,7 +182,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl runData.Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()); runData.DriverData = Driverdata; runData.Aux = Dao.CreateAuxiliaryData( - JobInputData.Vehicle.Components.AuxiliaryInputData, mission.MissionType, Segment.VehicleClass); + JobInputData.Vehicle.Components.AuxiliaryInputData, mission.MissionType, Segment.VehicleClass, + JobInputData.Vehicle.Components.AxleWheels.NumSteeredAxles); runData.ExecutionMode = ExecutionMode.Declaration; runData.SimulationType = SimulationType.DistanceCycle; runData.Mission = mission; @@ -258,22 +260,23 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl protected virtual List<VectoRunData.AuxData> CreateVTPAuxData(IVehicleDeclarationInputData vehicle) { + var numSteered = vehicle.Components.AxleWheels.NumSteeredAxles; var auxRD = Dao.CreateAuxiliaryData( - vehicle.Components.AuxiliaryInputData, MissionType.RegionalDelivery, Segment.VehicleClass) + vehicle.Components.AuxiliaryInputData, MissionType.RegionalDelivery, Segment.VehicleClass, numSteered) .ToList(); foreach (var entry in auxRD) { entry.MissionType = MissionType.RegionalDelivery; } var auxLH = Dao.CreateAuxiliaryData( - vehicle.Components.AuxiliaryInputData, MissionType.LongHaul, Segment.VehicleClass) + vehicle.Components.AuxiliaryInputData, MissionType.LongHaul, Segment.VehicleClass, numSteered) .ToList(); foreach (var entry in auxLH) { entry.MissionType = MissionType.LongHaul; } var auxUD = Dao.CreateAuxiliaryData( - vehicle.Components.AuxiliaryInputData, MissionType.UrbanDelivery, Segment.VehicleClass) + vehicle.Components.AuxiliaryInputData, MissionType.UrbanDelivery, Segment.VehicleClass, numSteered) .ToList(); foreach (var entry in auxUD) { entry.MissionType = MissionType.UrbanDelivery; diff --git a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs index e1186ba9f1a2045de8e6988fd1cc6cf95e2448cf..59873f7b9ac20a6cc7920b0871b57d1482bbf1d1 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs @@ -30,6 +30,7 @@ */ using System; +using System.Collections.Concurrent; using System.Reflection; using System.Text.RegularExpressions; using TUGraz.VectoCommon.Utils; @@ -402,6 +403,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Data public static class ModalResultFieldExtensionMethods { + private static ConcurrentDictionary<ModalResultField, ModalResultFieldAttribute> _attributeDictionary = + new ConcurrentDictionary<ModalResultField, ModalResultFieldAttribute>(); + public static string GetName(this ModalResultField field) { return GetAttribute(field).Name ?? field.ToString(); @@ -425,7 +429,14 @@ namespace TUGraz.VectoCore.Models.Simulation.Data public static ModalResultFieldAttribute GetAttribute(this ModalResultField field) { - return (ModalResultFieldAttribute)Attribute.GetCustomAttribute(ForValue(field), typeof(ModalResultFieldAttribute)); + var attributeCached = _attributeDictionary.TryGetValue(field, out var attribute); + if (attributeCached) { + return attribute; + } else { + attribute = (ModalResultFieldAttribute)Attribute.GetCustomAttribute(ForValue(field), typeof(ModalResultFieldAttribute)); + _attributeDictionary.TryAdd(field, attribute); + } + return attribute; } private static MemberInfo ForValue(ModalResultField field) diff --git a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.3.xsd b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.3.xsd index 45860b129954e0e78ad73646c90fdae172aa1c3f..78764b8033a7723f1cbb5e99b45d87d4c52b49bf 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.3.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.3.xsd @@ -5,10 +5,11 @@ <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" schemaLocation="VectoDeclarationDefinitions.2.0.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" schemaLocation="VectoDeclarationDefinitions.2.1.xsd"/> -<!-- + <!-- Changelog: 03.02.2022: First official version uploaded to CITnet 04.04.2022: Changes in 'TyreDimensionType': remove space between tyre design code and rim diameter (205/70 R15, 205/80 R15) + 01.06.2022: Change type of WHTC Correction factors, CFRegPer, BFColdHot: constraint > 0.0 --> <xs:complexType name="AbstractADCDataDeclarationType" abstract="true"> <xs:complexContent> @@ -928,27 +929,27 @@ Changelog: </xs:complexType> <xs:complexType name="EngineFuelType"> <xs:sequence> - <xs:element name="WHTCUrban" type="v1.0:EngineWHTCType"> + <xs:element name="WHTCUrban" type="v2.3:EngineWHTCType"> <xs:annotation> <xs:documentation>P109 - [-]</xs:documentation> </xs:annotation> </xs:element> - <xs:element name="WHTCRural" type="v1.0:EngineWHTCType"> + <xs:element name="WHTCRural" type="v2.3:EngineWHTCType"> <xs:annotation> <xs:documentation>P110 - [-]</xs:documentation> </xs:annotation> </xs:element> - <xs:element name="WHTCMotorway" type="v1.0:EngineWHTCType"> + <xs:element name="WHTCMotorway" type="v2.3:EngineWHTCType"> <xs:annotation> <xs:documentation>P111 - [-]</xs:documentation> </xs:annotation> </xs:element> - <xs:element name="BFColdHot" type="v1.0:EngineColdHotBalancingFactorType"> + <xs:element name="BFColdHot" type="v2.3:EngineColdHotBalancingFactorType"> <xs:annotation> <xs:documentation>P159 - [-]</xs:documentation> </xs:annotation> </xs:element> - <xs:element name="CFRegPer" type="v1.0:EngineCFRegPerType"> + <xs:element name="CFRegPer" type="v2.3:EngineCFRegPerType"> <xs:annotation> <xs:documentation>P192 [-]</xs:documentation> </xs:annotation> @@ -1852,6 +1853,49 @@ Changelog: <xs:enumeration value="RM"/> </xs:restriction> </xs:simpleType> + <xs:simpleType name="EngineWHTCType"> + <xs:annotation> + <xs:appinfo> + <vectoParam:description> + <vectoParam:parameterId component="Engine">109</vectoParam:parameterId> + <vectoParam:parameterId component="Engine">110</vectoParam:parameterId> + <vectoParam:parameterId component="Engine">111</vectoParam:parameterId> + <vectoParam:unit>-</vectoParam:unit> + </vectoParam:description> + </xs:appinfo> + <xs:documentation>P109 - [-]</xs:documentation> + </xs:annotation> + <xs:restriction base="v1.0:Double4"> + <xs:minInclusive value="0.0000"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="EngineCFRegPerType"> + <xs:annotation> + <xs:appinfo> + <vectoParam:description> + <vectoParam:parameterId component="Engine">192</vectoParam:parameterId> + <vectoParam:unit>-</vectoParam:unit> + </vectoParam:description> + </xs:appinfo> + </xs:annotation> + <xs:restriction base="v1.0:Double4"> + <xs:minInclusive value="0.0000"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="EngineColdHotBalancingFactorType"> + <xs:annotation> + <xs:appinfo> + <vectoParam:description> + <vectoParam:parameterId component="Engine">159</vectoParam:parameterId> + <vectoParam:unit>-</vectoParam:unit> + </vectoParam:description> + </xs:appinfo> + <xs:documentation>P159 - [-]</xs:documentation> + </xs:annotation> + <xs:restriction base="v1.0:Double4"> + <xs:minInclusive value="0.0000"/> + </xs:restriction> + </xs:simpleType> <xs:simpleType name="GearboxTransmissionTypeType"> <xs:annotation> <xs:appinfo> diff --git a/VectoCore/VectoCoreTest/Models/Declaration/InputDataSanityChecks.cs b/VectoCore/VectoCoreTest/Models/Declaration/InputDataSanityChecks.cs new file mode 100644 index 0000000000000000000000000000000000000000..1f1e149a2c55c99feebefe22226c2c1bca9649b8 --- /dev/null +++ b/VectoCore/VectoCoreTest/Models/Declaration/InputDataSanityChecks.cs @@ -0,0 +1,108 @@ +using System.IO; +using System.Linq; +using System.Xml; +using Ninject; +using NUnit.Framework; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.Tests.Utils; + +namespace TUGraz.VectoCore.Tests.Models.Declaration +{ + [TestFixture] + public class InputDataSanityChecks + { + public const string HeavyLorryConventional = @"TestData\Integration\DeclarationMode\SteeringPumpCount\Group5_EngineStopStart.xml"; + + private IXMLInputDataReader _xmlInputReader; + + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + var kernel = new StandardKernel(new VectoNinjectModule()); + _xmlInputReader = kernel.Get<IXMLInputDataReader>(); + } + + [ + TestCase(HeavyLorryConventional, 1, "Fixed displacement"), + TestCase(HeavyLorryConventional, 2, "Fixed displacement", "Dual displacement"), + TestCase(HeavyLorryConventional, 2, "Fixed displacement", "Electric"), + TestCase(HeavyLorryConventional, 1, "Fixed displacement"), + ] + public void TestCorrectNumberSteeredAxles(string jobFile, int numStreeredAxles, params string[] steeringPumpTechnologies) + { + var modified = GetModifiedXML(jobFile, numStreeredAxles, steeringPumpTechnologies); + + var writer = new FileOutputWriter("SanityCheckTest"); + + var factory = new SimulatorFactory(ExecutionMode.Declaration, modified, writer); + factory.WriteModalResults = true; + factory.Validate = false; + + var runs = factory.DataReader.NextRun().ToList(); + + Assert.IsTrue(runs.Count > 0); + } + + [ + TestCase(HeavyLorryConventional, 2, "Fixed displacement"), + TestCase(HeavyLorryConventional, 1, "Fixed displacement", "Dual displacement"), + TestCase(HeavyLorryConventional, 1, "Electric", "Electric"), + TestCase(HeavyLorryConventional, 1, "Fixed displacement", "Dual displacement", "Electric"), + ] + public void TestWrongNumberSteeredAxles(string jobFile, int numStreeredAxles, params string[] steeringPumpTechnologies) + { + var modified = GetModifiedXML(jobFile, numStreeredAxles, steeringPumpTechnologies); + + var writer = new FileOutputWriter("SanityCheckTest"); + + var factory = new SimulatorFactory(ExecutionMode.Declaration, modified, writer); + factory.WriteModalResults = true; + factory.Validate = false; + + AssertHelper.Exception<VectoException>(() => { + var runs = factory.DataReader.NextRun().ToList(); + }, messageContains: $"Number of steering pump technologies does not match number of steered axles ({numStreeredAxles}, {steeringPumpTechnologies.Length})"); + + } + + private IInputDataProvider GetModifiedXML(string jobFile, int numStreeredAxles, string[] steeringPumpTechnologies) + { + var inputXml = new XmlDocument(); + inputXml.Load(jobFile); + + var axleNodesSteered = inputXml.SelectNodes("//*[local-name()='Axle']/*[local-name()='Steered']"); + + var cnt = 0; + foreach (XmlNode steered in axleNodesSteered) { + steered.InnerText = cnt++ < numStreeredAxles ? "true" : "false"; + } + + var steeringPumpNode = inputXml.SelectSingleNode("//*[local-name()='SteeringPump']"); + steeringPumpNode.RemoveAll(); + cnt = 1; + foreach (var steeringPumpTechnology in steeringPumpTechnologies) { + var tech = inputXml.CreateElement("Technology", "urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0"); + var val = inputXml.CreateTextNode(steeringPumpTechnology); + //var attr = inputXml.CreateAttribute("axleNumber"); + //var attrVal = inputXml.CreateTextNode(cnt.ToString()); + //attr.AppendChild(attrVal); + //tech.Attributes.Append(attr); + tech.AppendChild(val); + + steeringPumpNode.AppendChild(tech); + cnt++; + } + + var modified = XmlReader.Create(new StringReader(inputXml.OuterXml)); + + return _xmlInputReader.CreateDeclaration(modified); + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/SteeringPumpCount/Group5_EngineStopStart.xml b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/SteeringPumpCount/Group5_EngineStopStart.xml new file mode 100644 index 0000000000000000000000000000000000000000..917583a3f8bf6f3243b71964393274c322296efe --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/SteeringPumpCount/Group5_EngineStopStart.xml @@ -0,0 +1,576 @@ +<?xml version="1.0" encoding="utf-8"?> +<tns:VectoInputDeclaration schemaVersion="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0 https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/XSD/VectoInput.xsd"> + <Vehicle id="VEH-Class5"> + <Manufacturer>Generic Vendor</Manufacturer> + <ManufacturerAddress>N.A.</ManufacturerAddress> + <Model>N.A.</Model> + <VIN>N/A</VIN> + <Date>2017-07-06T15:06:08.3093609Z</Date> + <LegislativeClass>N3</LegislativeClass> + <VehicleCategory>Tractor</VehicleCategory> + <AxleConfiguration>4x2</AxleConfiguration> + <CurbMassChassis>8229</CurbMassChassis> + <GrossVehicleMass>18000</GrossVehicleMass> + <IdlingSpeed>600</IdlingSpeed> + <RetarderType>Transmission Output Retarder</RetarderType> + <RetarderRatio>1.000</RetarderRatio> + <AngledriveType>None</AngledriveType> + <PTO> + <PTOShaftsGearWheels>none</PTOShaftsGearWheels> + <PTOOtherElements>none</PTOOtherElements> + </PTO> + <ZeroEmissionVehicle>false</ZeroEmissionVehicle> + <VocationalVehicle>false</VocationalVehicle> + <SleeperCab>false</SleeperCab> + <ADAS> + <EngineStopStart>true</EngineStopStart> + <EcoRollWithoutEngineStop>false</EcoRollWithoutEngineStop> + <EcoRollWithEngineStop>false</EcoRollWithEngineStop> + <PredictiveCruiseControl>none</PredictiveCruiseControl> + </ADAS> + <Components> + <Engine> + <Data id="ENG-N.A."> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>N.A.</Model> + <CertificationNumber>ENG-N.A.</CertificationNumber> + <Date>2017-07-06T15:06:08.3103609Z</Date> + <AppVersion>VectoCore</AppVersion> + <Displacement>12740</Displacement> + <IdlingSpeed>600</IdlingSpeed> + <RatedSpeed>1736</RatedSpeed> + <RatedPower>325032</RatedPower> + <MaxEngineTorque>2134</MaxEngineTorque> + <WHTCUrban>1.0000</WHTCUrban> + <WHTCRural>1.0000</WHTCRural> + <WHTCMotorway>1.0000</WHTCMotorway> + <BFColdHot>1.0000</BFColdHot> + <CFRegPer>1.0000</CFRegPer> + <CFNCV>1.0000</CFNCV> + <FuelType>Diesel CI</FuelType> + <FuelConsumptionMap> + <Entry engineSpeed="600.00" torque="-139.00" fuelConsumption="0.00" /> + <Entry engineSpeed="600.00" torque="0.00" fuelConsumption="1355.00" /> + <Entry engineSpeed="600.00" torque="186.00" fuelConsumption="3118.00" /> + <Entry engineSpeed="600.00" torque="371.00" fuelConsumption="5105.00" /> + <Entry engineSpeed="600.00" torque="557.00" fuelConsumption="7522.00" /> + <Entry engineSpeed="600.00" torque="743.00" fuelConsumption="9298.00" /> + <Entry engineSpeed="600.00" torque="928.00" fuelConsumption="11208.00" /> + <Entry engineSpeed="600.00" torque="1114.00" fuelConsumption="13370.00" /> + <Entry engineSpeed="600.00" torque="1190.00" fuelConsumption="14252.00" /> + <Entry engineSpeed="800.00" torque="-144.00" fuelConsumption="0.00" /> + <Entry engineSpeed="800.00" torque="0.00" fuelConsumption="1745.00" /> + <Entry engineSpeed="800.00" torque="186.00" fuelConsumption="3979.00" /> + <Entry engineSpeed="800.00" torque="371.00" fuelConsumption="6824.00" /> + <Entry engineSpeed="800.00" torque="557.00" fuelConsumption="9340.00" /> + <Entry engineSpeed="800.00" torque="743.00" fuelConsumption="12150.00" /> + <Entry engineSpeed="800.00" torque="928.00" fuelConsumption="14870.00" /> + <Entry engineSpeed="800.00" torque="1114.00" fuelConsumption="17863.00" /> + <Entry engineSpeed="800.00" torque="1300.00" fuelConsumption="20822.00" /> + <Entry engineSpeed="800.00" torque="1486.00" fuelConsumption="23769.00" /> + <Entry engineSpeed="800.00" torque="1663.00" fuelConsumption="26838.00" /> + <Entry engineSpeed="1000.00" torque="-153.00" fuelConsumption="0.00" /> + <Entry engineSpeed="1000.00" torque="0.00" fuelConsumption="2660.00" /> + <Entry engineSpeed="1000.00" torque="186.00" fuelConsumption="5536.00" /> + <Entry engineSpeed="1000.00" torque="371.00" fuelConsumption="8540.00" /> + <Entry engineSpeed="1000.00" torque="557.00" fuelConsumption="11470.00" /> + <Entry engineSpeed="1000.00" torque="743.00" fuelConsumption="14823.00" /> + <Entry engineSpeed="1000.00" torque="928.00" fuelConsumption="18443.00" /> + <Entry engineSpeed="1000.00" torque="1114.00" fuelConsumption="21847.00" /> + <Entry engineSpeed="1000.00" torque="1300.00" fuelConsumption="25256.00" /> + <Entry engineSpeed="1000.00" torque="1486.00" fuelConsumption="28936.00" /> + <Entry engineSpeed="1000.00" torque="1671.00" fuelConsumption="32592.00" /> + <Entry engineSpeed="1000.00" torque="1857.00" fuelConsumption="36545.00" /> + <Entry engineSpeed="1000.00" torque="2043.00" fuelConsumption="40964.00" /> + <Entry engineSpeed="1000.00" torque="2135.00" fuelConsumption="43486.00" /> + <Entry engineSpeed="1200.00" torque="-166.00" fuelConsumption="0.00" /> + <Entry engineSpeed="1200.00" torque="0.00" fuelConsumption="3070.00" /> + <Entry engineSpeed="1200.00" torque="186.00" fuelConsumption="6404.00" /> + <Entry engineSpeed="1200.00" torque="371.00" fuelConsumption="9889.00" /> + <Entry engineSpeed="1200.00" torque="557.00" fuelConsumption="13598.00" /> + <Entry engineSpeed="1200.00" torque="743.00" fuelConsumption="17748.00" /> + <Entry engineSpeed="1200.00" torque="928.00" fuelConsumption="21984.00" /> + <Entry engineSpeed="1200.00" torque="1114.00" fuelConsumption="26164.00" /> + <Entry engineSpeed="1200.00" torque="1300.00" fuelConsumption="30111.00" /> + <Entry engineSpeed="1200.00" torque="1486.00" fuelConsumption="34354.00" /> + <Entry engineSpeed="1200.00" torque="1671.00" fuelConsumption="38709.00" /> + <Entry engineSpeed="1200.00" torque="1857.00" fuelConsumption="43559.00" /> + <Entry engineSpeed="1200.00" torque="2043.00" fuelConsumption="48079.00" /> + <Entry engineSpeed="1200.00" torque="2135.00" fuelConsumption="51003.00" /> + <Entry engineSpeed="1400.00" torque="-188.00" fuelConsumption="0.00" /> + <Entry engineSpeed="1400.00" torque="0.00" fuelConsumption="3998.00" /> + <Entry engineSpeed="1400.00" torque="186.00" fuelConsumption="7561.00" /> + <Entry engineSpeed="1400.00" torque="371.00" fuelConsumption="11813.00" /> + <Entry engineSpeed="1400.00" torque="557.00" fuelConsumption="16270.00" /> + <Entry engineSpeed="1400.00" torque="743.00" fuelConsumption="20694.00" /> + <Entry engineSpeed="1400.00" torque="928.00" fuelConsumption="25155.00" /> + <Entry engineSpeed="1400.00" torque="1114.00" fuelConsumption="30209.00" /> + <Entry engineSpeed="1400.00" torque="1300.00" fuelConsumption="35046.00" /> + <Entry engineSpeed="1400.00" torque="1486.00" fuelConsumption="40105.00" /> + <Entry engineSpeed="1400.00" torque="1671.00" fuelConsumption="45916.00" /> + <Entry engineSpeed="1400.00" torque="1857.00" fuelConsumption="51762.00" /> + <Entry engineSpeed="1400.00" torque="2043.00" fuelConsumption="56704.00" /> + <Entry engineSpeed="1400.00" torque="2135.00" fuelConsumption="59772.00" /> + <Entry engineSpeed="1600.00" torque="-218.00" fuelConsumption="0.00" /> + <Entry engineSpeed="1600.00" torque="0.00" fuelConsumption="4836.00" /> + <Entry engineSpeed="1600.00" torque="186.00" fuelConsumption="8977.00" /> + <Entry engineSpeed="1600.00" torque="371.00" fuelConsumption="13777.00" /> + <Entry engineSpeed="1600.00" torque="557.00" fuelConsumption="18687.00" /> + <Entry engineSpeed="1600.00" torque="743.00" fuelConsumption="24042.00" /> + <Entry engineSpeed="1600.00" torque="928.00" fuelConsumption="29369.00" /> + <Entry engineSpeed="1600.00" torque="1114.00" fuelConsumption="34584.00" /> + <Entry engineSpeed="1600.00" torque="1300.00" fuelConsumption="40342.00" /> + <Entry engineSpeed="1600.00" torque="1486.00" fuelConsumption="46194.00" /> + <Entry engineSpeed="1600.00" torque="1671.00" fuelConsumption="52942.00" /> + <Entry engineSpeed="1600.00" torque="1857.00" fuelConsumption="59343.00" /> + <Entry engineSpeed="1600.00" torque="1930.00" fuelConsumption="61762.00" /> + <Entry engineSpeed="1800.00" torque="-245.00" fuelConsumption="0.00" /> + <Entry engineSpeed="1800.00" torque="0.00" fuelConsumption="5951.00" /> + <Entry engineSpeed="1800.00" torque="186.00" fuelConsumption="10935.00" /> + <Entry engineSpeed="1800.00" torque="371.00" fuelConsumption="16081.00" /> + <Entry engineSpeed="1800.00" torque="557.00" fuelConsumption="21721.00" /> + <Entry engineSpeed="1800.00" torque="743.00" fuelConsumption="28319.00" /> + <Entry engineSpeed="1800.00" torque="928.00" fuelConsumption="33776.00" /> + <Entry engineSpeed="1800.00" torque="1114.00" fuelConsumption="39998.00" /> + <Entry engineSpeed="1800.00" torque="1300.00" fuelConsumption="46656.00" /> + <Entry engineSpeed="1800.00" torque="1486.00" fuelConsumption="53328.00" /> + <Entry engineSpeed="1800.00" torque="1671.00" fuelConsumption="60497.00" /> + <Entry engineSpeed="1800.00" torque="1724.00" fuelConsumption="62741.00" /> + <Entry engineSpeed="2000.00" torque="-279.00" fuelConsumption="0.00" /> + <Entry engineSpeed="2000.00" torque="0.00" fuelConsumption="8474.00" /> + <Entry engineSpeed="2000.00" torque="186.00" fuelConsumption="13762.00" /> + <Entry engineSpeed="2000.00" torque="371.00" fuelConsumption="19178.00" /> + <Entry engineSpeed="2000.00" torque="557.00" fuelConsumption="25139.00" /> + <Entry engineSpeed="2000.00" torque="743.00" fuelConsumption="31743.00" /> + <Entry engineSpeed="2000.00" torque="928.00" fuelConsumption="39773.00" /> + <Entry engineSpeed="2000.00" torque="1114.00" fuelConsumption="47369.00" /> + <Entry engineSpeed="2000.00" torque="1255.00" fuelConsumption="52568.00" /> + <Entry engineSpeed="2100.00" torque="-297.00" fuelConsumption="0.00" /> + <Entry engineSpeed="2100.00" torque="0.00" fuelConsumption="9721.00" /> + <Entry engineSpeed="2100.00" torque="186.00" fuelConsumption="15164.00" /> + <Entry engineSpeed="2100.00" torque="371.00" fuelConsumption="20794.00" /> + <Entry engineSpeed="2100.00" torque="557.00" fuelConsumption="26846.00" /> + <Entry engineSpeed="2100.00" torque="743.00" fuelConsumption="33162.00" /> + <Entry engineSpeed="2100.00" torque="928.00" fuelConsumption="42378.00" /> + <Entry engineSpeed="2100.00" torque="1021.00" fuelConsumption="47030.00" /> + <Entry engineSpeed="2200.00" torque="-315.00" fuelConsumption="0.00" /> + <Entry engineSpeed="2200.00" torque="0.00" fuelConsumption="12483.00" /> + </FuelConsumptionMap> + <FullLoadAndDragCurve> + <Entry engineSpeed="600.00" maxTorque="1188.00" dragTorque="-138.00" /> + <Entry engineSpeed="800.00" maxTorque="1661.00" dragTorque="-143.00" /> + <Entry engineSpeed="1000.00" maxTorque="2134.00" dragTorque="-152.00" /> + <Entry engineSpeed="1200.00" maxTorque="2134.00" dragTorque="-165.00" /> + <Entry engineSpeed="1400.00" maxTorque="2134.00" dragTorque="-187.00" /> + <Entry engineSpeed="1600.00" maxTorque="1928.00" dragTorque="-217.00" /> + <Entry engineSpeed="1800.00" maxTorque="1722.00" dragTorque="-244.00" /> + <Entry engineSpeed="2000.00" maxTorque="1253.00" dragTorque="-278.00" /> + <Entry engineSpeed="2100.00" maxTorque="1019.00" dragTorque="-296.00" /> + <Entry engineSpeed="2200.00" maxTorque="0.00" dragTorque="-314.00" /> + </FullLoadAndDragCurve> + </Data> + <Signature> + <Reference URI="#ENG-N.A." xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </Engine> + <Gearbox> + <Data id="GBX-N.A."> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>N.A.</Model> + <CertificationNumber>GBX-N.A.</CertificationNumber> + <Date>2017-07-06T15:06:08.3133609Z</Date> + <AppVersion>VectoCore</AppVersion> + <TransmissionType>AMT</TransmissionType> + <MainCertificationMethod>Standard values</MainCertificationMethod> + <Gears> + <Gear number="1"> + <Ratio>14.930</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="400.00" /> + </TorqueLossMap> + </Gear> + <Gear number="2"> + <Ratio>11.640</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="400.00" /> + </TorqueLossMap> + </Gear> + <Gear number="3"> + <Ratio>9.020</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="400.00" /> + </TorqueLossMap> + </Gear> + <Gear number="4"> + <Ratio>7.040</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="400.00" /> + </TorqueLossMap> + </Gear> + <Gear number="5"> + <Ratio>5.640</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="400.00" /> + </TorqueLossMap> + </Gear> + <Gear number="6"> + <Ratio>4.400</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="400.00" /> + </TorqueLossMap> + </Gear> + <Gear number="7"> + <Ratio>3.390</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="400.00" /> + </TorqueLossMap> + </Gear> + <Gear number="8"> + <Ratio>2.650</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="400.00" /> + </TorqueLossMap> + </Gear> + <Gear number="9"> + <Ratio>2.050</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="400.00" /> + </TorqueLossMap> + </Gear> + <Gear number="10"> + <Ratio>1.600</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="400.00" /> + </TorqueLossMap> + </Gear> + <Gear number="11"> + <Ratio>1.280</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="400.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="400.00" /> + </TorqueLossMap> + </Gear> + <Gear number="12"> + <Ratio>1.000</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="200.00" /> + <Entry inputSpeed="0.00" inputTorque="-250.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="200.00" /> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="200.00" /> + <Entry inputSpeed="5000.00" inputTorque="-845.00" torqueLoss="17.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="17.00" /> + <Entry inputSpeed="5000.00" inputTorque="845.00" torqueLoss="17.00" /> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="200.00" /> + </TorqueLossMap> + </Gear> + </Gears> + </Data> + <Signature> + <Reference URI="#GBX-N.A." xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </Gearbox> + <Retarder> + <Data id="RET-N.A."> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>N.A.</Model> + <CertificationNumber>N/A</CertificationNumber> + <Date>2017-07-06T15:06:08.3133609Z</Date> + <AppVersion>VectoCore</AppVersion> + <CertificationMethod>Standard values</CertificationMethod> + <RetarderLossMap> + <Entry retarderSpeed="0.00" torqueLoss="10.00" /> + <Entry retarderSpeed="100.00" torqueLoss="10.00" /> + <Entry retarderSpeed="200.00" torqueLoss="10.10" /> + <Entry retarderSpeed="300.00" torqueLoss="10.20" /> + <Entry retarderSpeed="400.00" torqueLoss="10.30" /> + <Entry retarderSpeed="500.00" torqueLoss="10.50" /> + <Entry retarderSpeed="600.00" torqueLoss="10.70" /> + <Entry retarderSpeed="700.00" torqueLoss="11.00" /> + <Entry retarderSpeed="800.00" torqueLoss="11.30" /> + <Entry retarderSpeed="900.00" torqueLoss="11.60" /> + <Entry retarderSpeed="1000.00" torqueLoss="12.00" /> + <Entry retarderSpeed="1100.00" torqueLoss="12.40" /> + <Entry retarderSpeed="1200.00" torqueLoss="12.90" /> + <Entry retarderSpeed="1300.00" torqueLoss="13.40" /> + <Entry retarderSpeed="1400.00" torqueLoss="13.90" /> + <Entry retarderSpeed="1500.00" torqueLoss="14.50" /> + <Entry retarderSpeed="1600.00" torqueLoss="15.10" /> + <Entry retarderSpeed="1700.00" torqueLoss="15.80" /> + <Entry retarderSpeed="1800.00" torqueLoss="16.50" /> + <Entry retarderSpeed="1900.00" torqueLoss="17.20" /> + <Entry retarderSpeed="2000.00" torqueLoss="18.00" /> + <Entry retarderSpeed="2100.00" torqueLoss="18.80" /> + <Entry retarderSpeed="2200.00" torqueLoss="19.70" /> + <Entry retarderSpeed="2300.00" torqueLoss="20.60" /> + <Entry retarderSpeed="2400.00" torqueLoss="21.50" /> + <Entry retarderSpeed="2500.00" torqueLoss="22.50" /> + <Entry retarderSpeed="2600.00" torqueLoss="23.50" /> + <Entry retarderSpeed="2700.00" torqueLoss="24.60" /> + <Entry retarderSpeed="2800.00" torqueLoss="25.70" /> + <Entry retarderSpeed="2900.00" torqueLoss="26.80" /> + <Entry retarderSpeed="3000.00" torqueLoss="28.00" /> + </RetarderLossMap> + </Data> + <Signature> + <Reference URI="#RET-N.A." xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </Retarder> + <Axlegear> + <Data id="AXLGEAR-2.640"> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>N.A.</Model> + <CertificationNumber>AXLGEAR-2.640</CertificationNumber> + <Date>2017-07-06T15:06:08.3153609Z</Date> + <AppVersion>VectoCore</AppVersion> + <LineType>Single portal axle</LineType> + <Ratio>2.640</Ratio> + <CertificationMethod>Standard values</CertificationMethod> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="0.00" inputTorque="-50.00" torqueLoss="2.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="0.00" /> + <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="2.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50.00" torqueLoss="2.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="0.00" /> + <Entry inputSpeed="5000.00" inputTorque="50.00" torqueLoss="2.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="2000.00" /> + </TorqueLossMap> + </Data> + <Signature> + <Reference URI="#AXLGEAR-2.640" xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </Axlegear> + <AxleWheels> + <Data> + <Axles> + <Axle axleNumber="1"> + <AxleType>VehicleNonDriven</AxleType> + <TwinTyres>false</TwinTyres> + <Steered>true</Steered> + <Tyre> + <Data id="TYRE-315_70R22.5"> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>315/70 R22.5</Model> + <CertificationNumber>TYRE-315/70 R22.5</CertificationNumber> + <Date>2017-07-06T15:06:08.3153609Z</Date> + <AppVersion>VectoCore</AppVersion> + <Dimension>315/70 R22.5</Dimension> + <RRCDeclared>0.0051</RRCDeclared> + <FzISO>33350</FzISO> + </Data> + <Signature> + <Reference URI="#TYRE-315_70R22.5" xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </Tyre> + </Axle> + <Axle axleNumber="2"> + <AxleType>VehicleDriven</AxleType> + <TwinTyres>true</TwinTyres> + <Steered>false</Steered> + <Tyre> + <Data id="TYRE-315_70R22.5"> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>315/70 R22.5</Model> + <CertificationNumber>TYRE-315/70 R22.5</CertificationNumber> + <Date>2017-07-06T15:06:08.3153609Z</Date> + <AppVersion>VectoCore</AppVersion> + <Dimension>315/70 R22.5</Dimension> + <RRCDeclared>0.0061</RRCDeclared> + <FzISO>33350</FzISO> + </Data> + <Signature> + <Reference URI="#TYRE-315_70R22.5" xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </Tyre> + </Axle> + </Axles> + </Data> + </AxleWheels> + <Auxiliaries> + <Data> + <Fan> + <Technology>Crankshaft mounted - Electronically controlled visco clutch</Technology> + </Fan> + <SteeringPump> + <Technology>Fixed displacement</Technology> + </SteeringPump> + <ElectricSystem> + <Technology>Standard technology</Technology> + </ElectricSystem> + <PneumaticSystem> + <Technology>Small</Technology> + </PneumaticSystem> + <HVAC> + <Technology>None</Technology> + </HVAC> + </Data> + </Auxiliaries> + <AirDrag> + <Data id="Airdrag-N.A."> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>N.A.</Model> + <CertificationNumber>N.A.</CertificationNumber> + <Date>2017-07-06T15:06:08.3163609Z</Date> + <AppVersion>VectoCore</AppVersion> + <CdxA_0>5.45</CdxA_0> + <TransferredCdxA>5.45</TransferredCdxA> + <DeclaredCdxA>5.45</DeclaredCdxA> + </Data> + <Signature> + <Reference URI="#Airdrag-N.A." xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </AirDrag> + </Components> + </Vehicle> +</tns:VectoInputDeclaration> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 68bc2d2fd9e219c7f4a04c3942a41baaa8484f57..a99b093025cbe5ff8d37fff40ef662468607f7b1 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -127,6 +127,7 @@ <Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class5.cs" /> <Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class2.cs" /> <Compile Include="Models\Declaration\DataAdapter\DeclarationDataAdapterTest_Class9.cs" /> + <Compile Include="Models\Declaration\InputDataSanityChecks.cs" /> <Compile Include="Models\Declaration\ShiftPolygonTest.cs" /> <Compile Include="Models\SimulationComponentData\TorqueConverterDataTest.cs" /> <Compile Include="Models\SimulationComponentData\ValidationTest.cs" /> @@ -3670,6 +3671,9 @@ <Content Include="TestData\Integration\DeclarationMode\ExemptedVehicle\vecto_vehicle-sample_exempted.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="TestData\Integration\DeclarationMode\SteeringPumpCount\Group5_EngineStopStart.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="TestData\Integration\ShiftStrategyV2\SampleVehicles\Rigid Truck_4x2_vehicle-class-1_EURO6_2018.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content>