diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs index 424e42675af0b118fa62556b85e7a1cc3d86777b..5e156498f1e7884bf7d07737a278a463ca129b65 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs @@ -38,6 +38,7 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.Models.Connector.Ports; using TUGraz.VectoCore.Models.Connector.Ports.Impl; +using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.DataBus; @@ -134,6 +135,18 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl DeltaT = CycleIterator.RightSample.Time - absTime }; } + if (Constants.SimulationSettings.MeasuredSpeedTargetTimeInterval.IsEqual(dt)) { + if ((CycleIterator.RightSample.Time - (absTime + dt)) > 0 && (CycleIterator.RightSample.Time - (absTime + dt)) / + Constants.SimulationSettings.MeasuredSpeedTargetTimeInterval < 0.5) { + // the remaining simulation interval would be below 0.5 seconds (i.e., half of MeasuredSpeedTargetTimeInterval) + // reduce the current simulation interval to extend the remaining interval + return new ResponseFailTimeInterval { + AbsTime = absTime, + Source = this, + DeltaT = (CycleIterator.RightSample.Time - absTime)/2 + }; + } + } // calc acceleration from speed diff vehicle to cycle var targetSpeed = CycleIterator.RightSample.VehicleTargetSpeed; @@ -141,7 +154,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl targetSpeed = 0.KMPHtoMeterPerSecond(); } var deltaV = targetSpeed - DataBus.VehicleSpeed; - var deltaT = CycleIterator.RightSample.Time - CycleIterator.LeftSample.Time; + var deltaT = CycleIterator.RightSample.Time - absTime; if (DataBus.VehicleSpeed.IsSmaller(0)) { throw new VectoSimulationException("vehicle velocity is smaller than zero"); diff --git a/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs index 67595e7a88f655313e225e6c4a9e2a9f2043f5d0..4aae8a546732f45ba6f97b5536a9dd103febb2d7 100644 --- a/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs +++ b/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs @@ -32,6 +32,7 @@ using NUnit.Framework; using System.Collections.Generic; using System.Data; +using System.IO; using System.Linq; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.Models; @@ -60,6 +61,13 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation [TestFixture] public class MeasuredSpeedModeTest { + + [OneTimeSetUp] + public void Init() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + /// <summary> /// Test if the cycle file can be read. /// </summary>