From ATCSMon Wiki
Jump to navigation Jump to search

Decoding an MCP - A Tutorial

DAVE HONAN - 08/15/02 REVISED 06/09/07, MINOR UPDATES 11/06/08


This is an addendum to Doug Nipper’s excellent, albeit out-dated, tutorial discussing the basics of ATCS Monitor.  Here, I’ll explain the steps that go into decoding an MCP, progressing from simple to complex examples:

  1. Common Interlocking Configurations
  2. Introducing Lock Bits and Commands
  3. Adding Complexity

The same processes described herein can be used for decoding nearly any type of track arrangement, from a simple holdout signal to a more complex interlocking containing numerous turnouts and entry/exit routes.

Visit the MnemonicQuickReference for definitions of the mnemonics discussed herein.

The screenshots contained here are from Track Builder 3 (modified in Paint Shop Pro).

  1. PartOne

Decoding Example 1: Common Interlocking Configurations

Arriving at Middle Harwood, we look around and determine that the CP contains a universal crossover:


The main track is on top, the controlled siding on the bottom, and left is north.

ATCSMon tells us that the MCP ID is 5125011159 and that K11 and K13 mnemonics are being broadcast.  Reasonable assumption dictates that since there are two crossover, each of these mnemonics is assigned to one crossover.  At this time, we can’t determine anything more than that.

After a while, the MCP acks a 2.3.3 message, and moments later transmits a 2.3.2 message that now includes a K15.  This could be any number of things -- track occupancy, a signal, a “time element” to indicate that the plant is locked, a snow melter... anything.  So, patience must reign until more information is available.

Soon, a K25 mnemonic is appended to the 2.3.2 message, and you notice a southbound headlight on the horizon.  It is possible that K25 is a track occupancy indication, but we can’t be sure yet.

As the train nears, it becomes evident that it’s on the main.  Once it hits the southbound signal, things start happening.  The K15 drops, replaced by a K23.  Once the head end of the train clears the south side of the interlocking, a K26 appears.  Although we can make some strong deductions from this information, it’s best to wait until the train clears and see what happens.

Sure enough, as the train clears the interlocking, the K25 and K23 mnemonics drop consecutively.  After a couple more minutes, the K26 also drops.  Thusly:

02-first southbound.jpg

Another southbound approaches on the siding, with a K27 mnemonic displayed.  It comes to a stop at the signal, but obviously:

03-second southbound 1.jpg

Next, a K16 appears.  After a while, it is followed by the K26 mnemonic that we’ve already seen, and therefore we now know:


The subsequent appearance of K23 and K25 mnemonics confirms this.

After a second northbound clears (reconfirming that which we just deduced), a 2.3.3 is acked, followed by a 2.3.2 message that shows only K13 and K27.  This is followed by successive 2.3.2 messages that add a K12 and a K18, respectively.  (A mnemonic for a turnout will only be displayed when it is lined properly; this prevents a movement being cleared through an improperly lined turnout.  You may sometimes observe turnout bits repeatedly turning on and off as a train passes through an interlocking; this occurs when the switch points aren’t fitting flush against the stock rails.)  The train begins to move; after passing the signal, a K24 appears simultaneous with the dropping of the K18.  The train crosses over from the siding to the main, causing the known K23 and K26 mnemonics to appear, and with the successive dropping of the K27, K24, and K23 mnemonics, we now know:

05-second southbound 2.jpg

It is a simple matter to deduce, based upon the logic that the interlocking demonstrated:

06-mnemonics identified.jpg

One word of caution:  Even on the same division, you may see several different patterns of mnemonics used.  There is usually one predominant scheme, but others will crop up and may not seem to have any logical pattern in where they are deployed.  As an example, every end-of-siding MCP between Terre Haute and South Harwood is identical, with the notable exception of North Ingle.  (Doug has noted that the North Ingle pattern also shows up a couple times north of Terre Haute.)  The general pattern, which sometimes substitutes an X (no mnemonic) for K18:

07-general north siding end.jpg

On the other hand, North Ingle initially befuddled me (especially since I was decoding it from North Harwood!), but it turned out that:

08-North Ingle.jpg

Back to our Middle Harwood example:

06-mnemonics identified.jpg

Now that we’ve identified all of the mnemonics, it becomes a simple task to name them.  (I use the bounded signal/directional approach convention; see the discussion elsewhere on the difference between this and bounded/bounded.)

K18 K17 K16 K15 K14 K13 K12 K11
K28 K27 K26 K25 K24 K23 K22 K21

Note that K21 and K22 remain unknown at this time; these could be used for any of the applications mentioned at the beginning or simply not used.

Refer to Doug’s tutorial for naming conventions and program-specific instructions.

  1. PartTwo

Decoding Example 2: Introducing Lock Bits and Decoding Commands

One common mnemonic not previously discussed herein is the lock bit (expressed as LZK).  Locks are applied when a route is lined through an interlocking; there is typically one lock per turnout/crossover in an interlocking, although I’ve observed interlockings where the locks are route-dependent (essentially, for each TK the route traverses, one lock is present).

Like anything else, lock bits can be identified by observing the sequence of mnemonics displayed from the lining of a signal through the train traversing the plant.  For an example, let’s use Glade (5076277477) on BNSF’s Lakeside Subdivision, a simple two-tracks-to-one interlocking laid out the same as North Ingle (depicted above).  This MCP utilizes the ARES protocol, thus the different message types as compared to ATCS.  Following is a screen capture from ATCSMon showing the complete sequence of transmissions for two trains moving consecutively through the plant:


From what has been previously discussed, we can determine the mnemonic table (using the convention of bounded signals and directional approaches):

K18 K17 K16 K15 K14 K13 K12 K11
K28 K27 K26 K25 K24 K23 K22 K21

From the plot you can see that after the signals were lined, three bits were broadcast (compare this to the first thing we saw at Middle Harwood, where only K15 was added after the first command was sent).  The lock bit is identified by observing what happens when the train enters the interlocking (17:21:52):  K16 drops and is replaced by K14.  From this, it is easily deduced that K16 is WGK and K14 is TK.  For confirmation that K25 is LZK, note that it continues to be broadcast through the duration of the train’s presence within the interlocking, then drops concurrently with TK (17:22:56).

The new twist is identifying the controls.  Since there is only one turnout and only two routes can be lined, only four common controls will be present, and they are readily identified by comparing what occurred in the field after each control was sent:

C18 C17 C16 C15 C14 C13 C12 C11

The snow melter would be controlled through one of the unknown bits (SMZ resulting in SMK).  It should be noted that controls can only change the state of interlocking components that the dispatcher governs:  Signals, turnouts, melters, etc.  A control does not affect occupancies, except in the case of BK-style approaches (see Ed Wells’ tutorial on BKs).

(Added 10/29/06 DaveHonan)

  1. PartThree

Decoding Example 3: Adding Complexity

Now that we've covered the basics, let's look at something a little more complex.  The purpose of this section is to demonstrate that even though an interlocking transmitting a large quantity of bits may appear intimidating, a careful analysis of how each bit relates to observed field conditions will allow you to figure out what is occurring.


This is PA Jct. (5076064451) on BNSF's Scenic Subdivision in Everett, WA.  (Note that when entering the MCP name in ATCSMon, the '.' in 'Jct.' is dropped; this is done to maintain a consistent naming style across all layouts and territories.)  Track 1 is the mainline, track 2 is the Lowell passing siding and track 3 is the south end of the Bellingham Subdivision.  At first glance, the plant seems fairly simple:  Three tracks into two with a turnout and a crossover.  However, this interlocking has some tricks up its sleeve.  Let's work our way through some moves and see what happens.


Two consecutive westbound trains are run through on the main.  Shortly after the first westbound cleared the plant (19:50:59), the dispatcher requested a signal for a following move (19:51:13).  The lock bit came up immediately (K23), but it wasn't until the first train had cleared the approach block that the signal bit went high (19:51:37).  The identity of the subsequent bits can be determined using the methods previously described, giving us:

K18 K17 K16 K15 K14 K13 K12 K11
K28 K27 K26 K25 K24 K23 K22 K21
K38 K37 K36 K35 K34 K33 K32 K31
K48 K47 K46 K45 K44 K43 K42 K41

The first unusual thing to note about PA Jct. is that the crossover does not act as a single turnout, but instead each half is controlled individually.  Since we do not yet know the specific assignment of turnouts to bits, we cannot yet assign those mnemonics, even though we do know that the normal state of the turnouts correspond to K14, K16 and K18.  (Note:  The interlocking broadcasts seven words, but only bits in the first four are used.)

After a while, the dispatcher lined up another train:


Note that when the MCP acked its previous message instead of responding to the command, the command was sent again.  Since we know all the turnouts remain normal and already know K23, it's probable that K26 is 1EGK.

While this is going on, you hear on the radio that a train is ready to leave Delta Yard on the Bellingham Sub and head through PA Jct. towards Seattle.  A couple minutes later, the dispatcher reverses one of the turnouts:


Since we know the mainline route is locked, this cannot be 1NW.  Subsequent observation of a train coming off the Bellingham Sub and running through the siding would reveal that the K16 turnout is part of the crossover, so for the sake of this tutorial we can enter mnemonics for 1NW, 2NW and 3NW, even though the actual decoding took a longer time to determine.

K18 K17 K16 K15 K14 K13 K12 K11
K28 K27 K26 K25 K24 K23 K22 K21
K38 K37 K36 K35 K34 K33 K32 K31
K48 K47 K46 K45 K44 K43 K42 K41

We can also start building the control table:

C18 C17 C16 C15 C14 C13 C12 C11
C28 C27 C26 C25 C24 C23 C22 C21

Over the next 20 minutes, the following sequence occurs:


We already know the mainline approaches and occupancy, so this verifies that K26 = 1EGK, and from the earlier radio transmissions we know that K34 = 3EAK.

Thus far, there hasn't been anything particularly complex about the behavior of the interlocking.  But now things get interesting, so I'll turn to a log from another day to ensure the complete sequence of transmissions is presented.  We start off with essentially the same situation as at the end of the last set, with a train ready to come off the Bellingham Sub at PA Jct.  Here, the dispatcher sets up the route, providing us with the reverse bits for the crossover turnouts:


Then the dispatcher lines the route:


As discussed in the last section, typically each turnout has a lock bit assigned.  You can get a rough idea of what the bits control by simply counting components (three turnouts, three lock bits, the known approach and the signal), but specific assignments can't yet be determined.

Over the course of the next 15 minutes, the train approaches and traverses the interlocking:


This crazy mess is why PA Jct. is not quite the simple interlocking it seemed at first glance.  Let's work through it all step-by-step:

  • K27 drops when K45 goes high; we thus have the signal bit and the first TK bit.
  • Since we already know K44 = 1TK, K46, K48, K47 and K43 must also be TK bits.
  • K34 is the first to drop, confirming that it's 3EAK.  K45 is next, verifying that it's the first TK after the signal.
  • Observe that K22 and K46 drop simultaneously.  Since we had previously identified K22 as a lock bit, we can now assign it to the turnout (3LZK), and make the observation that K46 is assigned to the reverse leg of 3NW.
  • Since the K24/K47 pair exhibits this same behavior, we can assign K24 = 2LZK and interpret that K48 is the TK for the passing siding.
  • Since we already know K44 = 1TK, we can determine that K43 is the TK for the reverse leg of 1NW.

I like to assign TK bits consecutively on the layout to ensure they'll display correctly, without respect to how they appear in the mnemonic table.  Putting it all together:

C18 C17 C16 C15 C14 C13 C12 C11
C28 C27 C26 C25 C24 C23 C22 C21
K18 K17 K16 K15 K14 K13 K12 K11
K28 K27 K26 K25 K24 K23 K22 K21
K38 K37 K36 K35 K34 K33 K32 K31
K48 K47 K46 K45 K44 K43 K42 K41

Just to confirm that we decoded everything correctly, let's verify it with a train going the other way:


Obviously, we're still missing a few mnemonics, but in time we'll witness the moves necessary to pick those up.

In closing, let's look at the schematic once again:


Observe how the track between both 1NW & 2NW and 3NW & 3EA are broken into two segments; this was done to permit all six of the TK bits to be correctly plotted on the display in ATCSMon.

As I've demonstrated, it's helpful to start by decoding a simple move and use that information as a basis for interpreting more complex movements.  Always be sure to log your sessions; even if you're unable to decode something during one field visit, subsequent decoding may provide the key to determine the identities of those unknown bits.

(Added 06/09/07 DaveHonan)

Thanks to Mark Landgraf & Doug Nipper for their contributions to this tutorial.


The example mnemonics for Middle Hardwood no longer match the real-world mnemonics in the Evansville Terminal package. This tutorial was modified for the wiki using directional/geographic approach naming, while the real package still uses bounded approach naming.

-- Main.DougNipper - 06 Mar 2007 -- Main.DaveHonan - 29 Oct 2006