diff --git a/VectoCore/VectoCore/Models/Simulation/Data/ModalResult.cs b/VectoCore/VectoCore/Models/Simulation/Data/ModalResult.cs index c9417c85bc52f80af7bca7df9e1d228c8cd541c9..af17712261eb5a4b43fca9dcf2a8c6ea364f99b5 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/ModalResult.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/ModalResult.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; +using System.Linq; using System.Runtime.Serialization; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Exceptions; @@ -116,7 +117,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data ModalResultField.P_gbx_in, ModalResultField.P_gbx_inertia, ModalResultField.P_gbx_loss, - ModalResultField.P_gbx_shift_loss, + //ModalResultField.P_gbx_shift_loss, // only for APT-S and APT-P ModalResultField.T_gbx_in, ModalResultField.T_gbx_out, ModalResultField.n_gbx_out_avg, @@ -124,6 +125,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Data ModalResultField.Gear }; + public static readonly ModalResultField[] GearboxSignals_AT = + GearboxSignals.Concat(new[] { ModalResultField.P_gbx_shift_loss }).ToArray(); + // ------------------------------------------------------------------------------------ public static readonly ModalResultField[] TorqueConverterSignals = { ModalResultField.TC_Locked, @@ -331,8 +335,10 @@ namespace TUGraz.VectoCore.Models.Simulation.Data case IClutch _: CreateColumns(ClutchSignals); break; - case IGearbox _ when runData.JobType != VectoSimulationJobType.IEPC_E && runData.JobType != VectoSimulationJobType.IEPC_S: - CreateColumns(GearboxSignals); + case IGearbox _ when runData.JobType != VectoSimulationJobType.IEPC_E && runData.JobType != VectoSimulationJobType.IEPC_S: + CreateColumns(runData.GearboxData.Type.IsOneOf(GearboxType.ATPowerSplit, GearboxType.ATSerial) + ? GearboxSignals_AT + : GearboxSignals); break; case IGearbox _ when runData.JobType == VectoSimulationJobType.IEPC_E: case IGearbox _ when runData.JobType == VectoSimulationJobType.IEPC_S: diff --git a/VectoCore/VectoCore/OutputData/SumDataFields.cs b/VectoCore/VectoCore/OutputData/SumDataFields.cs index 2dc5127905d202ebaacfb581acc7e88cdb733bb0..9e4a5f5e43bb281a74badb333f00078b406387d9 100644 --- a/VectoCore/VectoCore/OutputData/SumDataFields.cs +++ b/VectoCore/VectoCore/OutputData/SumDataFields.cs @@ -151,7 +151,7 @@ namespace TUGraz.VectoCore.OutputData public const string E_BusAux_PS_corr = "E_BusAux_PS_corr [kWh]"; public const string E_BusAux_ES_mech_corr = "E_BusAux_ES_mech_corr [kWh]"; - public const string E_BusAux_AuxHeater = "E_BusAux_AuxhHeater [kWh]"; + public const string E_BusAux_AuxHeater = "E_BusAux_AuxHeater [kWh]"; public const string E_AIR = "E_air [kWh]"; public const string E_ROLL = "E_roll [kWh]"; @@ -330,8 +330,8 @@ namespace TUGraz.VectoCore.OutputData { STATUS, SumFunc((r, m) => m.RunStatus)}, { TIME, SumFunc((r,m) => (ConvertedSI)m.Duration)}, - { DISTANCE, SumFunc((r, m) => m.Distance.ConvertToKiloMeter())}, - { SPEED, SumFunc((r, m) => m.Speed().ConvertToKiloMeterPerHour())}, + { DISTANCE, SumFunc((r, m) => m.Distance?.ConvertToKiloMeter())}, + { SPEED, SumFunc((r, m) => m.Speed()?.ConvertToKiloMeterPerHour())}, { ALTITUDE_DELTA, SumFunc((r, m) => (ConvertedSI)m.AltitudeDelta())}, diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs index 69d2b0f5e1717d388b01e0fa469ec1a83f02a5a9..800df96ab134eb76a3b2aecfb6c1e74c05a23895 100644 --- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs @@ -98,6 +98,7 @@ namespace TUGraz.VectoCore.OutputData Tuple.Create(SumDataFields.ACC, typeof(ConvertedSI)), Tuple.Create(SumDataFields.ACC_POS, typeof(ConvertedSI)), Tuple.Create(SumDataFields.ACC_NEG, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.AVERAGE_POS_ACC, typeof(ConvertedSI)), // Engine Infos Tuple.Create(SumDataFields.ENGINE_MANUFACTURER, typeof(string)), Tuple.Create(SumDataFields.ENGINE_MODEL, typeof(string)), @@ -114,7 +115,6 @@ namespace TUGraz.VectoCore.OutputData Tuple.Create(SumDataFields.ENGINE_ACTUAL_CORRECTION_FACTOR, typeof(string)), Tuple.Create(SumDataFields.VEHICLE_FUEL_TYPE, typeof(string)), Tuple.Create(SumDataFields.ENGINE_CERTIFICATION_NUMBER, typeof(string)), - Tuple.Create(SumDataFields.AVERAGE_ENGINE_EFFICIENCY, typeof(double)), // Vehicle Infos Tuple.Create(SumDataFields.VEHICLE_MANUFACTURER, typeof(string)), Tuple.Create(SumDataFields.VIN_NUMBER, typeof(string)), @@ -122,6 +122,8 @@ namespace TUGraz.VectoCore.OutputData Tuple.Create(SumDataFields.HDV_CO2_VEHICLE_CLASS, typeof(string)), Tuple.Create(SumDataFields.AIRDRAG_MODEL, typeof(string)), + Tuple.Create(SumDataFields.AIRDRAG_CERTIFICATION_NUMBER, typeof(string)), + Tuple.Create(SumDataFields.AIRDRAG_CERTIFICATION_METHOD, typeof(string)), Tuple.Create(SumDataFields.CD_x_A_DECLARED, typeof(ConvertedSI)), Tuple.Create(SumDataFields.CD_x_A, typeof(ConvertedSI)), Tuple.Create(SumDataFields.SLEEPER_CAB, typeof(string)), @@ -141,12 +143,15 @@ namespace TUGraz.VectoCore.OutputData Tuple.Create(SumDataFields.NUM_AXLES_TRAILER, typeof(int)), Tuple.Create(SumDataFields.GEARBOX_MANUFACTURER, typeof(string)), Tuple.Create(SumDataFields.GEARBOX_MODEL, typeof(string)), + Tuple.Create(SumDataFields.GEARBOX_CERTIFICATION_METHOD, typeof(string)), + Tuple.Create(SumDataFields.GEARBOX_CERTIFICATION_NUMBER, typeof(string)), Tuple.Create(SumDataFields.GEARBOX_TYPE, typeof(string)), - Tuple.Create(SumDataFields.AVERAGE_GEARBOX_EFFICIENCY, typeof(double)), Tuple.Create(SumDataFields.GEAR_RATIO_FIRST_GEAR, typeof(ConvertedSI)), Tuple.Create(SumDataFields.GEAR_RATIO_LAST_GEAR, typeof(ConvertedSI)), Tuple.Create(SumDataFields.TORQUECONVERTER_MANUFACTURER, typeof(string)), Tuple.Create(SumDataFields.TORQUECONVERTER_MODEL, typeof(string)), + Tuple.Create(SumDataFields.TORQUE_CONVERTER_CERTIFICATION_METHOD, typeof(string)), + Tuple.Create(SumDataFields.TORQUE_CONVERTER_CERTIFICATION_NUMBER, typeof(string)), Tuple.Create(SumDataFields.RETARDER_MANUFACTURER, typeof(string)), Tuple.Create(SumDataFields.RETARDER_MODEL, typeof(string)), Tuple.Create(SumDataFields.RETARDER_TYPE, typeof(string)), @@ -157,13 +162,11 @@ namespace TUGraz.VectoCore.OutputData Tuple.Create(SumDataFields.ANGLEDRIVE_RATIO, typeof(ConvertedSI)), Tuple.Create(SumDataFields.ANGLEDRIVE_CERTIFICATION_METHOD, typeof(string)), Tuple.Create(SumDataFields.ANGLEDRIVE_CERTIFICATION_NUMBER, typeof(string)), - Tuple.Create(SumDataFields.AVERAGE_ANGLEDRIVE_EFFICIENCY, typeof(double)), Tuple.Create(SumDataFields.AXLE_MANUFACTURER, typeof(string)), Tuple.Create(SumDataFields.AXLE_MODEL, typeof(string)), Tuple.Create(SumDataFields.AXLE_RATIO, typeof(ConvertedSI)), Tuple.Create(SumDataFields.AXLEGEAR_CERTIFICATION_METHOD, typeof(string)), Tuple.Create(SumDataFields.AXLEGEAR_CERTIFICATION_NUMBER, typeof(string)), - Tuple.Create(SumDataFields.AVERAGE_AXLEGEAR_EFFICIENCY, typeof(double)), Tuple.Create(string.Format(SumDataFields.AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.SteeringPump), typeof(string)), Tuple.Create(string.Format(SumDataFields.AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.Fan), typeof(string)), Tuple.Create(string.Format(SumDataFields.AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.HeatingVentilationAirCondition), typeof(string)), @@ -192,6 +195,13 @@ namespace TUGraz.VectoCore.OutputData Tuple.Create(SumDataFields.P_FCMAP_POS, typeof(ConvertedSI)), Tuple.Create(SumDataFields.E_FCMAP_POS, typeof(ConvertedSI)), Tuple.Create(SumDataFields.E_FCMAP_NEG, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.MAX_ENGINE_SPEED, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.AVG_ENGINE_SPEED, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_WHR_EL, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_WHR_MECH, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_ICE_START, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_AUX_ESS_missing, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.AVERAGE_ENGINE_EFFICIENCY, typeof(double)), }; public static readonly Tuple<string, Type>[] VehilceColumns = { @@ -200,6 +210,14 @@ namespace TUGraz.VectoCore.OutputData Tuple.Create(SumDataFields.E_ROLL, typeof(ConvertedSI)), Tuple.Create(SumDataFields.E_GRAD, typeof(ConvertedSI)), Tuple.Create(SumDataFields.E_POWERTRAIN_INERTIA, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.MAX_ACCELERATION, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.MAX_DECELERATION, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.MAX_SPEED, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.TOTAL_VEHICLE_MASS, typeof(ConvertedSI)), + }; + + public static readonly Tuple<string, Type>[] BusVehicleColumns = { + Tuple.Create(SumDataFields.PassengerCount, typeof(double)), }; public static readonly Tuple<string, Type>[] ClutchColumns = { @@ -208,21 +226,32 @@ namespace TUGraz.VectoCore.OutputData public static readonly Tuple<string, Type>[] GearboxColumns = { Tuple.Create(SumDataFields.NUM_GEARSHIFTS, typeof(ConvertedSI)), - Tuple.Create(SumDataFields.E_GBX_LOSS, typeof(ConvertedSI)) + Tuple.Create(SumDataFields.E_GBX_LOSS, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.AVERAGE_GEARBOX_EFFICIENCY, typeof(double)), + }; + public static readonly Tuple<string, Type>[] GearboxColumns_AT = { + Tuple.Create(SumDataFields.NUM_GEARSHIFTS, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_GBX_LOSS, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_SHIFT_LOSS, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.AVERAGE_GEARBOX_EFFICIENCY, typeof(double)), }; public static readonly Tuple<string, Type>[] IEPCTransmissionColumns = { }; public static readonly Tuple<string, Type>[] TorqueConverterColumns = { Tuple.Create(SumDataFields.E_TC_LOSS, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.AVERAGE_TORQUE_CONVERTER_EFFICIENCY_WITHOUT_LOCKUP, typeof(double)), + Tuple.Create(SumDataFields.AVERAGE_TORQUE_CONVERTER_EFFICIENCY_WITH_LOCKUP, typeof(double)), }; public static readonly Tuple<string, Type>[] AngledriveColumns = { Tuple.Create(SumDataFields.E_ANGLE_LOSS, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.AVERAGE_ANGLEDRIVE_EFFICIENCY, typeof(double)), }; public static readonly Tuple<string, Type>[] AxlegearColumns = { Tuple.Create(SumDataFields.E_AXL_LOSS, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.AVERAGE_AXLEGEAR_EFFICIENCY, typeof(double)), }; public static readonly Tuple<string, Type>[] RetarderColumns = { @@ -288,10 +317,35 @@ namespace TUGraz.VectoCore.OutputData Tuple.Create(SumDataFields.E_WHEEL, typeof(ConvertedSI)), }; + public static readonly Tuple<string, Type>[] BusAuxiliariesSignals = { + Tuple.Create(SumDataFields.AirGenerated, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.AirConsumed, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_BusAux_AuxHeater, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_BusAux_ES_consumed, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_BusAux_ES_generated, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_BusAux_ES_mech_corr, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_BusAux_HVAC_El, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_BusAux_HVAC_Mech, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_BusAux_PS_corr, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_PS_CompressorOff, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.E_PS_CompressorOn, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.Delta_E_BusAux_Battery, typeof(ConvertedSI)), + }; + + public static readonly Tuple<string, Type>[] PWheelCycleColumns = { + Tuple.Create(SumDataFields.P_WHEEL, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.P_WHEEL_POS, typeof(ConvertedSI)), + Tuple.Create(SumDataFields.TOTAL_VEHICLE_MASS, typeof(ConvertedSI)), + }; + private object _tableLock = new object(); internal readonly DataTable Table; private readonly ISummaryWriter _sumWriter; - private List<string> fcCols = new List<string>(); + + protected HashSet<string> FcCols = new HashSet<string>(); + protected HashSet<string> GearColumns = new HashSet<string>(); + protected HashSet<string> AuxColumns = new HashSet<string>(); + /// <summary> /// Initializes a new instance of the <see cref="SummaryDataContainer"/> class. @@ -313,13 +367,18 @@ namespace TUGraz.VectoCore.OutputData CreateColumns(CombustionEngineColumns); UpdateTableColumns(runData.EngineData); break; + case BusAuxiliariesAdapter _: + CreateColumns(BusAuxiliariesSignals); + break; case EngineAuxiliary _: break; case IClutch _: CreateColumns(ClutchColumns); break; case IGearbox _ when runData.JobType != VectoSimulationJobType.IEPC_E && runData.JobType != VectoSimulationJobType.IEPC_S: - CreateColumns(GearboxColumns); + CreateColumns(runData.GearboxData.Type.IsOneOf(GearboxType.ATPowerSplit, GearboxType.ATSerial) + ? GearboxColumns_AT + : GearboxColumns); CreateGearTimeShareColumns(runData.GearboxData.GearList); break; case IGearbox _ when runData.JobType == VectoSimulationJobType.IEPC_E: @@ -351,8 +410,14 @@ namespace TUGraz.VectoCore.OutputData case IDriver _: //CreateColumns(DriverSignals); break; + case PWheelCycle _: + CreateColumns(PWheelCycleColumns); + break; case IVehicle _: CreateColumns(VehilceColumns); + if (runData.VehicleData.VehicleCategory.IsBus()) { + CreateColumns(BusVehicleColumns); + } break; case IElectricMotor c3 when c3.Position == PowertrainPosition.IEPC: CreateElectricMotorColumns(c3, runData, IEPCColumns); @@ -386,6 +451,7 @@ namespace TUGraz.VectoCore.OutputData return; } Table.Columns.Add(colName, typeof(ConvertedSI)); + AuxColumns.Add(colName); } } @@ -402,14 +468,20 @@ namespace TUGraz.VectoCore.OutputData private void CreateGearTimeShareColumns(GearList gears) { lock (Table) { - Table.Columns.AddRange(gears + var gearColNames = gears .Select(x => string.Format(SumDataFields.TIME_SHARE_PER_GEAR_FORMAT, x.Gear)) - .Concat(new [] {string.Format(SumDataFields.TIME_SHARE_PER_GEAR_FORMAT, 0)}).Distinct() + .Concat(new[] { string.Format(SumDataFields.TIME_SHARE_PER_GEAR_FORMAT, 0) }).Distinct() .Where(x => !Table.Columns.Contains(x)).Select(x => new DataColumn(x, typeof(ConvertedSI))) - .ToArray()); + .ToArray(); + Table.Columns.AddRange(gearColNames); + foreach (var gearColName in gearColNames) { + GearColumns.Add(gearColName.ColumnName); + } +// gearColNames.Select(x => GearColumns.Add(x.ColumnName)); } } + protected internal void CreateColumns(Tuple<string, Type>[] cols) { lock (Table) { @@ -422,7 +494,6 @@ namespace TUGraz.VectoCore.OutputData { var cols = new List<string>(); cols.AddRange(new[] { - SumDataFields.SORT, SumDataFields.JOB, SumDataFields.INPUTFILE, SumDataFields.CYCLE, @@ -486,11 +557,11 @@ namespace TUGraz.VectoCore.OutputData SumDataFields.AXLE_MODEL, SumDataFields.AXLE_RATIO }); - cols.AddRange(new[] { - Constants.Auxiliaries.IDs.SteeringPump, Constants.Auxiliaries.IDs.Fan, - Constants.Auxiliaries.IDs.HeatingVentilationAirCondition, - Constants.Auxiliaries.IDs.PneumaticSystem, Constants.Auxiliaries.IDs.ElectricSystem - }.Select(x => string.Format(SumDataFields.E_AUX_FORMAT, x))); + cols.AddRange(new[] { + Constants.Auxiliaries.IDs.SteeringPump, Constants.Auxiliaries.IDs.Fan, + Constants.Auxiliaries.IDs.HeatingVentilationAirCondition, + Constants.Auxiliaries.IDs.PneumaticSystem, Constants.Auxiliaries.IDs.ElectricSystem + }.Select(x => string.Format(SumDataFields.AUX_TECH_FORMAT, x))); cols.AddRange(new[] { SumDataFields.TCU_MODEL, @@ -504,20 +575,23 @@ namespace TUGraz.VectoCore.OutputData SumDataFields.ALTITUDE_DELTA, }); - cols.AddRange(fcCols); + cols.AddRange(FcCols); - cols.AddRange(new[] { - SumDataFields.CO2_KM, - SumDataFields.CO2_TKM, - SumDataFields.CO2_M3KM, - SumDataFields.CO2_PKM, + cols.AddRange(new[] { + SumDataFields.CO2_KM, + SumDataFields.CO2_TKM, + SumDataFields.CO2_M3KM, + SumDataFields.CO2_PKM, SumDataFields.P_WHEEL, - SumDataFields.P_WHEEL_POS, - SumDataFields.P_FCMAP, + SumDataFields.P_WHEEL_POS, + SumDataFields.P_FCMAP, SumDataFields.P_FCMAP_POS, - SumDataFields.E_FCMAP_POS, - SumDataFields.E_FCMAP_NEG, - SumDataFields.E_POWERTRAIN_INERTIA, + SumDataFields.E_FCMAP_POS, + SumDataFields.E_FCMAP_NEG, + SumDataFields.E_POWERTRAIN_INERTIA, + }); + cols.AddRange(AuxColumns.OrderBy(x => x)); + cols.AddRange(new[] { SumDataFields.E_AUX, SumDataFields.E_AUX_EL_HV, SumDataFields.E_CLUTCH_LOSS, @@ -589,6 +663,7 @@ namespace TUGraz.VectoCore.OutputData SumDataFields.AIRDRAG_CERTIFICATION_NUMBER, SumDataFields.AIRDRAG_CERTIFICATION_METHOD, }); + cols.AddRange(GearColumns.OrderBy(x => x)); return cols.Where(x => Table.Columns.Contains(x)).ToArray(); } @@ -753,7 +828,7 @@ namespace TUGraz.VectoCore.OutputData var col = new DataColumn(colName, typeof(ConvertedSI)); Table.Columns.Add(col); col.SetOrdinal(Table.Columns.IndexOf(SumDataFields.ALTITUDE_DELTA) + 1); - fcCols.Add(colName); + FcCols.Add(colName); } } } diff --git a/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs b/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs index 348082cd3b110e1515b2d828ad580758498cef18..a0ebad74d808d06d21695204f1795c69cc477e91 100644 --- a/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs @@ -567,10 +567,10 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid Assert.IsTrue(run.FinishedWithoutErrors); Assert.IsTrue(modData.Rows.Count > 0); - Assert.That(modData.Columns.Contains(ModalResultField.P_ret_loss.GetName())); - Assert.That(modData.Columns.Contains(ModalResultField.P_retarder_in.GetName())); - Assert.That(modData.Rows.Cast<DataRow>().All(r => r.Field<Watt>(ModalResultField.P_ret_loss.GetName()) is null)); - Assert.That(modData.Rows.Cast<DataRow>().All(r => r.Field<Watt>(ModalResultField.P_retarder_in.GetName()) is null)); + Assert.IsFalse(modData.Columns.Contains(ModalResultField.P_ret_loss.GetName())); + Assert.IsFalse(modData.Columns.Contains(ModalResultField.P_retarder_in.GetName())); + //Assert.That(modData.Rows.Cast<DataRow>().All(r => r.Field<Watt>(ModalResultField.P_ret_loss.GetName()) is null)); + //Assert.That(modData.Rows.Cast<DataRow>().All(r => r.Field<Watt>(ModalResultField.P_retarder_in.GetName()) is null)); } [TestCase] diff --git a/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs b/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs index c9a2b9c4fee28b4ff5ad14e0d8f2f86dc7da0bb0..9031440b81722af72d7c16388c390575e59593ee 100644 --- a/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs +++ b/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs @@ -90,6 +90,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(), Cycle = new DrivingCycleData() { Name = "MockCycle", + CycleType = CycleType.DistanceBased }, DriverData = new DriverData() { EngineStopStart = new DriverData.EngineStopStartData(), @@ -103,10 +104,11 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation modData.AddAuxiliary("STP"); modData.AddAuxiliary("ES"); modData.AddAuxiliary("AC"); - modData.Data.CreateColumns(ModalResults.DriverSignals); + //modData.Data.CreateColumns(ModalResults.DriverSignals); modData.Data.CreateCombustionEngineColumns(runData); var sumWriter = new SummaryDataContainer(fileWriter); + sumWriter.UpdateTableColumns(runData.EngineData); var container = new VehicleContainer(ExecutionMode.Declaration, modData, sumWriter) { RunData = runData}; var data = DrivingCycleDataReader.ReadFromFile(@"TestData\Cycles\LongHaul_short.vdri", CycleType.DistanceBased, false); diff --git a/VectoCore/VectoCoreTest/Models/Simulation/PwheelModeTests.cs b/VectoCore/VectoCoreTest/Models/Simulation/PwheelModeTests.cs index b6023fb482a82f9c25a47e52db057c0cc874654c..6f3abca5f14773332985a0f0d85f538058624efa 100644 --- a/VectoCore/VectoCoreTest/Models/Simulation/PwheelModeTests.cs +++ b/VectoCore/VectoCoreTest/Models/Simulation/PwheelModeTests.cs @@ -165,7 +165,12 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation IdleSpeed = 560.RPMtoRad(), Inertia = 1.SI<KilogramSquareMeter>(), EngineStartTime = DeclarationData.Engine.DefaultEngineStartTime, - FullLoadCurves = new Dictionary<uint, EngineFullLoadCurve>() { { 0, fullLoadCurve }, { 1, fullLoadCurve } } + FullLoadCurves = new Dictionary<uint, EngineFullLoadCurve>() { { 0, fullLoadCurve }, { 1, fullLoadCurve } }, + Fuels = new List<CombustionEngineFuelData>() { + new CombustionEngineFuelData() { + FuelData = FuelData.Diesel + } + } }, GearboxData = new GearboxData { Gears = new Dictionary<uint, GearData> { { 2, new GearData { Ratio = 3.5 } } } }, Retarder = new RetarderData(), diff --git a/VectoCore/VectoCoreTest/Reports/ModDataPostprocessingTest.cs b/VectoCore/VectoCoreTest/Reports/ModDataPostprocessingTest.cs index 770c4a50d6348856bf7b9ab49e3b4c26f5f143fe..ce76570bd6683ec2294e286c5cdeae5ae18e6edc 100644 --- a/VectoCore/VectoCoreTest/Reports/ModDataPostprocessingTest.cs +++ b/VectoCore/VectoCoreTest/Reports/ModDataPostprocessingTest.cs @@ -1805,6 +1805,13 @@ namespace TUGraz.VectoCore.Tests.Reports var modData = new ModalDataContainer(runData, writer, null) { WriteModalResults = true }; + modData.Data.CreateCombustionEngineColumns(runData); + modData.Data.CreateColumns(ModalResults.DriverSignals); + modData.Data.CreateColumns(ModalResults.WheelSignals); + modData.Data.CreateColumns(ModalResults.DCDCConverterSignals); + modData.Data.CreateColumns(ModalResults.BusAuxiliariesSignals); + modData.Data.CreateElectricMotorColumns(runData.ElectricMachinesData.FirstOrDefault().Item1, null, ModalResults.ElectricMotorSignals); + modData.Data.CreateColumns(ModalResults.BatterySignals); var fuel = runData.EngineData.Fuels[0]; diff --git a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs index 744c4724a2630fa8070ccb349357655f254f1bb8..8f1f2a142ca0b9eda01e46e1739efe6d7156c512 100644 --- a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs +++ b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs @@ -388,6 +388,7 @@ namespace TUGraz.VectoCore.Tests.Reports jobContainer.AddRuns(runsFactory); var modData = new List<Tuple<ModalResults, double>>(); + VectoRunData runData = null; foreach (var run in jobContainer.Runs) { var distanceCycle = ((VehicleContainer)run.Run.GetContainer()).DrivingCycleInfo as DistanceBasedDrivingCycle; if (distanceCycle != null) { @@ -398,6 +399,9 @@ namespace TUGraz.VectoCore.Tests.Reports if (cycle != null) modData.Add(Tuple.Create(((ModalDataContainer)run.Run.GetContainer().ModalData).Data, cycle.Data.Entries.Last().Time.Value())); + if (runData == null) { + runData = run.Run.GetContainer().RunData; + } } var auxKeys = new Dictionary<string, DataColumn>( @@ -432,10 +436,11 @@ namespace TUGraz.VectoCore.Tests.Reports } } - AssertSumDataIntegrity(sumData, mode, disatanceBased); + AssertSumDataIntegrity(sumData, mode, disatanceBased, runData); } - private static void AssertSumDataIntegrity(SummaryDataContainer sumData, ExecutionMode mode, bool distanceBased) + private static void AssertSumDataIntegrity(SummaryDataContainer sumData, ExecutionMode mode, + bool distanceBased, VectoRunData runData) { Assert.IsTrue(sumData.Table.Rows.Count > 0); @@ -469,11 +474,11 @@ namespace TUGraz.VectoCore.Tests.Reports var eFcMapNeg = ((ConvertedSI)row[SumDataFields.E_FCMAP_NEG]); var ePowertrainInertia = distanceBased ? ((ConvertedSI)row[SumDataFields.E_POWERTRAIN_INERTIA]) : new ConvertedSI(0, ""); var eAux = ((ConvertedSI)row[SumDataFields.E_AUX]); - var eClutchLoss = ((ConvertedSI)row[SumDataFields.E_CLUTCH_LOSS]); + var eClutchLoss = runData.GearboxData.Type.AutomaticTransmission() ? new ConvertedSI(0, "") : ((ConvertedSI)row[SumDataFields.E_CLUTCH_LOSS]); var eTcLoss = row.Table.Columns.Contains(SumDataFields.E_TC_LOSS) ? ((ConvertedSI)row[SumDataFields.E_TC_LOSS]) : new ConvertedSI(0, ""); //var eShiftLoss = ((SI)row[SummaryDataContainer.E_SHIFT_LOSS]); var eGbxLoss = ((ConvertedSI)row[SumDataFields.E_GBX_LOSS]); - var eRetLoss = ((ConvertedSI)row[SumDataFields.E_RET_LOSS]); + var eRetLoss = runData.Retarder.Type.IsDedicatedComponent() ? ((ConvertedSI)row[SumDataFields.E_RET_LOSS]) : new ConvertedSI(0, ""); var eAngleLoss = row.Table.Columns.Contains(SumDataFields.E_ANGLE_LOSS) ? ((ConvertedSI)row[SumDataFields.E_ANGLE_LOSS]) : new ConvertedSI(0, ""); var eAxlLoss = ((ConvertedSI)row[SumDataFields.E_AXL_LOSS]); var eBrakeLoss = distanceBased ? ((ConvertedSI)row[SumDataFields.E_BRAKE]) : new ConvertedSI(0, ""); @@ -873,10 +878,14 @@ namespace TUGraz.VectoCore.Tests.Reports jobContainer.AddRuns(runsFactory); var modData = new List<Tuple<ModalResults, Meter>>(); + VectoRunData runData = null; foreach (var run in jobContainer.Runs) { modData.Add(Tuple.Create(((ModalDataContainer)run.Run.GetContainer().ModalData).Data, ((DistanceBasedDrivingCycle)((VehicleContainer)run.Run.GetContainer()).DrivingCycleInfo).Data.Entries.Last() .Distance)); + if (runData == null) { + runData = run.Run.GetContainer().RunData; + } } var auxKeys = new Dictionary<string, DataColumn>( @@ -889,14 +898,14 @@ namespace TUGraz.VectoCore.Tests.Reports modalResults.Item1, auxKeys, modalResults.Item2, FuelConsumptionMapReader.Create( ((IEngineeringInputDataProvider)inputData) - .JobInputData.Vehicle.Components.EngineInputData.EngineModes.First().Fuels.First().FuelConsumptionMap), true); + .JobInputData.Vehicle.Components.EngineInputData.EngineModes.First().Fuels.First().FuelConsumptionMap), true, runData); } - AssertSumDataIntegrity(sumData, ExecutionMode.Engineering, true); + AssertSumDataIntegrity(sumData, ExecutionMode.Engineering, true, runData); } private static void AssertModDataIntegrityAT(ModalResults modData, Dictionary<string, DataColumn> auxKeys, - Meter totalDistance, FuelConsumptionMap consumptionMap, bool atGbx) + Meter totalDistance, FuelConsumptionMap consumptionMap, bool atGbx, VectoRunData runData) { Assert.IsTrue(modData.Rows.Count > 0); @@ -936,12 +945,12 @@ namespace TUGraz.VectoCore.Tests.Reports var pLossGbx = (Watt)row[ModalResultField.P_gbx_loss.GetName()]; var pGbxIn = (Watt)row[ModalResultField.P_gbx_in.GetName()]; var pLossAxle = (Watt)row[ModalResultField.P_axle_loss.GetName()]; - var pLossAngle = row[ModalResultField.P_angle_loss.GetName()] is DBNull + var pLossAngle = runData.AngledriveData?.Type != AngledriveType.SeparateAngledrive ? 0.SI<Watt>() : (Watt)row[ModalResultField.P_angle_loss.GetName()]; var pAxleIn = (Watt)row[ModalResultField.P_axle_in.GetName()]; - var pLossRet = row[ModalResultField.P_ret_loss.GetName()] is DBNull ? 0.SI<Watt>() : (Watt)row[ModalResultField.P_ret_loss.GetName()]; - var pRetIn = row[ModalResultField.P_retarder_in.GetName()] is DBNull ? pAxleIn : (Watt)row[ModalResultField.P_retarder_in.GetName()]; + var pLossRet = runData.Retarder.Type.IsDedicatedComponent() ? (Watt)row[ModalResultField.P_ret_loss.GetName()] : 0.SI<Watt>(); + var pRetIn = runData.Retarder.Type.IsDedicatedComponent() ? (Watt)row[ModalResultField.P_retarder_in.GetName()] : pAxleIn; var pGbxInertia = (Watt)row[ModalResultField.P_gbx_inertia.GetName()]; var pShiftLoss = row[ModalResultField.P_gbx_shift_loss.GetName()] is DBNull ? 0.SI<Watt>() diff --git a/VectoCore/VectoCoreTest/Utils/ResultFileHelper.cs b/VectoCore/VectoCoreTest/Utils/ResultFileHelper.cs index 6075287c616060e9ca5321b782c919482229336b..66bf65c49141398a32521d529d8380d1aee2cfd6 100644 --- a/VectoCore/VectoCoreTest/Utils/ResultFileHelper.cs +++ b/VectoCore/VectoCoreTest/Utils/ResultFileHelper.cs @@ -107,11 +107,12 @@ namespace TUGraz.VectoCore.Tests.Utils } CollectionAssert.AreEqual(expectedCols, actualCols, - "Moddata {0}: Columns differ:\nExpected: {1}\nMissing:{2},\nToo Much:{3}", + "Moddata {0}: Columns differ:\nActual: {4}\nExpected: {1}\nMissing:{2},\nToo Much:{3}", result.actualFile, expectedCols.Join(), expectedCols.Except(actualCols).Join(), - actualCols.Except(expectedCols).Join()); + actualCols.Except(expectedCols).Join(), + actualCols.Join()); for (var i = 0; testRowcount && i < expected.Rows.Count; i++) { var expectedRow = expected.Rows[i]; @@ -139,11 +140,12 @@ namespace TUGraz.VectoCore.Tests.Utils var expectedCols = expected.Columns.Cast<DataColumn>().Select(x => x.ColumnName).OrderBy(x => x).ToList(); CollectionAssert.AreEqual(expectedCols, actualCols, - "SUM FILE {0}: Columns differ:\nExpected: {1}\nMissing:{2},\nToo Much:{3}", + "SUM FILE {0}: Columns differ:\nActual: {4}\nExpected: {1}\nMissing:{2},\nToo Much:{3}", actualFile, expectedCols.Join(), expectedCols.Except(actualCols).Join(), - actualCols.Except(expectedCols).Join()); + actualCols.Except(expectedCols).Join(), + actualCols.Join()); for (var i = 0; i < expected.Rows.Count; i++) { var expectedRow = expected.Rows[i]; diff --git a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv24VehicleDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv24VehicleDataTest.cs index aab9e7969973c29d5d454875ba1976a8c9a492d0..a929d2202187e131df8637dd0929a7dcc234b886 100644 --- a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv24VehicleDataTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv24VehicleDataTest.cs @@ -168,7 +168,7 @@ namespace TUGraz.VectoCore.Tests.XML TestPrimaryBusParametersSequenceGroup(vehicle); Assert.AreEqual(600.RPMtoRad(), vehicle.EngineIdleSpeed); TestRetarderSequenceGroup(vehicle); - Assert.AreEqual(AngledriveType.SeparateAngledrive, vehicle.AngledriveType); + Assert.AreEqual(AngledriveType.None, vehicle.AngledriveType); Assert.AreEqual(true, vehicle.ZeroEmissionVehicle); }