diff --git a/VectoCommon/VectoCommon/Models/OperatingPoint.cs b/VectoCommon/VectoCommon/Models/OperatingPoint.cs index 639ce72bbfeb3f9b971572b46e8aeec07692759f..884afd5d7ac3da7244e05adc78bc5fe4dea8c38c 100644 --- a/VectoCommon/VectoCommon/Models/OperatingPoint.cs +++ b/VectoCommon/VectoCommon/Models/OperatingPoint.cs @@ -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 diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs index e81b35851d9f756f2954e1b2fab2854eed91c707..2bb060fe7225b78b0d3c9a2987454ee75b359404 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs @@ -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>