AE hangs on "Charging brake line" after coupling to a standing cut (air brake deadband)

Build: 0.6.1 (Experimental, Steam build 26276590), Company save, multiplayer host, Linux / Proton. Nothing here is platform-specific.

AE hangs forever on “Charging brake line” after coupling onto a standing cut: residual brakes that can never release

What you see: an engine on waypoint orders couples onto a standing cut, then sits with the planner status “Charging brake line” and never moves. Every hose is connected, every anglecock between the cars is open, the train brake is released, and the car inspector shows Brake Line 90 on every car. But a run of cars shows Cylinder 1 or 2 and never drops to 0. Cycling an anglecock (or a brake application and release, or Bleed) frees it at once. Seen three times now, twice on a client’s train and once on the host’s, so it isn’t multiplayer-specific.

Cause, in short: two 0.5 psi deadbands stack. The engine’s brake valve stops charging the pipe 0.5 psi below its target, and a car’s triple valve only releases when the line is 0.5 psi above its auxiliary reservoir. A tiny pressure dip leaves cars lapped with 1 to 2 psi in the cylinder that the line can never get high enough to release. The AE then waits for an average cylinder under 1 psi, which never comes.


Captured state (decoded from the autosaves’ carAir, psi = byte × 120 / 255)

The cut, standing alone at 19:46 (after being cut off at 19:45:40): 21 cars, line 89.9, aux 89.9, cylinder 0 on every car. Fully charged and released.

ROD 2 (G-16) + tender coupled onto it at 19:47:23 (AE waypoint move, 1.66 mph). From then on, unchanged through the 19:51 and 19:56 autosaves:

# Car Line Aux res Cylinder Line − aux Triple valve
0 ROD 2 (loco) 89.4 89.9 72.0 (independent held by AE)
1 ROD 2T (tender) 89.4 92.7 72.0
2 IC 2983 89.4 89.4 0.0 0.0 lap
3–7 WNC 2701, GTW 25740, RFP 16380, WM 21893, NC&StL 17700 89.4 88.9 0.0 +0.47 lap
8–9 LN 56970, BO 160854 89.4 88.9 0.5 +0.47 lap
10 PRR 3310 89.4 88.9 1.4 +0.47 lap
11–12 GMO 47507, CG 51255 89.4 88.9 2.4 +0.47 lap
13–14 NYOW 3292, WNC 15960 89.4 89.4 1.9 0.0 lap
15–22 FEC 35550 … EJE 22330 (8 cars) 89.4 89.4 1.4 0.0 lap

Car inspector at the same time: IC 2983 = 90 / 0, PRR 3310 = 90 / 1, GMO 47507 and everything behind it = 90 / 2.
Live API on ROD 2: brakePipe 89.52, equalizingReservoir 90.0, trainBrake 0, locoBrake 1.0, aiPlannerStatus “Charging brake line”.
AE average over the 21 cars (TrainBrakeCars excludes the loco and the tender): 1.05 psi. The start sequence waits while it is above 1.00.

The mechanism (decompiled 0.6.1)

  1. The engine’s pipe rests anywhere from target − 0.5 to target + 0.1. AirGraphConfigurator.SetLocomotiveValves fills the brake line only while it is below brakeLineTarget − 0.5, and vents only above brakeLineTarget + 0.1. With the 90 psi feed valve (LocomotiveAirSystem.brakeFeedValvePressure) a pipe can settle at 89.5 or at 90.1 depending on how it got there. This cut had been left at 89.9; ROD 2’s pipe was at about 89.5.
  2. Coupling the two drops the cut’s line about 0.5 psi. The pipes equalize to 89.4, which is just under aux − 0.5 for cars whose aux is 89.9.
  3. That puts the triple valves into Service for a moment. AirSimKernel.UpdateTripleValve: Service if line < aux − 0.5, Release only if line > aux + 0.5, otherwise Lap. The micro-application moves 0.5–2.4 psi into the cylinders and lowers aux to 88.9–89.4, then the valves lap.
  4. The line can never get them out of lap. Releasing needs a line above aux + 0.5 = 89.4–89.9, but the engine stops filling at 89.5 (step 1). Lap holds the cylinder pressure indefinitely.
  5. The AE waits on it forever. AutoEngineer.StartMovement passes the AverageTrainBrakeCylinder() > 5f wait, sets the holding independent brake (CalculateSettingsForHolding), then loops while (AverageTrainBrakeCylinder() > 1f && LocomotiveVelocityMphAbs < 1f) with WaitingForBrakes = true, which the planner shows as “Charging brake line”. At 1.05 psi it never exits.

Why cycling an anglecock fixes it: venting drops the line well below aux, the cars make a real application (aux falls several psi), and the recharge to 89.5+ then clears aux + 0.5 easily. A normal brake application works for the same reason; only dips of about half a psi trap the cars.

Repro

  1. With engine A, charge a cut fully (pipe near 90) and leave it standing with its end anglecock closed.
  2. Bring engine B, whose pipe is resting near the bottom of its band (about 89.5; for example after charging a longer train), and couple onto the cut on AE waypoint orders so it connects the air and tries to start.
  3. When the equalized line lands just under the cars’ aux − 0.5, the cut takes a residual of 1–2 psi and the AE hangs on “Charging brake line” (it needs the average over 1 psi, so a long enough cut with a 1–2 psi residual is enough).

Possible fixes (any one would do)

  • Triple valve: release on line > aux + ε with ε well under the engine valve’s band (for example 0.05–0.1), or a release threshold measured against the feed valve’s band rather than a symmetric ±0.5.
  • Engine brake valve: fill until the line reaches the target (vent above target + 0.1 as now), so a charged pipe always sits at about 90 and can always beat aux + 0.5 on a lapped car.
  • AE: if the line is fully charged and every car’s cylinder is small but not falling, make a short service application and release (what a real engineer does), or accept a small residual instead of requiring under 1 psi.

Environment

Mods loaded (host): our own Industry Inspector, Tag Loads, Quick Turn, Log Grapple, Industry Car Order, MoW Keep Unloading, MoW Pro-Rated Wages, Realistic Densities, View Distance, Quiet Waypoints, plus a car pack (BeeMan HMR 4750). None of them touch air or brakes. The only one that touches the AE is Quiet Waypoints, which replaces AutoEngineer.Blow (the start and stop whistle) with an empty coroutine on waypoint moves; it doesn’t change any wait or brake setting, and the hang was seen before it was installed. Player.log and the save (with the stuck train in all three autosaves) available on request.

1 Like

Thanks for posting that. I’m seeing the same behaviour.

I actually came across this thing during the stable branch, a wagon had 90 brake line pressure with 2 cylinder pressure. Can’t remember if it was AE or Manual control that ended up with that, but it only happened once or twice. Yet to see it happen in 0.6.x