diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index 8cc4e89534bb39bb260548123a546cb77b4d26df..30a70b1a2ff888ba1101cb5573db7ff8515661c5 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -370,12 +370,18 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl var es = new ElectricSystem(container); if (data.BatteryData != null) { + if (data.BatteryData.InitialSoC < data.BatteryData.MinSOC) { + throw new VectoException("Battery: Initial SoC has to be higher than min SoC"); + } var battery = new Battery(container, data.BatteryData); battery.Initialize(data.BatteryData.InitialSoC); es.Connect(battery); } if (data.SuperCapData != null) { + if (data.SuperCapData.InitialSoC < data.SuperCapData.MinVoltage / data.SuperCapData.MaxVoltage) { + throw new VectoException("SuperCap: Initial SoC has to be higher than min SoC"); + } var superCap = new SuperCap(container, data.SuperCapData); superCap.Initialize(data.SuperCapData.InitialSoC); es.Connect(superCap); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/SuperCap.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/SuperCap.cs index 621be6e2a44d38fe28677393286b092a6f5f1f6f..e839aec156019109d5e5cf0ee43e9d0e7e90b9b7 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/SuperCap.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/SuperCap.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; @@ -57,7 +58,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var maxDischargePower = InternalVoltage * maxDischargeCurrent + maxDischargeCurrent * ModelData.InternalResistance * maxDischargeCurrent; var maxPower = -InternalVoltage / (4 * ModelData.InternalResistance) * InternalVoltage; - return VectoMath.Max(maxDischargePower > 0 ? -double.MaxValue.SI<Watt>():maxDischargePower, maxPower); + return VectoMath.Max(maxDischargePower, maxPower); } public double MinSoC @@ -71,8 +72,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public void Initialize(double initialSoC) { - PreviousState.Charge = ModelData.Capacity * ((ModelData.MaxVoltage - ModelData.MinVoltage) * initialSoC + - ModelData.MinVoltage); + PreviousState.Charge = ModelData.Capacity * (ModelData.MaxVoltage * initialSoC ); } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs index f4a0c0efa60474cf27096b9b84d0d01f0f0f28e9..e790d82f2dcb794b7e795e882b5af4cf0e49e0a8 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs @@ -360,7 +360,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies var auxEnergyReserve = ModelData.ElectricAuxDemand * StrategyParameters.AuxReserveTime; BatteryDischargeEnergyThreshold = 0.SI<WattSecond>(); if (auxEnergyReserve > 0) { - var minSoc = Math.Max(ModelData.BatteryData?.MinSOC ?? ModelData.SuperCapData.InitialSoC, + var minSoc = Math.Max(ModelData.BatteryData?.MinSOC ?? ModelData.SuperCapData.MinVoltage / ModelData.SuperCapData.MaxVoltage, StrategyParameters.MinSoC); BatteryDischargeEnergyThreshold = ModelData.BatteryData.Capacity * minSoc * ModelData.BatteryData.SOCMap.Lookup(minSoc) + @@ -985,8 +985,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies ShiftRequired = best.Gear.Engaged && !best.Gear.Equals(currentGear), // gs?.Item1 ?? false, NextGear = best.Gear, // gs?.Item2 ?? 0, EvaluatedSolution = best, - SimulationInterval = best.SimulationInterval - }; + SimulationInterval = best.SimulationInterval + }; //var pos = retVal.MechanicalAssistPower.Keys.First(); //if (retVal.MechanicalAssistPower[pos].Item1 == null) { // retVal.MechanicalAssistPower[pos] = Tuple.Create(best.Response.ElectricMotor.AngularVelocity, retVal.MechanicalAssistPower[pos].Item2); diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/SuperCapTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/SuperCapTest.cs index a8d02f0bb6379cb13662356af37e47c01fd39afc..56c45acca7b0794f3a8fb84bf7e4899fa85496f6 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/SuperCapTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/SuperCapTest.cs @@ -36,6 +36,8 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent InternalResistance = 0.02.SI<Ohm>(), MinVoltage = 0.SI<Volt>(), MaxVoltage = 330.SI<Volt>(), + MaxCurrentDischarge = -200.SI<Ampere>(), + MaxCurrentCharge = 200.SI<Ampere>() }; var container = new MockVehicleContainer();