Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

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

add status of simulation to vehiclecontainer and summary report

parent 80a8e7ea
No related branches found
No related tags found
No related merge requests found
Showing
with 66 additions and 27 deletions
......@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using TUGraz.VectoCore.Models.Simulation.Impl;
using TUGraz.VectoCore.Utils;
namespace TUGraz.VectoCore.Models.Simulation.Data
......@@ -29,10 +30,13 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
/// </summary>
void CommitSimulationStep();
VectoRun.Status RunStatus { get; }
/// <summary>
/// Finishes the writing of the DataWriter.
/// </summary>
void Finish();
void Finish(VectoRun.Status runStatus);
bool WriteModalResults { get; set; }
......
......@@ -17,6 +17,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
public bool WriteModalResults { get; set; }
public VectoRun.Status RunStatus { get; protected set; }
public ModalDataWriter(string modFileName,
SimulatorFactory.FactoryMode mode = SimulatorFactory.FactoryMode.EngineeringMode) : this(modFileName, _ => {}, mode) {}
......@@ -41,10 +42,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
CurrentRow = Data.NewRow();
}
public void Finish()
public void Finish(VectoRun.Status runStatus)
{
var dataColumns = new List<ModalResultField> { ModalResultField.time };
RunStatus = runStatus;
if (_mode != SimulatorFactory.FactoryMode.EngineOnlyMode) {
dataColumns.AddRange(new[] {
ModalResultField.simulationInterval,
......
......@@ -14,12 +14,13 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
/// <summary>
/// Class for the sum file in vecto.
/// </summary>
public class SummaryFileWriter
public class SummaryFileWriter : LoggingObject
{
// ReSharper disable InconsistentNaming
private const string JOB = "Job [-]";
private const string INPUTFILE = "Input File [-]";
private const string CYCLE = "Cycle [-]";
private const string STATUS = "Status";
private const string TIME = "time [s]";
private const string DISTANCE = "distance [km]";
private const string SPEED = "speed [km/h]";
......@@ -82,6 +83,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
_table.Columns.Add(JOB, typeof(string));
_table.Columns.Add(INPUTFILE, typeof(string));
_table.Columns.Add(CYCLE, typeof(string));
_table.Columns.Add(STATUS, typeof(string));
_table.Columns.AddRange(new[] {
TIME, DISTANCE, SPEED, ALTITUDE, PPOS, PNEG, FCMAP, FCMAPKM, FCAUXC, FCAUXCKM, FCWHTCC, FCWHTCCKM, PWHEELPOS, PBRAKE,
......@@ -97,6 +99,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
row[JOB] = jobName;
row[INPUTFILE] = jobFileName;
row[CYCLE] = cycleFileName;
row[STATUS] = data.RunStatus;
row[TIME] = data.GetValues<SI>(ModalResultField.time).Max();
row[PPOS] = data.GetValues<SI>(ModalResultField.Pe_eng).Where(x => x > 0).Average();
row[PNEG] = data.GetValues<SI>(ModalResultField.Pe_eng).Where(x => x < 0).Average();
......@@ -149,6 +152,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
row[JOB] = jobName;
row[INPUTFILE] = jobFileName;
row[CYCLE] = cycleFileName;
row[STATUS] = data.RunStatus;
row[TIME] = time; //data.Max(ModalResultField.time).DefaultIfNull();
row[DISTANCE] = distance.ConvertTo().Kilo.Meter; //data.Max(ModalResultField.dist).DefaultIfNull();
row[SPEED] = (distance / time).ConvertTo().Kilo.Meter.Per.Hour;
......@@ -283,9 +287,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
var dataColumns = new List<string>();
if (_engineOnly) {
dataColumns.AddRange(new[] { JOB, INPUTFILE, CYCLE, TIME, PPOS, PNEG, FCMAP, FCAUXC, FCWHTCC });
dataColumns.AddRange(new[] { JOB, INPUTFILE, CYCLE, STATUS, TIME, PPOS, PNEG, FCMAP, FCAUXC, FCWHTCC });
} else {
dataColumns.AddRange(new[] { JOB, INPUTFILE, CYCLE, TIME, DISTANCE, SPEED, ALTITUDE });
dataColumns.AddRange(new[] { JOB, INPUTFILE, CYCLE, STATUS, TIME, DISTANCE, SPEED, ALTITUDE });
dataColumns.AddRange(_auxColumns);
......@@ -322,6 +326,7 @@ public class SumWriterDecoratorFullPowertrain : SummaryFileWriter, ISummaryDataW
public void Write(IModalDataWriter data, Kilogram vehicleMass = null, Kilogram vehicleLoading = null)
{
Log.Info("Writing Summary File");
_writer.WriteFullPowertrain(data, _jobFileName, _jobName, _cycleFileName, vehicleMass, vehicleLoading);
}
}
......
using TUGraz.VectoCore.Models.Connector.Ports;
using TUGraz.VectoCore.Models.Simulation.DataBus;
using TUGraz.VectoCore.Models.Simulation.Impl;
using TUGraz.VectoCore.Models.SimulationComponent;
using TUGraz.VectoCore.Utils;
......@@ -28,5 +29,7 @@ namespace TUGraz.VectoCore.Models.Simulation
/// Finishes the simulation.
/// </summary>
void FinishSimulation();
VectoRun.Status RunStatus { get; set; }
}
}
\ No newline at end of file
......@@ -82,7 +82,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
}
//Task.WaitAll(_runs.Select(r => Task.Factory.StartNew(r.Run)).ToArray());
_sumWriter.Finish();
//_sumWriter.Finish();
}
public void Cancel()
......
......@@ -29,6 +29,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
protected VectoRun(IVehicleContainer container)
{
Container = container;
Container.RunStatus = Status.Pending;
CyclePort = container.GetCycleOutPort();
}
......@@ -55,6 +56,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
worker.ReportProgress((int)(CyclePort.Progress * 10000));
if (worker.CancellationPending) {
Log.Error("Background Task canceled!");
Container.RunStatus = Status.Canceled;
Container.FinishSimulation();
return;
}
......@@ -63,22 +65,26 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
} catch (VectoSimulationException vse) {
Log.Error("SIMULATION RUN ABORTED! ========================");
Log.Error(vse);
Container.RunStatus = Status.Aborted;
Container.FinishSimulation();
throw new VectoSimulationException("{6} - absTime: {0}, distance: {1}, dt: {2}, v: {3}, Gear: {4} | {5}", vse,
AbsTime, Container.Distance, dt, Container.VehicleSpeed, Container.Gear, vse.Message, Name);
} catch (VectoException ve) {
Log.Error("SIMULATION RUN ABORTED! ========================");
Log.Error(ve);
Container.RunStatus = Status.Aborted;
Container.FinishSimulation();
throw new VectoSimulationException("{6} - absTime: {0}, distance: {1}, dt: {2}, v: {3}, Gear: {4} | {5}", ve,
AbsTime, Container.Distance, dt, Container.VehicleSpeed, Container.Gear, ve.Message, Name);
} catch (Exception e) {
Log.Error("SIMULATION RUN ABORTED! ========================");
Log.Error(e);
Container.RunStatus = Status.Aborted;
Container.FinishSimulation();
throw new VectoSimulationException("{6} - absTime: {0}, distance: {1}, dt: {2}, v: {3}, Gear: {4} | {5}", e, AbsTime,
Container.Distance, dt, Container.VehicleSpeed, Container.Gear, e.Message, Name);
}
Container.RunStatus = Status.Success;
Container.FinishSimulation();
Log.Info("VectoJob finished.");
}
......@@ -86,5 +92,14 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
protected abstract IResponse DoSimulationStep();
protected abstract IResponse Initialize();
public enum Status
{
Pending,
Running,
Success,
Canceled,
Aborted,
}
}
}
\ No newline at end of file
......@@ -211,11 +211,13 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
public void FinishSimulation()
{
Log.Info("VehicleContainer finishing simulation.");
DataWriter.Finish();
DataWriter.Finish(RunStatus);
SumWriter.Write(DataWriter, VehicleMass, VehicleLoading);
}
public VectoRun.Status RunStatus { get; set; }
#endregion
public IReadOnlyCollection<VectoSimulationComponent> SimulationComponents()
......
......@@ -58,7 +58,7 @@ namespace TUGraz.VectoCore.Tests.Integration.EngineOnlyCycle
dataWriter.CommitSimulationStep();
absTime += dt;
}
dataWriter.Finish();
dataWriter.Finish(VectoRun.Status.Success);
ResultFileHelper.TestModFile(TestContext.DataRow["ModalResultFile"].ToString(), modFile);
}
......
......@@ -85,12 +85,12 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
: Constants.SimulationSettings.TargetTimeInterval * container.VehicleSpeed;
if (cnt++ % 100 == 0) {
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
}
}).
Default(r => Assert.Fail("Unexpected Response: {0}", r));
} while (!(response is ResponseCycleFinished));
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
Assert.IsInstanceOfType(response, typeof(ResponseCycleFinished));
}
......@@ -141,7 +141,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
try {
response = cyclePort.Request(absTime, ds);
} catch (Exception) {
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
throw;
}
Log.Info("Test Got Response: {0},", response);
......@@ -161,12 +161,12 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
: Constants.SimulationSettings.TargetTimeInterval * container.VehicleSpeed;
if (cnt++ % 100 == 0) {
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
}
}).
Default(r => Assert.Fail("Unexpected Response: {0}", r));
}
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
Assert.IsInstanceOfType(response, typeof(ResponseCycleFinished));
}
......@@ -215,7 +215,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
try {
response = cyclePort.Request(absTime, ds);
} catch (Exception) {
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
throw;
}
Log.Info("Test Got Response: {0},", response);
......@@ -235,15 +235,15 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
: Constants.SimulationSettings.TargetTimeInterval * container.VehicleSpeed;
if (cnt++ % 100 == 0) {
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
}
}).
Default(r => {
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
Assert.Fail("Unexpected Response: {0}", r);
});
}
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
Assert.IsInstanceOfType(response, typeof(ResponseCycleFinished));
}
......
......@@ -143,7 +143,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
: (Constants.SimulationSettings.TargetTimeInterval * vehicleContainer.VehicleSpeed).Cast<Meter>();
if (cnt++ % 100 == 0) {
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
}
}).
Default(r => Assert.Fail("Unexpected Response: {0}", r));
......@@ -151,7 +151,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
Assert.IsInstanceOfType(response, typeof(ResponseCycleFinished));
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
}
[TestMethod]
......@@ -208,11 +208,11 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
? Constants.SimulationSettings.DriveOffDistance
: (Constants.SimulationSettings.TargetTimeInterval * vehicleContainer.VehicleSpeed).Cast<Meter>();
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
});
}
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
}
private static GearData CreateAxleGearData()
......
......@@ -201,7 +201,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
string.Format("Load in timestep {0}", t));
modalData.CommitSimulationStep();
}
modalData.Finish();
modalData.Finish(VectoRun.Status.Success);
}
[TestMethod]
......
......@@ -82,9 +82,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
vehicleContainer.CommitSimulationStep(absTime, response.SimulationInterval);
absTime += response.SimulationInterval;
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
}
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
}
[TestMethod]
......@@ -141,9 +141,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
vehicleContainer.CommitSimulationStep(absTime, response.SimulationInterval);
absTime += response.SimulationInterval;
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
}
modalWriter.Finish();
modalWriter.Finish(VectoRun.Status.Success);
}
......
......@@ -2,6 +2,7 @@ using System.Collections.Generic;
using System.Data;
using System.Linq;
using TUGraz.VectoCore.Models.Simulation.Data;
using TUGraz.VectoCore.Models.Simulation.Impl;
using TUGraz.VectoCore.Utils;
namespace TUGraz.VectoCore.Tests.Utils
......@@ -35,7 +36,13 @@ namespace TUGraz.VectoCore.Tests.Utils
CurrentRow = Data.NewRow();
}
public void Finish() {}
public VectoRun.Status RunStatus
{
get { return VectoRun.Status.Success; }
}
public void Finish(VectoRun.Status runStatus) {}
public bool WriteModalResults { get; set; }
......
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