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 ...@@ -167,6 +167,9 @@ namespace TUGraz.VectoCore.Configuration
public static readonly Meter GearboxLookaheadForAccelerationEstimation = 100.SI<Meter>(); public static readonly Meter GearboxLookaheadForAccelerationEstimation = 100.SI<Meter>();
public static Kilogram MaximumGrossVehicleWeight = 40000.SI<Kilogram>(); 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 ...@@ -49,6 +49,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
public PerSecond TorqueConverterSpeedLimit { get; protected internal set; } public PerSecond TorqueConverterSpeedLimit { get; protected internal set; }
// only used for validation!
internal double RequiredSpeedRatio { get; set; }
protected internal TorqueConverterData(List<TorqueConverterEntry> torqueConverterEntries, PerSecond referenceSpeed, protected internal TorqueConverterData(List<TorqueConverterEntry> torqueConverterEntries, PerSecond referenceSpeed,
PerSecond maxRpm) PerSecond maxRpm)
{ {
...@@ -73,7 +76,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox ...@@ -73,7 +76,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
var mpNorm = ReferenceSpeed.Value(); var mpNorm = ReferenceSpeed.Value();
var min = minSpeed == null ? 0 : minSpeed.Value(); var min = minSpeed == null ? 0 : minSpeed.Value();
// Find analytic solution for torque converter operating point // Find analytic solution for torque converter operating point
// mu = f(nu) = f(n_out / n_in) = T_out / T_in // mu = f(nu) = f(n_out / n_in) = T_out / T_in
// MP1000 = f(nu) = f(n_out / n_in) // MP1000 = f(nu) = f(n_out / n_in)
...@@ -94,7 +97,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox ...@@ -94,7 +97,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
torqueOut.Value(); torqueOut.Value();
var sol = VectoMath.QuadraticEquationSolver(a, b, c); 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 >= muEdge.P1.X && angularSpeedOut.Value() / x < muEdge.P2.X
&& angularSpeedOut.Value() / x >= mpEdge.P1.X && angularSpeedOut.Value() / x < mpEdge.P2.X); && angularSpeedOut.Value() / x >= mpEdge.P1.X && angularSpeedOut.Value() / x < mpEdge.P2.X);
solutions.AddRange(selected); solutions.AddRange(selected);
...@@ -253,14 +256,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox ...@@ -253,14 +256,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
return retVal; return retVal;
} }
// ReSharper disable once UnusedMember.Global -- used by validation
public static ValidationResult ValidateData(TorqueConverterData data, ValidationContext validationContext) public static ValidationResult ValidateData(TorqueConverterData data, ValidationContext validationContext)
{ {
var min = data.TorqueConverterEntries.Min(e => e.SpeedRatio); var min = data.TorqueConverterEntries.Min(e => e.SpeedRatio);
var max = data.TorqueConverterEntries.Max(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( 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}", "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)); min, max, data.RequiredSpeedRatio));
} }
return ValidationResult.Success; return ValidationResult.Success;
......
...@@ -29,12 +29,14 @@ ...@@ -29,12 +29,14 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/ */
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Runtime.Serialization; using System.Runtime.Serialization;
using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils; using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
namespace TUGraz.VectoCore.Models.SimulationComponent.Data namespace TUGraz.VectoCore.Models.SimulationComponent.Data
...@@ -111,6 +113,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data ...@@ -111,6 +113,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
var result = new List<ValidationResult>(); var result = new List<ValidationResult>();
if (gearboxData.Type.AutomaticTransmission()) { 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)); 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