Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit c017d970 authored by Stefanos Doumpoulakis's avatar Stefanos Doumpoulakis
Browse files

added integration tests with metrics

parent 508cc637
No related branches found
No related tags found
No related merge requests found
Showing
with 55011 additions and 42 deletions
......@@ -597,6 +597,7 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
AngularVelocity = row.ParseDouble(Fields.EngineSpeed).RPMtoRad(),
AdditionalAuxPowerDemand = row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI(Unit.SI.Kilo.Watt)
.Cast<Watt>(),
VehicleTargetSpeed = row.ParseDoubleOrGetDefault(Fields.VehicleSpeed).KMPHtoMeterPerSecond(),
}).ToArray();
return entries;
......@@ -615,7 +616,8 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
Fields.PWheel,
Fields.Gear,
Fields.EngineSpeed,
Fields.AdditionalAuxPowerDemand
Fields.AdditionalAuxPowerDemand,
Fields.VehicleSpeed
};
return CheckColumns(header, allowedCols, requiredCols, throwExceptions, allowAux: false);
......
......@@ -675,7 +675,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
var fullLoadPower = -(response.ElectricMotor.MaxDriveTorque * response.ElectricMotor.AngularVelocity);
//.DynamicFullLoadPower; //EnginePowerRequest - response.DeltaFullLoad;
var reserve = 1 - response.ElectricMotor.TorqueRequestEmMap / response.ElectricMotor.MaxDriveTorqueEM;
var reserve = 1 - (response.ElectricMotor.TorqueRequestEmMap ?? 0.SI<NewtonMeter>()) / response.ElectricMotor.MaxDriveTorqueEM;
var isBelowDownshift = gear.Gear > 1 &&
IsBelowDownshiftCurve(GearboxModelData.Gears[gear.Gear].ShiftPolygon, response.ElectricMotor.TorqueRequest,
......
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using NUnit.Framework;
using TUGraz.VectoCore.InputData.FileIO.JSON;
using TUGraz.VectoCore.OutputData;
using TUGraz.VectoCore.OutputData.FileIO;
using TUGraz.VectoCore.Tests.Utils;
using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
{
[TestFixture]
[Parallelizable(ParallelScope.All)]
public class BEVTimeRunTest
{
private const string E2_JOB = @"TestData\Integration\TimeRun\MeasuredSpeed\GenericVehicleB2\BEV_ENG.vecto";
private const string E3_JOB = @"TestData\Integration\TimeRun\MeasuredSpeed\GenericVehicleB3\BEV_ENG.vecto";
private const string E4_JOB = @"TestData\Integration\TimeRun\MeasuredSpeed\GenericVehicleB4\BEV_ENG.vecto";
[OneTimeSetUp]
public void Init()
{
Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
}
[Category("JRC")]
[Category("LongRunning")]
[Category("Integration")]
[
TestCase(E2_JOB, 0, 0, 1.0918, 131.4729, TestName = "E2 BEV TimeRun MeasuredSpeed LongHaul"),
TestCase(E2_JOB, 1, 1, 3.7734, 118.3918, TestName = "E2 BEV TimeRun MeasuredSpeed RegionalDelivery"),
TestCase(E2_JOB, 2, 2, 23.5559, 161.3204, TestName = "E2 BEV TimeRun MeasuredSpeed UrbanDelivery"),
TestCase(E2_JOB, 6, 0, 1.446, 98.3276, TestName = "E2 BEV TimeRun MeasuredSpeedGear LongHaul"),
TestCase(E2_JOB, 7, 1, 4.6297, 97.4906, TestName = "E2 BEV TimeRun MeasuredSpeedGear RegionalDelivery"),
TestCase(E2_JOB, 8, 2, 26.051, 116.3688, TestName = "E2 BEV TimeRun MeasuredSpeedGear UrbanDelivery"),
TestCase(E2_JOB, 9, 0, 0.0001, 98.5771, TestName = "E2 BEV TimeRun PWheel LongHaul"),
TestCase(E2_JOB, 10, 1, 0.0003, 98.3456, TestName = "E2 BEV TimeRun PWheel RegionalDelivery"),
TestCase(E2_JOB, 11, 2, 0.0576, 121.0441, TestName = "E2 BEV TimeRun PWheel UrbanDelivery"),
TestCase(E3_JOB, 0, 0, 0.7916, 101.6194, TestName = "E3 BEV TimeRun MeasuredSpeed LongHaul"),
TestCase(E3_JOB, 1, 1, 3.3777, 104.792, TestName = "E3 BEV TimeRun MeasuredSpeed RegionalDelivery"),
TestCase(E3_JOB, 2, 2, 28.1637, 128.3685, TestName = "E3 BEV TimeRun MeasuredSpeed UrbanDelivery"),
TestCase(E4_JOB, 0, 0, 0.9165, 97.3067, TestName = "E4 BEV TimeRun MeasuredSpeed LongHaul"),
TestCase(E4_JOB, 1, 1, 3.7896, 100.3712, TestName = "E4 BEV TimeRun MeasuredSpeed RegionalDelivery"),
TestCase(E4_JOB, 2, 2, 30.1342, 123.7528, TestName = "E4 BEV TimeRun MeasuredSpeed UrbanDelivery")
]
public void TestBEVTimeRunCycle(string jobFile, int cycleIdx, int distanceCycleIdx, double charge, double discharge)
{
Dictionary<string, double> metrics = new Dictionary<string, double>()
{
{ SummaryDataContainer.Fields.E_REESS_T_chg, charge },
{ SummaryDataContainer.Fields.E_REESS_T_dischg, discharge }
};
RunBEVTimeRunCycle(jobFile, cycleIdx, distanceCycleIdx, metrics);
}
[Category("TUG-update")]
[Category("JRC")]
[Category("LongRunning")]
[Category("Integration")]
[
TestCase(E2_JOB, 3, TestName = "E2 BEV DistanceRun MeasuredSpeed LongHaul"),
TestCase(E2_JOB, 4, TestName = "E2 BEV DistanceRun MeasuredSpeed RegionalDelivery"),
TestCase(E2_JOB, 5, TestName = "E2 BEV DistanceRun MeasuredSpeed UrbanDelivery"),
TestCase(E3_JOB, 3, TestName = "E3 BEV DistanceRun MeasuredSpeed LongHaul"),
TestCase(E3_JOB, 4, TestName = "E3 BEV DistanceRun MeasuredSpeed RegionalDelivery"),
TestCase(E3_JOB, 5, TestName = "E3 BEV DistanceRun MeasuredSpeed UrbanDelivery"),
TestCase(E4_JOB, 3, TestName = "E4 BEV DistanceRun MeasuredSpeed LongHaul"),
TestCase(E4_JOB, 4, TestName = "E4 BEV DistanceRun MeasuredSpeed RegionalDelivery"),
TestCase(E4_JOB, 5, TestName = "E4 BEV DistanceRun MeasuredSpeed UrbanDelivery")
]
public void TestBEVDistanceRunCycle(string jobFile, int cycleIdx)
{
Dictionary<string, double> metrics = new Dictionary<string, double>()
{
{ SummaryDataContainer.Fields.E_REESS_T_chg, double.NaN },
{ SummaryDataContainer.Fields.E_REESS_T_dischg, double.NaN }
};
RunBEVDistanceRunCycle(jobFile, cycleIdx, metrics);
}
public void RunBEVTimeRunCycle(string jobFile, int cycleIdx, int distanceCycleIdx, Dictionary<String, double> metrics)
{
var inputProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
string outputFile = InputDataHelper.CreateUniqueSubfolder(jobFile);
var writer = new FileOutputWriter(outputFile);
var factory = new SimulatorFactoryEngineering(inputProvider, writer, false) { WriteModalResults = true };
factory.SumData = new SummaryDataContainer(writer);
var run = factory.SimulationRuns().ToArray()[cycleIdx];
run.Run();
Assert.IsTrue(run.FinishedWithoutErrors);
string distanceSumPath = Path.Combine(Path.GetDirectoryName(jobFile), "distance.vsum");
AssertHelper.ReportDeviations(distanceSumPath, distanceCycleIdx, factory, metrics);
AssertHelper.AssertMetrics(factory, metrics);
Directory.Delete(Path.GetDirectoryName(outputFile), recursive: true);
}
public void RunBEVDistanceRunCycle(string jobFile, int cycleIdx, Dictionary<String, double> metrics)
{
var inputProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
string outputFile = InputDataHelper.CreateUniqueSubfolder(jobFile);
var writer = new FileOutputWriter(outputFile);
var factory = new SimulatorFactoryEngineering(inputProvider, writer, false) { WriteModalResults = true };
factory.SumData = new SummaryDataContainer(writer);
var run = factory.SimulationRuns().ToArray()[cycleIdx];
run.Run();
Assert.IsTrue(run.FinishedWithoutErrors);
string distanceSumPath = Path.Combine(Path.GetDirectoryName(jobFile), "distance.vsum");
const int DISTANCE_RUN_START_POSITION = 3;
AssertHelper.ReadMetricsFromVSum(distanceSumPath, cycleIdx - DISTANCE_RUN_START_POSITION, metrics);
AssertHelper.AssertMetrics(factory, metrics);
Directory.Delete(Path.GetDirectoryName(outputFile), recursive: true);
}
}
}
......@@ -39,15 +39,12 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
{
protected const string BEV_E4_Job = @"TestData\BatteryElectric\GenericVehicleB4\BEV_ENG.vecto";
protected const string BEV_E4_Job_Time_Based = @"TestData\BatteryElectric\GenericVehicleB4\BEV_ENG_Time_Based.vecto";
protected const string BEV_E4_Job_Cont30kW = @"TestData\BatteryElectric\GenericVehicleB4\BEV_ENG_Cont30kW.vecto";
protected const string BEV_E3_Job = @"TestData\BatteryElectric\GenericVehicleB3\BEV_ENG.vecto";
protected const string BEV_E3_Job_Time_Based = @"TestData\BatteryElectric\GenericVehicleB3\BEV_ENG_Time_Based.vecto";
protected const string BEV_E3_Job_Cont30kW = @"TestData\BatteryElectric\GenericVehicleB3\BEV_ENG_Cont30kW.vecto";
protected const string BEV_E2_Job = @"TestData\BatteryElectric\GenericVehicleB2\BEV_ENG.vecto";
protected const string BEV_E2_Job_Time_Based = @"TestData\BatteryElectric\GenericVehicleB2\BEV_ENG_Time_Based.vecto";
protected const string BEV_E2_Job_3Speed = @"TestData\BatteryElectric\GenericVehicleB2\BEV_ENG_3speed.vecto";
protected const string BEV_E2_Job_BusAux = @"TestData\BatteryElectric\GenericVehicleB2\BEV_ENG_BusAux.vecto";
protected const string BEV_E2_Job_Cont30kW = @"TestData\BatteryElectric\GenericVehicleB2\BEV_ENG_Cont30kW.vecto";
......@@ -259,8 +256,7 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
[
TestCase(BEV_E4_Job, 0, TestName = "PEV E4 Job RD"),
TestCase(BEV_E4_Job_Cont30kW, 0, TestName = "PEV E4 Job Cont. 30kW RD"),
TestCase(BEV_E4_Job_Time_Based, 0, TestName = "PEV E4 Job Time Based")
TestCase(BEV_E4_Job_Cont30kW, 0, TestName = "PEV E4 Job Cont. 30kW RD")
]
public void B4PEVRunJob(string jobFile, int cycleIdx)
{
......@@ -453,8 +449,7 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
[
TestCase(BEV_E3_Job, 0, TestName = "PEV E3 Job RD"),
TestCase(BEV_E3_Job_Cont30kW, 0, TestName = "PEV E3 Job Cont. 30kW RD"),
TestCase(BEV_E3_Job_Time_Based, 0, TestName = "PEV E3 Job Time Based")
TestCase(BEV_E3_Job_Cont30kW, 0, TestName = "PEV E3 Job Cont. 30kW RD")
]
public void B3PEVRunJob(string jobFile, int cycleIdx)
{
......@@ -742,34 +737,6 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
Assert.IsTrue(run.FinishedWithoutErrors);
}
[
TestCase(BEV_E2_Job_Time_Based, 0, TestName = "PEV E2 Job MeasuredSpeed"),
TestCase(BEV_E2_Job_Time_Based, 1, TestName = "PEV E2 Job MeasuredSpeedGear"),
TestCase(BEV_E2_Job_Time_Based, 2, TestName = "PEV E2 Job PWheel")
]
public void B2_TimeBased_RunJob_Results_Meet_Expectations(string jobFile, int cycleIdx)
{
var inputProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
var writer = new FileOutputWriter(jobFile);
var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputProvider, writer);
factory.Validate = false;
factory.WriteModalResults = true;
var sumContainer = new SummaryDataContainer(writer);
var jobContainer = new JobContainer(sumContainer);
factory.SumData = sumContainer;
var run = factory.SimulationRuns().ToArray()[cycleIdx];
Assert.NotNull(run);
var pt = run.GetContainer();
Assert.NotNull(pt);
run.Run();
Assert.IsTrue(run.FinishedWithoutErrors);
}
[TestCase]
public void Run_E3_AxlegearInputRetarder()
{
......
{
"Header": {
"CreatedBy": "",
"Date": "2020-11-03T14:19:09.9858299Z",
"AppVersion": "3",
"FileVersion": 6
},
"Body": {
"SavedInDeclMode": false,
"ModelName": "3_speed_AMT",
"Inertia": 0.0,
"TracInt": 0.8,
"Gears": [
{
"Ratio": 2.64,
"LossMap": "Transmission\\Axle_4x2_Tractor.vtlm"
},
{
"Ratio": 17.5,
"LossMap": "Transmission\\Gear_1.vtlm",
"ShiftPolygon": "",
"MaxTorque": "",
"MaxSpeed": ""
},
{
"Ratio": 6.49,
"LossMap": "Transmission\\Gear_2.vtlm",
"ShiftPolygon": "",
"MaxTorque": "",
"MaxSpeed": ""
},
{
"Ratio": 2.48,
"LossMap": "Transmission\\Gear_3.vtlm",
"ShiftPolygon": "",
"MaxTorque": "",
"MaxSpeed": ""
}
],
"TqReserve": 0.0,
"ShiftTime": 2.0,
"StartTqReserve": 20.0,
"StartSpeed": 2.22222222222222,
"StartAcc": 0.8,
"GearboxType": "AMT",
"TorqueConverter": {
"Enabled": false
},
"DownshiftAfterUpshiftDelay": 6.0,
"UpshiftAfterDownshiftDelay": 6.0,
"UpshiftMinAcceleration": 0.1,
"PowershiftShiftTime": 0.0
}
}
\ No newline at end of file
......@@ -12,9 +12,7 @@
"GearboxFile": "Transmission\\AMT_12.vgbx",
"TCU": "Transmission\\AMT_12.vgbx",
"Padd_electric": 3540.0,
"VACC": "Truck.vacc",
"LAC": {
"Enabled": true,
"PreviewDistanceFactor": 10.0,
......@@ -30,9 +28,18 @@
"UnderSpeed": 5.0
},
"Cycles": [
"MeasuredSpeed.vdri",
"MeasuredSpeedGear.vdri",
"PWheel.vdri"
"MeasuredSpeed_LongHaul.vdri",
"MeasuredSpeed_RegionalDelivery.vdri",
"MeasuredSpeed_UrbanDelivery.vdri",
"LongHaul",
"RegionalDelivery",
"UrbanDelivery",
"MeasuredSpeedGear_LongHaul.vdri",
"MeasuredSpeedGear_RegionalDelivery.vdri",
"MeasuredSpeedGear_UrbanDelivery.vdri",
"PWheel_LongHaul.vdri",
"PWheel_RegionalDelivery.vdri",
"PWheel_UrbanDelivery.vdri"
]
}
}
\ No newline at end of file
{
"Header": {
"CreatedBy": "",
"Date": "2017-07-13T14:14:29.3226830Z",
"AppVersion": "3",
"FileVersion": 10
},
"Body": {
"SavedInDeclMode": false,
"VehCat": "RigidTruck",
"LegislativeClass": "Unknown",
"CurbWeight": 4670.0,
"CurbWeightExtra": 1900.0,
"Loading": 3020.0,
"MassMax": 11.99,
"rdyn": 421.0,
"PowertrainConfiguration": "BatteryElectric",
"CdCorrMode": "CdofVdecl",
"CdCorrFile": "",
"ElectricMotors": [
{
"Count": 2,
"Ratio": 2,
"MechanicalEfficiency": 0.97,
"Position": "B2",
"MotorFile": "GenericEMotor_125kW_485Nm.vem"
}
],
"Battery": {
"NumPacks": 2,
"BatteryFile": "GenericBattery_243kWh_750V.vbat"
},
"InitialSoC": 80,
"TorqueLimits": {},
"IdlingSpeed": 0.0,
"AxleConfig": {
"Type": "4x2",
"Axles": [
{
"Inertia": 6.5,
"Wheels": "265/70 R19.5",
"AxleWeightShare": 0.2,
"TwinTyres": false,
"RRCISO": 0.0065,
"FzISO": 20850.0,
"Type": "VehicleNonDriven"
},
{
"Inertia": 6.5,
"Wheels": "265/70 R19.5",
"AxleWeightShare": 0.3,
"TwinTyres": true,
"RRCISO": 0.0075,
"FzISO": 20850.0,
"Type": "VehicleDriven"
},
{
"Inertia": 4.5,
"Wheels": "235/75 R17.5",
"AxleWeightShare": 0.25,
"TwinTyres": false,
"RRCISO": 0.0055,
"FzISO": 16680.0,
"Type": "VehicleNonDriven"
},
{
"Inertia": 4.5,
"Wheels": "235/75 R17.5",
"AxleWeightShare": 0.25,
"TwinTyres": false,
"RRCISO": 0.0055,
"FzISO": 16680.0,
"Type": "VehicleNonDriven"
}
]
},
"EngineStopStart": true,
"EcoRoll": "None",
"PredictiveCruiseControl": "None",
"ATEcoRollReleaseLockupClutch": false,
"CdA": 4.83,
"VehicleHeight": 3.0
}
}
\ No newline at end of file
SoC, Ri
0, 0.04
100, 0.04
\ No newline at end of file
SOC, V
0, 673.5
10, 700.2
20, 715.4
30, 723.6
40, 727.7
50, 730.0
60, 731.6
70, 733.8
80, 737.1
90, 742.2
100, 750.2
\ No newline at end of file
{
"Header": {
"CreatedBy": " ()",
"Date": "2016-10-13T08:54:28.7387223Z",
"AppVersion": "3",
"FileVersion": 1
},
"Body": {
"SavedInDeclMode": false,
"Model": "Generic Battery",
"InternalResistanceCurve": "GenericBattery_243kWh.vbatr",
"SOC_min": 10,
"SOC_max": 90,
"MaxCurrentMap": "MaxCurrent.vimax",
"Capacity": 324,
"SoCCurve": "GenericBattery_243kWh.vbatv"
}
}
\ No newline at end of file
n [rpm] , T_drag [Nm]
0 , -6.06
7363.77 , -30.31
\ No newline at end of file
{
"Header": {
"CreatedBy": " ()",
"Date": "2016-10-13T08:54:28.7387223Z",
"AppVersion": "3",
"FileVersion": 1
},
"Body": {
"SavedInDeclMode": false,
"Model": "Generic Electric Motor",
"FullLoadCurve": "GenericEMotor_125kW_485Nm.vemp",
"DragCurve": "GenericDrag_125kW_485Nm.vemd",
"EfficiencyMap": "GenericMap_125kW_485Nm.vemo",
"Inertia": 0.225,
"ContinuousPower": 5000000,
"ContinuousPowerSpeed": 2000,
"OverloadTime": 30,
"ThermalOverloadRecoveryFactor": 0.9
}
}
\ No newline at end of file
n [rpm] , T_drive [Nm] , T_drag [Nm]
0,485,-485
2461.158914,485,-485
2452.135493,485,-485
2466.863034,483.8845,-483.8845
2481.590574,481.010875,-481.010875
2496.318115,478.173625,-478.173625
2503.681885,476.767125,-476.767125
2577.319588,463.138625,-463.138625
2650.95729,450.274,-450.274
2724.594993,438.1005,-438.1005
2798.232695,426.58175,-426.58175
2871.870398,415.645,-415.645
2945.5081,405.253875,-405.253875
3019.145803,395.359875,-395.359875
3092.783505,385.950875,-385.950875
3166.421208,376.978375,-376.978375
3240.05891,368.406,-368.406
3313.696613,360.221625,-360.221625
3387.334315,352.388875,-352.388875
3460.972018,344.895625,-344.895625
3534.60972,337.7055,-337.7055
3608.247423,330.8185,-330.8185
3681.885125,324.19825,-324.19825
3755.522828,317.84475,-317.84475
3829.16053,311.73375,-311.73375
3902.798233,305.853125,-305.853125
3976.435935,300.178625,-300.178625
4050.073638,294.722375,-294.722375
4123.71134,289.460125,-289.460125
4197.349043,284.37975,-284.37975
4270.986745,279.48125,-279.48125
4344.624448,274.740375,-274.740375
4418.26215,270.16925,-270.16925
4491.899853,265.7315,-265.7315
4565.537555,261.451375,-261.451375
4639.175258,257.304625,-257.304625
4712.81296,253.279125,-253.279125
4786.450663,249.387,-249.387
4860.088365,245.604,-245.604
4933.726068,241.94225,-241.94225
5007.36377,238.3775,-238.3775
5081.001473,234.921875,-234.921875
5154.639175,231.575375,-231.575375
5228.276878,228.31375,-228.31375
5301.91458,225.137,-225.137
5375.552283,222.05725,-222.05725
5449.189985,219.05025,-219.05025
5522.827688,216.128125,-216.128125
5596.46539,213.290875,-213.290875
5670.103093,210.51425,-210.51425
5743.740795,207.8225,-207.8225
5817.378498,205.191375,-205.191375
5891.0162,202.620875,-202.620875
5964.653903,200.123125,-200.123125
6038.291605,197.686,-197.686
6111.929308,195.297375,-195.297375
6185.56701,192.969375,-192.969375
6259.204713,190.702,-190.702
6332.842415,188.483125,-188.483125
6406.480118,186.324875,-186.324875
6480.11782,184.203,-184.203
6553.755523,182.129625,-182.129625
6627.393225,180.10475,-180.10475
6701.030928,178.128375,-178.128375
6774.66863,176.2005,-176.2005
6848.306333,174.296875,-174.296875
6921.944035,172.44175,-172.44175
6995.581738,170.635125,-170.635125
7069.21944,168.85275,-168.85275
7142.857143,167.10675,-167.10675
7216.494845,165.40925,-165.40925
7290.132548,163.736,-163.736
7363.77025,162.099125,-162.099125
{
"Header": {
"CreatedBy": " ()",
"Date": "2016-10-13T08:54:28.7387223Z",
"AppVersion": "3",
"FileVersion": 2
},
"Body": {
"SavedInDeclMode": false,
"Model": "Generic Electric Motor",
"FullLoadCurve": "GenericEMotor_125kW_485Nm.vemp",
"DragCurve": "GenericDrag_125kW_485Nm.vemd",
"EfficiencyMap": "GenericMap_125kW_485Nm.vemo",
"Inertia": 0.225,
"ContinuousTorque": 145,
"ContinuousTorqueSpeed": 2000,
"OverloadTorque": 485,
"OverloadTorqueSpeed": 2000,
"OverloadTime": 30,
"ThermalOverloadRecoveryFactor": 0.9
}
}
\ No newline at end of file
SOC, I_charge, I_discharge
0, 1620, 1620
100, 1620, 1620
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment