From 625c9fc005ccf50836445dd0275c1485531e4859 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Thu, 9 Jul 2015 15:09:28 +0200 Subject: [PATCH] refactoring reading input files - separate dataObjectAdapter --- .../FileIO/DeclarationFile/VehicleFileDecl.cs | 8 +- .../FileIO/EngineeringFile/VehicleFileEng.cs | 22 +-- VectoCore/FileIO/InputFileReader.cs | 5 +- .../AbstractSimulationDataAdapter.cs | 78 ++++++++ .../DeclarationDataAdapter.cs | 153 +++++++++++++++ .../EngineeringDataAdapter.cs | 141 ++++++++++++++ .../Impl/AbstractSimulationDataReader.cs | 88 +-------- .../DeclarationModeSimulationDataReader.cs | 179 ++---------------- .../Impl/EngineOnlySimulationDataReader.cs | 5 +- .../EngineeringModeSimulationDataReader.cs | 103 +--------- .../Models/Declaration/AxleConfiguration.cs | 10 + .../Models/Declaration/DeclarationData.cs | 40 ++++ .../Data/CombustionEngineData.cs | 2 +- VectoCore/VectoCore.csproj | 3 + 14 files changed, 468 insertions(+), 369 deletions(-) create mode 100644 VectoCore/FileIO/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs create mode 100644 VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs create mode 100644 VectoCore/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs diff --git a/VectoCore/FileIO/DeclarationFile/VehicleFileDecl.cs b/VectoCore/FileIO/DeclarationFile/VehicleFileDecl.cs index 45904d9eb8..914b301fa8 100644 --- a/VectoCore/FileIO/DeclarationFile/VehicleFileDecl.cs +++ b/VectoCore/FileIO/DeclarationFile/VehicleFileDecl.cs @@ -40,11 +40,6 @@ namespace TUGraz.VectoCore.FileIO.DeclarationFile [JsonProperty(Required = Required.Always)] public AxleConfigData AxleConfig; - public AxleConfiguration AxleConfigurationType() - { - // TODO: @@@quam better use of enum-prefix - return (AxleConfiguration) Enum.Parse(typeof (AxleConfiguration), "AxleConfig_" + AxleConfig.TypeStr, true); - } public class AxleConfigData { @@ -62,6 +57,9 @@ namespace TUGraz.VectoCore.FileIO.DeclarationFile [JsonProperty(Required = Required.Always)] public bool TwinTyres; [JsonProperty("RRCISO", Required = Required.Always)] public double RollResistanceCoefficient; [JsonProperty("FzISO", Required = Required.Always)] public double TyreTestLoad; + + [JsonProperty] public double Inertia; + [JsonProperty] public double AxleWeightShare; } public class RetarderData diff --git a/VectoCore/FileIO/EngineeringFile/VehicleFileEng.cs b/VectoCore/FileIO/EngineeringFile/VehicleFileEng.cs index d720d92fbb..2a4a5085cf 100644 --- a/VectoCore/FileIO/EngineeringFile/VehicleFileEng.cs +++ b/VectoCore/FileIO/EngineeringFile/VehicleFileEng.cs @@ -24,20 +24,20 @@ namespace TUGraz.VectoCore.FileIO.EngineeringFile [JsonProperty("CdCorrFile")] public string CrossWindCorrectionFile; - [JsonProperty(Required = Required.Always)] public new AxleConfigData AxleConfig; + //[JsonProperty(Required = Required.Always)] public new AxleConfigData AxleConfig; - public new class AxleConfigData - { - [JsonProperty("Type", Required = Required.Always)] public string TypeStr; - [JsonProperty(Required = Required.Always)] public IList<AxleDataEng> Axles; - } + //public new class AxleConfigData + //{ + // [JsonProperty("Type", Required = Required.Always)] public string TypeStr; + // [JsonProperty(Required = Required.Always)] public IList<AxleDataEng> Axles; + //} - public class AxleDataEng : AxleDataDecl - { - [JsonProperty] public double Inertia; - [JsonProperty] public double AxleWeightShare; - } + //public class AxleDataEng : AxleDataDecl + //{ + // [JsonProperty] public double Inertia; + // [JsonProperty] public double AxleWeightShare; + //} } } } diff --git a/VectoCore/FileIO/InputFileReader.cs b/VectoCore/FileIO/InputFileReader.cs index 9d4bfdb896..6b96dae090 100644 --- a/VectoCore/FileIO/InputFileReader.cs +++ b/VectoCore/FileIO/InputFileReader.cs @@ -1,8 +1,5 @@ -using System; -using System.CodeDom; -using Common.Logging; +using Common.Logging; using Newtonsoft.Json; -using TUGraz.VectoCore.Models.SimulationComponent.Data; namespace TUGraz.VectoCore.FileIO { diff --git a/VectoCore/FileIO/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs b/VectoCore/FileIO/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs new file mode 100644 index 0000000000..d1c66db69e --- /dev/null +++ b/VectoCore/FileIO/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs @@ -0,0 +1,78 @@ +using System; +using System.IO; +using TUGraz.VectoCore.FileIO.DeclarationFile; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper +{ + public abstract class AbstractSimulationDataAdapter + { + public abstract VehicleData CreateVehicleData(VectoVehicleFile vehicle, Mission segment, Kilogram loading); + + public abstract VehicleData CreateVehicleData(VectoVehicleFile vehicle); + + public abstract CombustionEngineData CreateEngineData(VectoEngineFile engine); + + public abstract GearboxData CreateGearboxData(VectoGearboxFile gearbox, CombustionEngineData engine); + + // ========================= + + internal VehicleData SetCommonVehicleData(VehicleFileV5Declaration.DataBodyDecl data, string basePath) + { + var retVal = new VehicleData { + SavedInDeclarationMode = data.SavedInDeclarationMode, + VehicleCategory = data.VehicleCategory(), + AxleConfiguration = EnumHelper.ParseAxleConfigurationType(data.AxleConfig.TypeStr), + CurbWeight = data.CurbWeight.SI<Kilogram>(), + //CurbWeigthExtra = data.CurbWeightExtra.SI<Kilogram>(), + //Loading = data.Loading.SI<Kilogram>(), + GrossVehicleMassRating = data.GrossVehicleMassRating.SI<Ton>().Cast<Kilogram>(), + DragCoefficient = data.DragCoefficient, + CrossSectionArea = data.CrossSectionArea.SI<SquareMeter>(), + DragCoefficientRigidTruck = data.DragCoefficientRigidTruck, + CrossSectionAreaRigidTruck = data.CrossSectionAreaRigidTruck.SI<SquareMeter>(), + //TyreRadius = data.TyreRadius.SI().Milli.Meter.Cast<Meter>(), + Rim = data.RimStr, + }; + + var retarder = new RetarderData() { + Type = + (RetarderData.RetarderType) Enum.Parse(typeof (RetarderData.RetarderType), data.Retarder.TypeStr.ToString(), true), + }; + if (retarder.Type != RetarderData.RetarderType.None) { + retarder.LossMap = RetarderLossMap.ReadFromFile(Path.Combine(basePath, data.Retarder.File)); + retarder.Ratio = data.Retarder.Ratio; + } + retVal.Retarder = retarder; + + return retVal; + } + + internal CombustionEngineData SetCommonCombustionEngineData(EngineFileV2Declaration.DataBodyDecl data, string basePath) + { + var retVal = new CombustionEngineData() { + SavedInDeclarationMode = data.SavedInDeclarationMode, + ModelName = data.ModelName, + Displacement = data.Displacement.SI().Cubic.Centi.Meter.Cast<CubicMeter>(), // convert vom ccm to m^3 + IdleSpeed = data.IdleSpeed.RPMtoRad(), + ConsumptionMap = FuelConsumptionMap.ReadFromFile(Path.Combine(basePath, data.FuelMap)), + WHTCUrban = data.WHTCUrban.SI<KilogramPerWattSecond>(), + WHTCMotorway = data.WHTCMotorway.SI<KilogramPerWattSecond>(), + WHTCRural = data.WHTCRural.SI<KilogramPerWattSecond>(), + }; + return retVal; + } + + internal GearboxData SetCommonGearboxData(GearboxFileV4Declaration.DataBodyDecl data) + { + return new GearboxData() { + SavedInDeclarationMode = data.SavedInDeclarationMode, + ModelName = data.ModelName, + Type = (GearboxData.GearboxType) Enum.Parse(typeof (GearboxData.GearboxType), data.GearboxType, true), + }; + } + } +} \ No newline at end of file diff --git a/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs b/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs new file mode 100644 index 0000000000..abb2a96162 --- /dev/null +++ b/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs @@ -0,0 +1,153 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using TUGraz.VectoCore.Exceptions; +using TUGraz.VectoCore.FileIO.DeclarationFile; +using TUGraz.VectoCore.FileIO.EngineeringFile; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper +{ + public class DeclarationDataAdapter : AbstractSimulationDataAdapter + { + public override VehicleData CreateVehicleData(VectoVehicleFile vehicle, Mission segment, Kilogram loading) + { + var fileV5Decl = vehicle as VehicleFileV5Declaration; + if (fileV5Decl != null) { + return CreateVehicleData(fileV5Decl, segment, loading); + } + throw new VectoException("Unsupported VehicleData File Instance"); + } + + public override VehicleData CreateVehicleData(VectoVehicleFile vehicle) + { + var fileV5Decl = vehicle as VehicleFileV5Declaration; + if (fileV5Decl != null) { + return SetCommonVehicleData(fileV5Decl.Body, fileV5Decl.BasePath); + } + throw new VectoException("Mission Data and loading required in DeclarationMode"); + } + + public override CombustionEngineData CreateEngineData(VectoEngineFile engine) + { + var fileV2Decl = engine as EngineFileV2Declaration; + if (fileV2Decl != null) { + return CreateEngineData(fileV2Decl); + } + throw new VectoException("Unsupported EngineData File Instance"); + } + + public override GearboxData CreateGearboxData(VectoGearboxFile gearbox, CombustionEngineData engine) + { + var fileV5Decl = gearbox as GearboxFileV4Declaration; + if (fileV5Decl != null) { + return CreateGearboxData(fileV5Decl, engine); + } + throw new VectoException("Unsupported GearboxData File Instance"); + } + + //========================== + + internal VehicleData CreateVehicleData(VehicleFileV5Declaration vehicle, Mission mission, Kilogram loading) + { + var data = vehicle.Body; + var retVal = SetCommonVehicleData(data, vehicle.BasePath); + + retVal.BasePath = vehicle.BasePath; + + retVal.GrossVehicleMassRating = vehicle.Body.GrossVehicleMassRating.SI<Ton>().Cast<Kilogram>(); + + retVal.CurbWeigthExtra = mission.MassExtra; + retVal.Loading = loading; + retVal.DynamicTyreRadius = + DeclarationData.DynamicTyreRadius(data.AxleConfig.Axles[DeclarationData.PoweredAxle()].WheelsStr, data.RimStr); + + if (data.AxleConfig.Axles.Count < mission.AxleWeightDistribution.Length) { + throw new VectoException( + String.Format("Vehicle does not contain sufficient axles. {0} axles defined, {1} axles required", + data.AxleConfig.Axles.Count, mission.AxleWeightDistribution.Count())); + } + retVal.AxleData = new List<Axle>(); + for (var i = 0; i < mission.AxleWeightDistribution.Length; i++) { + var axleInput = data.AxleConfig.Axles[i]; + var axle = new Axle { + AxleWeightShare = mission.AxleWeightDistribution[i], + TwinTyres = axleInput.TwinTyres, + RollResistanceCoefficient = axleInput.RollResistanceCoefficient, + TyreTestLoad = axleInput.TyreTestLoad.SI<Newton>(), + Inertia = DeclarationData.Wheels.Lookup(axleInput.WheelsStr).Inertia, + }; + retVal.AxleData.Add(axle); + } + + foreach (var tmp in mission.TrailerAxleWeightDistribution) { + retVal.AxleData.Add(new Axle() { + AxleWeightShare = tmp, + TwinTyres = DeclarationData.Trailer.TwinTyres, + RollResistanceCoefficient = DeclarationData.Trailer.RollResistanceCoefficient, + TyreTestLoad = DeclarationData.Trailer.TyreTestLoad.SI<Newton>(), + Inertia = DeclarationData.Wheels.Lookup(DeclarationData.Trailer.WheelsType).Inertia + }); + } + + return retVal; + } + + internal CombustionEngineData CreateEngineData(EngineFileV2Declaration engine) + { + var retVal = SetCommonCombustionEngineData(engine.Body, engine.BasePath); + retVal.Inertia = DeclarationData.Engine.EngineInertia(retVal.Displacement); + foreach (var entry in engine.Body.FullLoadCurves) { + retVal.AddFullLoadCurve(entry.Gears, FullLoadCurve.ReadFromFile(Path.Combine(engine.BasePath, entry.Path), true)); + } + + return retVal; + } + + internal GearboxData CreateGearboxData(GearboxFileV4Declaration gearbox, CombustionEngineData engine) + { + var retVal = SetCommonGearboxData(gearbox.Body); + + if (retVal.Type == GearboxData.GearboxType.AT) { + throw new VectoSimulationException("Automatic Transmission currently not supported in DeclarationMode!"); + } + if (retVal.Type == GearboxData.GearboxType.Custom) { + throw new VectoSimulationException("Custom Transmission not supported in DeclarationMode!"); + } + retVal.Inertia = DeclarationData.Gearbox.Inertia.SI<KilogramSquareMeter>(); + retVal.TractionInterruption = DeclarationData.Gearbox.TractionInterruption(retVal.Type); + retVal.SkipGears = DeclarationData.Gearbox.SkipGears(retVal.Type); + retVal.EarlyShiftUp = DeclarationData.Gearbox.EarlyShiftGears((retVal.Type)); + + retVal.TorqueReserve = DeclarationData.Gearbox.TorqueReserve; + retVal.StartTorqueReserve = DeclarationData.Gearbox.TorqueReserveStart; + retVal.ShiftTime = DeclarationData.Gearbox.MinTimeBetweenGearshifts.SI<Second>(); + retVal.StartSpeed = DeclarationData.Gearbox.StartSpeed.SI<MeterPerSecond>(); + retVal.StartAcceleration = DeclarationData.Gearbox.StartAcceleration.SI<MeterPerSquareSecond>(); + + retVal.HasTorqueConverter = false; + + + for (uint i = 0; i < gearbox.Body.Gears.Count; i++) { + var gearSettings = gearbox.Body.Gears[(int) i]; + var lossMapPath = Path.Combine(gearbox.BasePath, gearSettings.LossMap); + TransmissionLossMap lossMap = TransmissionLossMap.ReadFromFile(lossMapPath, gearSettings.Ratio); + + + if (i == 0) { + retVal.AxleGearData = new GearData(lossMap, null, gearSettings.Ratio, false); + } else { + var shiftPolygon = DeclarationData.Gearbox.ComputeShiftPolygon(engine, i); + retVal._gearData.Add(i, new GearData(lossMap, shiftPolygon, gearSettings.Ratio, false)); + } + } + + return retVal; + } + } +} \ No newline at end of file diff --git a/VectoCore/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs b/VectoCore/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs new file mode 100644 index 0000000000..0640291548 --- /dev/null +++ b/VectoCore/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs @@ -0,0 +1,141 @@ +using System; +using System.IO; +using System.Linq; +using TUGraz.VectoCore.Exceptions; +using TUGraz.VectoCore.FileIO.EngineeringFile; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper +{ + public class EngineeringDataAdapter : AbstractSimulationDataAdapter + { + public override VehicleData CreateVehicleData(VectoVehicleFile vehicle, Models.Declaration.Mission segment, + Kilogram loading) + { + return CreateVehicleData(vehicle); + } + + public override VehicleData CreateVehicleData(VectoVehicleFile vehicle) + { + var fileV5Eng = vehicle as VehicleFileV5Engineering; + if (fileV5Eng != null) { + return CreateVehicleData(fileV5Eng); + } + throw new VectoException("Unsupported EngineData File Instance"); + } + + public override CombustionEngineData CreateEngineData(VectoEngineFile engine) + { + var fileV2Eng = engine as EngineFileV2Engineering; + if (fileV2Eng != null) { + return CreateEngineData(fileV2Eng); + } + throw new VectoException("Unsupported EngineData File Instance"); + } + + public override GearboxData CreateGearboxData(VectoGearboxFile gearbox, CombustionEngineData engine) + { + var fileV5Eng = gearbox as GearboxFileV4Engineering; + if (fileV5Eng != null) { + return CreateGearboxData(fileV5Eng); + } + throw new VectoException("Unsupported GearboxData File Instance"); + } + + //================================= + + + /// <summary> + /// convert datastructure representing file-contents into internal datastructure + /// Vehicle, file-format version 5 + /// </summary> + /// <param name="vehicle">VehicleFileV5 container</param> + /// <returns>VehicleData instance</returns> + internal VehicleData CreateVehicleData(VehicleFileV5Engineering vehicle) + { + var data = vehicle.Body; + + var retVal = SetCommonVehicleData(data, vehicle.BasePath); + + retVal.BasePath = vehicle.BasePath; + retVal.CurbWeigthExtra = data.CurbWeightExtra.SI<Kilogram>(); + retVal.Loading = data.Loading.SI<Kilogram>(); + retVal.DynamicTyreRadius = data.DynamicTyreRadius.SI().Milli.Meter.Cast<Meter>(); + + retVal.AxleData = data.AxleConfig.Axles.Select(axle => new Axle { + Inertia = DoubleExtensionMethods.SI<KilogramSquareMeter>(axle.Inertia), + TwinTyres = axle.TwinTyres, + RollResistanceCoefficient = axle.RollResistanceCoefficient, + AxleWeightShare = axle.AxleWeightShare, + TyreTestLoad = axle.TyreTestLoad.SI<Newton>(), + //Wheels = axle.WheelsStr + }).ToList(); + return retVal; + } + + + /// <summary> + /// convert datastructure representing the file-contents into internal data structure + /// Engine, file-format version 2 + /// </summary> + /// <param name="engine">Engin-Data file (Engineering mode)</param> + /// <returns></returns> + internal CombustionEngineData CreateEngineData(EngineFileV2Engineering engine) + { + var retVal = SetCommonCombustionEngineData(engine.Body, engine.BasePath); + retVal.Inertia = engine.Body.Inertia.SI<KilogramSquareMeter>(); + foreach (var entry in engine.Body.FullLoadCurves) { + retVal.AddFullLoadCurve(entry.Gears, FullLoadCurve.ReadFromFile(Path.Combine(engine.BasePath, entry.Path), false)); + } + + return retVal; + } + + + /// <summary> + /// convert datastructure representing the file-contents into internal data structure + /// Gearbox, File-format Version 4 + /// </summary> + /// <param name="gearbox"></param> + /// <returns></returns> + internal GearboxData CreateGearboxData(GearboxFileV4Engineering gearbox) + { + var retVal = SetCommonGearboxData(gearbox.Body); + + var data = gearbox.Body; + + retVal.Inertia = data.Inertia.SI<KilogramSquareMeter>(); + retVal.TractionInterruption = data.TractionInterruption.SI<Second>(); + retVal.SkipGears = data.SkipGears; + retVal.EarlyShiftUp = data.EarlyShiftUp; + retVal.TorqueReserve = data.TorqueReserve; + retVal.StartTorqueReserve = data.StartTorqueReserve; + retVal.ShiftTime = data.ShiftTime.SI<Second>(); + retVal.StartSpeed = data.StartSpeed.SI<MeterPerSecond>(); + retVal.StartAcceleration = data.StartAcceleration.SI<MeterPerSquareSecond>(); + + retVal.HasTorqueConverter = data.TorqueConverter.Enabled; + + for (uint i = 0; i < gearbox.Body.Gears.Count; i++) { + var gearSettings = gearbox.Body.Gears[(int) i]; + var lossMapPath = Path.Combine(gearbox.BasePath, gearSettings.LossMap); + TransmissionLossMap lossMap = TransmissionLossMap.ReadFromFile(lossMapPath, gearSettings.Ratio); + + var shiftPolygon = !String.IsNullOrEmpty(gearSettings.ShiftPolygon) + ? ShiftPolygon.ReadFromFile(Path.Combine(gearbox.BasePath, gearSettings.ShiftPolygon)) + : null; + + var gear = new GearData(lossMap, shiftPolygon, gearSettings.Ratio, gearSettings.TCactive); + if (i == 0) { + retVal.AxleGearData = gear; + } else { + retVal._gearData.Add(i, gear); + } + } + return retVal; + } + } +} \ No newline at end of file diff --git a/VectoCore/FileIO/Reader/Impl/AbstractSimulationDataReader.cs b/VectoCore/FileIO/Reader/Impl/AbstractSimulationDataReader.cs index ca4b55eaf7..43489d13a8 100644 --- a/VectoCore/FileIO/Reader/Impl/AbstractSimulationDataReader.cs +++ b/VectoCore/FileIO/Reader/Impl/AbstractSimulationDataReader.cs @@ -33,10 +33,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl public abstract IEnumerable<VectoRunData> NextRun(); - protected virtual void ProcessJob(VectoJobFile job) - { - throw new VectoException("Invalid JobFile Container"); - } + protected abstract void ProcessJob(VectoJobFile job); // has to read the file string and create file-container @@ -48,88 +45,5 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl protected abstract void ReadEngine(string file); protected abstract void ReadGearbox(string file); - - - protected internal virtual Segment GetVehicleClassification(VectoVehicleFile vehicle) - { - throw new NotImplementedException("Vehicleclassification for base-class not possible!"); - } - - internal virtual VehicleData CreateVehicleData(VectoVehicleFile vehicle, Mission segment, Kilogram loading) - { - throw new NotImplementedException("CreateVehicleData for base-class not possible!"); - } - - internal virtual CombustionEngineData CreateEngineData(VectoEngineFile engine) - { - throw new NotImplementedException("CreateEngineData for base-class not possible!"); - } - - internal virtual GearboxData CreateGearboxData(VectoGearboxFile gearbox) - { - throw new NotImplementedException("CreateGearboxDataFromFile for base-class not possible!"); - } - - internal VehicleData SetCommonVehicleData(VehicleFileV5Declaration vehicle) - { - var data = ((dynamic) vehicle).Body; - var retVal = new VehicleData { - SavedInDeclarationMode = data.SavedInDeclarationMode, - VehicleCategory = data.VehicleCategory(), - AxleConfiguration = vehicle.Body.AxleConfigurationType(), - CurbWeight = SIConvert<Kilogram>(data.CurbWeight), - //CurbWeigthExtra = data.CurbWeightExtra.SI<Kilogram>(), - //Loading = data.Loading.SI<Kilogram>(), - GrossVehicleMassRating = SIConvert<Kilogram>(data.GrossVehicleMassRating * 1000), - DragCoefficient = data.DragCoefficient, - CrossSectionArea = SIConvert<SquareMeter>(data.CrossSectionArea), - DragCoefficientRigidTruck = data.DragCoefficientRigidTruck, - CrossSectionAreaRigidTruck = SIConvert<SquareMeter>(data.CrossSectionAreaRigidTruck), - //TyreRadius = data.TyreRadius.SI().Milli.Meter.Cast<Meter>(), - Rim = data.RimStr, - }; - - var retarder = new RetarderData() { - Type = - (RetarderData.RetarderType) Enum.Parse(typeof (RetarderData.RetarderType), data.Retarder.TypeStr.ToString(), true), - }; - if (retarder.Type != RetarderData.RetarderType.None) { - retarder.LossMap = RetarderLossMap.ReadFromFile(Path.Combine(vehicle.BasePath, data.Retarder.File)); - retarder.Ratio = data.Retarder.Ratio; - } - retVal.Retarder = retarder; - - return retVal; - } - - internal CombustionEngineData SetCommonCombustionEngineData(EngineFileV2Declaration engine) - { - var data = ((dynamic) engine).Body; - var retVal = new CombustionEngineData() { - SavedInDeclarationMode = data.SavedInDeclarationMode, - ModelName = data.ModelName, - Displacement = SIConvert<CubicMeter>(data.Displacement * 0.000001), // convert vom ccm to m^3 - IdleSpeed = DoubleExtensionMethods.RPMtoRad(data.IdleSpeed), - ConsumptionMap = FuelConsumptionMap.ReadFromFile(Path.Combine(engine.BasePath, data.FuelMap)), - WHTCUrban = SIConvert<KilogramPerWattSecond>(data.WHTCUrban), - WHTCMotorway = SIConvert<KilogramPerWattSecond>(data.WHTCMotorway), - WHTCRural = SIConvert<KilogramPerWattSecond>(data.WHTCRural), - }; - return retVal; - } - - internal GearboxData SetCommonGearboxData(GearboxFileV4Declaration.DataBodyDecl data) - { - return new GearboxData() { - SavedInDeclarationMode = data.SavedInDeclarationMode, - ModelName = data.ModelName, - Type = (GearboxData.GearboxType) Enum.Parse(typeof (GearboxData.GearboxType), data.GearboxType, true), - }; - } - - protected T1 SIConvert<T1>(double val) where T1 : SIBase<T1> - { - return val.SI<T1>(); - } } } \ No newline at end of file diff --git a/VectoCore/FileIO/Reader/Impl/DeclarationModeSimulationDataReader.cs b/VectoCore/FileIO/Reader/Impl/DeclarationModeSimulationDataReader.cs index 49bada7935..0d2c088e2f 100644 --- a/VectoCore/FileIO/Reader/Impl/DeclarationModeSimulationDataReader.cs +++ b/VectoCore/FileIO/Reader/Impl/DeclarationModeSimulationDataReader.cs @@ -6,6 +6,7 @@ using System.Linq; using Newtonsoft.Json; using TUGraz.VectoCore.Exceptions; using TUGraz.VectoCore.FileIO.DeclarationFile; +using TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data; @@ -17,33 +18,8 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl { public class DeclarationModeSimulationDataReader : AbstractSimulationDataReader { - public const int PoweredAxle = 1; - internal DeclarationModeSimulationDataReader() {} - //public void SetJobFile(string fileName) - //{ - // var file = File.ReadAllText(fileName); - // SetJobJson(file, Path.GetDirectoryName(fileName)); - //} - - //public void SetJobJson(string file, string basePath) - //{ - // var fileInfo = GetFileVersion(file); - - // if (!fileInfo.Item2) { - // throw new VectoException("File not saved in Declaration Mode!"); - // } - // switch (fileInfo.Item1) { - // case 2: - // break; - // default: - // throw new UnsupportedFileVersionException("Unsupported version of .vecto file/data. Got Version " + fileInfo.Item1); - // } - //} - - //protected RetarderData RetarderData; - protected void CheckForDeclarationMode(InputFileReader.VersionInfo info, string msg) { if (!info.SavedInDeclarationMode) { @@ -54,17 +30,20 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl public override IEnumerable<VectoRunData> NextRun() { - var segment = GetVehicleClassification(((dynamic) Vehicle).Body); + var dao = new DeclarationDataAdapter(); + var tmpVehicle = dao.CreateVehicleData(Vehicle); + var segment = GetVehicleClassification(tmpVehicle.VehicleCategory, tmpVehicle.AxleConfiguration, + tmpVehicle.GrossVehicleMassRating, tmpVehicle.CurbWeight); foreach (var mission in segment.Missions) { foreach (var loading in mission.Loadings) { - var engineData = CreateEngineData((dynamic) Engine); + var engineData = dao.CreateEngineData(Engine); var parser = new DrivingCycleData.DistanceBasedDataParser(); - DataTable data = VectoCSVFile.ReadStream(mission.CycleFile); + var data = VectoCSVFile.ReadStream(mission.CycleFile); var cycleEntries = parser.Parse(data).ToList(); var simulationRunData = new VectoRunData() { - VehicleData = CreateVehicleData((dynamic) Vehicle, mission, loading), + VehicleData = dao.CreateVehicleData(Vehicle, mission, loading), EngineData = engineData, - GearboxData = CreateGearboxData((dynamic) Gearbox, engineData), + GearboxData = dao.CreateGearboxData(Gearbox, engineData), // @@@ TODO: auxiliaries // @@@ TODO: ... Cycle = new DrivingCycleData() { @@ -76,10 +55,8 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl JobFileName = Job.JobFile, }; yield return simulationRunData; - //var builder = new SimulatorFactory.PowertrainBuilder(); } } - //throw new NotImplementedException(); } protected override void ProcessJob(VectoJobFile vectoJob) @@ -164,140 +141,14 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl } - internal Segment GetVehicleClassification(VehicleFileV5Declaration.DataBodyDecl vehicle) - { - return new DeclarationSegments().Lookup(vehicle.VehicleCategory(), vehicle.AxleConfigurationType(), - vehicle.GrossVehicleMassRating.SI<Ton>().Cast<Kilogram>(), vehicle.CurbWeight.SI<Kilogram>()); - } - - - internal VehicleData CreateVehicleData(VehicleFileV5Declaration vehicle, Mission mission, Kilogram loading) - { - var data = vehicle.Body; - var retVal = SetCommonVehicleData(vehicle); - - retVal.BasePath = vehicle.BasePath; - - retVal.GrossVehicleMassRating = vehicle.Body.GrossVehicleMassRating.SI<Ton>().Cast<Kilogram>(); - - retVal.CurbWeigthExtra = mission.MassExtra; - retVal.Loading = loading; - retVal.DynamicTyreRadius = - DeclarationData.DynamicTyreRadius(data.AxleConfig.Axles[PoweredAxle].WheelsStr, data.RimStr); - - if (data.AxleConfig.Axles.Count < mission.AxleWeightDistribution.Length) { - throw new VectoException( - String.Format("Vehicle does not contain sufficient axles. {0} axles defined, {1} axles required", - data.AxleConfig.Axles.Count, mission.AxleWeightDistribution.Count())); - } - retVal.AxleData = new List<Axle>(); - for (var i = 0; i < mission.AxleWeightDistribution.Length; i++) { - var axleInput = data.AxleConfig.Axles[i]; - var axle = new Axle { - AxleWeightShare = mission.AxleWeightDistribution[i], - TwinTyres = axleInput.TwinTyres, - RollResistanceCoefficient = axleInput.RollResistanceCoefficient, - TyreTestLoad = DoubleExtensionMethods.SI<Newton>(axleInput.TyreTestLoad), - Inertia = DeclarationData.Wheels.Lookup(axleInput.WheelsStr).Inertia, - }; - retVal.AxleData.Add(axle); - } - - foreach (var tmp in mission.TrailerAxleWeightDistribution) { - retVal.AxleData.Add(new Axle() { - AxleWeightShare = tmp, - TwinTyres = DeclarationData.Trailer.TwinTyres, - RollResistanceCoefficient = DeclarationData.Trailer.RollResistanceCoefficient, - TyreTestLoad = DeclarationData.Trailer.TyreTestLoad.SI<Newton>(), - Inertia = DeclarationData.Wheels.Lookup(DeclarationData.Trailer.WheelsType).Inertia - }); - } - - return retVal; - } - - internal CombustionEngineData CreateEngineData(EngineFileV2Declaration engine) - { - var retVal = SetCommonCombustionEngineData(engine); - retVal.Inertia = DeclarationData.Engine.EngineInertia(retVal.Displacement); - foreach (var entry in engine.Body.FullLoadCurves) { - retVal.AddFullLoadCurve(entry.Gears, FullLoadCurve.ReadFromFile(Path.Combine(engine.BasePath, entry.Path), true)); - } - - return retVal; - } - - internal GearboxData CreateGearboxData(GearboxFileV4Declaration gearbox, CombustionEngineData engine) - { - var retVal = SetCommonGearboxData(gearbox.Body); - - if (retVal.Type == GearboxData.GearboxType.AT) { - throw new VectoSimulationException("Automatic Transmission currently not supported in DeclarationMode!"); - } - if (retVal.Type == GearboxData.GearboxType.Custom) { - throw new VectoSimulationException("Custom Transmission not supported in DeclarationMode!"); - } - retVal.Inertia = DeclarationData.Gearbox.Inertia.SI<KilogramSquareMeter>(); - retVal.TractionInterruption = DeclarationData.Gearbox.TractionInterruption(retVal.Type); - retVal.SkipGears = DeclarationData.Gearbox.SkipGears(retVal.Type); - retVal.EarlyShiftUp = DeclarationData.Gearbox.EarlyShiftGears((retVal.Type)); - - retVal.TorqueReserve = DeclarationData.Gearbox.TorqueReserve; - retVal.StartTorqueReserve = DeclarationData.Gearbox.TorqueReserveStart; - retVal.ShiftTime = DeclarationData.Gearbox.MinTimeBetweenGearshifts.SI<Second>(); - retVal.StartSpeed = DeclarationData.Gearbox.StartSpeed.SI<MeterPerSecond>(); - retVal.StartAcceleration = DeclarationData.Gearbox.StartAcceleration.SI<MeterPerSquareSecond>(); - - retVal.HasTorqueConverter = false; - - - for (uint i = 0; i < gearbox.Body.Gears.Count; i++) { - var gearSettings = gearbox.Body.Gears[(int) i]; - var lossMapPath = Path.Combine(gearbox.BasePath, gearSettings.LossMap); - TransmissionLossMap lossMap = TransmissionLossMap.ReadFromFile(lossMapPath, gearSettings.Ratio); - - - if (i == 0) { - retVal.AxleGearData = new GearData(lossMap, null, gearSettings.Ratio, false); - } else { - var shiftPolygon = ComputeShiftPolygon(engine, i); - retVal._gearData.Add(i, new GearData(lossMap, shiftPolygon, gearSettings.Ratio, false)); - } - } - - return retVal; - } - - internal ShiftPolygon ComputeShiftPolygon(CombustionEngineData engine, uint gear) + internal Segment GetVehicleClassification(VehicleCategory category, AxleConfiguration axles, Kilogram grossMassRating, + Kilogram curbWeight) { - var fullLoadCurve = engine.GetFullLoadCurve(gear); - var idleSpeed = engine.IdleSpeed; - - var maxTorque = fullLoadCurve.MaxLoadTorque; - - var entriesDown = new List<ShiftPolygon.ShiftPolygonEntry>(); - var entriesUp = new List<ShiftPolygon.ShiftPolygonEntry>(); - - entriesDown.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = idleSpeed, Torque = 0.SI<NewtonMeter>() }); - - var tq1 = maxTorque * idleSpeed / (fullLoadCurve.PreferredSpeed + fullLoadCurve.LoSpeed - idleSpeed); - entriesDown.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = idleSpeed, Torque = tq1 }); - - var speed1 = (fullLoadCurve.PreferredSpeed + fullLoadCurve.LoSpeed) / 2; - entriesDown.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = speed1, Torque = maxTorque }); - - - entriesUp.Add(new ShiftPolygon.ShiftPolygonEntry() { - AngularSpeed = fullLoadCurve.PreferredSpeed, - Torque = 0.SI<NewtonMeter>() - }); - - tq1 = maxTorque * (fullLoadCurve.PreferredSpeed - idleSpeed) / (fullLoadCurve.N95hSpeed - idleSpeed); - entriesUp.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = fullLoadCurve.PreferredSpeed, Torque = tq1 }); - - entriesUp.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = fullLoadCurve.N95hSpeed, Torque = maxTorque }); + //return new DeclarationSegments().Lookup(vehicle.VehicleCategory(), + // EnumHelper.ParseAxleConfigurationType(vehicle.AxleConfig.TypeStr), + // vehicle.GrossVehicleMassRating.SI<Ton>().Cast<Kilogram>(), vehicle.CurbWeight.SI<Kilogram>()); - return new ShiftPolygon(entriesDown, entriesUp); + return new DeclarationSegments().Lookup(category, axles, grossMassRating, curbWeight); } } } \ No newline at end of file diff --git a/VectoCore/FileIO/Reader/Impl/EngineOnlySimulationDataReader.cs b/VectoCore/FileIO/Reader/Impl/EngineOnlySimulationDataReader.cs index f24b3fc157..ce56e233a9 100644 --- a/VectoCore/FileIO/Reader/Impl/EngineOnlySimulationDataReader.cs +++ b/VectoCore/FileIO/Reader/Impl/EngineOnlySimulationDataReader.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using TUGraz.VectoCore.Exceptions; using TUGraz.VectoCore.FileIO.EngineeringFile; +using TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Data; @@ -20,12 +21,12 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl Log.Warn("Job-file is null or unsupported version"); yield break; } - + var dao = new EngineeringDataAdapter(); foreach (var cycle in job.Body.Cycles) { var simulationRunData = new VectoRunData() { BasePath = job.BasePath, JobFileName = job.JobFile, - EngineData = CreateEngineData((dynamic) Engine), + EngineData = dao.CreateEngineData(Engine), Cycle = DrivingCycleData.ReadFromFileEngineOnly(Path.Combine(job.BasePath, cycle)), IsEngineOnly = true }; diff --git a/VectoCore/FileIO/Reader/Impl/EngineeringModeSimulationDataReader.cs b/VectoCore/FileIO/Reader/Impl/EngineeringModeSimulationDataReader.cs index 1d5648938b..6763ab822f 100644 --- a/VectoCore/FileIO/Reader/Impl/EngineeringModeSimulationDataReader.cs +++ b/VectoCore/FileIO/Reader/Impl/EngineeringModeSimulationDataReader.cs @@ -7,6 +7,7 @@ using Common.Logging; using Newtonsoft.Json; using TUGraz.VectoCore.Exceptions; using TUGraz.VectoCore.FileIO.EngineeringFile; +using TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; @@ -72,13 +73,14 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl Log.Warn("Job-file is null or unsupported version"); yield break; } + var dao = new EngineeringDataAdapter(); foreach (var cycle in job.Body.Cycles) { var simulationRunData = new VectoRunData() { BasePath = job.BasePath, JobFileName = job.JobFile, - EngineData = CreateEngineData((dynamic) Engine), - GearboxData = CreateGearboxData((dynamic) Gearbox), - VehicleData = CreateVehicleData((dynamic) Vehicle), + EngineData = dao.CreateEngineData(Engine), + GearboxData = dao.CreateGearboxData(Gearbox, null), + VehicleData = dao.CreateVehicleData(Vehicle), //DriverData = new DriverData(), //Aux = Cycle = DrivingCycleData.ReadFromFile(Path.Combine(job.BasePath, cycle), DrivingCycleData.CycleType.DistanceBased), @@ -96,7 +98,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl public static VehicleData CreateVehicleDataFromFile(string file) { var data = DoReadVehicleFile(file); - return new EngineeringModeSimulationDataReader().CreateVehicleData((dynamic) data); + return new EngineeringDataAdapter().CreateVehicleData(data); } /// <summary> @@ -107,7 +109,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl public static CombustionEngineData CreateEngineDataFromFile(string file) { var data = DoReadEngineFile(file); - return new EngineeringModeSimulationDataReader().CreateEngineData((dynamic) data); + return new EngineeringDataAdapter().CreateEngineData(data); } /// <summary> @@ -118,7 +120,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl public static GearboxData CreateGearboxDataFromFile(string file) { var data = DoReadGearboxFile(file); - return new EngineeringModeSimulationDataReader().CreateGearboxData((dynamic) data); + return new EngineeringDataAdapter().CreateGearboxData(data, null); } /// <summary> @@ -222,94 +224,5 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl throw new UnsupportedFileVersionException("Unsopported Version of vehicle-file. Got version " + fileInfo.Version); } } - - /// <summary> - /// convert datastructure representing file-contents into internal datastructure - /// Vehicle, file-format version 5 - /// </summary> - /// <param name="vehicle">VehicleFileV5 container</param> - /// <returns>VehicleData instance</returns> - internal VehicleData CreateVehicleData(VehicleFileV5Engineering vehicle) - { - var data = vehicle.Body; - - var retVal = SetCommonVehicleData(vehicle); - - retVal.BasePath = vehicle.BasePath; - retVal.CurbWeigthExtra = data.CurbWeightExtra.SI<Kilogram>(); - retVal.Loading = data.Loading.SI<Kilogram>(); - retVal.DynamicTyreRadius = data.DynamicTyreRadius.SI().Milli.Meter.Cast<Meter>(); - - retVal.AxleData = data.AxleConfig.Axles.Select(axle => new Axle { - Inertia = DoubleExtensionMethods.SI<KilogramSquareMeter>(axle.Inertia), - TwinTyres = axle.TwinTyres, - RollResistanceCoefficient = axle.RollResistanceCoefficient, - AxleWeightShare = axle.AxleWeightShare, - TyreTestLoad = DoubleExtensionMethods.SI<Newton>(axle.TyreTestLoad), - //Wheels = axle.WheelsStr - }).ToList(); - return retVal; - } - - /// <summary> - /// convert datastructure representing the file-contents into internal data structure - /// Engine, file-format version 2 - /// </summary> - /// <param name="engine">Engin-Data file (Engineering mode)</param> - /// <returns></returns> - internal CombustionEngineData CreateEngineData(EngineFileV2Engineering engine) - { - var retVal = SetCommonCombustionEngineData(engine); - retVal.Inertia = engine.Body.Inertia.SI<KilogramSquareMeter>(); - foreach (var entry in engine.Body.FullLoadCurves) { - retVal.AddFullLoadCurve(entry.Gears, FullLoadCurve.ReadFromFile(Path.Combine(engine.BasePath, entry.Path), false)); - } - - return retVal; - } - - - /// <summary> - /// convert datastructure representing the file-contents into internal data structure - /// Gearbox, File-format Version 4 - /// </summary> - /// <param name="gearbox"></param> - /// <returns></returns> - internal GearboxData CreateGearboxData(GearboxFileV4Engineering gearbox) - { - var retVal = SetCommonGearboxData(gearbox.Body); - - var data = gearbox.Body; - - retVal.Inertia = data.Inertia.SI<KilogramSquareMeter>(); - retVal.TractionInterruption = data.TractionInterruption.SI<Second>(); - retVal.SkipGears = data.SkipGears; - retVal.EarlyShiftUp = data.EarlyShiftUp; - retVal.TorqueReserve = data.TorqueReserve; - retVal.StartTorqueReserve = data.StartTorqueReserve; - retVal.ShiftTime = data.ShiftTime.SI<Second>(); - retVal.StartSpeed = data.StartSpeed.SI<MeterPerSecond>(); - retVal.StartAcceleration = data.StartAcceleration.SI<MeterPerSquareSecond>(); - - retVal.HasTorqueConverter = data.TorqueConverter.Enabled; - - for (uint i = 0; i < gearbox.Body.Gears.Count; i++) { - var gearSettings = gearbox.Body.Gears[(int) i]; - var lossMapPath = Path.Combine(gearbox.BasePath, gearSettings.LossMap); - TransmissionLossMap lossMap = TransmissionLossMap.ReadFromFile(lossMapPath, gearSettings.Ratio); - - var shiftPolygon = !String.IsNullOrEmpty(gearSettings.ShiftPolygon) - ? ShiftPolygon.ReadFromFile(Path.Combine(gearbox.BasePath, gearSettings.ShiftPolygon)) - : null; - - var gear = new GearData(lossMap, shiftPolygon, gearSettings.Ratio, gearSettings.TCactive); - if (i == 0) { - retVal.AxleGearData = gear; - } else { - retVal._gearData.Add(i, gear); - } - } - return retVal; - } } } \ No newline at end of file diff --git a/VectoCore/Models/Declaration/AxleConfiguration.cs b/VectoCore/Models/Declaration/AxleConfiguration.cs index b927f21a2f..e8aadbbea8 100644 --- a/VectoCore/Models/Declaration/AxleConfiguration.cs +++ b/VectoCore/Models/Declaration/AxleConfiguration.cs @@ -1,3 +1,5 @@ +using System; + namespace TUGraz.VectoCore.Models.Declaration { public enum AxleConfiguration @@ -20,4 +22,12 @@ namespace TUGraz.VectoCore.Models.Declaration return self.ToString().Substring(11); } } + + public static class EnumHelper + { + public static AxleConfiguration ParseAxleConfigurationType(string typeString) + { + return (AxleConfiguration) Enum.Parse(typeof (AxleConfiguration), "AxleConfig_" + typeString, true); + } + } } \ No newline at end of file diff --git a/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/Models/Declaration/DeclarationData.cs index d687130c56..ece0c51df3 100644 --- a/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/Models/Declaration/DeclarationData.cs @@ -1,6 +1,8 @@ using System; +using System.Collections.Generic; using System.Linq; using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.Declaration @@ -58,6 +60,12 @@ namespace TUGraz.VectoCore.Models.Declaration _electricSystem = new ElectricSystem(); } + public static int PoweredAxle() + { + return 1; + } + + private static DeclarationData Instance() { return _instance ?? (_instance = new DeclarationData()); @@ -147,6 +155,38 @@ namespace TUGraz.VectoCore.Models.Declaration } return false; } + + internal static ShiftPolygon ComputeShiftPolygon(CombustionEngineData engine, uint gear) + { + var fullLoadCurve = engine.GetFullLoadCurve(gear); + var idleSpeed = engine.IdleSpeed; + + var maxTorque = fullLoadCurve.MaxLoadTorque; + + var entriesDown = new List<ShiftPolygon.ShiftPolygonEntry>(); + var entriesUp = new List<ShiftPolygon.ShiftPolygonEntry>(); + + entriesDown.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = idleSpeed, Torque = 0.SI<NewtonMeter>() }); + + var tq1 = maxTorque * idleSpeed / (fullLoadCurve.PreferredSpeed + fullLoadCurve.LoSpeed - idleSpeed); + entriesDown.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = idleSpeed, Torque = tq1 }); + + var speed1 = (fullLoadCurve.PreferredSpeed + fullLoadCurve.LoSpeed) / 2; + entriesDown.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = speed1, Torque = maxTorque }); + + + entriesUp.Add(new ShiftPolygon.ShiftPolygonEntry() { + AngularSpeed = fullLoadCurve.PreferredSpeed, + Torque = 0.SI<NewtonMeter>() + }); + + tq1 = maxTorque * (fullLoadCurve.PreferredSpeed - idleSpeed) / (fullLoadCurve.N95hSpeed - idleSpeed); + entriesUp.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = fullLoadCurve.PreferredSpeed, Torque = tq1 }); + + entriesUp.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = fullLoadCurve.N95hSpeed, Torque = maxTorque }); + + return new ShiftPolygon(entriesDown, entriesUp); + } } } } \ No newline at end of file diff --git a/VectoCore/Models/SimulationComponent/Data/CombustionEngineData.cs b/VectoCore/Models/SimulationComponent/Data/CombustionEngineData.cs index 048ca995e8..dab60bec06 100644 --- a/VectoCore/Models/SimulationComponent/Data/CombustionEngineData.cs +++ b/VectoCore/Models/SimulationComponent/Data/CombustionEngineData.cs @@ -25,7 +25,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data /// <summary> /// [m^3] /// </summary> - public SI Displacement { get; internal set; } + public CubicMeter Displacement { get; internal set; } /// <summary> /// [rad/s] diff --git a/VectoCore/VectoCore.csproj b/VectoCore/VectoCore.csproj index 10899719f0..6cbcb6f861 100644 --- a/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore.csproj @@ -119,6 +119,9 @@ <Compile Include="FileIO\EngineeringFile\VehicleFileEng.cs" /> <Compile Include="FileIO\InputFileReader.cs" /> <Compile Include="FileIO\JsonDataHeader.cs" /> + <Compile Include="FileIO\Reader\DataObjectAdaper\AbstractSimulationDataAdapter.cs" /> + <Compile Include="FileIO\Reader\DataObjectAdaper\DeclarationDataAdapter.cs" /> + <Compile Include="FileIO\Reader\DataObjectAdaper\EngineeringDataAdapter.cs" /> <Compile Include="FileIO\Reader\Impl\AbstractSimulationDataReader.cs" /> <Compile Include="FileIO\Reader\Impl\DeclarationModeSimulationDataReader.cs" /> <Compile Include="FileIO\Reader\Impl\EngineeringModeSimulationDataReader.cs" /> -- GitLab