Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

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

Merge pull request #742 in VECTO/vecto-sim from...

Merge pull request #742 in VECTO/vecto-sim from ~EMQUARIMA/vecto-sim:bugfix/VECTO-909-3.3.2.1519-problems-running-more-than-one-input-.xml to ReleaseCandidates/v3.3.2.1519

* commit '5d534f01':
  Revert "adding testcase for writing xml reports"
  adding testcase for writing xml reports
  surround writing sum-data with try-catch
  adding testcase if sum-file is locked simulation does not abort
  adding testcase where mod-file is opened and writing mod data will fail
  refacotring method
  surround writing modd data with try-catch
parents 26637d5a 5d534f01
Branches
Tags
No related merge requests found
...@@ -125,13 +125,47 @@ namespace TUGraz.VectoCore.OutputData ...@@ -125,13 +125,47 @@ namespace TUGraz.VectoCore.OutputData
public void Finish(VectoRun.Status runStatus, Exception exception = null) public void Finish(VectoRun.Status runStatus, Exception exception = null)
{ {
var dataColumns = new List<ModalResultField> { ModalResultField.time };
RunStatus = runStatus; RunStatus = runStatus;
SimException = exception; SimException = exception;
var dataColumns = GetOutputColumns();
var strCols = dataColumns.Select(x => x.GetName())
.Concat(Auxiliaries.Values.Select(c => c.ColumnName))
.Concat(
new[] {
ModalResultField.FCMap, ModalResultField.FCNCVc, ModalResultField.FCWHTCc,
ModalResultField.FCAAUX, ModalResultField.FCADAS, ModalResultField.FCFinal
}.Select(x => x.GetName()));
#if TRACE
strCols = strCols.Concat(_additionalColumns);
#endif
if (WriteModalResults) {
var filteredData = Data;
foreach (var filter in _filters) {
RunSuffix += "_" + filter.ID;
filteredData = filter.Filter(filteredData);
}
try {
_writer.WriteModData(
JobRunId, RunName, CycleName, RunSuffix,
new DataView(filteredData).ToTable(false, strCols.ToArray()));
} catch (Exception e) {
LogManager.GetLogger(typeof(ModalDataContainer).FullName).Error(e.Message);
}
}
_addReportResult(this);
}
private IEnumerable<ModalResultField> GetOutputColumns()
{
var dataColumns = new List<ModalResultField> { ModalResultField.time };
if (!_writeEngineOnly) { if (!_writeEngineOnly) {
dataColumns.AddRange(new[] { dataColumns.AddRange(
new[] {
ModalResultField.simulationInterval, ModalResultField.simulationInterval,
ModalResultField.dist, ModalResultField.dist,
ModalResultField.v_act, ModalResultField.v_act,
...@@ -141,14 +175,16 @@ namespace TUGraz.VectoCore.OutputData ...@@ -141,14 +175,16 @@ namespace TUGraz.VectoCore.OutputData
}); });
} }
if (!_writeEngineOnly) { if (!_writeEngineOnly) {
dataColumns.AddRange(new[] { dataColumns.AddRange(
new[] {
ModalResultField.Gear, ModalResultField.Gear,
}); });
if (HasTorqueConverter) { if (HasTorqueConverter) {
dataColumns.AddRange(new[] { ModalResultField.TC_Locked }); dataColumns.AddRange(new[] { ModalResultField.TC_Locked });
} }
} }
dataColumns.AddRange(new[] { dataColumns.AddRange(
new[] {
ModalResultField.n_eng_avg, ModalResultField.n_eng_avg,
ModalResultField.T_eng_fcmap, ModalResultField.T_eng_fcmap,
ModalResultField.Tq_full, ModalResultField.Tq_full,
...@@ -161,23 +197,27 @@ namespace TUGraz.VectoCore.OutputData ...@@ -161,23 +197,27 @@ namespace TUGraz.VectoCore.OutputData
ModalResultField.P_eng_out, ModalResultField.P_eng_out,
}); });
if (HasTorqueConverter) { if (HasTorqueConverter) {
dataColumns.AddRange(new[] { dataColumns.AddRange(
new[] {
ModalResultField.P_gbx_shift_loss, ModalResultField.P_gbx_shift_loss,
ModalResultField.P_TC_loss, ModalResultField.P_TC_loss,
ModalResultField.P_TC_out, ModalResultField.P_TC_out,
}); });
} else { } else {
dataColumns.AddRange(new[] { dataColumns.AddRange(
new[] {
ModalResultField.P_clutch_loss, ModalResultField.P_clutch_loss,
ModalResultField.P_clutch_out, ModalResultField.P_clutch_out,
}); });
} }
dataColumns.AddRange(new[] { dataColumns.AddRange(
new[] {
ModalResultField.P_aux ModalResultField.P_aux
}); });
if (!_writeEngineOnly) { if (!_writeEngineOnly) {
dataColumns.AddRange(new[] { dataColumns.AddRange(
new[] {
ModalResultField.P_gbx_in, ModalResultField.P_gbx_in,
ModalResultField.P_gbx_loss, ModalResultField.P_gbx_loss,
ModalResultField.P_gbx_inertia, ModalResultField.P_gbx_inertia,
...@@ -201,7 +241,8 @@ namespace TUGraz.VectoCore.OutputData ...@@ -201,7 +241,8 @@ namespace TUGraz.VectoCore.OutputData
}); });
if (HasTorqueConverter) { if (HasTorqueConverter) {
dataColumns.AddRange(new[] { dataColumns.AddRange(
new[] {
ModalResultField.TorqueConverterSpeedRatio, ModalResultField.TorqueConverterSpeedRatio,
ModalResultField.TorqueConverterTorqueRatio, ModalResultField.TorqueConverterTorqueRatio,
ModalResultField.TC_TorqueOut, ModalResultField.TC_TorqueOut,
...@@ -212,7 +253,8 @@ namespace TUGraz.VectoCore.OutputData ...@@ -212,7 +253,8 @@ namespace TUGraz.VectoCore.OutputData
} }
} }
if (!_writeEngineOnly && WriteAdvancedAux) { if (!_writeEngineOnly && WriteAdvancedAux) {
dataColumns.AddRange(new[] { dataColumns.AddRange(
new[] {
ModalResultField.AA_NonSmartAlternatorsEfficiency, ModalResultField.AA_NonSmartAlternatorsEfficiency,
ModalResultField.AA_SmartIdleCurrent_Amps, ModalResultField.AA_SmartIdleCurrent_Amps,
ModalResultField.AA_SmartIdleAlternatorsEfficiency, ModalResultField.AA_SmartIdleAlternatorsEfficiency,
...@@ -234,28 +276,7 @@ namespace TUGraz.VectoCore.OutputData ...@@ -234,28 +276,7 @@ namespace TUGraz.VectoCore.OutputData
ModalResultField.AA_TotalCycleFuelConsumptionCompressorOn, ModalResultField.AA_TotalCycleFuelConsumptionCompressorOn,
}); });
} }
return dataColumns;
var strCols = dataColumns.Select(x => x.GetName())
.Concat(Auxiliaries.Values.Select(c => c.ColumnName))
.Concat(
new[] {
ModalResultField.FCMap, ModalResultField.FCNCVc, ModalResultField.FCWHTCc,
ModalResultField.FCAAUX, ModalResultField.FCADAS, ModalResultField.FCFinal
}.Select(x => x.GetName()));
#if TRACE
strCols = strCols.Concat(_additionalColumns);
#endif
if (WriteModalResults) {
var filteredData = Data;
foreach (var filter in _filters) {
RunSuffix += "_" + filter.ID;
filteredData = filter.Filter(filteredData);
}
_writer.WriteModData(JobRunId, RunName, CycleName, RunSuffix,
new DataView(filteredData).ToTable(false, strCols.ToArray()));
}
_addReportResult(this);
} }
public IEnumerable<T> GetValues<T>(DataColumn col) public IEnumerable<T> GetValues<T>(DataColumn col)
......
...@@ -395,7 +395,11 @@ namespace TUGraz.VectoCore.OutputData ...@@ -395,7 +395,11 @@ namespace TUGraz.VectoCore.OutputData
view.Columns.Remove(dataColumn); view.Columns.Remove(dataColumn);
} }
try {
_sumWriter.WriteSumData(view); _sumWriter.WriteSumData(view);
} catch (Exception e) {
LogManager.GetLogger(typeof(SummaryDataContainer).FullName).Error(e.Message);
}
} }
} }
......
...@@ -225,5 +225,69 @@ namespace TUGraz.VectoCore.Tests.Reports ...@@ -225,5 +225,69 @@ namespace TUGraz.VectoCore.Tests.Reports
Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.WHTCMotorway, Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.WHTCMotorway,
sumRow[SummaryDataContainer.ENGINE_WHTC_MOTORWAY]); sumRow[SummaryDataContainer.ENGINE_WHTC_MOTORWAY]);
} }
[TestCase()]
public void TestSumDataIsCompleteEvenIfModFileCannotBeWritten()
{
var jobFile = @"TestData\Integration\DeclarationMode\Class5_Vocational\Tractor_4x2_vehicle-class-5_EURO6_2018.xml";
var modFilename = Path.Combine(Path.GetDirectoryName(jobFile), "VEH-Class5_ConstructionReferenceLoad_sim.vmod");
// lock modfile so it can't be written
Stream fh = !File.Exists(modFilename) ? File.Create(modFilename) : File.OpenRead(modFilename);
var writer = new FileOutputWriter(jobFile);
var inputData = new XMLDeclarationInputDataProvider(jobFile, true);
var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
WriteModalResults = true,
ActualModalData = true
};
var sumWriter = new SummaryDataContainer(writer);
var jobContainer = new JobContainer(sumWriter);
jobContainer.AddRuns(factory);
jobContainer.Execute();
jobContainer.WaitFinished();
Assert.AreEqual(2, sumWriter.Table.Rows.Count);
fh.Close();
}
[TestCase()]
public void TestSumDataFileIsLocked()
{
var jobFile = @"TestData\Integration\DeclarationMode\Class5_Vocational\Tractor_4x2_vehicle-class-5_EURO6_2018.xml";
var sumFilename = Path.Combine(Path.GetDirectoryName(jobFile), "Tractor_4x2_vehicle-class-5_EURO6_2018.vsum");
// lock modfile so it can't be written
Stream fh = !File.Exists(sumFilename) ? File.Create(sumFilename) : File.OpenRead(sumFilename);
var writer = new FileOutputWriter(jobFile);
var inputData = new XMLDeclarationInputDataProvider(jobFile, true);
var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
WriteModalResults = true,
ActualModalData = true
};
var sumWriter = new SummaryDataContainer(writer);
var jobContainer = new JobContainer(sumWriter);
jobContainer.AddRuns(factory);
jobContainer.Execute();
jobContainer.WaitFinished();
Assert.AreEqual(2, sumWriter.Table.Rows.Count);
fh.Close();
}
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment