Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

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