feat: Update simulation speed display in UI for improved user feedback

This commit is contained in:
Miguel 2025-09-06 23:17:24 +02:00
parent 322d335edd
commit 3635169f86
1 changed files with 36 additions and 0 deletions

View File

@ -66,6 +66,11 @@ namespace CtrEditor
private const double MAX_SIM_INTERVAL = 100; // Máximo intervalo simulación (ms)
private const double SIM_BUFFER_TIME = 2; // Buffer de 2ms extra respecto al tiempo real
// Variables para promedio móvil de SimulationSpeed
private Queue<double> simSpeedSamples = new Queue<double>();
private double totalSimSpeedTime = 0;
private const double SIM_SPEED_WINDOW_MS = 500; // Ventana de 500ms para promedio
private float TiempoDesdeStartSimulacion;
private bool Debug_SimulacionCreado = false;
@ -1199,6 +1204,9 @@ namespace CtrEditor
var timeBetweenCalls = stopwatch_Sim.Elapsed.TotalMilliseconds - stopwatch_SimModel_last;
stopwatch_SimModel_last = stopwatch_Sim.Elapsed.TotalMilliseconds;
// ✅ NUEVO: Actualizar velocidad de simulación con promedio móvil de 500ms
UpdateSimulationSpeedAverage(timeBetweenCalls);
// Acumular tiempo para el promedio (usando tiempo real del timer)
accumulatedSimTime += timeBetweenCalls;
simSampleCount++;
@ -1492,6 +1500,29 @@ namespace CtrEditor
}
}
/// <summary>
/// Actualiza el promedio móvil de velocidad de simulación en una ventana de 500ms
/// </summary>
private void UpdateSimulationSpeedAverage(double timeBetweenCalls)
{
// Agregar la nueva muestra
simSpeedSamples.Enqueue(timeBetweenCalls);
totalSimSpeedTime += timeBetweenCalls;
// Remover muestras antiguas que estén fuera de la ventana de 500ms
while (simSpeedSamples.Count > 0 && totalSimSpeedTime > SIM_SPEED_WINDOW_MS)
{
var oldestSample = simSpeedSamples.Dequeue();
totalSimSpeedTime -= oldestSample;
}
// Calcular y actualizar el promedio
if (simSpeedSamples.Count > 0)
{
SimulationSpeed = totalSimSpeedTime / simSpeedSamples.Count;
}
}
/// <summary>
/// Resetea todos los contadores adaptativos de timing para empezar con mediciones limpias
/// </summary>
@ -1501,6 +1532,11 @@ namespace CtrEditor
lastSimExecutionTime = 0;
maxSimExecutionTime = 0;
simTimingAdaptationCounter = 0;
SimulationSpeed = 0.0; // Reset del display de velocidad de simulación
// Reset promedio móvil de SimulationSpeed
simSpeedSamples.Clear();
totalSimSpeedTime = 0;
// Reset contadores de PLC
lastPlcExecutionTime = 0;