From 08faff379677f4e960ba37795b89b6721e969201 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Tue, 15 Sep 2020 16:09:47 +0200 Subject: [PATCH] adding BEV testcase with e-motor de-rating --- .../Simulation/Data/ModalResultField.cs | 1 + .../SimulationComponent/Impl/ElectricMotor.cs | 7 +- .../OutputData/ModalDataContainer.cs | 2 +- .../BatteryElectric/BatteryElectricTest.cs | 36 ++++++++ .../GenericVehicleB4/BEV_ENG_Cont30kW.vecto | 36 ++++++++ .../BatteryElectricVehicle_Cont30kW.vveh | 84 +++++++++++++++++++ .../GenericEMotor_125kW_485Nm_Cont30kW.vem | 19 +++++ VectoCore/VectoCoreTest/VectoCoreTest.csproj | 9 ++ 8 files changed, 192 insertions(+), 2 deletions(-) create mode 100644 VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BEV_ENG_Cont30kW.vecto create mode 100644 VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BatteryElectricVehicle_Cont30kW.vveh create mode 100644 VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/GenericEMotor_125kW_485Nm_Cont30kW.vem diff --git a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs index 678119ae70..840fc8114f 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs @@ -391,6 +391,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data //[ModalResultField(typeof(SI), caption: "P_em-{0}_brake [kW]", outputFactor: 1e-3)] P_electricMotor_brake_, [ModalResultField(typeof(SI), caption: "P_em-{0}_loss [kW]", outputFactor: 1e-3)] P_electricMotorLoss_, [ModalResultField(typeof(SI), caption: "P_em-{0}_inertia_loss [kW]", outputFactor: 1e-3)] P_electricMotorInertiaLoss_, + [ModalResultField(typeof(SI), caption: "EM-{0}_OverloadBuffer [%]", outputFactor: 100)] ElectricMotor_OvlBuffer_, // only for graphDrawing Testcase [ModalResultField(typeof(SI), caption: "P_em-P2_mech [kW]", outputFactor: 1e-3)] diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs index f7ddecb8d0..0eb1694b6c 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs @@ -44,7 +44,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return ModelData.DragCurve.Lookup(electricMotorSpeed) * electricMotorSpeed; } - public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity) + public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity) { PreviousState.OutAngularVelocity = outAngularVelocity; PreviousState.OutTorque = outTorque; @@ -341,6 +341,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl container[ModalResultField.P_electricMotor_drive_max_, Position] = (CurrentState.DriveMax ?? 0.SI<NewtonMeter>()) * avgSpeed; container[ModalResultField.P_electricMotorLoss_, Position] = (CurrentState.InTorque - CurrentState.OutTorque) * avgSpeed - (CurrentState.ElectricPowerToBattery); container[ModalResultField.P_electricMotorInertiaLoss_, Position] = CurrentState.InertiaTorqueLoss * avgSpeed; + + var contribution = + (VectoMath.Abs((CurrentState.InTorque - CurrentState.OutTorque) * avgSpeed) - + ModelData.ContinuousPower) * simulationInterval; + container[ModalResultField.ElectricMotor_OvlBuffer_, Position] = VectoMath.Max(0, (ThermalBuffer + contribution) / ModelData.OverloadBuffer); } protected override void DoCommitSimulationStep(Second time, Second simulationInterval) diff --git a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs index 52566776b9..36a3389046 100644 --- a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs @@ -71,7 +71,7 @@ namespace TUGraz.VectoCore.OutputData ModalResultField.P_electricMotor_mech_, ModalResultField.P_electricMotor_el_, ModalResultField.P_electricMotorLoss_, ModalResultField.P_electricMotorInertiaLoss_, /*ModalResultField.P_electricMotor_brake_,*/ ModalResultField.P_electricMotor_drive_max_, - ModalResultField.P_electricMotor_gen_max_ + ModalResultField.P_electricMotor_gen_max_, ModalResultField.ElectricMotor_OvlBuffer_ }; public static readonly IList<ModalResultField> FuelConsumptionSignals = new[] { diff --git a/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs b/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs index 956eb2c96f..dbc910595d 100644 --- a/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs +++ b/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs @@ -8,6 +8,7 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.FileIO.JSON; using TUGraz.VectoCore.InputData.Impl; using TUGraz.VectoCore.InputData.Reader.ComponentData; using TUGraz.VectoCore.Models.Declaration; @@ -33,6 +34,9 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric public class BatteryElectricTest { + protected const string BEV_Job = @"TestData\BatteryElectric\GenericVehicleB4\BEV_ENG.vecto"; + protected const string BEV_Job_Cont30kW = @"TestData\BatteryElectric\GenericVehicleB4\BEV_ENG_Cont30kW.vecto"; + //private ModalResultField[] Yfields; @@ -199,6 +203,38 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric graphWriter.Write(modFilename + ".vmod"); } + [TestCase(BEV_Job, 0, TestName = "BEV E4 Job RD"), + TestCase(BEV_Job_Cont30kW, 0, TestName = "BEV E4 Job Cont. 80kW RD") + ] + public void B4BEVRunJob(string jobFile, int cycleIdx) + { + var inputProvider = JSONInputDataFactory.ReadJsonJob(jobFile); + + var writer = new FileOutputWriter(jobFile); + var factory = new SimulatorFactory(ExecutionMode.Engineering, inputProvider, writer) + { + Validate = false, + 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); + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [ diff --git a/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BEV_ENG_Cont30kW.vecto b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BEV_ENG_Cont30kW.vecto new file mode 100644 index 0000000000..be8d73fdb1 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BEV_ENG_Cont30kW.vecto @@ -0,0 +1,36 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2016-10-13T08:55:18.2100810Z", + "AppVersion": "3", + "FileVersion": 9 + }, + "Body": { + "SavedInDeclMode": false, + "EngineOnlyMode": false, + "VehicleFile": "BatteryElectricVehicle_Cont30kW.vveh", + + "Padd_electric": 3540.0, + + "VACC": "Truck.vacc", + + "LAC": { + "Enabled": true, + "PreviewDistanceFactor": 10.0, + "DF_offset": 2.5, + "DF_scaling": 1.5, + "DF_targetSpeedLookup": "", + "Df_velocityDropLookup": "" + }, + "OverSpeedEcoRoll": { + "Mode": "Off", + "MinSpeed": 50.0, + "OverSpeed": 5.0, + "UnderSpeed": 5.0 + }, + "Cycles": [ + "RegionalDelivery" + + ] + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BatteryElectricVehicle_Cont30kW.vveh b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BatteryElectricVehicle_Cont30kW.vveh new file mode 100644 index 0000000000..206d360c91 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BatteryElectricVehicle_Cont30kW.vveh @@ -0,0 +1,84 @@ +{ + "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": 22.6, + "MechanicalEfficiency": 0.97, + "Position": "B4", + "MotorFile": "GenericEMotor_125kW_485Nm_Cont30kW.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, + "CdxA": 4.83, + "VehicleHeight": 3.0 + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/GenericEMotor_125kW_485Nm_Cont30kW.vem b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/GenericEMotor_125kW_485Nm_Cont30kW.vem new file mode 100644 index 0000000000..8f35e87656 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/GenericEMotor_125kW_485Nm_Cont30kW.vem @@ -0,0 +1,19 @@ +{ + "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": 30000, + "ThermalOverloadBuffer": 0.7, + "ThermalOverloadRecoveryFactor": 0.9 +} +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 408ab2e13d..4d3c82a708 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -239,9 +239,15 @@ <SubType>Designer</SubType> </None> <None Include="default.runsettings" /> + <None Include="TestData\BatteryElectric\GenericVehicleB4\BatteryElectricVehicle_Cont30kW.vveh"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\BatteryElectric\GenericVehicleB4\BatteryElectricVehicle.vveh"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\BatteryElectric\GenericVehicleB4\BEV_ENG_Cont30kW.vecto"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\BatteryElectric\GenericVehicleB4\BEV_ENG.vecto"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> @@ -257,6 +263,9 @@ <None Include="TestData\BatteryElectric\GenericVehicleB4\GenericDrag_125kW_485Nm.vemd"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\BatteryElectric\GenericVehicleB4\GenericEMotor_125kW_485Nm_Cont30kW.vem"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\BatteryElectric\GenericVehicleB4\GenericEMotor_125kW_485Nm.vem"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> -- GitLab