Skip to content

Commit dc256cd

Browse files
committed
Changes to bailoff
1 parent b403a51 commit dc256cd

File tree

1 file changed

+47
-28
lines changed
  • Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/Brakes/MSTS

1 file changed

+47
-28
lines changed

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

Lines changed: 47 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,8 @@ public override void LocoInitializeMoving() // starting conditions when starting
338338

339339
public void UpdateTripleValveState(float elapsedClockSeconds)
340340
{
341-
if ((Car as MSTSWagon).BrakeValve == MSTSWagon.BrakeValveType.Distributor)
341+
var valveType = (Car as MSTSWagon).BrakeValve;
342+
if (valveType == MSTSWagon.BrakeValveType.Distributor)
342343
{
343344
float targetPressurePSI = (ControlResPressurePSI - BrakeLine1PressurePSI) * AuxCylVolumeRatio;
344345
if (targetPressurePSI > AutoCylPressurePSI && EmergencyValveActuationRatePSIpS > 0 && (prevBrakePipePressurePSI - BrakeLine1PressurePSI) > Math.Max(elapsedClockSeconds, 0.0001f) * EmergencyValveActuationRatePSIpS)
@@ -351,7 +352,7 @@ public void UpdateTripleValveState(float elapsedClockSeconds)
351352
else
352353
TripleValveState = ValveState.Lap;
353354
}
354-
else
355+
else if (valveType == MSTSWagon.BrakeValveType.TripleValve || valveType == MSTSWagon.BrakeValveType.Distributor)
355356
{
356357
if (BrakeLine1PressurePSI < AuxResPressurePSI - 1 && EmergencyValveActuationRatePSIpS > 0 && (prevBrakePipePressurePSI - BrakeLine1PressurePSI) > Math.Max(elapsedClockSeconds, 0.0001f) * EmergencyValveActuationRatePSIpS)
357358
TripleValveState = ValveState.Emergency;
@@ -364,6 +365,10 @@ public void UpdateTripleValveState(float elapsedClockSeconds)
364365
else if (TripleValveState == ValveState.Apply && BrakeLine1PressurePSI >= AuxResPressurePSI)
365366
TripleValveState = ValveState.Lap;
366367
}
368+
else
369+
{
370+
TripleValveState = ValveState.Release;
371+
}
367372
prevBrakePipePressurePSI = BrakeLine1PressurePSI;
368373
}
369374

@@ -423,13 +428,16 @@ public override void Update(float elapsedClockSeconds)
423428
AuxResPressurePSI -= dp / AuxCylVolumeRatio;
424429
AutoCylPressurePSI += dp;
425430

426-
if (TripleValveState == ValveState.Emergency && (Car as MSTSWagon).EmergencyReservoirPresent)
431+
if (TripleValveState == ValveState.Emergency)
427432
{
428-
dp = elapsedClockSeconds * MaxApplicationRatePSIpS;
429-
if (EmergResPressurePSI - dp < AuxResPressurePSI + dp * EmergAuxVolumeRatio)
430-
dp = (EmergResPressurePSI - AuxResPressurePSI) / (1 + EmergAuxVolumeRatio);
431-
EmergResPressurePSI -= dp;
432-
AuxResPressurePSI += dp * EmergAuxVolumeRatio;
433+
if ((Car as MSTSWagon).EmergencyReservoirPresent)
434+
{
435+
dp = elapsedClockSeconds * MaxApplicationRatePSIpS;
436+
if (EmergResPressurePSI - dp < AuxResPressurePSI + dp * EmergAuxVolumeRatio)
437+
dp = (EmergResPressurePSI - AuxResPressurePSI) / (1 + EmergAuxVolumeRatio);
438+
EmergResPressurePSI -= dp;
439+
AuxResPressurePSI += dp * EmergAuxVolumeRatio;
440+
}
433441
}
434442
}
435443

@@ -553,36 +561,47 @@ public override void Update(float elapsedClockSeconds)
553561
}
554562
else
555563
{
556-
bool bailoff = false;
557-
558564
if (Car is MSTSLocomotive loco && loco.EngineType != TrainCar.EngineTypes.Control) // TODO - Control cars ned to be linked to power suppy requirements.
559565
{
566+
bool isolateAutoBrake = false;
560567
// if (Car is MSTSLocomotive loco && loco.LocomotivePowerSupply.MainPowerSupplyOn)
561568
if (loco.LocomotivePowerSupply.MainPowerSupplyOn)
562569
{
563-
if (loco.Train.LeadLocomotiveIndex >= 0 && ((MSTSLocomotive)loco.Train.Cars[loco.Train.LeadLocomotiveIndex]).BailOff)
564-
{
565-
bailoff = true;
566-
CylPressurePSI -= MaxReleaseRatePSIpS * elapsedClockSeconds;
567-
if (CylPressurePSI < 0) CylPressurePSI = 0;
570+
if (loco.Train.LeadLocomotiveIndex >= 0)
571+
{
572+
var lead = loco.Train.Cars[loco.Train.LeadLocomotiveIndex] as MSTSLocomotive;
573+
if (lead != null && (lead.BailOff ||
574+
(lead.EngineBrakeController != null && lead.EngineBrakeController.CurrentNotch >= 0 && lead.EngineBrakeController.Notches[lead.EngineBrakeController.CurrentNotch].Type == ControllerState.BailOff)))
575+
{
576+
if (loco.BrakeValve == MSTSWagon.BrakeValveType.Distributor)
577+
{
578+
ControlResPressurePSI = 0;
579+
}
580+
else
581+
{
582+
AutoCylPressurePSI -= MaxReleaseRatePSIpS * elapsedClockSeconds;
583+
if (AutoCylPressurePSI < 0)
584+
AutoCylPressurePSI = 0;
585+
}
586+
}
568587
}
569-
else if (loco.DynamicBrakeAutoBailOff && loco.DynamicBrakePercent > 0 && Car.MaxBrakeForceN > 0)
588+
if (loco.DynamicBrakeAutoBailOff && loco.DynamicBrakePercent > 0 && Car.MaxBrakeForceN > 0)
570589
{
571-
bailoff = true;
572-
var requiredBrakeForce = Math.Min(AutoCylPressurePSI / MaxCylPressurePSI, 1) * Car.MaxBrakeForceN;
573-
var airBrakeForce = requiredBrakeForce - loco.DynamicBrakeForceN;
574-
var requiredCylPressure = Math.Max(Math.Min(airBrakeForce / Car.MaxBrakeForceN * MaxCylPressurePSI, AutoCylPressurePSI), 0);
575-
if (requiredCylPressure > CylPressurePSI)
576-
CylPressurePSI = Math.Min(requiredCylPressure, CylPressurePSI + MaxApplicationRatePSIpS * elapsedClockSeconds);
577-
if (requiredCylPressure < CylPressurePSI)
578-
CylPressurePSI = Math.Max(requiredCylPressure, CylPressurePSI - MaxReleaseRatePSIpS * elapsedClockSeconds);
590+
var requiredBrakeForceN = Math.Min(AutoCylPressurePSI / MaxCylPressurePSI, 1) * Car.MaxBrakeForceN;
591+
var localBrakeForceN = loco.DynamicBrakeForceN + Math.Min(BrakeLine3PressurePSI / MaxCylPressurePSI, 1) * Car.MaxBrakeForceN;
592+
if (localBrakeForceN > requiredBrakeForceN * 0.85f)
593+
isolateAutoBrake = true;
579594
}
580595
}
596+
if (isolateAutoBrake)
597+
CylPressurePSI = BrakeLine3PressurePSI;
598+
else
599+
CylPressurePSI = Math.Max(AutoCylPressurePSI, BrakeLine3PressurePSI);
600+
}
601+
else
602+
{
603+
CylPressurePSI = Math.Max(AutoCylPressurePSI, BrakeLine3PressurePSI);
581604
}
582-
if (!bailoff)
583-
CylPressurePSI = AutoCylPressurePSI;
584-
if (CylPressurePSI < BrakeLine3PressurePSI) // Brake Cylinder pressure will be the greater of engine brake pressure or train brake pressure
585-
CylPressurePSI = BrakeLine3PressurePSI;
586605
}
587606

588607
// During braking wheelslide control is effected throughout the train by additional equipment on each vehicle. In the piping to each pair of brake cylinders are fitted electrically operated

0 commit comments

Comments
 (0)