From eea84d6b70dfc2754340225c7ad59eea47461e7d Mon Sep 17 00:00:00 2001 From: "VKMTHD\\haraldmartini" <harald.martini@student.tugraz.at> Date: Fri, 23 Sep 2022 09:09:16 +0200 Subject: [PATCH] added 2 tons to gvm for PEVs, Added electrical power demand for pneumatic system --- .../VectoCore/Configuration/Constants.cs | 2 + .../AuxiliaryDataAdapter.cs | 45 +++++++---- ...DeclarationModeHeavyLorryRunDataFactory.cs | 8 +- .../Auxiliaries/IDeclarationAuxiliaryTable.cs | 7 ++ .../Auxiliaries/PneumaticSystem.cs | 60 +++++++++++++- .../Declaration/Auxiliaries/SteeringPump.cs | 11 ++- .../Models/Declaration/TruckSegments.cs | 33 ++++++-- .../Models/Simulation/Data/ModalResult.cs | 8 +- .../Models/Simulation/Data/VectoRunData.cs | 4 +- .../Impl/ElectricAuxiliaries.cs | 1 + .../Resources/Declaration/VAUX/ES-Tech.csv | 6 +- .../Resources/Declaration/VAUX/PS-Table.csv | 78 +++++++++---------- .../Models/Declaration/DeclarationDataTest.cs | 6 +- .../Models/Simulation/AuxTests.cs | 2 +- 14 files changed, 191 insertions(+), 80 deletions(-) diff --git a/VectoCore/VectoCore/Configuration/Constants.cs b/VectoCore/VectoCore/Configuration/Constants.cs index 4f24d99292..5c659f02e6 100644 --- a/VectoCore/VectoCore/Configuration/Constants.cs +++ b/VectoCore/VectoCore/Configuration/Constants.cs @@ -329,7 +329,9 @@ namespace TUGraz.VectoCore.Configuration public static readonly Meter GearboxLookaheadForAccelerationEstimation = 100.SI<Meter>(); public static readonly Kilogram MaximumGrossVehicleMass = 40000.SI<Kilogram>(); + public static readonly Kilogram MaximumGrossVehicleMassPEV = 42000.SI<Kilogram>(); public static readonly Kilogram MaximumGrossVehicleMassEMS = 60000.SI<Kilogram>(); + public static readonly Kilogram MaximumGrossVehicleMassEMS_PEV = 62000.SI<Kilogram>(); public static readonly MeterPerSecond HighwaySpeedThreshold = 70.KMPHtoMeterPerSecond(); public static readonly MeterPerSecond RuralSpeedThreshold = 50.KMPHtoMeterPerSecond(); diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs index b9bcede113..2a60810209 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs @@ -123,6 +123,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen "In Declaration Mode exactly 4 Auxiliaries must be defined for battery electric vehicles: Steering pump, HVAC, Electric System, Pneumatic System."); } + var alternatorEfficiency = DeclarationData.AlternatorEfficiency; + foreach (var auxType in AuxiliaryTypes) { var auxData = auxInputData.Auxiliaries.FirstOrDefault(a => a.Type == auxType); @@ -142,19 +144,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen switch (auxType) { case AuxiliaryType.Fan: - AddFan(mission, hdvClass, jobType, auxData, aux, retVal); + AddFan(mission, hdvClass, jobType, auxData, aux, alternatorEfficiency, retVal); break; case AuxiliaryType.SteeringPump: - AddSteeringPumps(mission, hdvClass, numSteeredAxles, jobType, auxData, aux, retVal); + AddSteeringPumps(mission, hdvClass, numSteeredAxles, jobType, auxData, alternatorEfficiency, aux, retVal); break; case AuxiliaryType.HVAC: - AddHVAC(mission, hdvClass, aux, auxData,retVal); + AddHVAC(mission, hdvClass, aux, auxData, alternatorEfficiency ,retVal); break; case AuxiliaryType.PneumaticSystem: - AddPneumaticSystem(mission, jobType, auxData, aux,retVal); + AddPneumaticSystem(mission, jobType, auxData, alternatorEfficiency, aux,retVal); break; case AuxiliaryType.ElectricSystem: - AddElectricSystem(mission, aux, auxData, retVal); + AddElectricSystem(mission, aux, auxData, alternatorEfficiency, retVal); break; default: continue; } @@ -167,7 +169,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen } private static void AddElectricSystem(MissionType mission, VectoRunData.AuxData aux, - IAuxiliaryDeclarationInputData auxData, List<VectoRunData.AuxData> auxDataList) + IAuxiliaryDeclarationInputData auxData, double alternatorEfficiency, List<VectoRunData.AuxData> auxDataList) { aux.PowerDemandMech = DeclarationData.ElectricSystem.Lookup(mission, auxData.Technology.FirstOrDefault()).PowerDemand; aux.ID = Constants.Auxiliaries.IDs.ElectricSystem; @@ -175,7 +177,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen } private static void AddPneumaticSystem(MissionType mission, VectoSimulationJobType jobType, - IAuxiliaryDeclarationInputData auxData, VectoRunData.AuxData aux, List<VectoRunData.AuxData> auxDataList) + IAuxiliaryDeclarationInputData auxData, double alternatorEfficiency, VectoRunData.AuxData aux, + List<VectoRunData.AuxData> auxDataList) { if (!DeclarationData.PneumaticSystem.IsApplicable(jobType, auxData.Technology.FirstOrDefault())) { @@ -187,22 +190,31 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen .PowerDemand; aux.ID = Constants.Auxiliaries.IDs.PneumaticSystem; aux.IsFullyElectric = DeclarationData.PneumaticSystem.IsFullyElectric(auxData.Technology.FirstOrDefault()); + if (aux.IsFullyElectric) { + aux.PowerDemandElectric = + DeclarationData.PneumaticSystem.GetElectricPowerDemand(mission, + auxData.Technology.FirstOrDefault()); + } else { + aux.PowerDemandElectric = aux.PowerDemandMech * alternatorEfficiency; + } auxDataList.Add(aux); } private static void AddHVAC(MissionType mission, VehicleClass hdvClass, VectoRunData.AuxData aux, - IAuxiliaryDeclarationInputData auxData, List<VectoRunData.AuxData> auxDataList) + IAuxiliaryDeclarationInputData auxData, double alternatorEfficiency, List<VectoRunData.AuxData> auxDataList) { aux.PowerDemandMech = DeclarationData.HeatingVentilationAirConditioning.Lookup( mission, auxData.Technology.FirstOrDefault(), hdvClass).PowerDemand; aux.ID = Constants.Auxiliaries.IDs.HeatingVentilationAirCondition; + aux.PowerDemandElectric = aux.PowerDemandMech * alternatorEfficiency; //TODO: calculate electrical power demand auxDataList.Add(aux); return; } private static void AddSteeringPumps(MissionType mission, VehicleClass hdvClass, int? numSteeredAxles, - VectoSimulationJobType jobType, IAuxiliaryDeclarationInputData auxData, VectoRunData.AuxData aux, + VectoSimulationJobType jobType, IAuxiliaryDeclarationInputData auxData, double alternatorEfficiency, + VectoRunData.AuxData aux, List<VectoRunData.AuxData> auxDataList) { @@ -219,7 +231,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen var powerDemand = DeclarationData.SteeringPump.Lookup(mission, hdvClass, auxData.Technology); - if (powerDemand.mech != 0.SI<Watt>()) { + if (powerDemand.mechanicalPumps != 0.SI<Watt>()) { var spMech = new VectoRunData.AuxData { DemandType = AuxiliaryDemandType.Constant, @@ -227,14 +239,14 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen .ToList(), IsFullyElectric = false, ID = Constants.Auxiliaries.IDs.SteeringPump, - PowerDemandMech = powerDemand.mech, + PowerDemandMech = powerDemand.mechanicalPumps, MissionType = mission, }; auxDataList.Add(spMech); } - if (powerDemand.electric != 0.SI<Watt>()) { + if (powerDemand.electricPumps != 0.SI<Watt>()) { var spElectric = new VectoRunData.AuxData { DemandType = AuxiliaryDemandType.Constant, @@ -242,7 +254,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen .ToList(), IsFullyElectric = true, ID = Constants.Auxiliaries.IDs.SteeringPump_el, - PowerDemandMech = powerDemand.electric, + PowerDemandElectric = powerDemand.electricPumps * alternatorEfficiency, + PowerDemandMech = powerDemand.electricPumps / alternatorEfficiency, //in case the fully electric pumps are connected to a Conventional vehicle MissionType = mission, }; @@ -252,7 +265,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen } private static void AddFan(MissionType mission, VehicleClass hdvClass, VectoSimulationJobType jobType, - IAuxiliaryDeclarationInputData auxData, VectoRunData.AuxData aux, List<VectoRunData.AuxData> auxDataList) + IAuxiliaryDeclarationInputData auxData, VectoRunData.AuxData aux, double alternatorEfficiency, + List<VectoRunData.AuxData> auxDataList) { if (!DeclarationData.Fan.IsApplicable(hdvClass, jobType, auxData.Technology.FirstOrDefault())) { throw new VectoException( @@ -266,7 +280,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen aux.PowerDemandMech = DeclarationData.Fan.LookupPowerDemand(hdvClass, mission, auxData.Technology.FirstOrDefault()); aux.ID = Constants.Auxiliaries.IDs.Fan; aux.IsFullyElectric = DeclarationData.Fan.IsFullyElectric(hdvClass, auxData.Technology.FirstOrDefault()); - + + aux.PowerDemandElectric = aux.PowerDemandMech * alternatorEfficiency; auxDataList.Add(aux); } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs index 6b5698812f..48ade0b2df 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs @@ -145,14 +145,14 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa return GetNextRun(); } - protected Segment GetSegment(IVehicleDeclarationInputData vehicle) + protected Segment GetSegment(IVehicleDeclarationInputData vehicle, bool batteryElectric = false) { _allowVocational = true; Segment segment; try { segment = DeclarationData.TruckSegments.Lookup( - vehicle.VehicleCategory, vehicle.AxleConfiguration, vehicle.GrossVehicleMassRating, + vehicle.VehicleCategory, batteryElectric, vehicle.AxleConfiguration, vehicle.GrossVehicleMassRating, vehicle.CurbMassChassis, vehicle.VocationalVehicle); } @@ -160,7 +160,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa { _allowVocational = false; segment = DeclarationData.TruckSegments.Lookup( - vehicle.VehicleCategory, vehicle.AxleConfiguration, vehicle.GrossVehicleMassRating, + vehicle.VehicleCategory, batteryElectric, vehicle.AxleConfiguration, vehicle.GrossVehicleMassRating, vehicle.CurbMassChassis, false); } @@ -409,7 +409,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa protected override void Initialize() { - _segment = GetSegment(InputDataProvider.JobInputData.Vehicle); + _segment = GetSegment(InputDataProvider.JobInputData.Vehicle, true); } diff --git a/VectoCore/VectoCore/Models/Declaration/Auxiliaries/IDeclarationAuxiliaryTable.cs b/VectoCore/VectoCore/Models/Declaration/Auxiliaries/IDeclarationAuxiliaryTable.cs index f461cec691..a25e98e2ba 100644 --- a/VectoCore/VectoCore/Models/Declaration/Auxiliaries/IDeclarationAuxiliaryTable.cs +++ b/VectoCore/VectoCore/Models/Declaration/Auxiliaries/IDeclarationAuxiliaryTable.cs @@ -30,6 +30,8 @@ */ using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; namespace TUGraz.VectoCore.Models.Declaration.Auxiliaries { @@ -50,4 +52,9 @@ namespace TUGraz.VectoCore.Models.Declaration.Auxiliaries bool IsFullyElectric(string technology); string[] FullyElectricTechnologies(); } + + public interface IDeclarationAuxiliaryElectricPowerTable + { + Watt GetElectricPowerDemand(MissionType mission, string technology); + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/Declaration/Auxiliaries/PneumaticSystem.cs b/VectoCore/VectoCore/Models/Declaration/Auxiliaries/PneumaticSystem.cs index d89df7ef9b..406b1ae457 100644 --- a/VectoCore/VectoCore/Models/Declaration/Auxiliaries/PneumaticSystem.cs +++ b/VectoCore/VectoCore/Models/Declaration/Auxiliaries/PneumaticSystem.cs @@ -39,10 +39,11 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.Declaration.Auxiliaries { - public sealed class PneumaticSystem : LookupData<MissionType, string, AuxDemandEntry>, IDeclarationAuxiliaryTable, IDeclarationAuxiliaryArchitectureTable, IDeclarationAuxiliaryFullyElectricTable + public sealed class PneumaticSystem : LookupData<MissionType, string, AuxDemandEntry>, IDeclarationAuxiliaryTable, IDeclarationAuxiliaryArchitectureTable, IDeclarationAuxiliaryFullyElectricTable, IDeclarationAuxiliaryElectricPowerTable { private IDeclarationAuxiliaryArchitectureTable _declarationAuxiliaryArchitectureTableImplementation = new PneumaticSystemArchitectureTable(); private IDeclarationAuxiliaryFullyElectricTable _declarationAuxiliaryFullyElectricTableImplementation = new PneumaticSystemFullyElectricTable(); + private IDeclarationAuxiliaryElectricPowerTable _declarationAuxiliaryElectricPowerTableImplementation = new PneumaticSystemElectricPowerTable(); protected override string ResourceId => DeclarationData.DeclarationDataResourcePrefix + ".VAUX.PS-Table.csv"; protected override string ErrorMessage => "Auxiliary Lookup Error: No value found for Pneumatic System. Mission: '{0}', Technology: '{1}'"; @@ -52,11 +53,17 @@ namespace TUGraz.VectoCore.Models.Declaration.Auxiliaries foreach (DataRow row in table.Rows) { var technology = row.Field<string>("technology"); foreach (DataColumn col in table.Columns.Cast<DataColumn>().Skip(table.Columns.IndexOf("fullyelectric") + 1)) { + if (col.Caption == "longhaul_el") + { + break; + } if (col.Caption != "technology") { Data[Tuple.Create(col.Caption.ParseEnum<MissionType>(), technology)] = new AuxDemandEntry() { PowerDemand = row.ParseDouble(col.Caption).SI<Watt>() }; } + + } } } @@ -107,5 +114,56 @@ namespace TUGraz.VectoCore.Models.Declaration.Auxiliaries } #endregion + + + + + #region Implementation of IDeclarationAuxiliaryElectricPowerTable + + public Watt GetElectricPowerDemand(MissionType mission, string technology) + { + return _declarationAuxiliaryElectricPowerTableImplementation.GetElectricPowerDemand(mission, technology); + } + + private class PneumaticSystemElectricPowerTable : LookupData<MissionType, string, AuxDemandEntry>, IDeclarationAuxiliaryElectricPowerTable + { + #region Overrides of LookupData + + protected override string ResourceId => DeclarationData.DeclarationDataResourcePrefix + ".VAUX.PS-Table.csv"; + protected override string ErrorMessage => "Auxiliary Lookup Error: No fully electric value found for Pneumatic System. Mission: '{0}', Technology: '{1}'"; + protected override void ParseData(DataTable table) + { + foreach (DataRow row in table.Rows) + { + + var electric = row.ParseBoolean("fullyelectric"); + if (!electric) + { + continue; + } + var technology = row["technology"].ToString(); + foreach (DataColumn col in table.Columns.Cast<DataColumn>().Skip(table.Columns.IndexOf("longhaul_el"))) + { + Data[Tuple.Create(col.Caption.Replace("_el", "").ParseEnum<MissionType>(), technology)] = new AuxDemandEntry() + { + PowerDemand = row.ParseDouble(col.Caption).SI<Watt>() + }; + } + } + } + + #endregion + + #region Implementation of IDeclarationAuxiliaryElectricPowerTable + + public Watt GetElectricPowerDemand(MissionType mission, string technology) + { + return Lookup(mission, technology).PowerDemand; + } + + #endregion + } + + #endregion } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/Declaration/Auxiliaries/SteeringPump.cs b/VectoCore/VectoCore/Models/Declaration/Auxiliaries/SteeringPump.cs index d4ed26a400..905f1331c1 100644 --- a/VectoCore/VectoCore/Models/Declaration/Auxiliaries/SteeringPump.cs +++ b/VectoCore/VectoCore/Models/Declaration/Auxiliaries/SteeringPump.cs @@ -47,8 +47,15 @@ namespace TUGraz.VectoCore.Models.Declaration.Auxiliaries private readonly SteeringPumpBaseLine _baseLookup = new SteeringPumpBaseLine(); private readonly SteeringPumpAxles _axleLookup = new SteeringPumpAxles(); private readonly SteeringPumpTechnologies _techLookup = new SteeringPumpTechnologies(); - - public (Watt mech, Watt electric) Lookup(MissionType mission, VehicleClass hdvClass, IEnumerable<string> technologies) + /// <summary> + /// Returns the power demand of the steering pumps split into mechanical pumps and electric pumps + /// </summary> + /// <param name="mission"></param> + /// <param name="hdvClass"></param> + /// <param name="technologies"></param> + /// <returns>Note: The power demand is mechanical also for the electric pumps</returns> + /// <exception cref="VectoException"></exception> + public (Watt mechanicalPumps, Watt electricPumps) Lookup(MissionType mission, VehicleClass hdvClass, IEnumerable<string> technologies) { var baseLine = _baseLookup.Lookup(mission, hdvClass); var powerMech = new SteeringPumpValues<Watt>(0.SI<Watt>(), 0.SI<Watt>(), 0.SI<Watt>()); diff --git a/VectoCore/VectoCore/Models/Declaration/TruckSegments.cs b/VectoCore/VectoCore/Models/Declaration/TruckSegments.cs index c36a2bd389..a69fc0621e 100644 --- a/VectoCore/VectoCore/Models/Declaration/TruckSegments.cs +++ b/VectoCore/VectoCore/Models/Declaration/TruckSegments.cs @@ -35,6 +35,7 @@ using System.Data; using System.IO; using System.Linq; using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; @@ -59,8 +60,8 @@ namespace TUGraz.VectoCore.Models.Declaration VehicleCategory vehicleCategory, AxleConfiguration axleConfiguration, Kilogram grossVehicleMassRating, Kilogram curbWeight, bool vocational) { - - return Lookup(vehicleCategory, axleConfiguration, grossVehicleMassRating, curbWeight, vocational, false); + + return Lookup(vehicleCategory, axleConfiguration, grossVehicleMassRating, curbWeight, vocational, false, false); } public VehicleCategory[] GetVehicleCategories(bool declarationOnly = true) @@ -81,9 +82,16 @@ namespace TUGraz.VectoCore.Models.Declaration .Select(row => AxleConfigurationHelper.Parse(row.Field<string>("axleconf."))).Distinct(); } + public Segment Lookup( + VehicleCategory vehicleCategory, bool isBatteryElectric, AxleConfiguration axleConfiguration, + Kilogram grossVehicleMassRating, Kilogram curbWeight, bool vocational) + { + return Lookup(vehicleCategory, axleConfiguration, grossVehicleMassRating, curbWeight, vocational,false, isBatteryElectric); + } + public Segment Lookup( VehicleCategory vehicleCategory, AxleConfiguration axleConfiguration, - Kilogram grossVehicleMassRating, Kilogram curbWeight, bool vocational, bool considerInvalid) + Kilogram grossVehicleMassRating, Kilogram curbWeight, bool vocational, bool considerInvalid, bool isBatteryElectric) { var row = GetSegmentDataRow(vehicleCategory, axleConfiguration, grossVehicleMassRating, vocational, considerInvalid); if (row == null) { @@ -102,7 +110,7 @@ namespace TUGraz.VectoCore.Models.Declaration RessourceHelper.ReadStream( DeclarationData.DeclarationDataResourcePrefix + ".VACC." + row.Field<string>(".vaccfile")), - Missions = CreateMissions(grossVehicleMassRating, curbWeight, row, vehicleHeight), + Missions = CreateMissions(grossVehicleMassRating, curbWeight, row, vehicleHeight, isBatteryElectric), DesignSpeed = row.ParseDouble("designspeed").KMPHtoMeterPerSecond(), //GrossVehicleMassRating = grossVehicleMassRating, @@ -179,8 +187,8 @@ namespace TUGraz.VectoCore.Models.Declaration return row.SI<SquareMeter>("cdxa_default"); } - private static Mission[] CreateMissions( - Kilogram grossVehicleWeight, Kilogram curbWeight, DataRow row, Meter vehicleHeight) + private static Mission[] CreateMissions(Kilogram grossVehicleWeight, Kilogram curbWeight, DataRow row, + Meter vehicleHeight, bool isBatteryElectric) { var missionTypes = Enum.GetValues(typeof(MissionType)).Cast<MissionType>(); var missions = new List<Mission>(); @@ -189,7 +197,18 @@ namespace TUGraz.VectoCore.Models.Declaration var body = GetBody(row, missionType); var trailers = GetTrailers(row, missionType); - var maxGVW = missionType.IsEMS()? Constants.SimulationSettings.MaximumGrossVehicleMassEMS : Constants.SimulationSettings.MaximumGrossVehicleMass; + Kilogram maxGVW; + if (missionType.IsEMS()) { + maxGVW = isBatteryElectric + ? Constants.SimulationSettings.MaximumGrossVehicleMassEMS_PEV + : Constants.SimulationSettings.MaximumGrossVehicleMassEMS; + } else { + maxGVW = isBatteryElectric + ? Constants.SimulationSettings.MaximumGrossVehicleMassPEV + : Constants.SimulationSettings.MaximumGrossVehicleMass; + } + + // limit gvw to MaxGVW (40t) var gvw = VectoMath.Min( diff --git a/VectoCore/VectoCore/Models/Simulation/Data/ModalResult.cs b/VectoCore/VectoCore/Models/Simulation/Data/ModalResult.cs index 85d03318d5..f1a76b9f84 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/ModalResult.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/ModalResult.cs @@ -322,10 +322,10 @@ namespace TUGraz.VectoCore.Models.Simulation.Data ModalResultField.P_DCDC_Out, ModalResultField.P_DCDC_missing, - //Debug - ModalResultField.DCDCStateCount_, - ModalResultField.SimIntervalCurrent_, - ModalResultField.SimIntervalPrev_ + ////Debug + //ModalResultField.DCDCStateCount_, + //ModalResultField.SimIntervalCurrent_, + //ModalResultField.SimIntervalPrev_ }; protected internal readonly Dictionary<IFuelProperties, Dictionary<ModalResultField, DataColumn>> FuelColumns = new Dictionary<IFuelProperties, Dictionary<ModalResultField, DataColumn>>(); diff --git a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs index fbd8db5c6a..a740bceebd 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs @@ -184,10 +184,13 @@ namespace TUGraz.VectoCore.Models.Simulation.Data public IList<string> Technology; [SIRange(0, 100 * Constants.Kilo)] public Watt PowerDemandMech; + [SIRange(0, 100 * Constants.Kilo)] public Watt PowerDemandElectric; [JsonIgnore] public Func<DrivingCycleData.DrivingCycleEntry, Watt> PowerDemandMechFunc; + + [Required] public AuxiliaryDemandType DemandType; [Required] public bool ConnectToDcDc; @@ -196,7 +199,6 @@ namespace TUGraz.VectoCore.Models.Simulation.Data public MissionType? MissionType; - public double AlternatorEfficiency { get; } } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricAuxiliaries.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricAuxiliaries.cs index 56f86b29c8..acbe1407ac 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricAuxiliaries.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricAuxiliaries.cs @@ -47,6 +47,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public Watt PowerDemand(Second absTime, Second dt, bool dryRun) { var left = VehicleContainer.DrivingCycleInfo.CycleData.LeftSample; + var sum = 0.SI<Watt>(); foreach (var auxData in _auxData) { if (auxData.DemandType == AuxiliaryDemandType.Constant) { diff --git a/VectoCore/VectoCore/Resources/Declaration/VAUX/ES-Tech.csv b/VectoCore/VectoCore/Resources/Declaration/VAUX/ES-Tech.csv index 74a7d9a7ab..8a2638c77f 100644 --- a/VectoCore/VectoCore/Resources/Declaration/VAUX/ES-Tech.csv +++ b/VectoCore/VectoCore/Resources/Declaration/VAUX/ES-Tech.csv @@ -1,3 +1,3 @@ -Technology , Long haul , Regional delivery , Urban delivery , Municipal utility , Construction -Standard technology , 1200 , 1000 , 1000 , 1000 , 1000 -"Standard technology - LED headlights, all" , 1150 , 950 , 950 , 950 , 950 +Technology ,Long haul ,Regional delivery ,Urban delivery ,Municipal utility ,Construction +Standard technology ,1714.2857 , 1428.5714 , 1428.5714 , 1428.5714 , 1428.5714 +"Standard technology - LED headlights, all" ,1642.8571 , 1357.1429 , 1357.1429 , 1357.1429 , 1357.1429 \ No newline at end of file diff --git a/VectoCore/VectoCore/Resources/Declaration/VAUX/PS-Table.csv b/VectoCore/VectoCore/Resources/Declaration/VAUX/PS-Table.csv index 1ea3f170aa..5981bff102 100644 --- a/VectoCore/VectoCore/Resources/Declaration/VAUX/PS-Table.csv +++ b/VectoCore/VectoCore/Resources/Declaration/VAUX/PS-Table.csv @@ -1,39 +1,39 @@ -Technology ,conventional ,P-HEV ,S-HEV ,PEV ,fully electric ,Long Haul ,Regional Delivery ,Urban Delivery ,Municipal utility ,Construction -Small , 1 , 1 , 1 , 0 , 0 , 1400 , 1300 , 1200 , 1200 , 1300 -Small + ESS , 1 , 1 , 1 , 0 , 0 , 900 , 800 , 800 , 800 , 800 -Small + visco clutch , 1 , 1 , 1 , 0 , 0 , 800 , 700 , 700 , 700 , 700 -Small + mech. clutch , 1 , 1 , 1 , 0 , 0 , 600 , 600 , 650 , 650 , 600 -Small + ESS + AMS , 1 , 1 , 1 , 0 , 0 , 500 , 400 , 500 , 500 , 400 -Small + visco clutch + AMS , 1 , 1 , 1 , 0 , 0 , 400 , 300 , 400 , 400 , 300 -Small + mech. clutch + AMS , 1 , 1 , 1 , 0 , 0 , 200 , 200 , 350 , 350 , 200 -Medium Supply 1-stage , 1 , 1 , 1 , 0 , 0 , 1600 , 1400 , 1350 , 1350 , 1500 -Medium Supply 1-stage + ESS , 1 , 1 , 1 , 0 , 0 , 1000 , 900 , 900 , 900 , 900 -Medium Supply 1-stage + visco clutch , 1 , 1 , 1 , 0 , 0 , 850 , 800 , 800 , 800 , 750 -Medium Supply 1-stage + mech. clutch , 1 , 1 , 1 , 0 , 0 , 600 , 550 , 550 , 550 , 600 -Medium Supply 1-stage + ESS + AMS , 1 , 1 , 1 , 0 , 0 , 600 , 700 , 700 , 700 , 500 -Medium Supply 1-stage + visco clutch + AMS , 1 , 1 , 1 , 0 , 0 , 450 , 600 , 600 , 600 , 350 -Medium Supply 1-stage + mech. clutch + AMS , 1 , 1 , 1 , 0 , 0 , 200 , 350 , 350 , 350 , 200 -Medium Supply 2-stage , 1 , 1 , 1 , 0 , 0 , 2100 , 1750 , 1700 , 1700 , 2100 -Medium Supply 2-stage + ESS , 1 , 1 , 1 , 0 , 0 , 1100 , 1050 , 1000 , 1000 , 1000 -Medium Supply 2-stage + visco clutch , 1 , 1 , 1 , 0 , 0 , 1000 , 850 , 800 , 800 , 900 -Medium Supply 2-stage + mech. clutch , 1 , 1 , 1 , 0 , 0 , 700 , 650 , 600 , 600 , 800 -Medium Supply 2-stage + ESS + AMS , 1 , 1 , 1 , 0 , 0 , 700 , 850 , 800 , 800 , 500 -Medium Supply 2-stage + visco clutch + AMS , 1 , 1 , 1 , 0 , 0 , 600 , 650 , 600 , 600 , 400 -Medium Supply 2-stage + mech. clutch + AMS , 1 , 1 , 1 , 0 , 0 , 300 , 450 , 400 , 400 , 300 -Large Supply , 1 , 1 , 1 , 0 , 0 , 4300 , 3600 , 3500 , 3500 , 4100 -Large Supply + ESS , 1 , 1 , 1 , 0 , 0 , 1600 , 1300 , 1200 , 1200 , 1500 -Large Supply + visco clutch , 1 , 1 , 1 , 0 , 0 , 1300 , 1100 , 1000 , 1000 , 1200 -Large Supply + mech. clutch , 1 , 1 , 1 , 0 , 0 , 800 , 800 , 700 , 700 , 900 -Large Supply + ESS + AMS , 1 , 1 , 1 , 0 , 0 , 1100 , 1000 , 1000 , 1000 , 1000 -Large Supply + visco clutch + AMS , 1 , 1 , 1 , 0 , 0 , 800 , 800 , 800 , 800 , 700 -Large Supply + mech. clutch + AMS , 1 , 1 , 1 , 0 , 0 , 300 , 500 , 500 , 500 , 400 -Vacuum pump , 1 , 1 , 1 , 0 , 0 , 190 , 160 , 130 , 130 , 130 -Small + elec. driven , 1 , 1 , 1 , 1 , 1 , 1071 , 1071 , 1161 , 1161 , 1071 -Small + elec. driven + AMS , 1 , 1 , 1 , 1 , 1 , 357 , 357 , 625 , 625 , 357 -Medium Supply 1-stage + elec. driven , 1 , 1 , 1 , 1 , 1 , 1071 , 982 , 982 , 982 , 1071 -Medium Supply 1-stage + elec. driven + AMS , 1 , 1 , 1 , 1 , 1 , 357 , 625 , 625 , 625 , 357 -Medium Supply 2-stage + elec. driven , 1 , 1 , 1 , 1 , 1 , 1250 , 1161 , 1071 , 1071 , 1429 -Medium Supply 2-stage + elec. driven + AMS , 1 , 1 , 1 , 1 , 1 , 536 , 804 , 714 , 714 , 536 -Large Supply + elec. driven , 1 , 1 , 1 , 1 , 1 , 1429 , 1429 , 1250 , 1250 , 1607 -Large Supply + elec. driven + AMS , 1 , 1 , 1 , 1 , 1 , 536 , 893 , 893 , 893 , 714 -Vacuum pump + elec. driven , 1 , 1 , 1 , 1 , 1 , 339 , 286 , 232 , 232 , 232 \ No newline at end of file +Technology ,conventional ,P-HEV ,S-HEV ,PEV ,fully electric ,Long Haul ,Regional Delivery ,Urban Delivery ,Municipal utility ,Construction ,Long Haul_el ,Regional Delivery_el ,Urban Delivery_el ,Municipal utility_el ,Construction_el +Small , 1 , 1 , 1 , 0 , 0 , 1400 , 1300 , 1200 , 1200 , 1300 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Small + ESS , 1 , 1 , 1 , 0 , 0 , 900 , 800 , 800 , 800 , 800 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Small + visco clutch , 1 , 1 , 1 , 0 , 0 , 800 , 700 , 700 , 700 , 700 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Small + mech. clutch , 1 , 1 , 1 , 0 , 0 , 600 , 600 , 650 , 650 , 600 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Small + ESS + AMS , 1 , 1 , 1 , 0 , 0 , 500 , 400 , 500 , 500 , 400 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Small + visco clutch + AMS , 1 , 1 , 1 , 0 , 0 , 400 , 300 , 400 , 400 , 300 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Small + mech. clutch + AMS , 1 , 1 , 1 , 0 , 0 , 200 , 200 , 350 , 350 , 200 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 1-stage , 1 , 1 , 1 , 0 , 0 , 1600 , 1400 , 1350 , 1350 , 1500 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 1-stage + ESS , 1 , 1 , 1 , 0 , 0 , 1000 , 900 , 900 , 900 , 900 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 1-stage + visco clutch , 1 , 1 , 1 , 0 , 0 , 850 , 800 , 800 , 800 , 750 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 1-stage + mech. clutch , 1 , 1 , 1 , 0 , 0 , 600 , 550 , 550 , 550 , 600 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 1-stage + ESS + AMS , 1 , 1 , 1 , 0 , 0 , 600 , 700 , 700 , 700 , 500 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 1-stage + visco clutch + AMS , 1 , 1 , 1 , 0 , 0 , 450 , 600 , 600 , 600 , 350 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 1-stage + mech. clutch + AMS , 1 , 1 , 1 , 0 , 0 , 200 , 350 , 350 , 350 , 200 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 2-stage , 1 , 1 , 1 , 0 , 0 , 2100 , 1750 , 1700 , 1700 , 2100 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 2-stage + ESS , 1 , 1 , 1 , 0 , 0 , 1100 , 1050 , 1000 , 1000 , 1000 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 2-stage + visco clutch , 1 , 1 , 1 , 0 , 0 , 1000 , 850 , 800 , 800 , 900 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 2-stage + mech. clutch , 1 , 1 , 1 , 0 , 0 , 700 , 650 , 600 , 600 , 800 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 2-stage + ESS + AMS , 1 , 1 , 1 , 0 , 0 , 700 , 850 , 800 , 800 , 500 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 2-stage + visco clutch + AMS , 1 , 1 , 1 , 0 , 0 , 600 , 650 , 600 , 600 , 400 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Medium Supply 2-stage + mech. clutch + AMS , 1 , 1 , 1 , 0 , 0 , 300 , 450 , 400 , 400 , 300 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Large Supply , 1 , 1 , 1 , 0 , 0 , 4300 , 3600 , 3500 , 3500 , 4100 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Large Supply + ESS , 1 , 1 , 1 , 0 , 0 , 1600 , 1300 , 1200 , 1200 , 1500 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Large Supply + visco clutch , 1 , 1 , 1 , 0 , 0 , 1300 , 1100 , 1000 , 1000 , 1200 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Large Supply + mech. clutch , 1 , 1 , 1 , 0 , 0 , 800 , 800 , 700 , 700 , 900 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Large Supply + ESS + AMS , 1 , 1 , 1 , 0 , 0 , 1100 , 1000 , 1000 , 1000 , 1000 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Large Supply + visco clutch + AMS , 1 , 1 , 1 , 0 , 0 , 800 , 800 , 800 , 800 , 700 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Large Supply + mech. clutch + AMS , 1 , 1 , 1 , 0 , 0 , 300 , 500 , 500 , 500 , 400 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Vacuum pump , 1 , 1 , 1 , 0 , 0 , 190 , 160 , 130 , 130 , 130 ,n.a. ,n.a. ,n.a. ,n.a. ,n.a. +Small + elec. driven , 1 , 1 , 1 , 1 , 1 , 1071 , 1071 , 1161 , 1161 , 1071 ,750 ,750 ,813 ,813 ,750 +Small + elec. driven + AMS , 1 , 1 , 1 , 1 , 1 , 357 , 357 , 625 , 625 , 357 ,675 ,675 ,732 ,732 ,675 +Medium Supply 1-stage + elec. driven , 1 , 1 , 1 , 1 , 1 , 1071 , 982 , 982 , 982 , 1071 ,750 ,687 ,687 ,687 ,750 +Medium Supply 1-stage + elec. driven + AMS , 1 , 1 , 1 , 1 , 1 , 357 , 625 , 625 , 625 , 357 ,675 ,618 ,618 ,618 ,675 +Medium Supply 2-stage + elec. driven , 1 , 1 , 1 , 1 , 1 , 1250 , 1161 , 1071 , 1071 , 1429 ,875 ,813 ,750 ,750 ,1000 +Medium Supply 2-stage + elec. driven + AMS , 1 , 1 , 1 , 1 , 1 , 536 , 804 , 714 , 714 , 536 ,788 ,732 ,675 ,675 ,900 +Large Supply + elec. driven , 1 , 1 , 1 , 1 , 1 , 1429 , 1429 , 1250 , 1250 , 1607 ,1000 ,1000 ,875 ,875 ,1125 +Large Supply + elec. driven + AMS , 1 , 1 , 1 , 1 , 1 , 536 , 893 , 893 , 893 , 714 ,900 ,900 ,788 ,788 ,1013 +Vacuum pump + elec. driven , 1 , 1 , 1 , 1 , 1 , 339 , 286 , 232 , 232 , 232 ,237 ,200 ,162 ,162 ,162 \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs index 8aeaff6b5f..ef9de6a8ab 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs @@ -575,7 +575,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration { AssertHelper.AreRelativeEqual(expected, DeclarationData.SteeringPump.Lookup(mission, hdvClass, - new[] { axle1, axle2, axle3, axle4 }.TakeWhile(a => a != null).ToArray()).mech); + new[] { axle1, axle2, axle3, axle4 }.TakeWhile(a => a != null).ToArray()).mechanicalPumps); } [TestCase] @@ -586,7 +586,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration const MissionType mission = MissionType.LongHaul; const VehicleClass hdvClass = VehicleClass.Class5; var first = DeclarationData.SteeringPump.Lookup(mission, hdvClass, - new[] { axle1 }.TakeWhile(a => a != null).ToArray()).mech; + new[] { axle1 }.TakeWhile(a => a != null).ToArray()).mechanicalPumps; for (var i = 0; i < 10; i++) { @@ -595,7 +595,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration } var last = DeclarationData.SteeringPump.Lookup(mission, hdvClass, - new[] { axle1 }.TakeWhile(a => a != null).ToArray()).mech; + new[] { axle1 }.TakeWhile(a => a != null).ToArray()).mechanicalPumps; Assert.AreEqual(first.Value(), last.Value(), 1e-3); } diff --git a/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs b/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs index cf71bab028..17fba4958f 100644 --- a/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs +++ b/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs @@ -127,7 +127,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation aux.AddConstant("PS", DeclarationData.PneumaticSystem.Lookup(mission, "Medium Supply 1-stage").PowerDemand); aux.AddConstant("STP", DeclarationData.SteeringPump.Lookup(MissionType.LongHaul, hdvClass, - new[] { "Variable displacement mech. controlled" }).mech); + new[] { "Variable displacement mech. controlled" }).mechanicalPumps); aux.AddConstant("ES", DeclarationData.ElectricSystem.Lookup(mission).PowerDemand); aux.AddConstant("AC", DeclarationData.HeatingVentilationAirConditioning.Lookup(mission, "Default", hdvClass).PowerDemand); -- GitLab