Skip to content

Commit 55f992d

Browse files
authored
Merge pull request #847 from peternewell/brake-shoe#2
Add additional default brakeshoe CoF
2 parents 2232f9c + 51067c3 commit 55f992d

File tree

3 files changed

+47
-16
lines changed

3 files changed

+47
-16
lines changed

Source/Documentation/Manual/physics.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2753,7 +2753,8 @@ Brake Shoe Force - This is the current change being implemented. The following c
27532753

27542754
``ORTSBrakeShoeType`` - this defines a number of different brake shoe types and curves. To provide a more realistic representation of the braking force the default CoF curves are 2D, ie
27552755
they are impacted by both the speed and Brake Shoe Force. Typically ``ORTSBrakeShoeType`` will have one of the following keywords included -
2756-
``Cast_Iron`` - cast iron brake shoe, 2D as above, ``Hi_Friction_Composite`` - high friction composite shoe, 2D as above, ``User_Defined`` - is a user defined curve
2756+
``Cast_Iron_P6`` - older cast iron brake shoes, 2D as above, ``Cast_Iron_P10`` - newer cast iron brake shoes with increased phosphorous, 2D as above, ``Hi_Friction_Composite``
2757+
- high friction composite shoe, 2D as above, ``Disc_Pads`` - brakes with disc pads, 2D as above, ``User_Defined`` - is a user defined curve
27572758
using the ORTSBrakeShoeFriction parameter, 1D (ie, speed only, see above section for the parameter format).
27582759

27592760
``ORTSNumberCarBrakeShoes`` - to facilitate the operation of the default 2D curves above it is necessary to configure the number of brake shoes for each car.

Source/Orts.Simulation/Simulation/RollingStocks/MSTSWagon.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -632,7 +632,7 @@ public virtual void LoadFromWagFile(string wagFilePath)
632632
NumberCarBrakeShoes = (LocoNumDrvAxles * 4) + (WagonNumAxles * 4); // Assume 4 brake shoes per axle on all wheels
633633
}
634634

635-
if (Simulator.Settings.VerboseConfigurationMessages && (BrakeShoeType == BrakeShoeTypes.Cast_Iron || BrakeShoeType == BrakeShoeTypes.High_Friction_Composite))
635+
if (Simulator.Settings.VerboseConfigurationMessages && (BrakeShoeType != BrakeShoeTypes.User_Defined || BrakeShoeType != BrakeShoeTypes.Unknown))
636636
{
637637
Trace.TraceInformation("Number of Locomotive Brakeshoes set to default value of {0}", NumberCarBrakeShoes);
638638
}
@@ -641,7 +641,7 @@ public virtual void LoadFromWagFile(string wagFilePath)
641641
{
642642
NumberCarBrakeShoes = WagonNumAxles * 4; // Assume 4 brake shoes per axle
643643

644-
if (Simulator.Settings.VerboseConfigurationMessages && (BrakeShoeType == BrakeShoeTypes.Cast_Iron || BrakeShoeType == BrakeShoeTypes.High_Friction_Composite))
644+
if (Simulator.Settings.VerboseConfigurationMessages && (BrakeShoeType != BrakeShoeTypes.User_Defined || BrakeShoeType != BrakeShoeTypes.Unknown))
645645
{
646646
Trace.TraceInformation("Number of Wagon Brakeshoes set to default value of {0}", NumberCarBrakeShoes);
647647
}

Source/Orts.Simulation/Simulation/RollingStocks/TrainCar.cs

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -684,7 +684,9 @@ public enum WagonSpecialTypes
684684
public enum BrakeShoeTypes
685685
{
686686
Unknown,
687-
Cast_Iron,
687+
Cast_Iron_P6,
688+
Cast_Iron_P10,
689+
Disc_Pads,
688690
High_Friction_Composite,
689691
User_Defined,
690692
}
@@ -3236,17 +3238,26 @@ public virtual float GetBrakeShoeFrictionFactor()
32363238
// Formula 9 and 10 from the paper "Study of the influence of the brake shoe temperature and wheel tread on braking effectiveness" by P Ivanov1, A Khudonogov1,
32373239
// E Dulskiy1, N Manuilov1, A Khamnaeva1, A Korsun1, S Treskin is used for the Cast Iron and Hi Friction Composite brake shoe friction curves.
32383240
// https://iopscience.iop.org/article/10.1088/1742-6596/1614/1/012086/pdf
3241+
//
3242+
// These formulas are based upon the work of Karwatzki, which is described further in "Fahrdynamik des Schienenverkehrs" by Dietrich Wende 2003.
3243+
// Karwatzki developed a formula for brakeshoe friction that used 5 constant values k1, ..... , k5.
3244+
// Wende present a number of different brake shoes k values, two sets of which line up with the UIC values above.
32393245

3240-
float NewtonsTokNewtons = 0.001f;
3241-
float brakeShoeForcekN = (NewtonsTokNewtons * BrakeShoeForceN) / NumberCarBrakeShoes;
3242-
3243-
if (BrakeShoeType == BrakeShoeTypes.Cast_Iron)
3246+
if (BrakeShoeType == BrakeShoeTypes.Cast_Iron_P6)
32443247
{
3245-
frictionfraction = 0.6f * ((1.6f * brakeShoeForcekN + 100.0f) / (8.0f * brakeShoeForcekN + 100.0f)) * ((MpS.ToKpH(AbsSpeedMpS) + 100.0f) / (5.0f * MpS.ToKpH(AbsSpeedMpS) + 100.0f));
3248+
frictionfraction = KarwatzkiBrakeShoeFriction(0.024f, 62.5f, 12.5f, 100, 20);
3249+
}
3250+
else if (BrakeShoeType == BrakeShoeTypes.Cast_Iron_P10)
3251+
{
3252+
frictionfraction = KarwatzkiBrakeShoeFriction(0.05f, 62.5f, 31.25f, 100, 20);
32463253
}
32473254
else if (BrakeShoeType == BrakeShoeTypes.High_Friction_Composite)
32483255
{
3249-
frictionfraction = 0.44f * ((0.1f * brakeShoeForcekN + 20.0f) / (0.4f * brakeShoeForcekN + 20.0f)) * ((MpS.ToKpH(AbsSpeedMpS) + 150.0f) / (2.0f * MpS.ToKpH(AbsSpeedMpS) + 150.0f));
3256+
frictionfraction = KarwatzkiBrakeShoeFriction(0.055f, 200, 50, 150, 75);
3257+
}
3258+
else if (BrakeShoeType == BrakeShoeTypes.Disc_Pads)
3259+
{
3260+
frictionfraction = KarwatzkiBrakeShoeFriction(0.385f, -24.5f, -27.2f, 39.5f, 33);
32503261
}
32513262
else if (BrakeShoeType == BrakeShoeTypes.User_Defined)
32523263
{
@@ -3303,17 +3314,26 @@ public virtual float GetBrakeShoeFrictionCoefficientHuD()
33033314
// Formula 9 and 10 from the paper "Study of the influence of the brake shoe temperature and wheel tread on braking effectiveness" by P Ivanov1, A Khudonogov1,
33043315
// E Dulskiy1, N Manuilov1, A Khamnaeva1, A Korsun1, S Treskin is used for the Cast Iron and Hi Friction Composite brake shoe friction curves.
33053316
// https://iopscience.iop.org/article/10.1088/1742-6596/1614/1/012086/pdf
3317+
//
3318+
// These formulas are based upon the work of Karwatzki, which is described further in "Fahrdynamik des Schienenverkehrs" by Dietrich Wende 2003.
3319+
// Karwatzki developed a formula for brakeshoe friction that used 5 constant values k1, ..... , k5.
3320+
// Wende present a number of different brake shoes k values, two sets of which line up with the UIC values above.
33063321

3307-
float NewtonsTokNewtons = 0.001f;
3308-
float brakeShoeForcekN = NewtonsTokNewtons * BrakeShoeForceN / NumberCarBrakeShoes;
3309-
3310-
if (BrakeShoeType == BrakeShoeTypes.Cast_Iron)
3322+
if (BrakeShoeType == BrakeShoeTypes.Cast_Iron_P6)
33113323
{
3312-
frictionfraction = 0.6f * ((1.6f * brakeShoeForcekN + 100.0f) / (8.0f * brakeShoeForcekN + 100.0f)) * ((MpS.ToKpH(AbsSpeedMpS) + 100.0f) / (5.0f * MpS.ToKpH(AbsSpeedMpS) + 100.0f));
3324+
frictionfraction = KarwatzkiBrakeShoeFriction (0.024f, 62.5f, 12.5f, 100, 20);
3325+
}
3326+
else if (BrakeShoeType == BrakeShoeTypes.Cast_Iron_P10)
3327+
{
3328+
frictionfraction = KarwatzkiBrakeShoeFriction(0.05f, 62.5f, 31.25f, 100, 20);
33133329
}
33143330
else if (BrakeShoeType == BrakeShoeTypes.High_Friction_Composite)
33153331
{
3316-
frictionfraction = 0.44f * ((0.1f * brakeShoeForcekN + 20.0f) / (0.4f * brakeShoeForcekN + 20.0f)) * ((MpS.ToKpH(AbsSpeedMpS) + 150.0f) / (2.0f * MpS.ToKpH(AbsSpeedMpS) + 150.0f));
3332+
frictionfraction = KarwatzkiBrakeShoeFriction(0.055f, 200, 50f, 150, 75);
3333+
}
3334+
else if (BrakeShoeType == BrakeShoeTypes.Disc_Pads)
3335+
{
3336+
frictionfraction = KarwatzkiBrakeShoeFriction(0.385f, -24.5f, -27.2f, 39.5f, 33);
33173337
}
33183338
else if (BrakeShoeType == BrakeShoeTypes.User_Defined)
33193339
{
@@ -3340,6 +3360,16 @@ public virtual float GetBrakeShoeFrictionCoefficientHuD()
33403360
}
33413361
}
33423362

3363+
public float KarwatzkiBrakeShoeFriction ( float k1, float k2, float k3, float k4, float k5 )
3364+
{
3365+
var friction = 0.0f;
3366+
float NewtonsTokNewtons = 0.001f;
3367+
float brakeShoeForcekN = NewtonsTokNewtons * BrakeShoeForceN / NumberCarBrakeShoes;
3368+
friction = k1 * ((brakeShoeForcekN + k2) / (brakeShoeForcekN + k3)) * ((MpS.ToKpH(AbsSpeedMpS) + k4) / (MpS.ToKpH(AbsSpeedMpS) + k5));
3369+
3370+
return friction;
3371+
}
3372+
33433373
public virtual void InitializeCarHeatingVariables()
33443374
{
33453375
MSTSLocomotive mstsLocomotive = Train.LeadLocomotive as MSTSLocomotive;

0 commit comments

Comments
 (0)