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

Skip to content
Snippets Groups Projects
Commit 607eb1e8 authored by Franz KOBER josef's avatar Franz KOBER josef
Browse files

added tests for generic data classes, minor adjustments

parent d61253fd
No related branches found
No related tags found
No related merge requests found
Showing with 1717 additions and 49 deletions
......@@ -44,8 +44,8 @@ namespace TUGraz.VectoCore.Models.GenericModelData
private BatteryData GetBatteryData(IBatteryPackDeclarationInputData battery)
{
return new BatteryData {
MinSOC = battery.MinSOC.Value,
MaxSOC = battery.MaxSOC.Value,
MinSOC = battery.MinSOC ?? double.NaN,
MaxSOC = battery.MaxSOC ?? double.NaN,
MaxCurrent = BatteryMaxCurrentReader.Create(battery.MaxCurrentMap),
Capacity = battery.Capacity,
InternalResistance = GetGenericInternalResistanceMap(battery),
......
......@@ -12,12 +12,13 @@ namespace TUGraz.VectoCore.Models.GenericModelData
public const string MotorSpeedNorm = "n_norm";
public const string TorqueNorm = "T_norm";
public const string PowerElectricalNorm = "Pel_norm";
public static string GenericEfficiencyMap_ASM = "";
public static string GenericEfficiencyMap_PSM = "";
#endregion
protected string GenericEfficiencyMap_ASM {get; set;}
protected string GenericEfficiencyMap_PSM {get; set;}
#endregion
protected TableData GetNormalizedEfficiencyMap(ElectricMachineType electricMachineType)
{
switch (electricMachineType)
......
......@@ -13,19 +13,18 @@ namespace TUGraz.VectoCore.Models.GenericModelData
{
public class GenericBusElectricMotorData : GenericBusEMBase
{
#region Constants
public new static string GenericEfficiencyMap_ASM =
$"{DeclarationData.DeclarationDataResourcePrefix}.GenericBusData.EfficiencyMap_ASM_normalized.vmap";
public new static string GenericEfficiencyMap_PSM =
$"{DeclarationData.DeclarationDataResourcePrefix}.GenericBusData.EfficiencyMap_PSM_normalized.vmap";
public GenericBusElectricMotorData()
{
GenericEfficiencyMap_ASM =
$"{DeclarationData.DeclarationDataResourcePrefix}.GenericBusData.EfficiencyMap_ASM_normalized.vmap";
GenericEfficiencyMap_PSM =
$"{DeclarationData.DeclarationDataResourcePrefix}.GenericBusData.EfficiencyMap_PSM_normalized.vmap";
}
#endregion
public ElectricMotorData CreateGenericElectricMotorData(ElectricMachineEntry<IElectricMotorDeclarationInputData> electricMachineEntry,
ElectricMachineType electricMachineType)
public ElectricMotorData CreateGenericElectricMotorData(ElectricMachineEntry<IElectricMotorDeclarationInputData> electricMachineEntry)
{
var electricMachineType = electricMachineEntry.ElectricMachine.ElectricMachineType;
var electricMotorData = new ElectricMotorData {
RatioPerGear = electricMachineEntry.RatioPerGear,
......@@ -55,7 +54,7 @@ namespace TUGraz.VectoCore.Models.GenericModelData
VoltageLevels = GetElectricMotorVoltageLevelData(voltageLevels, count, normalizedMap)
};
}
private List<ElectricMotorVoltageLevelData> GetElectricMotorVoltageLevelData(IList<IElectricMotorVoltageLevel> voltageLevels, int count, TableData normalizedMap)
{
......
......@@ -18,12 +18,6 @@ namespace TUGraz.VectoCore.Models.GenericModelData
#region Constant
public const double GearEfficiency = 0.95;
public new static string GenericEfficiencyMap_ASM =
$"{DeclarationData.DeclarationDataResourcePrefix}.GenericBusData.EfficiencyMap_IEPC_ASM_normalized.vmap";
public new static string GenericEfficiencyMap_PSM =
$"{DeclarationData.DeclarationDataResourcePrefix}.GenericBusData.EfficiencyMap_IEPC_PSM_normalized.vmap";
#endregion
......@@ -32,6 +26,13 @@ namespace TUGraz.VectoCore.Models.GenericModelData
private double axleRatio;
private KeyValuePair<int, double> gearRatioAtMeasurement;
public GenericBusIEPCData()
{
GenericEfficiencyMap_ASM =
$"{DeclarationData.DeclarationDataResourcePrefix}.GenericBusData.EfficiencyMap_IEPC_ASM_normalized.vmap";
GenericEfficiencyMap_PSM =
$"{DeclarationData.DeclarationDataResourcePrefix}.GenericBusData.EfficiencyMap_IEPC_PSM_normalized.vmap";
}
public IEPCElectricMotorData CreateIEPCElectricMotorData(IIEPCDeclarationInputData iepcData, IAxleGearInputData axleGearData)
{
......@@ -105,14 +106,14 @@ namespace TUGraz.VectoCore.Models.GenericModelData
private Dictionary<uint, EfficiencyMap> GetEfficiencyMaps(IElectricMotorVoltageLevel voltageLevel, int count, ElectricMachineType electricMachineType)
{
var result = new Dictionary<uint, EfficiencyMap>();
foreach (var gearEntry in gearRatios) {
var gearRatio = gearEntry.Value;
var ratedPoint = GenericRatedPointHelper.GetRatedPointOfFullLoadCurveAtIEPC(voltageLevel.FullLoadCurve,
axleRatio, gearRatio, GearEfficiency, axleEfficiency);
axleRatio, gearRatioAtMeasurement.Value, GearEfficiency, axleEfficiency);
var deNormalizedMap = DeNormalizeData(GetNormalizedEfficiencyMap(electricMachineType), ratedPoint, gearRatio);
result.Add((uint) gearEntry.Key, IEPCMapReader.Create(deNormalizedMap, count, gearRatio));
}
......@@ -152,27 +153,23 @@ namespace TUGraz.VectoCore.Models.GenericModelData
private DataTable DeNormalizeData(TableData normalizedMap, RatedPoint ratedPoint, double gearRatio)
{
var result = new DataTable();
result.Columns.Add(ElectricMotorMapReader.Fields.MotorSpeed);
result.Columns.Add(ElectricMotorMapReader.Fields.Torque);
result.Columns.Add(ElectricMotorMapReader.Fields.PowerElectrical);
foreach (DataRow row in normalizedMap.Rows) {
var torqueNormValue = row.ParseDouble(TorqueNorm);
var motorSpeed = row.ParseDouble(MotorSpeedNorm) * ratedPoint.NRated / gearRatio / axleRatio;
var torque = torqueNormValue * ratedPoint.TRated * gearRatio * axleRatio *
( torqueNormValue > 0 ? GearEfficiency * axleEfficiency : 1 / GearEfficiency * axleEfficiency);
var powerElectrical = row.ParseDouble(PowerElectricalNorm) * ratedPoint.PRated;
var newRow = result.NewRow();
newRow[ElectricMotorMapReader.Fields.MotorSpeed] = Math.Round(motorSpeed.Value(), 2, MidpointRounding.AwayFromZero).ToXMLFormat(2);
newRow[ElectricMotorMapReader.Fields.Torque] = Math.Round(torque.Value(), 2, MidpointRounding.AwayFromZero).ToXMLFormat(2);
newRow[ElectricMotorMapReader.Fields.PowerElectrical] = Math.Round(powerElectrical.Value(), 2, MidpointRounding.AwayFromZero).ToXMLFormat(2);
result.Rows.Add(newRow);
}
return result;
......
......@@ -14,24 +14,22 @@ namespace TUGraz.VectoCore.Models.GenericModelData
{
public class GenericBusIHPCData : GenericBusEMBase
{
#region Constants
public new static string GenericEfficiencyMap_ASM =
$"{DeclarationData.DeclarationDataResourcePrefix}.GenericBusData.EfficiencyMap_ASM_normalized.vmap";
public new static string GenericEfficiencyMap_PSM =
$"{DeclarationData.DeclarationDataResourcePrefix}.GenericBusData.EfficiencyMap_PSM_normalized.vmap";
#endregion
public GenericBusIHPCData()
{
GenericEfficiencyMap_ASM =
$"{DeclarationData.DeclarationDataResourcePrefix}.GenericBusData.EfficiencyMap_ASM_normalized.vmap";
GenericEfficiencyMap_PSM =
$"{DeclarationData.DeclarationDataResourcePrefix}.GenericBusData.EfficiencyMap_PSM_normalized.vmap";
}
public ElectricMotorData CreateGenericBusIHPCData(
ElectricMachineEntry<IElectricMotorDeclarationInputData> electricMachineEntry,
ElectricMachineType electricMachineType, IGearboxDeclarationInputData gearboxData)
{
var electricMotorData = new ElectricMotorData {
EfficiencyData = GetVoltageLevels(electricMachineEntry, electricMachineType,gearboxData),
EfficiencyData = GetVoltageLevels(electricMachineEntry, electricMachineType, gearboxData),
Inertia = electricMachineEntry.ElectricMachine.Inertia * electricMachineEntry.Count,
RatioADC = electricMachineEntry.RatioADC
};
......
using System.Data;
using System.Linq;
using Ninject;
using NUnit.Framework;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCore.InputData.FileIO.JSON;
using TUGraz.VectoCore.InputData.FileIO.XML;
using TUGraz.VectoCore.Models.GenericModelData;
using TUGraz.VectoCore.Utils;
......@@ -15,11 +19,17 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
private const string MinTorqueColumn = "minTorque";
private TableData fullLoadCurve;
protected IXMLInputDataReader xmlInputReader;
private IKernel _kernel;
[OneTimeSetUp]
public void Init()
{
SetFullLoadCurveData();
_kernel = new StandardKernel(new VectoNinjectModule());
xmlInputReader = _kernel.Get<IXMLInputDataReader>();
}
private void SetFullLoadCurveData()
......@@ -86,11 +96,127 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
[TestCase()]
public void TestFullLoadCurveRatedPointSearch()
{
var result = GenericRatedPointHelper.GetRatedPointOfFullLoadCurve(fullLoadCurve);
Assert.IsNotNull(result);
Assert.AreEqual(755.11 , result.NRated.Value(), 1e-2);
Assert.AreEqual(4027.8000, result.TRated.Value(), 1e-4);
Assert.AreEqual(318.4980 , result.PRated.Value(), 1e-4);
var emResult = GenericRatedPointHelper.GetRatedPointOfFullLoadCurveAtEM(fullLoadCurve);
Assert.IsNotNull(emResult);
Assert.AreEqual(755.11 , emResult.NRated.Value(), 1e-2);
Assert.AreEqual(4027.8000, emResult.TRated.Value(), 1e-4);
Assert.AreEqual(318.4980 , emResult.PRated.Value(), 1e-4);
var iepcResult = GenericRatedPointHelper.GetRatedPointOfFullLoadCurveAtIEPC(fullLoadCurve, 1, 1, 0.95, 1);
Assert.IsNotNull(iepcResult);
Assert.AreEqual(755.11, iepcResult.NRated.Value(), 1e-2);
Assert.AreEqual(4239.7894, iepcResult.TRated.Value(), 1e-4);
Assert.AreEqual(335.26, iepcResult.PRated.Value(), 1e-2);
}
[TestCase(@"TestData\XML\XMLVIFBusReport\IHPC_HEV_completedBus_2.VIF_Report_1.xml")]
public void TestGenericBusElectricMotorData(string filePath)
{
var multistepBusInputData = xmlInputReader.Create(filePath) as IMultistepBusInputDataProvider;
var em = multistepBusInputData.JobInputData.PrimaryVehicle.Vehicle.Components.ElectricMachines;
var genericElectricMotor = new GenericBusElectricMotorData();
var electricMotorData = genericElectricMotor.CreateGenericElectricMotorData(em.Entries[0]);
Assert.AreEqual(2, electricMotorData.EfficiencyData.VoltageLevels.Count);
}
[TestCase(@"TestData\XML\XMLVIFBusReport\IEPC_completedBus_2.VIF_Report_2.xml")]
public void TestGenericIEPCElectricMotorData(string iepcFilePath)
{
var multistepBusInputData = xmlInputReader.Create(iepcFilePath) as IMultistepBusInputDataProvider;
var iepcData = multistepBusInputData.JobInputData.PrimaryVehicle.Vehicle.Components.IEPC;
var axleGear = multistepBusInputData.JobInputData.PrimaryVehicle.Vehicle.Components.AxleGearInputData;
var genericIEPCData = new GenericBusIEPCData();
var iepcMotorData = genericIEPCData.CreateIEPCElectricMotorData(iepcData, axleGear);
Assert.AreEqual(1, iepcMotorData.EfficiencyData.VoltageLevels.Count);
}
[TestCase(@"TestData\XML\XMLVIFBusReport\IHPC_HEV_completedBus_2.VIF_Report_1.xml")]
public void TestGenericIHPCElectricMotorData(string ihpcFilePath)
{
var multistepBusInputData = xmlInputReader.Create(ihpcFilePath) as IMultistepBusInputDataProvider;
var electricMachineEntry = multistepBusInputData.JobInputData.PrimaryVehicle.Vehicle.Components.ElectricMachines.Entries.First() ;
var transmission = multistepBusInputData.JobInputData.PrimaryVehicle.Vehicle.Components.GearboxInputData;
var machineType = electricMachineEntry.ElectricMachine.ElectricMachineType;
var genericBusIHPCData = new GenericBusIHPCData();
var ihpcData = genericBusIHPCData.CreateGenericBusIHPCData(electricMachineEntry, machineType, transmission);
Assert.AreEqual(2, ihpcData.EfficiencyData.VoltageLevels.Count);
}
[TestCase(@"TestData\XML\XMLVIFBusReport\IEPC_completedBus_2.VIF_Report_2.xml", 0.1)]
public void TestGenericBatteryData(string vifFilePath, double initialSoC)
{
var multistepBusInputData = xmlInputReader.Create(vifFilePath) as IMultistepBusInputDataProvider;
var electricStorage = multistepBusInputData.JobInputData.PrimaryVehicle.Vehicle.Components.ElectricStorage;
var genericBusBatteryData = new GenericBusBatteryData();
var batterySystemData = genericBusBatteryData.CreateBatteryData(electricStorage, initialSoC);
Assert.AreEqual(initialSoC, batterySystemData.InitialSoC);
Assert.AreEqual(2, batterySystemData.Batteries.Count);
var battery0 = batterySystemData.Batteries[0];
Assert.AreEqual(80, battery0.Item2.MaxSOC);
Assert.AreEqual(20, battery0.Item2.MinSOC);
Assert.AreEqual(72, battery0.Item2.Capacity.AsAmpHour);
Assert.AreEqual(2, battery0.Item2.InternalResistance.Entries.Length);
Assert.AreEqual(0, battery0.Item2.InternalResistance.Entries[0].SoC);
Assert.AreEqual(3, battery0.Item2.InternalResistance.Entries[0].Resistance.Count);
var resistance = battery0.Item2.InternalResistance.Entries[0].Resistance[0].Item2.Value();
Assert.AreEqual(resistance, battery0.Item2.InternalResistance.Entries[0].Resistance[0].Item2.Value());
Assert.AreEqual(resistance, battery0.Item2.InternalResistance.Entries[0].Resistance[1].Item2.Value());
Assert.AreEqual(resistance, battery0.Item2.InternalResistance.Entries[0].Resistance[2].Item2.Value());
Assert.AreEqual(1, battery0.Item2.InternalResistance.Entries[1].SoC);
Assert.AreEqual(3, battery0.Item2.InternalResistance.Entries[1].Resistance.Count);
Assert.AreEqual(resistance, battery0.Item2.InternalResistance.Entries[1].Resistance[0].Item2.Value());
Assert.AreEqual(resistance, battery0.Item2.InternalResistance.Entries[1].Resistance[1].Item2.Value());
Assert.AreEqual(resistance, battery0.Item2.InternalResistance.Entries[1].Resistance[2].Item2.Value());
var battery1 = batterySystemData.Batteries[0];
Assert.AreEqual(80, battery1.Item2.MaxSOC);
Assert.AreEqual(20, battery1.Item2.MinSOC);
Assert.AreEqual(72, battery1.Item2.Capacity.AsAmpHour);
Assert.AreEqual(2, battery1.Item2.InternalResistance.Entries.Length);
Assert.AreEqual(0, battery1.Item2.InternalResistance.Entries[0].SoC);
Assert.AreEqual(3, battery1.Item2.InternalResistance.Entries[0].Resistance.Count);
resistance = battery1.Item2.InternalResistance.Entries[0].Resistance[0].Item2.Value();
Assert.AreEqual(resistance, battery1.Item2.InternalResistance.Entries[0].Resistance[0].Item2.Value());
Assert.AreEqual(resistance, battery1.Item2.InternalResistance.Entries[0].Resistance[1].Item2.Value());
Assert.AreEqual(resistance, battery1.Item2.InternalResistance.Entries[0].Resistance[2].Item2.Value());
Assert.AreEqual(1, battery1.Item2.InternalResistance.Entries[1].SoC);
Assert.AreEqual(3, battery1.Item2.InternalResistance.Entries[1].Resistance.Count);
Assert.AreEqual(resistance, battery1.Item2.InternalResistance.Entries[1].Resistance[0].Item2.Value());
Assert.AreEqual(resistance, battery1.Item2.InternalResistance.Entries[1].Resistance[1].Item2.Value());
Assert.AreEqual(resistance, battery1.Item2.InternalResistance.Entries[1].Resistance[2].Item2.Value());
}
[TestCase(@"TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\SuperCap.vreess", 0.1)]
public void TestGenericSuperCapData(string superCapFilePath, double initialSoC)
{
var superCap = JSONInputDataFactory.ReadREESSData(superCapFilePath, false) as ISuperCapDeclarationInputData;
var genericBusSuperCapData = new GenericBusSuperCapData();
var superCapData = genericBusSuperCapData.CreateGenericSuperCapData(superCap, initialSoC);
Assert.AreEqual(37.0, superCapData.Capacity.Value());
Assert.AreEqual(0, superCapData.MinVoltage.Value());
Assert.AreEqual(330.0, superCapData.MaxVoltage.Value());
Assert.AreEqual(100, superCapData.MaxCurrentCharge.Value());
Assert.AreEqual(100, superCapData.MaxCurrentDischarge.Value());
Assert.AreEqual(initialSoC , superCapData.InitialSoC);
Assert.AreEqual(270.2703, superCapData.InternalResistance.Value(), 1e-4);
}
}
}
......@@ -35,6 +35,10 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="TestData\XML\XMLVIFBusReport\" />
</ItemGroup>
<Choose>
<When Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(&#xD;&#xA; $(DefineConstants), '^(.*;)*MOCKUP(;.*)*$'))">
<ItemGroup>
......
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