Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 950bf02

Browse files
committed
Automatic merge of T1.5.1-174-gd2e682132 and 13 pull requests
- Pull request #706 at 91bcfa2: Extended door functionality - Pull request #722 at fb9079e: Fix Windows Forms deprecations in ActivityEditor - Pull request #732 at dc256cd: Improvements for air brakes - Pull request #735 at b9a0ea3: Added new parameter for battery switch - Pull request #746 at f5566d7: Website release 1.5.1 - Pull request #753 at ab8fe32: Extends CabControls for user input - Pull request #754 at 70a1325: Container weights: https://blueprints.launchpad.net/or/+spec/container-weights - Pull request #758 at a9e9512: Steam wheel slip#1 - Pull request #760 at 113dd63: Updated EditorConfig with .NET and StyleCop analyzer configuration - Pull request #761 at f6a3aca: fix: Allow 100% cloud-free skys by making 0% overcast = 0% clouds - Pull request #763 at 12e250d: build: Remove use of SolutionDir which is not supported everywhere - Pull request #764 at 5f9a01b: fix: Improve sky dome distortion causing bug #1471416 - Pull request #765 at 083467b: Bug fix for https://bugs.launchpad.net/or/+bug/2002183 OK to proceed sound played wrongly
15 parents f3d81e6 + d2e6821 + 91bcfa2 + fb9079e + dc256cd + b9a0ea3 + f5566d7 + ab8fe32 + 70a1325 + a9e9512 + 113dd63 + f6a3aca + 12e250d + 5f9a01b + 083467b commit 950bf02

File tree

4 files changed

+65
-35
lines changed

4 files changed

+65
-35
lines changed

Source/Orts.Simulation/Common/Scripting/BrakeController.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,8 @@ public enum ControllerState
359359
SMEFullServ, // TrainBrakesControllerSMEFullServiceStart
360360
SMESelfLap, // TrainBrakesControllerSMEHoldStart
361361
SMEReleaseStart, // TrainBrakesControllerSMEReleaseStart
362+
HoldEngine, // TrainBrakesControllerHoldEngineStart
363+
BailOff, // EngineBrakesControllerBailOffStart
362364
};
363365

364366
public static class ControllerStateDictionary
@@ -405,7 +407,9 @@ public static class ControllerStateDictionary
405407
{ControllerState.SMEOnly, Catalog.GetString("SME Service")},
406408
{ControllerState.SMEFullServ, Catalog.GetString("SME Full Service")},
407409
{ControllerState.SMESelfLap, Catalog.GetString("SME Self Lap")},
408-
{ControllerState.SMEReleaseStart, Catalog.GetString("SME Release Start")}
410+
{ControllerState.SMEReleaseStart, Catalog.GetString("SME Release Start")},
411+
{ControllerState.HoldEngine, Catalog.GetString("Hold Engine")},
412+
{ControllerState.BailOff, Catalog.GetString("Bail Off")}
409413
};
410414
}
411415
}

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

Lines changed: 56 additions & 34 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

@@ -525,15 +533,11 @@ public override void Update(float elapsedClockSeconds)
525533
var engineBrakeStatus = loco.EngineBrakeController.Notches[loco.EngineBrakeController.CurrentNotch].Type;
526534
var trainBrakeStatus = loco.TrainBrakeController.Notches[loco.TrainBrakeController.CurrentNotch].Type;
527535
// BailOff
528-
if (engineBrakeStatus == ControllerState.Release)
536+
if (engineBrakeStatus == ControllerState.BailOff)
529537
{
530538
AutoCylPressurePSI -= MaxReleaseRatePSIpS * elapsedClockSeconds;
531539
if (AutoCylPressurePSI < 0) AutoCylPressurePSI = 0;
532540
}
533-
// Independent air brake application
534-
if (AutoCylPressurePSI < BrakeLine3PressurePSI)
535-
AutoCylPressurePSI = BrakeLine3PressurePSI;
536-
BrakeLine3PressurePSI = AutoCylPressurePSI;
537541
// Emergency application
538542
if (trainBrakeStatus == ControllerState.Emergency)
539543
{
@@ -543,43 +547,61 @@ public override void Update(float elapsedClockSeconds)
543547
AutoCylPressurePSI += dp;
544548
}
545549
// Release pipe open
546-
HoldingValve = engineBrakeStatus == ControllerState.Running && trainBrakeStatus == ControllerState.Release ? ValveState.Release : ValveState.Lap;
550+
HoldingValve = engineBrakeStatus == ControllerState.Release && trainBrakeStatus == ControllerState.Release ? ValveState.Release : ValveState.Lap;
551+
552+
// Independent air brake equalization
553+
if (AutoCylPressurePSI < loco.Train.BrakeLine3PressurePSI)
554+
AutoCylPressurePSI = loco.Train.BrakeLine3PressurePSI;
555+
else
556+
loco.Train.BrakeLine3PressurePSI = AutoCylPressurePSI;
557+
547558
// Equalization between application chamber and brake cylinders
548559
// TODO: Drain air from main reservoir
549560
CylPressurePSI = AutoCylPressurePSI;
550561
}
551562
else
552563
{
553-
bool bailoff = false;
554-
555564
if (Car is MSTSLocomotive loco && loco.EngineType != TrainCar.EngineTypes.Control) // TODO - Control cars ned to be linked to power suppy requirements.
556565
{
566+
bool isolateAutoBrake = false;
557567
// if (Car is MSTSLocomotive loco && loco.LocomotivePowerSupply.MainPowerSupplyOn)
558568
if (loco.LocomotivePowerSupply.MainPowerSupplyOn)
559569
{
560-
if (loco.Train.LeadLocomotiveIndex >= 0 && ((MSTSLocomotive)loco.Train.Cars[loco.Train.LeadLocomotiveIndex]).BailOff)
561-
{
562-
bailoff = true;
563-
CylPressurePSI -= MaxReleaseRatePSIpS * elapsedClockSeconds;
564-
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+
}
565587
}
566-
else if (loco.DynamicBrakeAutoBailOff && loco.DynamicBrakePercent > 0 && Car.MaxBrakeForceN > 0)
588+
if (loco.DynamicBrakeAutoBailOff && loco.DynamicBrakePercent > 0 && Car.MaxBrakeForceN > 0)
567589
{
568-
bailoff = true;
569-
var requiredBrakeForce = Math.Min(AutoCylPressurePSI / MaxCylPressurePSI, 1) * Car.MaxBrakeForceN;
570-
var airBrakeForce = requiredBrakeForce - loco.DynamicBrakeForceN;
571-
var requiredCylPressure = Math.Max(Math.Min(airBrakeForce / Car.MaxBrakeForceN * MaxCylPressurePSI, AutoCylPressurePSI), 0);
572-
if (requiredCylPressure > CylPressurePSI)
573-
CylPressurePSI = Math.Min(requiredCylPressure, CylPressurePSI + MaxApplicationRatePSIpS * elapsedClockSeconds);
574-
if (requiredCylPressure < CylPressurePSI)
575-
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;
576594
}
577595
}
596+
if (isolateAutoBrake)
597+
CylPressurePSI = BrakeLine3PressurePSI;
598+
else
599+
CylPressurePSI = Math.Max(AutoCylPressurePSI, BrakeLine3PressurePSI);
600+
}
601+
else
602+
{
603+
CylPressurePSI = Math.Max(AutoCylPressurePSI, BrakeLine3PressurePSI);
578604
}
579-
if (!bailoff)
580-
CylPressurePSI = AutoCylPressurePSI;
581-
if (CylPressurePSI < BrakeLine3PressurePSI) // Brake Cylinder pressure will be the greater of engine brake pressure or train brake pressure
582-
CylPressurePSI = BrakeLine3PressurePSI;
583605
}
584606

585607
// 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

Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/Controllers/MSTSBrakeController.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ public override void UpdatePressure(ref float pressureBar, float elapsedClockSec
128128
switch (type)
129129
{
130130
case ControllerState.Release:
131+
case ControllerState.HoldEngine:
131132
IncreasePressure(ref pressureBar, Math.Min(MaxPressureBar(), MainReservoirPressureBar()), ReleaseRateBarpS(), elapsedClockSeconds);
132133
DecreasePressure(ref pressureBar, MaxPressureBar(), OverchargeEliminationRateBarpS(), elapsedClockSeconds);
133134
epState = 0;
@@ -256,6 +257,7 @@ public override void UpdateEngineBrakePressure(ref float pressureBar, float elap
256257
case ControllerState.Lap:
257258
break;
258259
case ControllerState.FullQuickRelease:
260+
case ControllerState.BailOff:
259261
pressureBar -= x * QuickReleaseRateBarpS() * elapsedClockSeconds;
260262
break;
261263
case ControllerState.Release:

Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/Controllers/MSTSNotchController.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ public MSTSNotch(float v, int s, string type, STFReader stf)
7979
case "brakenotchstart": Type = ControllerState.BrakeNotch; break;
8080
case "overchargestart": Type = ControllerState.Overcharge; break;
8181
case "slowservicestart": Type = ControllerState.SlowService; break;
82+
case "holdenginestart": Type = ControllerState.HoldEngine; break;
83+
case "bailoffstart": Type = ControllerState.BailOff; break;
8284
default:
8385
STFException.TraceInformation(stf, "Skipped unknown notch type " + type);
8486
break;

0 commit comments

Comments
 (0)