From 70e929d70b066e4f603e6c44d73d967ea03f0df0 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Mon, 26 Sep 2016 08:59:02 +0200 Subject: [PATCH] extending Validation of VectoRunData: only check up to max speed (currently 95 km/h), consider angledrive, consider gearbox maxTorque --- .../Models/Simulation/Data/VectoRunData.cs | 46 +++++++++++++++---- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs index 8974c7d38e..6be166a353 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs @@ -127,37 +127,67 @@ namespace TUGraz.VectoCore.Models.Simulation.Data { var gearboxData = runData.GearboxData; var engineData = runData.EngineData; - var axleGearData = runData.AxleGearData; + + var maxSpeed = 95.KMPHtoMeterPerSecond(); if (gearboxData != null) { + var axleGearData = runData.AxleGearData; + var angledriveData = runData.AngledriveData; + var hasAngleDrive = angledriveData != null && angledriveData.Angledrive != null; + var angledriveRatio = hasAngleDrive && angledriveData.Type == AngledriveType.SeparateAngledrive + ? angledriveData.Angledrive.Ratio + : 1.0; + var axlegearRatio = axleGearData != null ? axleGearData.AxleGear.Ratio : 1.0; + var dynamicTyreRadius = runData.VehicleData != null ? runData.VehicleData.DynamicTyreRadius : 0.0.SI<Meter>(); + foreach (var gear in gearboxData.Gears) { for (var angularVelocity = engineData.IdleSpeed; angularVelocity < engineData.FullLoadCurve.RatedSpeed; angularVelocity += 2.0 / 3.0 * (engineData.FullLoadCurve.RatedSpeed - engineData.IdleSpeed) / 10.0) { + var velocity = angularVelocity / gear.Value.Ratio / angledriveRatio / axlegearRatio * dynamicTyreRadius; + + if (velocity > maxSpeed) { + continue; + } + + for (var inTorque = engineData.FullLoadCurve.FullLoadStationaryTorque(angularVelocity) / 3; inTorque < engineData.FullLoadCurve.FullLoadStationaryTorque(angularVelocity); inTorque += 2.0 / 3.0 * engineData.FullLoadCurve.FullLoadStationaryTorque(angularVelocity) / 10.0) { - NewtonMeter axleTorque; + if (gear.Value.MaxTorque != null && inTorque > gear.Value.MaxTorque) { + continue; + } + + NewtonMeter angledriveTorque; try { - axleTorque = gear.Value.LossMap.GetOutTorque(angularVelocity, inTorque); + angledriveTorque = gear.Value.LossMap.GetOutTorque(angularVelocity, inTorque); } catch (VectoException) { return new ValidationResult( string.Format("Interpolation of Gear-{0}-LossMap failed with torque={1} and angularSpeed={2}", gear.Key, inTorque, angularVelocity.ConvertTo().Rounds.Per.Minute)); } + var axlegearTorque = angledriveTorque; + try { + if (hasAngleDrive) { + axlegearTorque = angledriveData.Angledrive.LossMap.GetOutTorque(angularVelocity / gear.Value.Ratio, + angledriveTorque); + } + } catch (VectoException) { + return new ValidationResult( + string.Format("Interpolation of Angledrive-LossMap failed with torque={1} and angularSpeed={2}", gear.Key, + angledriveTorque, (angularVelocity / gear.Value.Ratio).ConvertTo().Rounds.Per.Minute)); + } if (axleGearData != null) { - var velocity = angularVelocity / gear.Value.Ratio / axleGearData.AxleGear.Ratio * - runData.VehicleData.DynamicTyreRadius; - var axleAngularVelocity = angularVelocity / gear.Value.Ratio; + var axleAngularVelocity = angularVelocity / gear.Value.Ratio / angledriveRatio; try { - axleGearData.AxleGear.LossMap.GetOutTorque(axleAngularVelocity, axleTorque); + axleGearData.AxleGear.LossMap.GetOutTorque(axleAngularVelocity, axlegearTorque); } catch (VectoException) { return new ValidationResult( string.Format( "Interpolation of AxleGear-LossMap failed with torque={0} and angularSpeed={1} (gear={2}, velocity={3})", - axleTorque, axleAngularVelocity.ConvertTo().Rounds.Per.Minute, gear.Key, velocity)); + axlegearTorque, axleAngularVelocity.ConvertTo().Rounds.Per.Minute, gear.Key, velocity)); } } } -- GitLab