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

Skip to content
Snippets Groups Projects
Commit 248b9c32 authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

driver model: in case the limitation mode is set to none for an operating...

driver model: in case the limitation mode is set to none for an operating point, don't limit the acceleration as well (might be higher than driver acc in case of traction interruption)
parent 367dbd76
No related branches found
No related tags found
No related merge requests found
......@@ -45,5 +45,14 @@ namespace TUGraz.VectoCommon.Models
{
return string.Format("a: {0}, dt: {1}, ds: {2}", Acceleration, SimulationInterval, SimulationDistance);
}
public OperatingPoint Clone()
{
return new OperatingPoint() {
Acceleration = Acceleration,
SimulationDistance = SimulationDistance,
SimulationInterval = SimulationInterval
};
}
}
}
\ No newline at end of file
......@@ -699,31 +699,32 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
private OperatingPoint LimitAccelerationByDriverModel(OperatingPoint operatingPoint,
LimitationMode limits)
{
var retVal = operatingPoint.Clone();
var limitApplied = false;
var originalAcceleration = operatingPoint.Acceleration;
//if (((limits & LimitationMode.LimitDecelerationLookahead) != 0) &&
// operatingPoint.Acceleration < DriverData.LookAheadCoasting.Deceleration) {
// operatingPoint.Acceleration = DriverData.LookAheadCoasting.Deceleration;
// limitApplied = true;
//}
var accelerationLimits = DriverData.AccelerationCurve.Lookup(DataBus.VehicleSpeed);
if (operatingPoint.Acceleration > accelerationLimits.Acceleration) {
operatingPoint.Acceleration = accelerationLimits.Acceleration;
if (limits != LimitationMode.NoLimitation && operatingPoint.Acceleration > accelerationLimits.Acceleration) {
retVal.Acceleration = accelerationLimits.Acceleration;
limitApplied = true;
}
if (((limits & LimitationMode.LimitDecelerationDriver) != 0) &&
operatingPoint.Acceleration < accelerationLimits.Deceleration) {
operatingPoint.Acceleration = accelerationLimits.Deceleration;
retVal.Acceleration = accelerationLimits.Deceleration;
limitApplied = true;
}
if (limitApplied) {
operatingPoint.SimulationInterval =
ComputeTimeInterval(operatingPoint.Acceleration, operatingPoint.SimulationDistance)
retVal.SimulationInterval =
ComputeTimeInterval(retVal.Acceleration, retVal.SimulationDistance)
.SimulationInterval;
Log.Debug("Limiting acceleration from {0} to {1}, dt: {2}", originalAcceleration,
operatingPoint.Acceleration, operatingPoint.SimulationInterval);
Log.Debug("Limiting acceleration from {0} to {1}, dt: {2}", operatingPoint.Acceleration,
retVal.Acceleration, retVal.SimulationInterval);
}
return operatingPoint;
return retVal;
}
/// <summary>
......
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