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

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

fix: start cycle somewhere in the middle

parent 73624809
No related branches found
No related tags found
No related merge requests found
......@@ -35,15 +35,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
/// <summary>
/// Class representing one Distance Based Driving Cycle
/// </summary>
public class DistanceBasedDrivingCycle : VectoSimulationComponent, IDrivingCycle,
public class DistanceBasedDrivingCycle : StatefulVectoSimulationComponent<DistanceBasedDrivingCycle.DrivingCycleState>,
IDrivingCycle,
ISimulationOutPort, IDrivingCycleInPort, IRoadLookAhead
{
protected const double LookaheadTimeSafetyMargin = 1.5;
protected readonly DrivingCycleData Data;
internal DrivingCycleState PreviousState;
internal DrivingCycleState CurrentState = new DrivingCycleState();
internal readonly DrivingCycleEnumerator CycleIntervalIterator;
protected IDrivingCycleOutPort NextComponent;
......@@ -52,6 +50,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
{
Data = cycle;
CycleIntervalIterator = new DrivingCycleEnumerator(Data);
CycleStartDistance = Data.Entries.Count > 0 ? Data.Entries.First().Distance : 0.SI<Meter>();
var first = Data.Entries.First();
PreviousState = new DrivingCycleState {
AbsTime = 0.SI<Second>(),
WaitTime = 0.SI<Second>(),
Distance = first.Distance,
Altitude = first.Altitude,
};
CurrentState = PreviousState.Clone();
}
#region IDrivingCycleInProvider
......@@ -219,15 +227,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
IResponse ISimulationOutPort.Initialize()
{
var first = Data.Entries.First();
PreviousState = new DrivingCycleState {
AbsTime = 0.SI<Second>(),
WaitTime = 0.SI<Second>(),
Distance = first.Distance,
Altitude = first.Altitude,
};
CurrentState = PreviousState.Clone();
if (CycleIntervalIterator.LeftSample.VehicleTargetSpeed.IsEqual(0)) {
var retVal = NextComponent.Initialize(DataBus.StartSpeed,
CycleIntervalIterator.LeftSample.RoadGradient, DataBus.StartAcceleration);
......@@ -251,10 +250,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
}
}
public Meter CycleStartDistance
{
get { return Data.Entries.Count > 0 ? Data.Entries.First().Distance : 0.SI<Meter>(); }
}
public Meter CycleStartDistance { get; internal set; }
#endregion
......@@ -344,7 +340,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
internal void SetDriveOffDistance(Meter startDistance)
{
while (CycleIntervalIterator.MoveNext() && CycleIntervalIterator.RightSample.Distance < startDistance) {}
CycleIntervalIterator.MoveNext();
//CycleIntervalIterator.MoveNext();
PreviousState.Distance = startDistance;
CycleStartDistance = startDistance;
}
public class DrivingCycleEnumerator : IEnumerator<DrivingCycleData.DrivingCycleEntry>
......
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