From 65fbddee07a482d6433efbe1b46a0babe3f875fc Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Thu, 10 Jun 2021 09:49:04 +0200 Subject: [PATCH] update electric motor model (overload test point for overload buffer calc) --- .../InputData/FileIO/JSON/JSONElectricMotor.cs | 4 ++-- .../DataObjectAdapter/EngineeringDataAdapter.cs | 4 +++- .../Data/ElectricMotor/ElectricMotorData.cs | 14 +++++++++++--- .../SimulationComponent/Impl/ElectricMotor.cs | 13 +++++++------ 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONElectricMotor.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONElectricMotor.cs index 9c25c30414..276238786a 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONElectricMotor.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONElectricMotor.cs @@ -16,7 +16,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON { } public override PerSecond ContinuousTorqueSpeed { - get { return Body.GetValueOrDefault<double>("ContinuousTorqueSpeed")?.RPMtoRad() ?? 0.RPMtoRad(); } + get { return Body.GetValueOrDefault<double>("ContinuousTorqueSpeed")?.RPMtoRad(); } } public override NewtonMeter OverloadTorque { @@ -24,7 +24,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON { } public override PerSecond OverloadTestSpeed { - get { return Body.GetValueOrDefault<double>("OverloadTorqueSpeed")?.RPMtoRad() ?? 0.RPMtoRad(); } + get { return Body.GetValueOrDefault<double>("OverloadTorqueSpeed")?.RPMtoRad(); } } } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs index 889b084edb..7ebb331a15 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs @@ -775,7 +775,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter EfficiencyMap = ElectricMotorMapReader.Create(motorData.EfficiencyMap, count), Inertia = motorData.Inertia, ContinuousTorque = motorData.ContinuousTorque * count, - ContinuousPowerSpeed = motorData.ContinuousTorqueSpeed, + ContinuousTorqueSpeed = motorData.ContinuousTorqueSpeed, + OverloadTorque = motorData.OverloadTorque ?? 0.SI<NewtonMeter>() * count, + OverloadTestSpeed = motorData.OverloadTestSpeed ?? 0.RPMtoRad(), OverloadTime = motorData.OverloadTime, OverloadRegenerationFactor = motorData.OverloadRecoveryFactor, RatioADC = ratio, diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs index 1297712a0d..e22a0db1f5 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs @@ -23,11 +23,19 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data public NewtonMeter ContinuousTorque { get; internal set; } [SIRange(0, double.MaxValue)] - public Second OverloadTime { get; internal set; } - + public PerSecond ContinuousTorqueSpeed { get; internal set; } + + + [SIRange(double.MinValue, double.MaxValue)] + public NewtonMeter OverloadTorque { get; set; } + [SIRange(0, double.MaxValue)] - public PerSecond ContinuousPowerSpeed { get; internal set; } + public PerSecond OverloadTestSpeed { get; set; } + + [SIRange(0, double.MaxValue)] + public Second OverloadTime { get; internal set; } + [SIRange(0, 1)] public double OverloadRegenerationFactor { get; internal set; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs index 2cc9a31e52..7e9ff4a809 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs @@ -54,13 +54,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ContinuousTorque = ModelData.ContinuousTorque; var contElPwr = - ModelData.EfficiencyMap.LookupElectricPower(ModelData.ContinuousPowerSpeed, -ContinuousTorque).ElectricalPower ?? - ModelData.EfficiencyMap.LookupElectricPower(ModelData.ContinuousPowerSpeed, ModelData.FullLoadCurve.FullLoadDriveTorque(ModelData.ContinuousPowerSpeed), true).ElectricalPower; - ContinuousPowerLoss = -contElPwr - ModelData.ContinuousTorque * ModelData.ContinuousPowerSpeed; // loss needs to be positive - var maxTqDrive = ModelData.FullLoadCurve.FullLoadDriveTorque(ModelData.ContinuousPowerSpeed); - var peakElPwr = ModelData.EfficiencyMap.LookupElectricPower(ModelData.ContinuousPowerSpeed, maxTqDrive, true) + ModelData.EfficiencyMap.LookupElectricPower(ModelData.ContinuousTorqueSpeed, -ContinuousTorque).ElectricalPower ?? + ModelData.EfficiencyMap.LookupElectricPower(ModelData.ContinuousTorqueSpeed, ModelData.FullLoadCurve.FullLoadDriveTorque(ModelData.ContinuousTorqueSpeed), true).ElectricalPower; + ContinuousPowerLoss = -contElPwr - ContinuousTorque * ModelData.ContinuousTorqueSpeed; // loss needs to be positive + + var peakElPwr = ModelData.EfficiencyMap.LookupElectricPower(ModelData.OverloadTestSpeed, -ModelData.OverloadTorque, true) .ElectricalPower; - var peakPwrLoss = -peakElPwr + ModelData.ContinuousPowerSpeed * maxTqDrive; // losses need to be positive + var peakPwrLoss = -peakElPwr + ModelData.OverloadTorque * ModelData.OverloadTestSpeed; // losses need to be positive + OverloadBuffer = (peakPwrLoss - ContinuousPowerLoss) * ModelData.OverloadTime; if (OverloadBuffer.IsSmallerOrEqual(0) && !(container is SimplePowertrainContainer)) { Log.Error("Overload buffer for thermal de-rating is negative! Please check electric motor data!"); -- GitLab