diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs b/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs index 8a91493c767b504df40ed4a44273c8754fd6ab6a..36793d2013d15d07ea761c571fa1d1165d97731b 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs @@ -10,6 +10,7 @@ // See the LICENSE.txt for the specific language governing permissions and limitations. using System.Xml.Linq; +using Newtonsoft.Json; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.BusAuxiliaries; @@ -17,6 +18,7 @@ using TUGraz.VectoCore.Models.BusAuxiliaries; namespace TUGraz.VectoCommon.BusAuxiliaries { public interface IAuxiliaryConfig { + [JsonIgnore] IBusAuxiliariesDeclarationData InputData { get; } // Electrical diff --git a/VectoCommon/VectoCommon/Utils/SI.cs b/VectoCommon/VectoCommon/Utils/SI.cs index 00fa62139a141fd4446c42f557e3d77242b57db5..4abe64cdaf43b5043db4c40294ecd164d0c7948c 100644 --- a/VectoCommon/VectoCommon/Utils/SI.cs +++ b/VectoCommon/VectoCommon/Utils/SI.cs @@ -1671,6 +1671,11 @@ namespace TUGraz.VectoCommon.Utils get { return GetUnitString(_units); } } + public virtual double TheValue + { + get { return Val; } + } + private string ToString(string format) { if (string.IsNullOrEmpty(format)) { diff --git a/VectoCommon/VectoCommon/VectoCommon.csproj b/VectoCommon/VectoCommon/VectoCommon.csproj index 0ff417be3bba563d297d51b8649aff2f82bbed68..b562b4b24465b396ead7a24c05db7ef3c06a8245 100644 --- a/VectoCommon/VectoCommon/VectoCommon.csproj +++ b/VectoCommon/VectoCommon/VectoCommon.csproj @@ -31,6 +31,9 @@ <WarningLevel>4</WarningLevel> </PropertyGroup> <ItemGroup> + <Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> + <HintPath>..\..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> + </Reference> <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL"> <HintPath>..\..\packages\NLog.4.5.11\lib\net45\NLog.dll</HintPath> <Private>True</Private> diff --git a/VectoCommon/VectoCommon/packages.config b/VectoCommon/VectoCommon/packages.config index eaf15479484d960da76fb16278bee6dbf7a59a76..ac0bdab457ecf49102b1429c718e0b8490fd0fdb 100644 --- a/VectoCommon/VectoCommon/packages.config +++ b/VectoCommon/VectoCommon/packages.config @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <packages> + <package id="Newtonsoft.Json" version="8.0.3" targetFramework="net45" /> <package id="NLog" version="4.5.11" targetFramework="net45" /> </packages> \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs index fbf2327de6ad0a2ef1df23d0e40b18d5aaba5118..f7a1efd5186b6f41aa2f36a118bfd42eb04a7991 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using Newtonsoft.Json; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; @@ -153,31 +154,37 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC #region Implementation of ISSMInputs + [JsonIgnore] public ISSMBusParameters BusParameters { get { return this; } } + [JsonIgnore] public ISSMBoundaryConditions BoundaryConditions { get { return this; } } + [JsonIgnore] public IEnvironmentalConditions EnvironmentalConditions { get { return this; } } + [JsonIgnore] public IACSystem ACSystem { get { return this; } } + [JsonIgnore] public IVentilation Ventilation { get { return this; } } + [JsonIgnore] public IAuxHeater AuxHeater { get { return this; } diff --git a/VectoCore/VectoCore/Models/Declaration/LookupData.cs b/VectoCore/VectoCore/Models/Declaration/LookupData.cs index b4fb8096dcb0fa0adee11e751a3c1c251fb3a7c9..8361802d1eab79cfda036cc57c79641f2d2819b0 100644 --- a/VectoCore/VectoCore/Models/Declaration/LookupData.cs +++ b/VectoCore/VectoCore/Models/Declaration/LookupData.cs @@ -92,6 +92,11 @@ namespace TUGraz.VectoCore.Models.Declaration throw new VectoException(string.Format(ErrorMessage, key)); } } + + public Dictionary<TKey, TValue> Entries + { + get { return Data; } + } } public abstract class LookupData<TKey1, TKey2, TValue> : LookupData where TValue : struct diff --git a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs index 5d2690b2ec4f94817090e4b409cd04335314a3b0..c22feae85f7d5998e36199fc7b3c19cb206d0e3b 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs @@ -33,6 +33,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Xml.Linq; +using Newtonsoft.Json; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.Models; @@ -106,6 +107,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data [ValidateObject] public Mission Mission { get; internal set; } + [JsonIgnore] public XElement InputDataHash { get; internal set; } public int JobRunId { get; internal set; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/AngledriveData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/AngledriveData.cs index b6f6142129f254f37b4c23fffc72ad9784f0797f..cb6ea8433298fc771b0ceb7866b164cf619fa7e9 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/AngledriveData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/AngledriveData.cs @@ -29,6 +29,7 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ +using Newtonsoft.Json; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; @@ -42,6 +43,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data public AngledriveType Type; + [JsonIgnore] public IAngledriveInputData InputData { get; internal set; } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/AxleGearData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/AxleGearData.cs index f8dbec7ed455cbb34f13b3a1f33631a5c6c39b26..b3e30a6331a82c7dda1014c1dd25d51dc1c51696 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/AxleGearData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/AxleGearData.cs @@ -29,6 +29,7 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ +using Newtonsoft.Json; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; @@ -42,6 +43,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data public AxleLineType LineType; + [JsonIgnore] public IAxleGearInputData InputData { get; internal set; } } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs index 86d6ee681daaa7baa6f13e2d4678f90b6613f0c8..048e530e1f4733fe11dca2f32875dff75295e65d 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs @@ -34,6 +34,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Diagnostics; using System.Linq; +using Newtonsoft.Json; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; @@ -70,7 +71,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine private SortedList<PerSecond, int> _quickLookup; - [Required] internal readonly LookupData<PerSecond, PT1.PT1Result> PT1Data; + [Required] public readonly LookupData<PerSecond, PT1.PT1Result> PT1Data; internal EngineFullLoadCurve(List<FullLoadCurveEntry> entries, LookupData<PerSecond, PT1.PT1Result> pt1Data) { @@ -88,6 +89,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine return Formulas.TorqueToPower(DragLoadStationaryTorque(angularVelocity), angularVelocity); } + [JsonIgnore] public CombustionEngineData EngineData { get; internal set; } public PT1.PT1Result PT1(PerSecond angularVelocity) @@ -95,6 +97,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine return PT1Data.Lookup(angularVelocity); } + public List<FullLoadCurveEntry> FullLoadCurve + { + get { return FullLoadEntries; } + } + /// <summary> /// Get the rated speed from the given full-load curve (i.e. speed with max. power) /// </summary> @@ -497,7 +504,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine #endregion [DebuggerDisplay("n: {EngineSpeed}, fullTorque: {TorqueFullLoad}, dragTorque: {TorqueDrag}")] - internal class FullLoadCurveEntry + public class FullLoadCurveEntry { [Required, SIRange(0, 5000 * Constants.RPMToRad)] public PerSecond EngineSpeed { get; set; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs index 39bf4aa8f2bb2fd6c4903cdd11cf8a344b0aa4b1..59cb31fe33c5e8250edd12afac322c6cd4c7a920 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs @@ -35,6 +35,7 @@ using System.ComponentModel.DataAnnotations; using System.Diagnostics; using System.Linq; using System.Runtime.Serialization; +using Newtonsoft.Json; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; @@ -101,6 +102,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data public Second PowershiftShiftTime { get; internal set; } public bool ATEcoRollReleaseLockupClutch { get; internal set; } + + [JsonIgnore] public IGearboxDeclarationInputData InputData { get; internal set; } diff --git a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs index 48465ec2c7e41eb485c0869430ce81d0a0975d2a..a90638c677ec1a3af4c3ca35139f8b736969b72e 100644 --- a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs +++ b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs @@ -2,7 +2,10 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Reflection; using System.Runtime.InteropServices.WindowsRuntime; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using Ninject; using Ninject.Planning.Bindings.Resolvers; using NUnit.Framework; @@ -30,6 +33,8 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus [TestFixture()] public class CompletedBusFactorMethodTest { + const string JobFile = @"TestData\Integration\Buses\FactorMethod\CompletedBus.vecto"; + class RelatedRun { public VectoRunData VectoRunDataSpezificBody { get; set; } @@ -85,10 +90,8 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus [TestCase()] public void TestCompletedBus() { - var relativeJobPath = @"TestData\Integration\Buses\FactorMethod\CompletedBus.vecto"; - - var writer = new FileOutputWriter(Path.Combine(Path.GetDirectoryName(relativeJobPath), Path.GetFileName(relativeJobPath))); - var inputData = JSONInputDataFactory.ReadJsonJob(relativeJobPath); + var writer = new FileOutputWriter(Path.Combine(Path.GetDirectoryName(JobFile), Path.GetFileName(JobFile))); + var inputData = JSONInputDataFactory.ReadJsonJob(JobFile); var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) { @@ -904,5 +907,51 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus i++; } } + + + [TestCase()] + public void PrintModelParameters() + { + var writer = new FileOutputWriter(Path.Combine(Path.GetDirectoryName(JobFile), Path.GetFileName(JobFile))); + var inputData = JSONInputDataFactory.ReadJsonJob(JobFile); + + var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) { + WriteModalResults = true, + //ActualModalData = true, + Validate = false + }; + //var sumContainer = new SummaryDataContainer(writer); + //var jobContainer = new JobContainer(sumContainer); + + + var runs = factory.DataReader.NextRun().ToList(); + Assert.IsTrue(runs.Count == 8 || runs.Count == 12); + + SetRelatedVehicleParts(runs); + var pair = relatedRuns.First(); + + var json = JToken.FromObject(pair.VectoRunDataGenericBody); + File.WriteAllText($"{pair.VectoRunDataGenericBody.JobName}_{pair.VectoRunDataGenericBody.ModFileSuffix}_Generic.json", JsonConvert.SerializeObject(json, Formatting.Indented)); + + //Console.WriteLine("Generic Body"); + //PrintVectoRunData(pair.VectoRunDataGenericBody); + //Console.WriteLine("========================"); + //Console.WriteLine("Specific Body"); + //PrintVectoRunData(pair.VectoRunDataSpezificBody); + } + + private void PrintVectoRunData(VectoRunData runData) + { + const BindingFlags flags = + BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public | + BindingFlags.FlattenHierarchy; + var properties = runData.GetType().GetProperties(flags); + foreach (var p in properties) + { + + var val = p.GetValue(runData); + + } + } } }