@@ -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