File tree Expand file tree Collapse file tree 1 file changed +21
-5
lines changed
Source/Orts.Simulation/Simulation/RollingStocks Expand file tree Collapse file tree 1 file changed +21
-5
lines changed Original file line number Diff line number Diff line change @@ -2742,11 +2742,27 @@ protected virtual void UpdateTractiveForce(float elapsedClockSeconds)
2742
2742
// Simple slip control
2743
2743
// Motive force is reduced to the maximum adhesive force
2744
2744
// In wheelslip situations, motive force is set to zero
2745
- float adhesionLimit ;
2746
- if ( axle . SlipPercent > 115 ) adhesionLimit = 0 ;
2747
- else if ( axle . SlipPercent > 95 ) adhesionLimit = axle . MaximumWheelAdhesion * ( 115 - axle . SlipSpeedPercent ) / 20 ;
2748
- else adhesionLimit = axle . MaximumWheelAdhesion ;
2749
- axle . DriveForceN = Math . Sign ( axle . DriveForceN ) * Math . Min ( adhesionLimit * axle . AxleWeightN , Math . Abs ( axle . DriveForceN ) ) ;
2745
+ float absForceN = Math . Min ( Math . Abs ( axle . DriveForceN ) , axle . MaximumWheelAdhesion * axle . AxleWeightN ) ;
2746
+ float newForceN ;
2747
+ if ( axle . HuDIsWheelSlip )
2748
+ {
2749
+ newForceN = 0 ;
2750
+ }
2751
+ else if ( ! axle . HuDIsWheelSlipWarning )
2752
+ {
2753
+ // If well below slip threshold, restore full power in 10 seconds
2754
+ newForceN = Math . Min ( Math . Abs ( prevForceN ) + absForceN * elapsedClockSeconds / 10 , absForceN ) ;
2755
+ }
2756
+ else if ( axle . IsWheelSlip )
2757
+ {
2758
+ newForceN = Math . Max ( Math . Abs ( prevForceN ) - absForceN * elapsedClockSeconds / 3 , 0 ) ;
2759
+ }
2760
+ else
2761
+ {
2762
+ newForceN = absForceN ;
2763
+ }
2764
+ if ( axle . DriveForceN > 0 && prevForceN >= 0 ) axle . DriveForceN = newForceN ;
2765
+ else if ( axle . DriveForceN < 0 && prevForceN <= 0 ) axle . DriveForceN = - newForceN ;
2750
2766
}
2751
2767
else if ( SlipControlSystem == SlipControlType . CutPower )
2752
2768
{
You can’t perform that action at this time.
0 commit comments