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 a8faa63a authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

clear shiftlossenergy if remaining shift time is non-negative; check TC...

clear shiftlossenergy if remaining shift time is non-negative; check TC operating point if possibe for engine (case creeping)
parent cfaaf2c3
Branches
Tags
No related merge requests found
...@@ -305,6 +305,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -305,6 +305,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
inTorque += powershiftLoss; inTorque += powershiftLoss;
//inTorque += CurrentState.PowershiftLossEnergy; //inTorque += CurrentState.PowershiftLossEnergy;
} else {
_powershiftLossEnergy = null;
} }
} }
......
...@@ -245,7 +245,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -245,7 +245,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
var nextGearboxInTorque = outTorque / nextGear.TorqueConverterRatio; var nextGearboxInTorque = outTorque / nextGear.TorqueConverterRatio;
var shiftLosses = _gearbox.ComputeShiftLosses(outTorque, outAngularVelocity, gear + 1) / ModelData.PowershiftShiftTime / nextGearboxInSpeed; var shiftLosses = _gearbox.ComputeShiftLosses(outTorque, outAngularVelocity, gear + 1) / ModelData.PowershiftShiftTime / nextGearboxInSpeed;
nextGearboxInTorque += shiftLosses; nextGearboxInTorque += shiftLosses;
var tcOperatingPoint = _gearbox.TorqueConverter.FindOperatingPoint(nextGearboxInTorque, nextGearboxInSpeed); var tcOperatingPoint = _gearbox.TorqueConverter.FindOperatingPoint(absTime, dt, nextGearboxInTorque, nextGearboxInSpeed);
var engineSpeedOverMin = tcOperatingPoint.InAngularVelocity.IsGreater(minEngineSpeed); var engineSpeedOverMin = tcOperatingPoint.InAngularVelocity.IsGreater(minEngineSpeed);
var avgSpeed = (DataBus.EngineSpeed + tcOperatingPoint.InAngularVelocity) / 2; var avgSpeed = (DataBus.EngineSpeed + tcOperatingPoint.InAngularVelocity) / 2;
......
...@@ -102,7 +102,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -102,7 +102,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity,
bool dryRun = false) bool dryRun = false)
{ {
var operatingPoint = FindOperatingPoint(outTorque, outAngularVelocity); var operatingPoint = FindOperatingPoint(absTime, dt, outTorque, outAngularVelocity);
var inTorque = CalculateAverageInTorque(operatingPoint); var inTorque = CalculateAverageInTorque(operatingPoint);
if (dryRun) { if (dryRun) {
...@@ -316,7 +316,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -316,7 +316,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
return retVal; return retVal;
} }
protected internal TorqueConverterOperatingPoint FindOperatingPoint( protected internal TorqueConverterOperatingPoint FindOperatingPoint(Second absTime, Second dt,
NewtonMeter outTorque, NewtonMeter outTorque,
PerSecond outAngularVelocity) PerSecond outAngularVelocity)
{ {
...@@ -324,6 +324,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -324,6 +324,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
if (operatingPointList.Count == 0) { if (operatingPointList.Count == 0) {
Log.Debug("TorqueConverter: Failed to find torque converter operating point, fallback: creeping"); Log.Debug("TorqueConverter: Failed to find torque converter operating point, fallback: creeping");
var tqOperatingPoint = ModelData.FindOperatingPoint(DataBus.EngineIdleSpeed, outAngularVelocity); var tqOperatingPoint = ModelData.FindOperatingPoint(DataBus.EngineIdleSpeed, outAngularVelocity);
var engineResponse = (ResponseDryRun)
NextComponent.Request(absTime, dt, tqOperatingPoint.InTorque, tqOperatingPoint.InAngularVelocity, true);
var engineOK = engineResponse.DeltaDragLoad.IsGreaterOrEqual(0) && engineResponse.DeltaFullLoad.IsSmallerOrEqual(0);
if (!engineOK) {
tqOperatingPoint = ModelData.FindOperatingPoint(VectoMath.Max(DataBus.EngineIdleSpeed, DataBus.EngineSpeed * 0.9), outAngularVelocity);
}
tqOperatingPoint.Creeping = true; tqOperatingPoint.Creeping = true;
return tqOperatingPoint; return tqOperatingPoint;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment