From 4337a1acad5efae21ba8fc9995720b94accf173d Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Mon, 9 Nov 2015 09:52:43 +0100 Subject: [PATCH] add status of simulation to vehiclecontainer and summary report --- .../Models/Simulation/Data/IModalDataWriter.cs | 6 +++++- .../Models/Simulation/Data/ModalDataWriter.cs | 5 ++++- .../Simulation/Data/SummaryFileWriter.cs | 11 ++++++++--- .../Models/Simulation/IVehicleContainer.cs | 3 +++ .../Models/Simulation/Impl/JobContainer.cs | 2 +- VectoCore/Models/Simulation/Impl/VectoRun.cs | 15 +++++++++++++++ .../Models/Simulation/Impl/VehicleContainer.cs | 4 +++- .../EngineOnlyCycle/EngineOnlyCycleTest.cs | 2 +- .../SimulationRuns/FullPowertrain.cs | 18 +++++++++--------- .../SimulationRuns/MinimalPowertrain.cs | 8 ++++---- .../CombustionEngineTest.cs | 2 +- .../Models/SimulationComponent/DriverTest.cs | 8 ++++---- VectoCoreTest/Utils/MockModalDataWriter.cs | 9 ++++++++- 13 files changed, 66 insertions(+), 27 deletions(-) diff --git a/VectoCore/Models/Simulation/Data/IModalDataWriter.cs b/VectoCore/Models/Simulation/Data/IModalDataWriter.cs index 2af509e9bb..0d5ee7fc98 100644 --- a/VectoCore/Models/Simulation/Data/IModalDataWriter.cs +++ b/VectoCore/Models/Simulation/Data/IModalDataWriter.cs @@ -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; } diff --git a/VectoCore/Models/Simulation/Data/ModalDataWriter.cs b/VectoCore/Models/Simulation/Data/ModalDataWriter.cs index cfc9e766e2..89cb858be6 100644 --- a/VectoCore/Models/Simulation/Data/ModalDataWriter.cs +++ b/VectoCore/Models/Simulation/Data/ModalDataWriter.cs @@ -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, diff --git a/VectoCore/Models/Simulation/Data/SummaryFileWriter.cs b/VectoCore/Models/Simulation/Data/SummaryFileWriter.cs index c01860bdd8..d777f66485 100644 --- a/VectoCore/Models/Simulation/Data/SummaryFileWriter.cs +++ b/VectoCore/Models/Simulation/Data/SummaryFileWriter.cs @@ -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); } } diff --git a/VectoCore/Models/Simulation/IVehicleContainer.cs b/VectoCore/Models/Simulation/IVehicleContainer.cs index ae3d7cf8f9..9f12971f32 100644 --- a/VectoCore/Models/Simulation/IVehicleContainer.cs +++ b/VectoCore/Models/Simulation/IVehicleContainer.cs @@ -1,5 +1,6 @@ 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 diff --git a/VectoCore/Models/Simulation/Impl/JobContainer.cs b/VectoCore/Models/Simulation/Impl/JobContainer.cs index cb123fd98a..e6e7c13583 100644 --- a/VectoCore/Models/Simulation/Impl/JobContainer.cs +++ b/VectoCore/Models/Simulation/Impl/JobContainer.cs @@ -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() diff --git a/VectoCore/Models/Simulation/Impl/VectoRun.cs b/VectoCore/Models/Simulation/Impl/VectoRun.cs index 35330fb38a..b570be7764 100644 --- a/VectoCore/Models/Simulation/Impl/VectoRun.cs +++ b/VectoCore/Models/Simulation/Impl/VectoRun.cs @@ -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 diff --git a/VectoCore/Models/Simulation/Impl/VehicleContainer.cs b/VectoCore/Models/Simulation/Impl/VehicleContainer.cs index 59b9a6d872..9d6e240087 100644 --- a/VectoCore/Models/Simulation/Impl/VehicleContainer.cs +++ b/VectoCore/Models/Simulation/Impl/VehicleContainer.cs @@ -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() diff --git a/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs b/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs index 751d0df538..7395499c42 100644 --- a/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs +++ b/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs @@ -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); } diff --git a/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs b/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs index aba67766a0..59fbf39518 100644 --- a/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs +++ b/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs @@ -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)); } diff --git a/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs b/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs index e0099a5c78..71ce21f524 100644 --- a/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs +++ b/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs @@ -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() diff --git a/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs b/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs index 7a52652f53..c2ee3a17b2 100644 --- a/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs @@ -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] diff --git a/VectoCoreTest/Models/SimulationComponent/DriverTest.cs b/VectoCoreTest/Models/SimulationComponent/DriverTest.cs index b62b473de3..003a61f76d 100644 --- a/VectoCoreTest/Models/SimulationComponent/DriverTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/DriverTest.cs @@ -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); } diff --git a/VectoCoreTest/Utils/MockModalDataWriter.cs b/VectoCoreTest/Utils/MockModalDataWriter.cs index 19d073b91c..aae84d3008 100644 --- a/VectoCoreTest/Utils/MockModalDataWriter.cs +++ b/VectoCoreTest/Utils/MockModalDataWriter.cs @@ -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; } -- GitLab