diff --git a/VectoCore/FileIO/InputFileReader.cs b/VectoCore/FileIO/InputFileReader.cs index 6b96dae09095a17ea6a5f378bf8adce36a00ea44..6c30603206d5b129cd81c9ce816c46f73362ecef 100644 --- a/VectoCore/FileIO/InputFileReader.cs +++ b/VectoCore/FileIO/InputFileReader.cs @@ -24,10 +24,5 @@ namespace TUGraz.VectoCore.FileIO data = JsonConvert.DeserializeAnonymousType(jsonStr, data); return new VersionInfo { SavedInDeclarationMode = data.Body.SavedInDeclMode, Version = data.Header.FileVersion }; } - - protected T Deserialize<T>(string json) - { - return JsonConvert.DeserializeObject<T>(json); - } } } \ No newline at end of file diff --git a/VectoCore/FileIO/JsonDataHeader.cs b/VectoCore/FileIO/JsonDataHeader.cs index d7c249d76cfb533569612d802cacf7bfe0d9d80d..36b5e9cb5862febdf93475b0d8598bbd1b29636c 100644 --- a/VectoCore/FileIO/JsonDataHeader.cs +++ b/VectoCore/FileIO/JsonDataHeader.cs @@ -7,7 +7,7 @@ namespace TUGraz.VectoCore.FileIO [JsonProperty(Required = Required.Always)] public string AppVersion; [JsonProperty(Required = Required.Always)] public string CreatedBy; [JsonProperty(Required = Required.Always)] public string Date; - [JsonProperty(Required = Required.Always)] public double FileVersion; + [JsonProperty(Required = Required.Always)] public uint FileVersion; #region Equality members @@ -28,7 +28,7 @@ namespace TUGraz.VectoCore.FileIO if (obj.GetType() != GetType()) { return false; } - return Equals((JsonDataHeader) obj); + return Equals((JsonDataHeader)obj); } public override int GetHashCode() diff --git a/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs b/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs index 5c62e1c80689dcb97db6fba328273d654c5f017f..aae5ad81002e61f6e0997685c3c3643462bf8637 100644 --- a/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs +++ b/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs @@ -125,7 +125,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper TwinTyres = axleInput.TwinTyres, RollResistanceCoefficient = axleInput.RollResistanceCoefficient, TyreTestLoad = axleInput.TyreTestLoad.SI<Newton>(), - Inertia = DeclarationData.Wheels.Lookup(axleInput.WheelsStr).Inertia, + Inertia = DeclarationData.Wheels.Lookup(axleInput.WheelsStr.Replace(" ", "")).Inertia, }; retVal.AxleData.Add(axle); } @@ -149,7 +149,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper retVal.Inertia = DeclarationData.Engine.EngineInertia(retVal.Displacement); retVal.FullLoadCurve = EngineFullLoadCurve.ReadFromFile(Path.Combine(engine.BasePath, engine.Body.FullLoadCurve), true); - + retVal.FullLoadCurve.EngineData = retVal; return retVal; } @@ -190,7 +190,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper TorqueConverterActive = false }; } else { - var fullLoad = !String.IsNullOrEmpty(gearSettings.FullLoadCurve) && gearSettings.FullLoadCurve.Equals("<NOFILE>") + var fullLoad = !String.IsNullOrEmpty(gearSettings.FullLoadCurve) && !gearSettings.FullLoadCurve.Equals("<NOFILE>") ? GearFullLoadCurve.ReadFromFile(Path.Combine(gearbox.BasePath, gearSettings.FullLoadCurve)) : null; var shiftPolygon = DeclarationData.Gearbox.ComputeShiftPolygon(fullLoad, engine); diff --git a/VectoCore/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs b/VectoCore/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs index 002aed5ccfc7588ee7ee574552dc64704cfadb76..249da4494c50ebb6e75e599819b173e6c68d4769 100644 --- a/VectoCore/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs +++ b/VectoCore/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs @@ -131,7 +131,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper retVal.Inertia = engine.Body.Inertia.SI<KilogramSquareMeter>(); retVal.FullLoadCurve = EngineFullLoadCurve.ReadFromFile(Path.Combine(engine.BasePath, engine.Body.FullLoadCurve), false); - + retVal.FullLoadCurve.EngineData = retVal; return retVal; } diff --git a/VectoCore/FileIO/Reader/Impl/DeclarationModeSimulationDataReader.cs b/VectoCore/FileIO/Reader/Impl/DeclarationModeSimulationDataReader.cs index 99275bae8fc638993619f8739f42e6a9d095452d..15a2c2f5fc9767efbfffa91c196f0abac55c9de3 100644 --- a/VectoCore/FileIO/Reader/Impl/DeclarationModeSimulationDataReader.cs +++ b/VectoCore/FileIO/Reader/Impl/DeclarationModeSimulationDataReader.cs @@ -46,6 +46,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl IsEngineOnly = IsEngineOnly, JobFileName = Job.JobFile, }; + simulationRunData.VehicleData.VehicleClass = segment.VehicleClass; yield return simulationRunData; } } @@ -140,7 +141,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl ID = aux.ID, Type = aux.Type, Technology = aux.Technology, - TechList = aux.TechList.ToArray() + TechList = aux.TechList == null ? null : aux.TechList.ToArray() }).ToArray(); } diff --git a/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/Models/Declaration/DeclarationData.cs index 045ef0dc62f0240a7bbbeda2da4bd4a35937c9b7..2258c3ea52d38cbf51fb98983e7e0f0376556904 100644 --- a/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/Models/Declaration/DeclarationData.cs @@ -48,10 +48,10 @@ namespace TUGraz.VectoCore.Models.Declaration public static Meter DynamicTyreRadius(string wheels, string rims) { - var wheelsEntry = Wheels.Lookup(wheels); + var wheelsEntry = Wheels.Lookup(wheels.Replace(" ", "")); var rimsEntry = Rims.Lookup(rims); - var correction = wheelsEntry.SizeClass != "a" ? rimsEntry.F_a : rimsEntry.F_b; + var correction = wheelsEntry.SizeClass != "a" ? rimsEntry.F_b : rimsEntry.F_a; return wheelsEntry.DynamicTyreRadius * correction / (2 * Math.PI); } diff --git a/VectoCore/Models/Declaration/Wheels.cs b/VectoCore/Models/Declaration/Wheels.cs index 61c5d3c5877017f2a2a6576e18f4e50a96fd1565..e2678773e5b8c1f3bef3d560d330966f91af5cae 100644 --- a/VectoCore/Models/Declaration/Wheels.cs +++ b/VectoCore/Models/Declaration/Wheels.cs @@ -17,7 +17,7 @@ namespace TUGraz.VectoCore.Models.Declaration { Data = (from DataRow row in table.Rows select new WheelsEntry { - WheelType = row.Field<string>(0), + WheelType = row.Field<string>(0).Replace(" ", ""), Inertia = row.ParseDouble(1).SI<KilogramSquareMeter>(), DynamicTyreRadius = row.ParseDouble(2).SI().Milli.Meter.Cast<Meter>(), SizeClass = row.Field<string>(3) diff --git a/VectoCore/Models/SimulationComponent/Data/VehicleData.cs b/VectoCore/Models/SimulationComponent/Data/VehicleData.cs index c50a3175cfea4b908ecbdf6c249dee19d75604e2..cdd890b2b325302352f7899822a663b43b094987 100644 --- a/VectoCore/Models/SimulationComponent/Data/VehicleData.cs +++ b/VectoCore/Models/SimulationComponent/Data/VehicleData.cs @@ -15,6 +15,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data public VehicleCategory VehicleCategory { get; internal set; } + public string VehicleClass { get; internal set; } + public CrossWindCorrectionMode CrossWindCorrectionMode { get; internal set; } public RetarderData Retarder { get; internal set; } diff --git a/VectoCoreTest/FileIO/JsonTest.cs b/VectoCoreTest/FileIO/JsonTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..7c40c6b9fb84746284491394cbb9e7829443877e --- /dev/null +++ b/VectoCoreTest/FileIO/JsonTest.cs @@ -0,0 +1,30 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using TUGraz.VectoCore.FileIO; + +namespace TUGraz.VectoCore.Tests.FileIO +{ + [TestClass] + public class JsonTest + { + [TestMethod] + public void TestJsonHeaderEquality() + { + var h1 = new JsonDataHeader { + AppVersion = "MyVecto3", + CreatedBy = "UnitTest", + Date = "1.1.1970", + FileVersion = 3 + }; + var h2 = new JsonDataHeader { + AppVersion = "MyVecto3", + CreatedBy = "UnitTest", + Date = "1.1.1970", + FileVersion = 3 + }; + Assert.AreEqual(h1, h1); + Assert.AreEqual(h1, h2); + Assert.AreNotEqual(h1, null); + Assert.AreNotEqual(h1, "hello world"); + } + } +} \ No newline at end of file diff --git a/VectoCoreTest/FileIO/SimulationDataReaderTest.cs b/VectoCoreTest/FileIO/SimulationDataReaderTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..e1474aab93d618d46552888441e2e600bbdc5757 --- /dev/null +++ b/VectoCoreTest/FileIO/SimulationDataReaderTest.cs @@ -0,0 +1,87 @@ +using System; +using System.IO; +using System.Linq; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using TUGraz.VectoCore.FileIO.Reader.Impl; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.Tests.FileIO +{ + [TestClass] + public class SimulationDataReaderTest + { + protected const string DeclarationJob = @"TestData\Jobs\12t Delivery Truck.vecto"; + protected const double Tolerance = 0.0001; + + [TestMethod] + public void ReadDeclarationJobFile() + { + var reader = new DeclarationModeSimulationDataReader(); + reader.SetJobFile(DeclarationJob); + + var runData = reader.NextRun().First(); + + Assert.AreEqual(false, runData.IsEngineOnly); + + Assert.AreEqual(Path.GetFileName(DeclarationJob), runData.JobFileName); + Assert.AreEqual(5850, runData.VehicleData.CurbWeight.Value()); + Assert.AreEqual(1900, runData.VehicleData.CurbWeigthExtra.Value()); // taken from segmentation table + Assert.AreEqual(11900, runData.VehicleData.GrossVehicleMassRating.Value()); + Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, runData.VehicleData.AxleConfiguration); + Assert.AreEqual(0.4069297458, runData.VehicleData.DynamicTyreRadius.Value(), Tolerance); + + Assert.AreEqual("2", runData.VehicleData.VehicleClass); + Assert.AreEqual(2, runData.VehicleData.AxleData.Count); + Assert.AreEqual(6, runData.VehicleData.AxleData[0].Inertia.Value(), Tolerance); + + Assert.AreEqual(true, runData.DriverData.LookAheadCoasting.Enabled); + Assert.AreEqual(DeclarationData.Driver.LookAhead.MinimumSpeed.Value(), + runData.DriverData.LookAheadCoasting.MinSpeed.Value(), Tolerance); + Assert.AreEqual(DeclarationData.Driver.LookAhead.Deceleration.Value(), + runData.DriverData.LookAheadCoasting.Deceleration.Value(), Tolerance); + + Assert.AreNotEqual(DriverData.DriverMode.Off, runData.DriverData.OverSpeedEcoRoll.Mode); + Assert.AreEqual(DeclarationData.Driver.OverSpeedEcoRoll.MinSpeed.Value(), + runData.DriverData.OverSpeedEcoRoll.MinSpeed.Value(), Tolerance); + Assert.AreEqual(DeclarationData.Driver.OverSpeedEcoRoll.OverSpeed.Value(), + runData.DriverData.OverSpeedEcoRoll.OverSpeed.Value(), Tolerance); + Assert.AreEqual(DeclarationData.Driver.OverSpeedEcoRoll.UnderSpeed.Value(), + runData.DriverData.OverSpeedEcoRoll.UnderSpeed.Value(), Tolerance); + + //Assert.AreEqual(false, runData.DriverData.StartStop.Enabled); + Assert.AreEqual(DeclarationData.Driver.StartStop.Delay.Value(), runData.DriverData.StartStop.Delay.Value(), Tolerance); + Assert.AreEqual(DeclarationData.Driver.StartStop.MaxSpeed.Value(), runData.DriverData.StartStop.MaxSpeed.Value(), + Tolerance); + Assert.AreEqual(DeclarationData.Driver.StartStop.MinTime.Value(), runData.DriverData.StartStop.MinTime.Value(), + Tolerance); + + Assert.AreEqual(3.7890, runData.EngineData.Inertia.Value()); + + var downshiftSpeeds = new double[] { 600, 600, 1310.6673 }; + var downshiftTorque = new double[] { 0, 266.85346, 899 }; + + Assert.AreEqual(downshiftSpeeds.Length, runData.GearboxData[1].ShiftPolygon.Downshift.Count); + for (var i = 0; i < downshiftSpeeds.Length; i++) { + Assert.AreEqual(downshiftSpeeds[i].RPMtoRad().Value(), + runData.GearboxData[1].ShiftPolygon.Downshift[i].AngularSpeed.Value(), Tolerance); + Assert.AreEqual(downshiftTorque[i], runData.GearboxData[1].ShiftPolygon.Downshift[i].Torque.Value(), Tolerance); + } + + var upshiftSpeed = new double[] { 1531.230044, 1531.230044, 2420.505793661 }; + var upshiftTorque = new double[] { 0, 459.8588, 899 }; + + Assert.AreEqual(upshiftSpeed.Length, runData.GearboxData[1].ShiftPolygon.Downshift.Count); + for (var i = 0; i < downshiftSpeeds.Length; i++) { + Assert.AreEqual(upshiftSpeed[i].RPMtoRad().Value(), + runData.GearboxData[1].ShiftPolygon.Upshift[i].AngularSpeed.Value(), Tolerance); + Assert.AreEqual(upshiftTorque[i], runData.GearboxData[1].ShiftPolygon.Upshift[i].Torque.Value(), Tolerance); + } + //Assert.AreEqual(); + + + //Assert.AreEqual(, runData.DriverData.LookAheadCoasting.); + } + } +} \ No newline at end of file diff --git a/VectoCoreTest/Models/SimulationComponentData/DistanceCycleDataTest.cs b/VectoCoreTest/Models/SimulationComponentData/DistanceCycleDataTest.cs index 375b8d8e7c88ed8eb10f5800a342a981fe5e1cb4..59bb858274e7faabff9f9037b7941cd14496887a 100644 --- a/VectoCoreTest/Models/SimulationComponentData/DistanceCycleDataTest.cs +++ b/VectoCoreTest/Models/SimulationComponentData/DistanceCycleDataTest.cs @@ -15,7 +15,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData private const string ResourceNamespace = "TUGraz.VectoCore.Resources.Declaration."; - [TestMethod] + [TestMethod, Ignore] public void CycleAltitudeTest() { var missionType = "LongHaul"; diff --git a/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs b/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs index a8adffc819764af8149c82ff74b773d2136ad443..013eb36ec3d57812aefa081ffd0d495625c281c1 100644 --- a/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs +++ b/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs @@ -1,5 +1,6 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using TUGraz.VectoCore.Exceptions; +using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; using TUGraz.VectoCore.Tests.Utils; using TUGraz.VectoCore.Utils; @@ -71,6 +72,19 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData Assert.AreEqual(0.37, fldCurve.PT1(1700.RPMtoRad()).Value(), Tolerance); } + [TestMethod] + public void TestPreferredSpeed() + { + var fldCurve = EngineFullLoadCurve.ReadFromFile(CoachEngineFLD); + fldCurve.EngineData = new CombustionEngineData() { IdleSpeed = 560.RPMtoRad() }; + Assert.AreEqual(130.691151551712, fldCurve.PreferredSpeed.Value(), Tolerance); + Assert.AreEqual(194.515816596908, fldCurve.N95hSpeed.Value(), Tolerance); + Assert.AreEqual(94.2463966015023, fldCurve.LoSpeed.Value(), Tolerance); + Assert.AreEqual(219.084329211505, fldCurve.HiSpeed.Value(), Tolerance); + Assert.AreEqual(2300, fldCurve.MaxLoadTorque.Value(), Tolerance); + Assert.AreEqual(-320, fldCurve.MaxDragTorque.Value(), Tolerance); + } + /// <summary> /// [VECTO-78] /// </summary> diff --git a/VectoCoreTest/TestData/Components/12t Delivery Truck.vveh b/VectoCoreTest/TestData/Components/12t Delivery Truck.vveh index 7e48eda364dafced678cd2d6f6ec778d42cd7f43..9fb75c9c25d2e26e5218073a3898be687f826c33 100644 --- a/VectoCoreTest/TestData/Components/12t Delivery Truck.vveh +++ b/VectoCoreTest/TestData/Components/12t Delivery Truck.vveh @@ -28,7 +28,7 @@ "Axles": [ { "Inertia": 6.0, - "Wheels": "245/70 R 19.5", + "Wheels": "245/70 R19.5", "AxleWeightShare": 0.0, "TwinTyres": false, "RRCISO": 0.008343465, @@ -36,7 +36,7 @@ }, { "Inertia": 6.0, - "Wheels": "245/70 R 19.5", + "Wheels": "245/70 R19.5", "AxleWeightShare": 0.0, "TwinTyres": true, "RRCISO": 0.00943769, diff --git a/VectoCoreTest/Utils/SITest.cs b/VectoCoreTest/Utils/SITest.cs index 0d816f0fcff956079d097df0d16cfdb2fdb1e682..64c15c7e5dd82f6f35fefdcb7fd9814a2dd18af4 100644 --- a/VectoCoreTest/Utils/SITest.cs +++ b/VectoCoreTest/Utils/SITest.cs @@ -52,6 +52,10 @@ namespace TUGraz.VectoCore.Tests.Utils Assert.IsTrue(siStandardDiv.HasEqualUnit(new SI())); Assert.AreEqual(600.0 / 60 * 2 * Math.PI * 1500 * 1500, siStandardMult.Value()); + var force = torque / 100.SI<Meter>(); + Assert.IsInstanceOfType(force, typeof(Newton)); + Assert.AreEqual(15, force.Value()); + //add var angularVelocity2 = 400.SI<RoundsPerMinute>().Cast<PerSecond>(); diff --git a/VectoCoreTest/VectoCoreTest.csproj b/VectoCoreTest/VectoCoreTest.csproj index 192df8b2c540a0a55c1ab6084617f365f4ec60ba..3b7fd62023bcc2697fb80b31e94bc65a68f92d76 100644 --- a/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCoreTest/VectoCoreTest.csproj @@ -70,6 +70,8 @@ </Choose> <ItemGroup> <Compile Include="Exceptions\ExceptionTests.cs" /> + <Compile Include="FileIO\JsonTest.cs" /> + <Compile Include="FileIO\SimulationDataReaderTest.cs" /> <Compile Include="Integration\EngineOnlyCycle\EngineOnlyCycleTest.cs" /> <Compile Include="Integration\SimulationRuns\MinimalPowertrain.cs" /> <Compile Include="Models\Declaration\DeclarationDataTest.cs" />