diff --git a/VectoCore/VectoCore/OutputData/SumDataFields.cs b/VectoCore/VectoCore/OutputData/SumDataFields.cs index fdb3c8571414edd849779a49bcae432897775334..0e3ffc30fb2f72c874eb6f3cb6d16fa04c656dfe 100644 --- a/VectoCore/VectoCore/OutputData/SumDataFields.cs +++ b/VectoCore/VectoCore/OutputData/SumDataFields.cs @@ -56,9 +56,7 @@ namespace TUGraz.VectoCore.OutputData public const string GEARBOX_MANUFACTURER = "Gearbox manufacturer [-]"; public const string GEARBOX_MODEL = "Gearbox model [-]"; public const string GEARBOX_TYPE = "Gearbox type [-]"; - public const string GEAR_RATIO_FIRST_GEAR = "Gear ratio first gear [-]"; - public const string GEAR_RATIO_LAST_GEAR = "Gear ratio last gear [-]"; - + public const string TORQUECONVERTER_MANUFACTURER = "Torque converter manufacturer [-]"; public const string TORQUECONVERTER_MODEL = "Torque converter model [-]"; @@ -219,6 +217,8 @@ namespace TUGraz.VectoCore.OutputData public const string BRAKING_TIME_SHARE = "BrakingTimeShare [%]"; public const string TIME_SHARE_PER_GEAR_FORMAT = "Gear {0} TimeShare [%]"; + public const string RATIO_PER_GEAR_FORMAT = "Gear {0} Ratio [-]"; + public const string P2_5_RATIO_PER_GEAR_FORMAT = "Gear {0} P2.5 Ratio [-]"; public const string NUM_AXLES_DRIVEN = "Number axles vehicle driven [-]"; public const string NUM_AXLES_NON_DRIVEN = "Number axles vehicle non-driven [-]"; @@ -475,15 +475,6 @@ namespace TUGraz.VectoCore.OutputData { GEARBOX_CERTIFICATION_NUMBER, SumFunc((r, m) => r.GearboxData?.CertificationMethod == CertificationMethod.StandardValues ? "" : r.GearboxData?.CertificationNumber)}, { GEARBOX_CERTIFICATION_METHOD, SumFunc((r, m) => r.GearboxData?.CertificationMethod.GetName())}, - { GEAR_RATIO_FIRST_GEAR, SumFunc((r, m) => r.GearboxData?.Gears.Count > 0 - ? (double.IsNaN(r.GearboxData.Gears.First().Value.Ratio) - ? (ConvertedSI)r.GearboxData.Gears.First().Value.TorqueConverterRatio.SI<Scalar>() - : (ConvertedSI)r.GearboxData.Gears.First().Value.Ratio.SI<Scalar>()) - : 0.SI<Scalar>())}, - { GEAR_RATIO_LAST_GEAR, SumFunc((r, m) => r.GearboxData?.Gears.Count > 0 - ? (ConvertedSI) r.GearboxData.Gears.Last().Value.Ratio.SI<Scalar>() - : (ConvertedSI)0.SI<Scalar>())}, - // torque converter { TORQUECONVERTER_MANUFACTURER, SumFunc((r, m) => r.GearboxData?.TorqueConverterData?.Manufacturer ?? Constants.NOT_AVAILABLE)}, { TORQUECONVERTER_MODEL, SumFunc((r, m) => r.GearboxData?.TorqueConverterData?.ModelName ?? Constants.NOT_AVAILABLE)}, diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs index 1ae05ed90a8415b17e17d6c6accff89c18188031..9444ca21465d931ec7a490af76bb5ea28a98b932 100644 --- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs @@ -166,8 +166,6 @@ namespace TUGraz.VectoCore.OutputData 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.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)), @@ -407,7 +405,7 @@ namespace TUGraz.VectoCore.OutputData protected IList<string> GearColumns = new List<string>(); protected IList<string> AuxColumns = new List<string>(); protected IList<string> EmColumns = new List<string>(); - + protected IList<string> GearRatioColumns = new List<string>(); /// <summary> /// Initializes a new instance of the <see cref="SummaryDataContainer"/> class. @@ -444,11 +442,13 @@ namespace TUGraz.VectoCore.OutputData ? GearboxColumns_AT : GearboxColumns); CreateGearTimeShareColumns(runData.GearboxData.GearList); + CreateGearRatioColumns(runData); break; case IGearbox _ when runData.JobType == VectoSimulationJobType.IEPC_E: case IGearbox _ when runData.JobType == VectoSimulationJobType.IEPC_S: CreateColumns(IEPCTransmissionColumns); CreateGearTimeShareColumns(runData.GearboxData.GearList); + CreateGearRatioColumns(runData); break; case VTPCycle _: CreateColumns(VTPCycleColumns); @@ -567,6 +567,32 @@ namespace TUGraz.VectoCore.OutputData } } + private void CreateGearRatioColumns(VectoRunData runData) + { + lock (Table) { + var gears = runData.GearboxData.GearList; + var gearNumbers = new uint[] { }.Concat(gears.Select(x => x.Gear)).Distinct().OrderBy(x => x); + + var gearColNames = gearNumbers + .Select(x => string.Format(SumDataFields.RATIO_PER_GEAR_FORMAT, x)) + .Where(x => !Table.Columns.Contains(x)).Select(x => new DataColumn(x, typeof(ConvertedSI))); + + if (runData.ElectricMachinesData.Any(x => x.Item1 == PowertrainPosition.HybridP2_5)) { + gearColNames = gearColNames.Concat( + gearNumbers + .Select(x => string.Format(SumDataFields.P2_5_RATIO_PER_GEAR_FORMAT, x)) + .Where(x => !Table.Columns.Contains(x)).Select(x => new DataColumn(x, typeof(ConvertedSI)))); + } + + var gearColumnsArray = gearColNames.ToArray(); + + Table.Columns.AddRange(gearColumnsArray); + + foreach (var gearColName in gearColumnsArray) { + GearRatioColumns.Add(gearColName.ColumnName); + } + } + } protected internal void CreateColumns(Tuple<string, Type>[] cols) { @@ -629,9 +655,12 @@ namespace TUGraz.VectoCore.OutputData SumDataFields.NUM_AXLES_TRAILER, SumDataFields.GEARBOX_MANUFACTURER, SumDataFields.GEARBOX_MODEL, - SumDataFields.GEARBOX_TYPE, - SumDataFields.GEAR_RATIO_FIRST_GEAR, - SumDataFields.GEAR_RATIO_LAST_GEAR, + SumDataFields.GEARBOX_TYPE + }); + + cols.AddRange(GearRatioColumns); + + cols.AddRange(new[] { SumDataFields.TORQUECONVERTER_MANUFACTURER, SumDataFields.TORQUECONVERTER_MODEL, SumDataFields.RETARDER_MANUFACTURER, @@ -644,6 +673,7 @@ namespace TUGraz.VectoCore.OutputData SumDataFields.AXLE_MODEL, SumDataFields.AXLE_RATIO }); + cols.AddRange(new[] { Constants.Auxiliaries.IDs.SteeringPump, Constants.Auxiliaries.IDs.Fan, @@ -698,7 +728,7 @@ namespace TUGraz.VectoCore.OutputData - cols.AddRange(new[] { + cols.AddRange(new[] { SumDataFields.REESS_StartSoC, SumDataFields.REESS_EndSoC, SumDataFields.REESS_DeltaEnergy, @@ -786,6 +816,7 @@ namespace TUGraz.VectoCore.OutputData SumDataFields.AIRDRAG_CERTIFICATION_METHOD, }); cols.AddRange(GearColumns); + return cols.Where(x => Table.Columns.Contains(x)).ToArray(); } @@ -1061,6 +1092,7 @@ namespace TUGraz.VectoCore.OutputData if ((runData.GearboxData?.Gears.Count ?? 0) > 0) { WriteGearshiftStats(modData, row, (uint?)runData.GearboxData?.Gears.Count ?? 0u); + WriteGearRatios(row, runData); } AddResultDictionary(row); @@ -1223,6 +1255,27 @@ namespace TUGraz.VectoCore.OutputData } } + private void WriteGearRatios(Dictionary<string, object> row, VectoRunData runData) + { + var emData = runData.ElectricMachinesData.Any(x => x.Item1 == PowertrainPosition.HybridP2_5) + ? runData.ElectricMachinesData.First(x => x.Item1 == PowertrainPosition.HybridP2_5).Item2 + : null; + + foreach (var gear in runData.GearboxData.Gears) { + var colName = string.Format(SumDataFields.RATIO_PER_GEAR_FORMAT, gear.Key); + + row[colName] = (double.IsNaN(gear.Value.Ratio) + ? (ConvertedSI)gear.Value.TorqueConverterRatio.SI<Scalar>() + : (ConvertedSI)gear.Value.Ratio.SI<Scalar>()); + + if (emData != null) { + var colNameP2_5 = string.Format(SumDataFields.P2_5_RATIO_PER_GEAR_FORMAT, gear.Key); + + row[colNameP2_5] = (ConvertedSI)emData.RatioPerGear[gear.Key - 1].SI<Scalar>(); + } + } + } + public static string ReplaceNotAllowedCharacters(string text) { return text.Replace('#', '_').Replace(',', '_').Replace('\n', '_').Replace('\r', '_');