Skip to content

Commit b8c97ee

Browse files
committed
Fix regression for auto bail off
1 parent d9d8727 commit b8c97ee

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

Source/Documentation/Manual/physics.rst

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2924,11 +2924,10 @@ the following parameters will adjust the behaviour of air brakes:
29242924

29252925
- ``Engine(DynamicBrakeHasAutoBailOff`` -- Set to 1 if brake cylinders are
29262926
emptied while dynamic brake is active
2927-
- ``Engine(ORTSDynamicBrakesHasPartialBailOff`` -- Only used if the parameter
2928-
above is set to 1. When ORTSDynamicBrakesHasPartialBailOff is set to 0 (default),
2929-
air brakes will be fully released when dynamic brake is providing at least the 85%
2930-
of the total train brake demand. When set to 1, only part of the air from the brake
2931-
cylinder is released, so the total air+dynamic brake force equals the total brake demand.
2927+
- ``Engine(ORTSDynamicBrakesHasPartialBailOff`` -- If this parameter is set to 1,
2928+
air brakes are released while dynamic brakes satisfy the train brake demand.
2929+
If dynamic braking is not sufficient, air brakes will be partially applied
2930+
so the combination air+dynamic provides the required brake demand.
29322931

29332932

29342933
Native Open Rails Braking Parameters

Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/Brakes/MSTS/AirSinglePipe.cs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -587,15 +587,15 @@ public override void Update(float elapsedClockSeconds)
587587
}
588588
}
589589
}
590-
if (loco.DynamicBrakeAutoBailOff && loco.DynamicBrakePercent > 0 && Car.MaxBrakeForceN > 0)
590+
if (loco.DynamicBrakePercent > 0 && Car.MaxBrakeForceN > 0)
591591
{
592-
var requiredBrakeForceN = Math.Min(AutoCylPressurePSI / MaxCylPressurePSI, 1) * Car.MaxBrakeForceN;
593-
var localBrakeForceN = loco.DynamicBrakeForceN + Math.Min(CylPressurePSI / MaxCylPressurePSI, 1) * Car.MaxBrakeForceN;
594-
if (localBrakeForceN > requiredBrakeForceN - 0.15f * Car.MaxBrakeForceN)
592+
if (loco.DynamicBrakePartialBailOff)
595593
{
596-
isolateAutoBrake = true;
597-
if (loco.DynamicBrakePartialBailOff)
594+
var requiredBrakeForceN = Math.Min(AutoCylPressurePSI / MaxCylPressurePSI, 1) * Car.MaxBrakeForceN;
595+
var localBrakeForceN = loco.DynamicBrakeForceN + Math.Min(CylPressurePSI / MaxCylPressurePSI, 1) * Car.MaxBrakeForceN;
596+
if (localBrakeForceN > requiredBrakeForceN - 0.15f * Car.MaxBrakeForceN)
598597
{
598+
isolateAutoBrake = true;
599599
var compensatedPressurePSI = Math.Min(Math.Max((requiredBrakeForceN - loco.DynamicBrakeForceN)/Car.MaxBrakeForceN*MaxCylPressurePSI, 0), MaxCylPressurePSI);
600600
if (CylPressurePSI < BrakeLine3PressurePSI)
601601
CylPressurePSI = BrakeLine3PressurePSI;
@@ -614,10 +614,23 @@ public override void Update(float elapsedClockSeconds)
614614
CylPressurePSI += dp;
615615
}
616616
}
617-
else
617+
}
618+
else if (loco.DynamicBrakeAutoBailOff)
619+
{
620+
if (loco.DynamicBrakeForceCurves == null)
618621
{
622+
isolateAutoBrake = true;
619623
CylPressurePSI = BrakeLine3PressurePSI;
620624
}
625+
else
626+
{
627+
var dynforce = loco.DynamicBrakeForceCurves.Get(1.0f, loco.AbsSpeedMpS);
628+
if ((loco.MaxDynamicBrakeForceN == 0 && dynforce > 0) || dynforce > loco.MaxDynamicBrakeForceN * 0.6)
629+
{
630+
isolateAutoBrake = true;
631+
CylPressurePSI = BrakeLine3PressurePSI;
632+
}
633+
}
621634
}
622635
}
623636
}

0 commit comments

Comments
 (0)