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

Skip to content
Snippets Groups Projects
Commit 7715ace2 authored by Markus QUARITSCH's avatar Markus QUARITSCH
Browse files

Merge pull request #261 in VECTO/vecto-sim from...

Merge pull request #261 in VECTO/vecto-sim from ~EMQUARIMA/vecto-sim:feature/VECTO-338-simulation-initialisation-issues to develop

* commit '70e929d7':
  extending Validation of VectoRunData: only check up to max speed (currently 95 km/h), consider angledrive, consider gearbox maxTorque
parents ec8f690e 70e929d7
No related branches found
No related tags found
No related merge requests found
......@@ -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));
}
}
}
......
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