diff --git a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs index 8f05e2e8b1b4b7a4e2f5aedc8d4fcea8c656e4a3..bc091c7e95d99c0d9b7ffb6147c97941b2df9e2c 100644 --- a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs +++ b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs @@ -31,6 +31,8 @@ using System; using System.Collections.Generic; +using System.Collections.Specialized; +using System.ComponentModel; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.SimulationComponent.Impl; @@ -89,7 +91,101 @@ namespace TUGraz.VectoCommon.InputData throw new ArgumentOutOfRangeException(nameof(jobType), jobType, null); } } + + public static ArchitectureID GetArchitectureID(this VectoSimulationJobType jobType, PowertrainPosition em) + { + switch (jobType) { + case VectoSimulationJobType.ConventionalVehicle: + case VectoSimulationJobType.EngineOnlySimulation: + return ArchitectureID.UNKNOWN; + case VectoSimulationJobType.ParallelHybridVehicle: + return GetPHEVArchitectureId(em); + + case VectoSimulationJobType.SerialHybridVehicle: + return GetSHEVArchitecureID(em); + + case VectoSimulationJobType.BatteryElectricVehicle: + return GetPEVArchId(emPos: em); + + case VectoSimulationJobType.IEPC_E: + case VectoSimulationJobType.IEPC_S: + return GetIepcArchitectureId(jobType, em); + + case VectoSimulationJobType.IHPC: + break; + default: + throw new ArgumentOutOfRangeException(nameof(jobType), jobType, null); + } + + + + + return ArchitectureID.UNKNOWN; + } + + private static ArchitectureID GetIepcArchitectureId(VectoSimulationJobType jobType, PowertrainPosition em) + { + if (em != PowertrainPosition.IEPC) { + throw new ArgumentException(nameof(em)); + } + + switch (jobType) { + case VectoSimulationJobType.IEPC_E: + return ArchitectureID.E_IEPC; + case VectoSimulationJobType.IEPC_S: + return ArchitectureID.S_IEPC; + default: + throw new ArgumentException(nameof(jobType)); + } + } + + private static ArchitectureID GetPHEVArchitectureId(PowertrainPosition emPos) + { + switch (emPos) { + case PowertrainPosition.HybridP1: + return ArchitectureID.P1; + case PowertrainPosition.HybridP2: + return ArchitectureID.P2; + case PowertrainPosition.HybridP2_5: + return ArchitectureID.P2_5; + case PowertrainPosition.HybridP3: + return ArchitectureID.P3; + case PowertrainPosition.HybridP4: + return ArchitectureID.P4; + default: + throw new ArgumentOutOfRangeException(nameof(emPos)); + } + } + + private static ArchitectureID GetSHEVArchitecureID(PowertrainPosition emPos) + { + switch (emPos) { + case PowertrainPosition.BatteryElectricE4: + return ArchitectureID.S4; + case PowertrainPosition.BatteryElectricE3: + return ArchitectureID.S3; + case PowertrainPosition.BatteryElectricE2: + return ArchitectureID.S2; + default: + throw new ArgumentOutOfRangeException(nameof(emPos)); + } + } + + private static ArchitectureID GetPEVArchId(PowertrainPosition emPos) + { + switch (emPos) { + case PowertrainPosition.BatteryElectricE4: + return ArchitectureID.E4; + case PowertrainPosition.BatteryElectricE3: + return ArchitectureID.E3; + case PowertrainPosition.BatteryElectricE2: + return ArchitectureID.E2; + default: + throw new ArgumentOutOfRangeException(nameof(emPos)); + } + } } + public interface IHybridStrategyParameters { diff --git a/VectoCommon/VectoCommon/Models/PowertrainPosition.cs b/VectoCommon/VectoCommon/Models/PowertrainPosition.cs index 14e902d6fdd8d86bec173eb323edb11bad15d25f..cc34e1c47cc65861b341915ad58c77b084ac5996 100644 --- a/VectoCommon/VectoCommon/Models/PowertrainPosition.cs +++ b/VectoCommon/VectoCommon/Models/PowertrainPosition.cs @@ -5,7 +5,7 @@ using TUGraz.VectoCommon.Utils; namespace TUGraz.VectoCommon.InputData { public enum PowertrainPosition { - HybridPositionNotSet, // this has to be the first entrie so that it is used as default for not initialized fields! + HybridPositionNotSet, // this has to be the first entry so that it is used as default for not initialized fields! HybridP0, HybridP1, HybridP2, diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs index 1e677dedb0fe48901d873fca4473372b13471e23..4b059ec598f07684b142c000c46b4297534c2b17 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs @@ -340,8 +340,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public Watt MaxNetPower1 => null; - public Watt MaxNetPower2 => null; - public string ExemptedTechnology => null; public RegistrationClass? RegisteredClass => RegistrationClass.unknown; diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs index b6f7320d601259b920a86a2c3676e775815833a7..3b5edb6105833629d51da880c46dec8ef598bec0 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs @@ -497,57 +497,35 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON protected virtual IList<IAuxiliaryDeclarationInputData> AuxData() { var retVal = new List<IAuxiliaryDeclarationInputData>(); - foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) { + + foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) + { + try + { + aux.GetEx("Technology").ToObject<List<string>>(); + } + catch (Exception) + { + throw new VectoException( + "Aux: Technology for aux '{0}' list could not be read. Maybe it is a single string instead of a list of strings?", + aux.GetEx<string>("ID")); + } + var type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type")); - var auxData = new DeclarationAuxiliaryDataInputData() { + var auxData = new DeclarationAuxiliaryDataInputData + { ID = aux.GetEx<string>("ID"), Type = type, - Technology = new List<string>(), + Technology = aux.GetEx("Technology").ToObject<List<string>>() }; - var tech = aux.GetEx<string>("Technology"); - - if (auxData.Type == AuxiliaryType.ElectricSystem) { - if (aux["TechList"] == null || aux["TechList"].Any()) { - auxData.Technology.Add("Standard technology"); - } else { - auxData.Technology.Add("Standard technology - LED headlights, all"); - } - } - - if (auxData.Type == AuxiliaryType.SteeringPump) { - auxData.Technology.Add(tech); - } - if (auxData.Type == AuxiliaryType.Fan) { - auxData.Technology.Add(MapLegacyFanTechnologies(tech)); - } retVal.Add(auxData); - } - return retVal; - } - - private static string MapLegacyFanTechnologies(string tech) - { - string newTech; - switch (tech) { - case "Crankshaft mounted - Electronically controlled visco clutch (Default)": - newTech = "Crankshaft mounted - Electronically controlled visco clutch"; - break; - case "Crankshaft mounted - On/Off clutch": - newTech = "Crankshaft mounted - On/off clutch"; - break; - case "Belt driven or driven via transm. - On/Off clutch": - newTech = "Belt driven or driven via transm. - On/off clutch"; - break; - default: - newTech = tech; - break; } - return newTech; + return retVal; } #endregion @@ -580,34 +558,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public JSONInputDataV3(JObject data, string filename, bool tolerateMissing = false) : base(data, filename, tolerateMissing) { } - protected override IList<IAuxiliaryDeclarationInputData> AuxData() - { - var retVal = new List<IAuxiliaryDeclarationInputData>(); - - foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) { - try { - aux.GetEx("Technology").ToObject<List<string>>(); - } catch (Exception) { - throw new VectoException( - "Aux: Technology for aux '{0}' list could not be read. Maybe it is a single string instead of a list of strings?", - aux.GetEx<string>("ID")); - } - - var type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type")); - - var auxData = new DeclarationAuxiliaryDataInputData { - ID = aux.GetEx<string>("ID"), - Type = type, - Technology = aux.GetEx("Technology").ToObject<List<string>>() - }; - - - retVal.Add(auxData); - - } - - return retVal; - } + } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs index 73c3cddbd1477f2486852898a8ce739d4df09fbf..fa22ce9c5e3d2789ef29ae3b3f2c8a354b72f42d 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs @@ -617,7 +617,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON _entries = entries; IList<ElectricMachineEntry<IElectricMotorDeclarationInputData>> IElectricMachinesDeclarationInputData.Entries => - _entries.Cast<ElectricMachineEntry<IElectricMotorDeclarationInputData>>().ToList(); + _entries.Select(entry => new ElectricMachineEntry<IElectricMotorDeclarationInputData>() { + ElectricMachine = entry.ElectricMachine, + ADC = entry.ADC, + Count = entry.Count, + MechanicalTransmissionEfficiency = entry.MechanicalTransmissionEfficiency, + MechanicalTransmissionLossMap = entry.MechanicalTransmissionLossMap, + Position = entry.Position, + RatioADC = entry.RatioADC, + RatioPerGear = entry.RatioPerGear + }).ToList(); + //_entries.Cast<ElectricMachineEntry<IElectricMotorDeclarationInputData>>().ToList(); public virtual IList<ElectricMachineEntry<IElectricMotorEngineeringInputData>> Entries => _entries; diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index 148adaf1f8bd46c11c37b3e76e495a7042d12bea..fa9df44b04f513ef6706ea59ca5748d1f4436b87 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -91,6 +91,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON return _batteries ?? (_batteries = ReadBatteries()); } + public override ArchitectureID ArchitectureID + { + get + { + return VehicleType.GetArchitectureID(GetElectricMachines().Entries + .First(e => e.Position != PowertrainPosition.GEN).Position); + } + } + public override VectoSimulationJobType VehicleType { get { @@ -339,7 +348,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public int? NumSteeredAxles => null; XmlNode IVehicleDeclarationInputData.XMLSource => null; public virtual string VehicleTypeApprovalNumber { get; } - public ArchitectureID ArchitectureID { get; } + public virtual ArchitectureID ArchitectureID { get; } public bool OvcHev { get; } public Watt MaxChargingPower { get; } @@ -497,8 +506,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public virtual Watt MaxNetPower1 => null; - public virtual Watt MaxNetPower2 => null; - public virtual string ExemptedTechnology => null; public virtual RegistrationClass? RegisteredClass => RegistrationClass.unknown;