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

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

change validation of torque converter data: required max speed ratio depends on gear ratio

parent 9185d8f2
No related branches found
No related tags found
No related merge requests found
......@@ -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
......@@ -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;
......
......@@ -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));
}
......
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