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

Skip to content
Snippets Groups Projects
Commit 53716998 authored by Michael KRISPER's avatar Michael KRISPER
Browse files

BatteryElectricMotorController: Corrected Bug when GearboxModelData is null (e.g. E3)

parent 02fcc521
No related branches found
No related tags found
No related merge requests found
using System.Linq; using System.Linq;
using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Utils; using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.Models.Declaration;
using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.Simulation.Impl;
using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data;
using TUGraz.VectoCore.Utils; using TUGraz.VectoCore.Utils;
...@@ -26,16 +24,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { ...@@ -26,16 +24,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl {
#region Implementation of IElectricMotorControl #region Implementation of IElectricMotorControl
public NewtonMeter MechanicalAssistPower( public NewtonMeter MechanicalAssistPower(Second absTime, Second dt, NewtonMeter outTorque,
Second absTime, Second dt, NewtonMeter outTorque, PerSecond prevOutAngularVelocity, PerSecond currOutAngularVelocity, PerSecond prevOutAngularVelocity, PerSecond currOutAngularVelocity, NewtonMeter maxDriveTorque,
NewtonMeter maxDriveTorque, NewtonMeter maxRecuperationTorque, NewtonMeter maxRecuperationTorque, PowertrainPosition position, bool dryRun)
PowertrainPosition position, bool dryRun)
{ {
if (!DataBus.GearboxInfo.GearEngaged(absTime) && DataBus.DriverInfo.DrivingAction == DrivingAction.Roll) { if (!DataBus.GearboxInfo.GearEngaged(absTime) && DataBus.DriverInfo.DrivingAction == DrivingAction.Roll) {
var avgSpeed = (prevOutAngularVelocity + currOutAngularVelocity) / 2; var avgSpeed = (prevOutAngularVelocity + currOutAngularVelocity) / 2;
var inertiaTorqueLoss = avgSpeed.IsEqual(0) var inertiaTorqueLoss = avgSpeed.IsEqual(0)
? 0.SI<NewtonMeter>() ? 0.SI<NewtonMeter>()
: Formulas.InertiaPower(currOutAngularVelocity, prevOutAngularVelocity, ElectricMotorData.Inertia, dt) / avgSpeed; : Formulas.InertiaPower(currOutAngularVelocity, prevOutAngularVelocity,
ElectricMotorData.Inertia, dt) / avgSpeed;
//var dragTorque = ElectricMotorData.DragCurve.Lookup() //var dragTorque = ElectricMotorData.DragCurve.Lookup()
return (-inertiaTorqueLoss); //.LimitTo(maxDriveTorque, maxRecuperationTorque); return (-inertiaTorqueLoss); //.LimitTo(maxDriveTorque, maxRecuperationTorque);
} }
...@@ -43,8 +41,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { ...@@ -43,8 +41,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl {
DataBus.DriverInfo.DrivingAction == DrivingAction.Roll) { DataBus.DriverInfo.DrivingAction == DrivingAction.Roll) {
return null; return null;
} }
if (DataBus.VehicleInfo.VehicleSpeed.IsSmallerOrEqual(GearboxModelData.DisengageWhenHaltingSpeed) && outTorque.IsSmaller(0)) { if (GearboxModelData != null
&& DataBus.VehicleInfo.VehicleSpeed.IsSmallerOrEqual(GearboxModelData.DisengageWhenHaltingSpeed)
&& outTorque.IsSmaller(0)) {
return null; return null;
} }
...@@ -52,7 +52,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { ...@@ -52,7 +52,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl {
return null; return null;
} }
return (-outTorque).LimitTo(maxDriveTorque, maxRecuperationTorque ?? VectoMath.Max(maxDriveTorque, 0.SI<NewtonMeter>())); return (-outTorque).LimitTo(maxDriveTorque, maxRecuperationTorque ?? VectoMath.Max(maxDriveTorque, 0.SI<NewtonMeter>()));
} }
#endregion #endregion
......
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