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

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

make code for writing new sum-columns more robust against missing data (e.g....

make code for writing new sum-columns more robust against missing data (e.g. engine only, pwheel, ...)
parent 45a41e6b
No related branches found
No related tags found
No related merge requests found
......@@ -309,12 +309,13 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
Log.Info("VehicleContainer committing simulation. time: {0}, dist: {1}, speed: {2}", time,
Distance, VehicleSpeed);
ModData[ModalResultField.drivingBehavior] = DriverBehavior;
foreach (var component in _components) {
component.Item2.CommitSimulationStep(ModData);
}
if (ModData != null) {
ModData[ModalResultField.drivingBehavior] = DriverBehavior;
ModData[ModalResultField.time] = time + simulationInterval / 2;
ModData[ModalResultField.simulationInterval] = simulationInterval;
ModData.CommitSimulationStep();
......@@ -326,7 +327,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
Log.Info("VehicleContainer finishing simulation.");
ModData.Finish(RunStatus);
WriteSumData(ModData, VehicleMass, VehicleLoading, Vehicle != null ? Vehicle.CargoVolume : 0.SI<CubicMeter>(), Gearbox.NumGears);
WriteSumData(ModData, VehicleMass, VehicleLoading, Vehicle != null ? Vehicle.CargoVolume : 0.SI<CubicMeter>(),
Gearbox != null ? Gearbox.NumGears : 0u);
ModData.FinishSimulation();
DrivingCycle.FinishSimulation();
......@@ -384,12 +386,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
public DrivingBehavior DriverBehavior
{
get { return Driver.DriverBehavior; }
get { return Driver != null ? Driver.DriverBehavior : DrivingBehavior.Driving; }
}
public MeterPerSquareSecond DriverAcceleration
{
get { return Driver.DriverAcceleration; }
get { return Driver != null ? Driver.DriverAcceleration : 0.SI<MeterPerSquareSecond>(); }
}
public Meter CycleStartDistance
......
......@@ -451,12 +451,12 @@ namespace TUGraz.VectoCore.OutputData
public static MeterPerSquareSecond MaxAcceleration(this ModalDataContainer data)
{
return data.Max<MeterPerSquareSecond>(ModalResultField.acc);
return data.Max<MeterPerSquareSecond>(ModalResultField.acc).DefaultIfNull(0);
}
public static MeterPerSquareSecond MaxDeceleration(this ModalDataContainer data)
{
return -data.Min<MeterPerSquareSecond>(ModalResultField.acc);
return -data.Min<MeterPerSquareSecond>(ModalResultField.acc).DefaultIfNull(0);
}
public static PerSecond AvgEngineSpeed(this ModalDataContainer data)
......@@ -476,8 +476,8 @@ namespace TUGraz.VectoCore.OutputData
{
var sum = data.Data.Rows.Cast<DataRow>()
.Select(x => new {
tMax = x.Field<NewtonMeter>((int)ModalResultField.Tq_full),
tEng = x.Field<NewtonMeter>((int)ModalResultField.T_eng_fcmap),
tMax = x.Field<NewtonMeter>((int)ModalResultField.Tq_full).DefaultIfNull(-1),
tEng = x.Field<NewtonMeter>((int)ModalResultField.T_eng_fcmap).DefaultIfNull(0),
dt = x.Field<Second>((int)ModalResultField.simulationInterval)
})
.Sum(x => x.tMax.IsEqual(x.tEng, 5.SI<NewtonMeter>()) ? x.dt : 0.SI<Second>()) ?? 0.SI<Second>();
......@@ -491,7 +491,7 @@ namespace TUGraz.VectoCore.OutputData
foreach (DataRow row in data.Data.Rows) {
var gear = row.Field<uint>((int)ModalResultField.Gear);
var speed = row.Field<MeterPerSecond>((int)ModalResultField.v_act);
if (speed.IsSmallerOrEqual(0.1)) {
if (speed != null && speed.IsSmallerOrEqual(0.1)) {
prevGear = 0;
gearCount++;
continue;
......
......@@ -317,28 +317,31 @@ namespace TUGraz.VectoCore.OutputData
row[MAX_DECELERATION] = modal.MaxDeceleration();
row[AVG_ENGINE_SPEED] = modal.AvgEngineSpeed().AsRPM.SI<Scalar>();
row[MAX_ENGINE_SPEED] = modData.MaxEngineSpeed().AsRPM.SI<Scalar>();
row[NUM_GEARSHIFTS] = modal.GearshiftCount();
row[ENGINE_FULL_LOAD_TIME_SHARE] = modal.EngineMaxLoadTimeShare();
row[COASTING_TIME_SHARE] = modal.CoastingTimeShare();
row[BRAKING_TIME_SHARE] = modal.BrakingTimeShare();
var timeSharePerGear = modal.TimeSharePerGear(gearCount);
if (gearCount > 0) {
row[NUM_GEARSHIFTS] = modal.GearshiftCount();
var timeSharePerGear = modal.TimeSharePerGear(gearCount);
for (uint i = 0; i <= gearCount; i++) {
var colName = string.Format(TIME_SHARE_PER_GEAR_FORMAT, i);
if (!_table.Columns.Contains(colName)) {
_table.Columns.Add(colName, typeof(SI));
for (uint i = 0; i <= gearCount; i++) {
var colName = string.Format(TIME_SHARE_PER_GEAR_FORMAT, i);
if (!_table.Columns.Contains(colName)) {
_table.Columns.Add(colName, typeof(SI));
}
row[colName] = timeSharePerGear[i];
}
row[colName] = timeSharePerGear[i];
}
if (accTimeShare != null && decTimeShare != null && cruiseTimeShare != null) {
var shareSum = accTimeShare + decTimeShare + cruiseTimeShare + stopTimeShare;
if (!shareSum.IsEqual(100)) {
Log.Error(
"Sumfile Error: driving behavior timeshares must sum up to 100%: acc: {0}%, dec: {1}%, cruise: {2}%, stop: {3}%, sum: {4}%",
accTimeShare.ToOutputFormat(1, null, false), decTimeShare.ToOutputFormat(1, null, false),
cruiseTimeShare.ToOutputFormat(1, null, false), stopTimeShare.ToOutputFormat(1, null, false),
shareSum.ToOutputFormat(1, null, false));
if (accTimeShare != null && decTimeShare != null && cruiseTimeShare != null) {
var shareSum = accTimeShare + decTimeShare + cruiseTimeShare + stopTimeShare;
if (!shareSum.IsEqual(100)) {
Log.Error(
"Sumfile Error: driving behavior timeshares must sum up to 100%: acc: {0}%, dec: {1}%, cruise: {2}%, stop: {3}%, sum: {4}%",
accTimeShare.ToOutputFormat(1, null, false), decTimeShare.ToOutputFormat(1, null, false),
cruiseTimeShare.ToOutputFormat(1, null, false), stopTimeShare.ToOutputFormat(1, null, false),
shareSum.ToOutputFormat(1, null, false));
}
}
}
}
......
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