Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit eb2a2c7b authored by Harald Martini's avatar Harald Martini
Browse files

updated hybrid strategy parameters

parent c3b7be4a
No related branches found
No related tags found
No related merge requests found
using System;
using System.Collections.Generic;
using System.ComponentModel;
using NLog.Targets;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry;
using TUGraz.VectoCore.Models.Simulation.Data;
using TUGraz.VectoCore.Models.SimulationComponent.Data;
using TUGraz.VectoCore.Models.SimulationComponent.Data.Battery;
......@@ -12,11 +11,11 @@ using TUGraz.VectoCore.Models.SimulationComponent.Impl;
namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.StrategyDataAdapter
{
public abstract class HybridStrategyDataAdapter{
public abstract class HybridStrategyDataAdapter{
}
public class ParallelHybridStrategyParameterDataAdapter : HybridStrategyParameters
public class ParallelHybridStrategyParameterDataAdapter : HybridStrategyDataAdapter
{
public HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData, SuperCapData superCap)
{
......@@ -53,7 +52,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
}
}
public class SerialHybridStrategyParameterDataAdapter : HybridStrategyParameters
public class SerialHybridStrategyParameterDataAdapter : HybridStrategyDataAdapter
{
public HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData,
SuperCapData superCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode)
......@@ -94,7 +93,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
throw new ArgumentOutOfRangeException(nameof(ovcMode), ovcMode, null);
}
//TODO Move to DeclarationData.Hybridstrategy.Parallel
......@@ -110,22 +108,28 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
result.MinSoC = tmpSystem.MinSoC + 2 * deltaSoc;
result.TargetSoC = tmpSystem.MaxSoC - 5 * deltaSoc;
result.MaxSoC = tmpSystem.MaxSoC;
result.MaxSoC = double.NaN;
if (result.MinSoC >= result.TargetSoC) {
deltaSoc = CalculatedDeltaSocSHev(vehicleMass, batterySystemData, tmpSystem, 50);
//Small battery
result.TargetSoC = tmpSystem.MaxSoC - 1 * deltaSoc;
result.MinSoC = tmpSystem.MinSoC + 2 * deltaSoc;
if (result.MinSoC >= result.TargetSoC) {
throw new VectoException("Min SOC higher than Target SOC");
}
}
}
private double CalculatedDeltaSocSHev(Kilogram vehicleMass, BatterySystemData batterySystemData, BatterySystem tmpSystem)
{
private double CalculatedDeltaSocSHev(Kilogram vehicleMass, BatterySystemData batterySystemData,
BatterySystem tmpSystem, double kmph = 100)
{
var v_nom = tmpSystem.NominalVoltage;
var c_nom = tmpSystem.Capacity;
double speedInkmph = 100;
var result = vehicleMass * speedInkmph.KMPHtoMeterPerSecond() * speedInkmph.KMPHtoMeterPerSecond() / v_nom / c_nom;
var c_nom = tmpSystem.Capacity.AsAmpHour;
var v = kmph.KMPHtoMeterPerSecond();
var result = ((vehicleMass / 2 * v * v) / 3600) * (1 / v_nom) * (1 / c_nom);
return result.Value();
}
......
using System;
using System.Collections.Generic;
using System.Diagnostics;
using Castle.Components.DictionaryAdapter;
using Moq;
using NUnit.Framework;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.StrategyDataAdapter;
using TUGraz.VectoCore.Models.Simulation.Data;
using TUGraz.VectoCore.Models.SimulationComponent.Data;
using TUGraz.VectoCore.Models.SimulationComponent.Data.Battery;
using TUGraz.VectoCore.Tests.Utils;
namespace TUGraz.VectoCore.Tests.Models.Declaration.DataAdapter;
[TestFixture]
public class HybridStrategyDataAdapterTest
{
[TestCase(0.7375, 0.2625, 11273.9176, 778.61, 247500, false, 0.624646591, 0.307641364)]
[TestCase(0.6, 0.2, 11000, 778.61, 80000, false, 0.582967134, 0.234065732)]
[TestCase(0.6, 0.2, 11000, 778.61, 5000, true, 0.268131464, 0.634065732)]
public void SerialHybridStrategyTest(double bat_soc_max, double bat_soc_min, double vehicle_mass, double nominalVoltage, double nominalCapacity, bool exception, double expected_target_soc, double expected_min_soc)
{
var mass = vehicle_mass.SI<Kilogram>();
var v_nom = nominalVoltage.SI<Volt>();
var cap_nom = nominalCapacity.SI<AmpereSecond>();
var dataAdapter = new SerialHybridStrategyParameterDataAdapter();
var batterySystemData = new BatterySystemData() {
Batteries = new EditableList<Tuple<int, BatteryData>>() {
new Tuple<int, BatteryData>(1, new BatteryData() {
Capacity = cap_nom,
ChargeSustainingBattery = false,
BatteryId = -42,
MaxSOC = bat_soc_max,
MinSOC = bat_soc_min,
SOCMap = new SOCMap(new SOCMap.SOCMapEntry[] {
new SOCMap.SOCMapEntry() {
BatteryVolts = Math.Max((v_nom + (v_nom * 0.1)).Value(), 0).SI<Volt>(),
SOC = 0.1
},
new SOCMap.SOCMapEntry() {
BatteryVolts = v_nom,
SOC = 0.5
},
new SOCMap.SOCMapEntry() {
BatteryVolts = v_nom - (v_nom * 0.1),
SOC = 0.9
}
})
})
}
};
HybridStrategyParameters parameters = null;
try {
parameters = dataAdapter.CreateHybridStrategyParameters(batterySystemData, null, mass,
VectoRunData.OvcHevMode.NotApplicable);
} catch (Exception) {
Assert.IsTrue(exception);
Assert.Pass();
}
Assert.IsTrue(parameters!.TargetSoC.IsEqual(expected_target_soc));
Assert.IsTrue(parameters.MinSoC.IsEqual(expected_min_soc));
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment