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

Skip to content
Snippets Groups Projects
Commit e78a90bd authored by Michael KRISPER's avatar Michael KRISPER
Browse files

changed calculation of reference load based on payloads and standardweights

parent ef48ec40
No related branches found
No related tags found
No related merge requests found
......@@ -87,7 +87,6 @@ namespace TUGraz.VectoCore.Configuration
/// </summary>
public static readonly Second TargetTimeInterval = 0.5.SI<Second>();
/// <summary>
/// maximum time interval for the simulation in measured speed mode.
/// </summary>
......@@ -151,6 +150,8 @@ namespace TUGraz.VectoCore.Configuration
public static readonly MeterPerSecond VehicleStopClutchDisengageSpeed = 10.KMPHtoMeterPerSecond();
public static readonly Meter GearboxLookaheadForAccelerationEstimation = 100.SI<Meter>();
public static Kilogram MaximumGrossVehicleWeight = 40000.SI<Kilogram>();
}
}
}
\ No newline at end of file
......@@ -43,7 +43,7 @@ using TUGraz.VectoCore.Utils;
namespace TUGraz.VectoCore.Models.Declaration
{
public class DeclarationData
internal class DeclarationData
{
private static DeclarationData _instance;
private Segments _segments;
......@@ -59,7 +59,7 @@ namespace TUGraz.VectoCore.Models.Declaration
private AirDrag _airDrag;
private TorqueConverter _torqueConverter;
private StandardWeights _standardWeights;
public static Kilogram MaximumGrossVehicleWeight = 40000.SI<Kilogram>();
private Payloads _payloads;
public static Wheels Wheels
{
......@@ -81,31 +81,14 @@ namespace TUGraz.VectoCore.Models.Declaration
get { return Instance()._pt1 ?? (Instance()._pt1 = new PT1()); }
}
public static ElectricSystem ElectricSystem
{
get { return Instance()._electricSystem ?? (Instance()._electricSystem = new ElectricSystem()); }
}
/// <summary>
/// Formula for calculating the payload for a given gross vehicle weight.
/// (so called "pc-formula", Whitebook Apr 2016, Part 1, p.187)
/// </summary>
public static Kilogram PayloadForGVW(Kilogram grossVehicleWeight, MissionType missionType)
public static Payloads Payloads
{
var gvw = new[] { 7.5.SI().Ton.Cast<Kilogram>(), 16.SI().Ton.Cast<Kilogram>() };
var payload50 = new[] { 1.25.SI().Ton.Cast<Kilogram>(), 4.6.SI().Ton.Cast<Kilogram>() };
var payload75 = new[] { 1.9.SI().Ton.Cast<Kilogram>(), 6.9.SI().Ton.Cast<Kilogram>() };
var payload = missionType == MissionType.LongHaul ? payload75 : payload50;
return VectoMath.Interpolate(gvw[0], gvw[1], payload[0], payload[1], grossVehicleWeight);
get { return Instance()._payloads ?? (Instance()._payloads = new Payloads()); }
}
/// <summary>
/// Returns the payload for a trailer. This is 75% of (GVW-CurbWeight).
/// </summary>
public static Kilogram PayloadForTrailer(Kilogram grossVehicleWeight, Kilogram curbWeight)
public static ElectricSystem ElectricSystem
{
return (grossVehicleWeight - curbWeight) * 3 / 4;
get { return Instance()._electricSystem ?? (Instance()._electricSystem = new ElectricSystem()); }
}
public static Meter DynamicTyreRadius(string wheels, string rims)
......@@ -123,6 +106,25 @@ namespace TUGraz.VectoCore.Models.Declaration
}
}
/// <summary>
/// Formula for calculating the payload for a given gross vehicle weight.
/// (so called "pc-formula", Whitebook Apr 2016, Part 1, p.187)
/// </summary>
public static Kilogram GetPayloadForGrossVehicleWeight(Kilogram grossVehicleWeight, MissionType missionType)
{
return missionType == MissionType.LongHaul
? Payloads.Lookup75Percent(grossVehicleWeight)
: Payloads.Lookup50Percent(grossVehicleWeight);
}
/// <summary>
/// Returns the payload for a trailer. This is 75% of (GVW-CurbWeight).
/// </summary>
public static Kilogram GetPayloadForTrailerWeight(Kilogram grossVehicleWeight, Kilogram curbWeight)
{
return Payloads.LookupTrailer(grossVehicleWeight, curbWeight);
}
public static Fan Fan
{
get { return Instance()._fan ?? (Instance()._fan = new Fan()); }
......@@ -317,7 +319,7 @@ namespace TUGraz.VectoCore.Models.Declaration
}
var gearRatio = gears[gear].Ratio / gears[gear + 1].Ratio;
var rpmMarginFactor = 1 + DeclarationData.Gearbox.ShiftPolygonRPMMargin / 100.0;
var rpmMarginFactor = 1 + ShiftPolygonRPMMargin / 100.0;
var p2p = new Point(p2.X * gearRatio * rpmMarginFactor, p2.Y / gearRatio);
var p3p = new Point(p3.X * gearRatio * rpmMarginFactor, p3.Y / gearRatio);
......
......@@ -36,6 +36,7 @@ using System.Linq;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.Utils;
namespace TUGraz.VectoCore.Models.Declaration
......@@ -102,26 +103,32 @@ namespace TUGraz.VectoCore.Models.Declaration
return segment;
}
//mk 2016-06-28 remove param curbWeight
private static Mission[] CreateMissions(ref Kilogram grossVehicleWeight, Kilogram curbWeight, DataRow row)
{
var missionTypes = Enum.GetValues(typeof(MissionType)).Cast<MissionType>();
var missions = new List<Mission>();
foreach (var missionType in missionTypes.Where(m => row.Field<string>(m.ToString()) == "1")) {
foreach (var missionType in missionTypes.Where(m => row.Field<string>(m.ToString()) != "-")) {
var body = DeclarationData.StandardWeights.Lookup(row.Field<string>("body"));
var trailer = ShouldTrailerBeUsed(row, missionType)
? DeclarationData.StandardWeights.Lookup(row.Field<string>("trailer"))
: DeclarationData.StandardWeights.Empty;
var gvw = VectoMath.Min(grossVehicleWeight + trailer.GrossVehicleWeight, DeclarationData.MaximumGrossVehicleWeight);
// limit gvw to MaxGVW (40t)
var gvw = VectoMath.Min(grossVehicleWeight + trailer.GrossVehicleWeight,
Constants.SimulationSettings.MaximumGrossVehicleWeight);
var maxLoad = gvw - curbWeight - body.CurbWeight - trailer.CurbWeight;
var refLoadValue =
row.Field<string>("payload-" + missionType.GetName()).Replace("+T", "").ToDouble(double.NaN);
var refLoad = VectoMath.Min(!double.IsNaN(refLoadValue)
? refLoadValue.SI<Kilogram>()
: DeclarationData.PayloadForGVW(grossVehicleWeight, missionType) +
DeclarationData.PayloadForTrailer(trailer.GrossVehicleWeight, trailer.CurbWeight), maxLoad);
var refLoadValue = row.Field<string>(missionType.ToString()).ToDouble(double.NaN);
Kilogram refLoad;
if (double.IsNaN(refLoadValue)) {
refLoad = DeclarationData.GetPayloadForGrossVehicleWeight(grossVehicleWeight, missionType) +
DeclarationData.GetPayloadForTrailerWeight(trailer.GrossVehicleWeight, trailer.CurbWeight);
} else {
refLoad = refLoadValue.SI<Kilogram>();
}
refLoad = VectoMath.Min(refLoad, maxLoad);
var mission = new Mission {
MissionType = missionType,
......@@ -149,8 +156,7 @@ namespace TUGraz.VectoCore.Models.Declaration
/// </summary>
private static bool ShouldTrailerBeUsed(DataRow row, MissionType missionType)
{
var payloadText = row.Field<string>("payload-" + missionType.GetName());
return payloadText.Contains("+T");
return !string.IsNullOrWhiteSpace(row.Field<string>("traileraxles" + GetMissionSuffix(missionType)));
}
private static double[] GetTrailerAxleWeightDistribution(DataRow row, MissionType missionType)
......
......@@ -38,7 +38,7 @@ using TUGraz.VectoCore.Utils;
namespace TUGraz.VectoCore.Models.Declaration
{
public sealed class StandardWeight
internal sealed class StandardWeight
{
public Kilogram CurbWeight;
public Kilogram GrossVehicleWeight;
......@@ -58,7 +58,7 @@ namespace TUGraz.VectoCore.Models.Declaration
/// Gross Vehicle Weight (=Maximum Allowed Weight), and
/// MaxPayload.
/// </summary>
public sealed class StandardWeights : LookupData<string, StandardWeight>
internal sealed class StandardWeights : LookupData<string, StandardWeight>
{
private const string ResourceId = "TUGraz.VectoCore.Resources.Declaration.Body_Trailers_Weights.csv";
......
......@@ -456,7 +456,8 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
DriverBehavior = DrivingBehavior.Driving,
Altitude = 0.SI<Meter>(),
VehicleMass = 10000.SI<Kilogram>(),
ReducedMassWheels = 100.SI<Kilogram>()
ReducedMassWheels = 100.SI<Kilogram>(),
TotalMass = 19000.SI<Kilogram>()
};
var gearboxData = MockSimulationDataFactory.CreateGearboxDataFromFile(GearboxDataFile, EngineDataFile);
var gearbox = new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container));
......
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