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

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

added DummyElectricMotorControl and set EmTorque to null for electric motors

parent ee38eb69
No related branches found
No related tags found
No related merge requests found
......@@ -86,6 +86,16 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
modData?.Reset();
SlopeData[speed] = slope;
}
if (!SlopeData.ContainsKey(MaxSpeed)) {
vehicle.Initialize(MaxSpeed, 0.SI<Radian>());
var slope = SearchSlope(vehicle, Container);
modData?.Reset();
SlopeData[MaxSpeed] = slope;
}
}
private void RunPreprocessingAMTGearbox(Gearbox gearbox, Vehicle vehicle)
......@@ -133,20 +143,25 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
var acceleration = 0.SI<MeterPerSquareSecond>();
var absTime = 0.SI<Second>();
var gradient = 0.SI<Radian>();
foreach (var motor in container.ElectricMotors.Values) {
((motor as ElectricMotor).Control as DummyElectricMotorControl).EmTorque = null;
}
var initialResponse = vehicle.Request(absTime, simulationInterval, acceleration, gradient);
var delta = initialResponse.Gearbox?.PowerRequest ?? (initialResponse.Engine?.PowerRequest ?? 0.SI<Watt>()) + (initialResponse.ElectricMotor?.PowerRequest ?? 0.SI<Watt>());
var delta = initialResponse.Gearbox?.PowerRequest ?? initialResponse.ElectricMotor?.TotalTorqueDemand * initialResponse.ElectricMotor?.AvgDrivetrainSpeed;
try {
gradient = SearchAlgorithm.Search(
gradient, delta, 0.1.SI<Radian>(),
getYValue: response => {
var r = (ResponseDryRun)response;
return r.Gearbox?.PowerRequest ?? (r.Engine?.PowerRequest ?? 0.SI<Watt>() + r.ElectricMotor?.PowerRequest ?? 0.SI<Watt>());
return r.Gearbox?.PowerRequest ?? r.ElectricMotor?.TotalTorqueDemand * r.ElectricMotor?.AvgDrivetrainSpeed;
},
evaluateFunction: grad => vehicle.Request(absTime, simulationInterval, acceleration, grad, true),
criterion: response => {
var r = (ResponseDryRun)response;
return (r.Gearbox?.PowerRequest ?? (r.Engine?.PowerRequest ?? 0.SI<Watt>()) + (r.ElectricMotor?.PowerRequest ?? 0.SI<Watt>())).Value();
return (r.Gearbox?.PowerRequest ?? r.ElectricMotor?.TotalTorqueDemand * r.ElectricMotor?.AvgDrivetrainSpeed).Value();
}
);
} catch (VectoSearchAbortedException) {
......
......@@ -36,15 +36,13 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
var runData = Container.RunData;
var electricEngineDrag = runData.ElectricMachinesData.Sum(e =>
e.Item2.EfficiencyData.VoltageLevels[0].DragCurve.Entries.Average(x =>
(x.MotorSpeed * x.DragTorque).Value())).SI<Watt>();
var combustionEngineDrag = runData.EngineData?.FullLoadCurves[0].FullLoadEntries.Average(x =>
(x.EngineSpeed * x.TorqueDrag).Value()).SI<Watt>()
?? 0.SI<Watt>();
var engineDrag = electricEngineDrag + combustionEngineDrag;
var engineDrag = combustionEngineDrag;
var slopeEngineDrag = 0.0;
if (runData.GearboxData != null && runData.GearboxData.Type.AutomaticTransmission()) {
if ((runData.VehicleData.ADAS.EcoRoll != EcoRollType.None && runData.GearboxData.ATEcoRollReleaseLockupClutch) ||
......
......@@ -804,7 +804,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
aux.AddConstant("P_aux_el", data.ElectricAuxDemand ?? 0.SI<Watt>());
es.Connect(aux);
var ctl = new SimpleElectricMotorControl();
var ctl = new DummyElectricMotorControl();
var powertrain = vehicle
.AddComponent(new Wheels(container, data.VehicleData.DynamicTyreRadius, data.VehicleData.WheelsInertia))
.AddComponent(new Brakes(container));
......@@ -1139,6 +1139,19 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
}
}
public class DummyElectricMotorControl : IElectricMotorControl
{
#region Implementation of IElectricMotorControl
public NewtonMeter MechanicalAssistPower(Second absTime, Second dt, NewtonMeter outTorque, PerSecond prevOutAngularVelocity, PerSecond currOutAngularVelocity, NewtonMeter maxDriveTorque, NewtonMeter maxRecuperationTorque, PowertrainPosition position, bool dryRun) {
return EmTorque;
}
public NewtonMeter EmTorque;
#endregion
}
internal class DummyDriverInfo : VectoSimulationComponent, IDriverInfo
......
......@@ -23,7 +23,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
{
protected IElectricSystem ElectricPower;
protected IElectricMotorControl Control;
internal IElectricMotorControl Control { get; }
protected ElectricMotorData ModelData;
private PerSecond _maxSpeed;
......@@ -304,7 +304,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
Engine = { EngineSpeed = avgDtSpeed},
ElectricMotor = {
ElectricMotorPowerMech = (inTorqueDt - outTorque) * avgDtSpeed,
TotalTorqueDemand = inTorqueDt,
},
DeltaFullLoad = remainingPower,
DeltaDragLoad = remainingPower,
......@@ -322,7 +321,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
retVal = new ResponseSuccess(this) {
ElectricMotor = {
ElectricMotorPowerMech = (inTorqueDt - outTorque) * avgDtSpeed,
TotalTorqueDemand = inTorqueDt
},
Engine = {
PowerRequest = 0.SI<Watt>(),
......@@ -347,9 +345,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
} else {
retVal = NextComponent.Request(absTime, dt, inTorqueDt / ratio, outAngularVelocity * ratio, dryRun);
retVal.ElectricMotor.ElectricMotorPowerMech = (inTorqueDt - outTorque) * avgDtSpeed;
retVal.ElectricMotor.TotalTorqueDemand = inTorqueDt;
}
retVal.ElectricMotor.TotalTorqueDemand = inTorqueDt;
retVal.ElectricMotor.MaxDriveTorque = maxDriveTorqueDt;
retVal.ElectricMotor.MaxDriveTorqueEM = maxDriveTorqueEm;
retVal.ElectricMotor.MaxRecuperationTorque = maxRecuperationTorqueDt;
......
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