Skip to content

Commit 9d79d0f

Browse files
committed
Fix condition to activate blending
1 parent 71283ab commit 9d79d0f

File tree

1 file changed

+34
-37
lines changed
  • Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/Brakes/MSTS

1 file changed

+34
-37
lines changed

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

Lines changed: 34 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1768,56 +1768,53 @@ public override void Update(float elapsedClockSeconds)
17681768
}
17691769
}
17701770
}
1771-
if (loco.LocomotivePowerSupply.DynamicBrakeAvailable)
1771+
if (loco.LocomotivePowerSupply.DynamicBrakeAvailable && loco.MaxDynamicBrakePercent > 0 && loco.DynamicBrakePercent > 0 && Car.FrictionBrakeBlendingMaxForceN > 0)
17721772
{
1773-
if (loco.DynamicBrakePercent > 0 && Car.FrictionBrakeBlendingMaxForceN > 0)
1773+
if (loco.DynamicBrakePartialBailOff)
17741774
{
1775-
if (loco.DynamicBrakePartialBailOff)
1775+
var requiredBrakeForceN = (AutoCylPressurePSI * RelayValveRatio - loco.DynamicBrakeBlendingRetainedPressurePSI)
1776+
/ (ReferencePressurePSI - loco.DynamicBrakeBlendingRetainedPressurePSI) * Car.FrictionBrakeBlendingMaxForceN;
1777+
var localBrakeForceN = loco.DynamicBrakeForceN + (CylPressurePSI - loco.DynamicBrakeBlendingRetainedPressurePSI)
1778+
/ (ReferencePressurePSI - loco.DynamicBrakeBlendingRetainedPressurePSI) * Car.FrictionBrakeBlendingMaxForceN;
1779+
if (localBrakeForceN > requiredBrakeForceN - 0.15f * Car.FrictionBrakeBlendingMaxForceN)
17761780
{
1777-
var requiredBrakeForceN = (AutoCylPressurePSI * RelayValveRatio - loco.DynamicBrakeBlendingRetainedPressurePSI)
1778-
/ (ReferencePressurePSI - loco.DynamicBrakeBlendingRetainedPressurePSI) * Car.FrictionBrakeBlendingMaxForceN;
1779-
var localBrakeForceN = loco.DynamicBrakeForceN + (CylPressurePSI - loco.DynamicBrakeBlendingRetainedPressurePSI)
1780-
/ (ReferencePressurePSI - loco.DynamicBrakeBlendingRetainedPressurePSI) * Car.FrictionBrakeBlendingMaxForceN;
1781-
if (localBrakeForceN > requiredBrakeForceN - 0.15f * Car.FrictionBrakeBlendingMaxForceN)
1781+
demandedPressurePSI = MathHelper.Clamp((requiredBrakeForceN - loco.DynamicBrakeForceN) / Car.FrictionBrakeBlendingMaxForceN *
1782+
(ReferencePressurePSI - loco.DynamicBrakeBlendingRetainedPressurePSI) + loco.DynamicBrakeBlendingRetainedPressurePSI,
1783+
loco.DynamicBrakeBlendingRetainedPressurePSI, MaxCylPressurePSI);
1784+
if (demandedPressurePSI > CylPressurePSI && demandedPressurePSI < CylPressurePSI + 4) // Allow some margin for unnecessary air brake application
17821785
{
1783-
demandedPressurePSI = MathHelper.Clamp((requiredBrakeForceN - loco.DynamicBrakeForceN) / Car.FrictionBrakeBlendingMaxForceN *
1784-
(ReferencePressurePSI - loco.DynamicBrakeBlendingRetainedPressurePSI) + loco.DynamicBrakeBlendingRetainedPressurePSI,
1785-
loco.DynamicBrakeBlendingRetainedPressurePSI, MaxCylPressurePSI);
1786-
if (demandedPressurePSI > CylPressurePSI && demandedPressurePSI < CylPressurePSI + 4) // Allow some margin for unnecessary air brake application
1787-
{
1788-
demandedPressurePSI = CylPressurePSI;
1789-
}
1790-
demandedPressurePSI /= RelayValveRatio;
1791-
1792-
if (demandedPressurePSI > AutoCylPressurePSI)
1793-
demandedPressurePSI = AutoCylPressurePSI;
1786+
demandedPressurePSI = CylPressurePSI;
17941787
}
1788+
demandedPressurePSI /= RelayValveRatio;
1789+
1790+
if (demandedPressurePSI > AutoCylPressurePSI)
1791+
demandedPressurePSI = AutoCylPressurePSI;
1792+
}
1793+
}
1794+
else if (loco.DynamicBrakeAutoBailOff)
1795+
{
1796+
if (loco.DynamicBrakeForceCurves == null)
1797+
{
1798+
demandedPressurePSI = 0;
17951799
}
1796-
else if (loco.DynamicBrakeAutoBailOff)
1800+
else
17971801
{
1798-
if (loco.DynamicBrakeForceCurves == null)
1802+
var dynforce = loco.DynamicBrakeForceCurves.Get(1.0f, loco.AbsTractionSpeedMpS);
1803+
if ((loco.MaxDynamicBrakeForceN == 0 && dynforce > 0) || dynforce > loco.MaxDynamicBrakeForceN * 0.6)
17991804
{
18001805
demandedPressurePSI = 0;
18011806
}
1802-
else
1803-
{
1804-
var dynforce = loco.DynamicBrakeForceCurves.Get(1.0f, loco.AbsTractionSpeedMpS);
1805-
if ((loco.MaxDynamicBrakeForceN == 0 && dynforce > 0) || dynforce > loco.MaxDynamicBrakeForceN * 0.6)
1806-
{
1807-
demandedPressurePSI = 0;
1808-
}
1809-
}
1810-
}
1811-
if (loco.DynamicBrakeEngineBrakeReplacement && loco.RemoteControlGroup == 0 && loco.AbsTractionSpeedMpS < loco.DynamicBrakeEngineBrakeReplacementSpeed && loco.Train.LeadLocomotive is MSTSLocomotive lead && lead.TrainBrakeController.TrainDynamicBrakeIntervention > 0)
1812-
{
1813-
var requiredBrakeForceN = loco.MaxDynamicBrakeForceN * lead.TrainBrakeController.TrainDynamicBrakeIntervention;
1814-
var reverseBlendingPressurePSI = Math.Min(Math.Max((requiredBrakeForceN - loco.DynamicBrakeForceN) / Car.FrictionBrakeBlendingMaxForceN * ReferencePressurePSI
1815-
+ BrakeCylinderSpringPressurePSI, 0), MaxCylPressurePSI);
1816-
reverseBlendingPressurePSI /= RelayValveRatio;
1817-
if (demandedPressurePSI < reverseBlendingPressurePSI) demandedPressurePSI = reverseBlendingPressurePSI;
18181807
}
18191808
}
18201809
}
1810+
if (loco.DynamicBrakeEngineBrakeReplacement && loco.RemoteControlGroup == 0 && loco.AbsTractionSpeedMpS < loco.DynamicBrakeEngineBrakeReplacementSpeed && loco.Train.LeadLocomotive is MSTSLocomotive lead && lead.TrainBrakeController.TrainDynamicBrakeIntervention > 0)
1811+
{
1812+
var requiredBrakeForceN = loco.MaxDynamicBrakeForceN * lead.TrainBrakeController.TrainDynamicBrakeIntervention;
1813+
var reverseBlendingPressurePSI = Math.Min(Math.Max((requiredBrakeForceN - loco.DynamicBrakeForceN) / Car.FrictionBrakeBlendingMaxForceN * ReferencePressurePSI
1814+
+ BrakeCylinderSpringPressurePSI, 0), MaxCylPressurePSI);
1815+
reverseBlendingPressurePSI /= RelayValveRatio;
1816+
if (demandedPressurePSI < reverseBlendingPressurePSI) demandedPressurePSI = reverseBlendingPressurePSI;
1817+
}
18211818
}
18221819
}
18231820
if (RelayValveFitted)

0 commit comments

Comments
 (0)