From a2a10c75492e6ff8e4889819dc444e2a7540c5a6 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Fri, 11 Nov 2016 12:58:59 +0100 Subject: [PATCH] change validation of torque converter data: required max speed ratio depends on gear ratio --- VectoCore/VectoCore/Configuration/Constants.cs | 3 +++ .../Data/Gearbox/TorqueConverterData.cs | 14 +++++++++----- .../Models/SimulationComponent/Data/GearboxData.cs | 5 +++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/VectoCore/VectoCore/Configuration/Constants.cs b/VectoCore/VectoCore/Configuration/Constants.cs index c279598d5c..0f98a24421 100644 --- a/VectoCore/VectoCore/Configuration/Constants.cs +++ b/VectoCore/VectoCore/Configuration/Constants.cs @@ -167,6 +167,9 @@ namespace TUGraz.VectoCore.Configuration public static readonly Meter GearboxLookaheadForAccelerationEstimation = 100.SI<Meter>(); public static Kilogram MaximumGrossVehicleWeight = 40000.SI<Kilogram>(); + + // the torque converter characteristics curve has to be defined up to this speed ratio + public const double RequiredTorqueConverterSpeedRatio = 2.2; } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TorqueConverterData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TorqueConverterData.cs index 1ff3afffb5..41c075d927 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TorqueConverterData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TorqueConverterData.cs @@ -49,6 +49,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox public PerSecond TorqueConverterSpeedLimit { get; protected internal set; } + // only used for validation! + internal double RequiredSpeedRatio { get; set; } + protected internal TorqueConverterData(List<TorqueConverterEntry> torqueConverterEntries, PerSecond referenceSpeed, PerSecond maxRpm) { @@ -73,7 +76,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox var mpNorm = ReferenceSpeed.Value(); var min = minSpeed == null ? 0 : minSpeed.Value(); - + // Find analytic solution for torque converter operating point // mu = f(nu) = f(n_out / n_in) = T_out / T_in // MP1000 = f(nu) = f(n_out / n_in) @@ -94,7 +97,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox torqueOut.Value(); var sol = VectoMath.QuadraticEquationSolver(a, b, c); - var selected = sol.Where(x => x > min + var selected = sol.Where(x => x > min && angularSpeedOut.Value() / x >= muEdge.P1.X && angularSpeedOut.Value() / x < muEdge.P2.X && angularSpeedOut.Value() / x >= mpEdge.P1.X && angularSpeedOut.Value() / x < mpEdge.P2.X); solutions.AddRange(selected); @@ -253,14 +256,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox return retVal; } + // ReSharper disable once UnusedMember.Global -- used by validation public static ValidationResult ValidateData(TorqueConverterData data, ValidationContext validationContext) { var min = data.TorqueConverterEntries.Min(e => e.SpeedRatio); var max = data.TorqueConverterEntries.Max(e => e.SpeedRatio); - if (min > 0 || max < 2.2) { + if (min > 0 || max < data.RequiredSpeedRatio) { return new ValidationResult(string.Format( - "Torque Converter Data invalid - Speedratio has to cover the range from 0.0 to 2.2: given data only goes from {0} to {1}", - min, max)); + "Torque Converter Data invalid - Speedratio has to cover the range from 0.0 to {2}: given data only goes from {0} to {1}", + min, max, data.RequiredSpeedRatio)); } return ValidationResult.Success; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs index 54445ef137..8b946ad87b 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs @@ -29,12 +29,14 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Runtime.Serialization; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; namespace TUGraz.VectoCore.Models.SimulationComponent.Data @@ -111,6 +113,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data var result = new List<ValidationResult>(); if (gearboxData.Type.AutomaticTransmission()) { + gearboxData.TorqueConverterData.RequiredSpeedRatio = + Math.Round(Constants.SimulationSettings.RequiredTorqueConverterSpeedRatio / gearboxData.Gears[1].Ratio * + gearboxData.Gears[1].TorqueConverterRatio, 4); result.AddRange(gearboxData.TorqueConverterData.Validate(mode)); } -- GitLab