Jerry Brittons PRR MIddle Division

As a stand-in until such time as an era-appropriate CTC solution is developed, the Middle Division has adopted the use of the Computer Automated Traffic System ("CATS"), which is an application that rides on top of the Java Model Railroad Interface ("JMRI") libraries. CATS presents a 1980s-90s era Digicon dispatching panel.

3 Getting Started

Most of the Getting Started tasks will have been completed for the begining of your shift as Operator. If so, you may skip ahead to section four.

  1. Simply launch cats.bat (Windows) or cats.csh (Macintosh OS X or Linux) to start up CATS.

  2. Several windows will pop up. All but one are part of JMRI, so the JMRI tool set is available while running the dispatcher panel.

  3. The last window created is a blank dispatcher panel. Use the File -> Open menu item to navigate to the XML description file and open it.


    If you look at File again, you will see that Open is greyed out and Start Recording is an option. If you select Start Recording, then the current train locations and crew assignments (as well as subsequent train movements and crew assignments) are stored in a file you select. These actions are time stamped to allow the session to be recreated. Thus, the file provides a record of the operating session. It is not intended that the record be used for grading the operators, but for being used in conjunction with multiple records for adjusting train schedules. 

  4. The Trains menu is used for creating trains and changing their state. It has one menu item (Load Lineup) for reading in a lineup.  By allowing the lineup to exist in a separate file, you can have multiple lineups (e.g. even day/odd day or morning/afternoon) and select the one you want to use on the fly. It will be described in detail later. It has an Edit Lineup item for viewing, adding, and changing the information about a train. The last item, Rerun Train, is a way of running a train again, that has completed its work. 

  5. The Crew menu is used to identify the crew assigned to each train. Though you can add and delete crews at any time, it is usually easiest to add them before starting the operating session. It has an option (Load Crew) for reading in a file which contains crew names, one name per line. It also has an option (Legal Hours) for setting the “hog law” – hours a crew can work before they must be relieved. 

  6. The Jobs menu -- like the Crews menu -- has an option to edit the list of jobs and job assignments and another option to read in a list of jobs. 

  7. After the trains, crew, and jobs are read in, you should assign crew to jobs. This step is strictly optional. Any crew not assigned to a job or assigned to a job with the “Train” field checked will be put on the “Extra Board” and appear in selection lists for assigning crew to trains. Notice that you can add jobs at any time. You can select a block of jobs and reorder the list. You can adjust the column widths and if you select the “Accept” button, the adjustments will be remembered for the duration of the operating session. Finally, you can remove superfluous jobs for the rest of the operating session.

  8. This next step prunes the train list. Often a schedule will have trains that will not run in a particular operating session. At the beginning of the operating session use Trains -> Edit Lineup.


    That will bring up the list of all trains known by the dispatcher panel. Select one (or a block) and click on Terminate Train and that train will be hidden from lists and not appear on the layout. If you removed the wrong train, do not worry, it can be put back on the known list by using the Trains -> Rerun Train selection. You should cut back the list early, so you do not have to look at unwanted trains. Like the job screen, you can reorder the trains, add new trains, change the column widths, and change any information for a train that was set as “Editable” in designer. The Tie Down Train button works a little like the Terminate Train button. It is used to tell CATS that the train has completed its work, but the train’s label remains on the panel.

    Often, a visitor will bring a guest train. It is added to the list of trains with the Trains -> Edit Train -> Add Record menu item. Selecting it pops up a blank row under the currently selected row. Trains can be added at any time, but like crew, it is best to add them before the operating session begins, when the dispatcher is under less pressure.

  9. Now that the train list is tailored to the operating session, you can position the trains on the layout screen. To position a train, move the mouse cursor to the section of track corresponding to where the train should sit and touch the right mouse button. You will see a pop up menu. Select the Position train menu and click on Accept. You will see a list of trains which are not removed and are not on the screen. Select the one that is sitting on that track. This is another operation that can be done at any time, but it is best to set all the starting conditions before beginning so that the screen does not show an occupied track as empty. Some trains will not be on the layout when the operating session begins (for example, a train goes out with one symbol and comes back with another). That is fine. When the train appears on the layout, position it at that time.

  10. Under the File menu is the Replay button. It is used to read in a session log file (created by Start Recording from above). It “replays” the log and moves trains, changes assignments, etc. It serves two useful purposes. It was intended to restore an operating session. On the Crandic, one of our dispatchers is quite talented at crashing CATS late in an operating session. Because of this creativity, it was easier to replay the activities that happened before the crash than “user proof” CATS. A fall out of adding this capability is that you can record the initial positioning of trains and other things (such as taking tracks out of service) in preparation for an operating session. At the beginning of the actual operating session (after loading the layout, trains, and crew), you can replay the preparation log. It much simplifies starting CATS.

    Replay will ask if you want to preserve timestamps from the log. The guideline is answer “no” when starting an operating session. Then, the timestamps will reflect the time at which the log is replayed, so all the movements will be recorded as though they just happened, which makes later analysis easier. If you are resuming an operating session, you will probably want to answer “yes” so that the durations of the previous segment are preserved.

  11. We are almost ready to begin, but first the crew must be given their initial assignments. This step is also optional. There are several ways of doing this. At the beginning of an operating session, the easiest way is Train -> Edit Lineup or Crew -> Edit Crew. They do similar things, but from different perspectives. Train -> Edit Lineup brings up a list of trains that have not been removed and has a pull down list containing the crew list for each train. By selecting an item from the crew list, you associate a crew with a train. Conversely, Crew -> Edit Crew creates a list of crew (those not assigned to a job or assigned to a job with the Train box checked) with a pull down menu of trains that have not been removed. To associate a train with a crew, select the train. While you are making the assignments, nothing prevents you from assigning one crew to multiple trains or multiple trains to one crew. However, when you click on Accept, the assignments will be checked and a pop up error will tell you that there is a problem. The assignment window will remain until the conflict is resolved or the Cancel button is clicked.

4 The Operating Session

4.1 Setting Signals

Under CTC, signals are in their most restrictive aspect (Stop), until the dispatcher reserves a route from the signal to its successor, in the direction of travel. When the dispatcher reserves a route, all signals in one direction of travel may show “movement allowed” indications. All signals facing the opposing direction of travel remain in their most restrictive aspect. Thus, a train is given permission to go from only point A to point B. Movement from point B to point A is prohibited by signals.

Reserving a route also locks the route. This means that until the existing reservation is cleared, a reservation cannot be made in the opposing direction or a turnout on the route cannot be changed by the dispatcher. The computer will not allow the dispatcher to set an unsafe route. An unsafe route is one which conflicts with an existing route, one in which the dispatcher has granted local switching to a block, one in which the dispatcher has taken a block out of service, one which has one or more turnouts aligned to a different route, or one in which a block is shown as occupied.

The signals for the reserved route will obey the “Signal Aspects and Indications” of the employee handbook. The symbols representing the signals on the dispatcher panel will be “empty” (white or grey) if not involved in a reserved route; red, if in the opposing direction; yellow, if the next signal is red; or green, if the next signal is not red. Thus, the symbols mirror the signals the engineer sees, to the extent that can be done with five colors. The colors of the signal icons are only loosely connected to the actual layout aspects. It is possible to define an aspect to show yellow (e.g. normal approach medium) and the icon to be green (because the next signal is non red).

The way the dispatcher reserves a route is to click the left mouse button when the mouse is positioned over an “empty” or “off” signal symbol. If the reservation is accepted, then the signal symbol changes color and the tracks composing the reserved route turn green with an arrow head pointing to the exit of each block. A subtle distinction exists between white “empty” icons and “grey” empty icons. White ones have a physical signal associated with them on the layout. Grey ones do not; thus, the color difference is a reminder to the dispatcher that the train engineer does not see a signal that the dispatcher does.

There are two ways to clear a reservation. The dispatcher can cancel a reservation by clicking the left mouse button when positioned over a signal iconl that is green or yellow. Alternatively, when a block within the reserved route is occupied, the reservation is cleared, but the block still shows occupied. This means that the signals again show their most restrictive aspect.

A Control Point (CP) is a signal (icon) on the dispatcher panel. An Intermediate Signal (IS) is a signal on the layout without an icon on the dispatcher panel. A route request propagates from the CP where the request is made, down the tracks, to the next CP. If there is an opposing reservation anywhere on any block, the request will be rejected. If there is at least one IS between the request origination signal and an obstruction, then the request will be allowed, but the reservation will stop at the IS protecting the obstruction. When the obstruction clears, the reservation will continue to propagate. If there is an obstruction between the request origination signal and any signal, the request will be denied. Similar rules hold for clearing a route.

Routes can be “fleeted” by using the right mouse button when positioned over a signal symbol. Fleeting is best used when one or more trains are taking the same route, in the same direction without opposing or crossing traffic. Fleeting means that after a block in a reserved route is occupied, then emptied, the reservation is renewed automatically. Fleeting is cleared by using the right mouse button and selecting the menu item or clicking the left mouse button when positioned over a signal symbol.

The logic behind fleeting forms the basis of DTC. Direct Train Control can be used when there are no signals protecting a block on the layout. In that situation, the dispatcher verbally tells the crew the limits of their train movement. The dispatcher clicks on the signal (similar to CTC) and the route is reserved. After the train passes over each block, the block does not return to idle, but shows a different color, indicating that the track is not in use, but has had its reservation fulfilled; thus, it belongs to the train that went over it. The dispatcher regains ownership by clicking on the signal.

If the dispatcher places the mouse cursor over a signal symbol that is red and clicks the left button, then the signal on the layout shows “Stop and Proceed”. This behavior was requested (because the flashing red looks cool) so that the dispatcher could indicate that a train had permission to enter a block that contained a potential hazard (such as another train). (this feature is not yet implemented, but granting track authority yields a similar affect). Some railroads name this feature “call on”.

4.2 Throwing Turnouts

If a section of track contains a turnout, that turnout is under dispatcher control, and the block is not occupied, reserved, or given to local control, then the dispatcher can move the turnout by clicking the left mouse button when not over any signal symbols or train labels while the mouse cursor is near the switch points (preferably in the “vee” between the routes).

4.3 Train Detection

If the layout supports occupancy, the tracks on the dispatcher panel will change to “occupied” (red) in response to detection messages from the layout. An occupied block in a reserved route will turn red, but the exit arrow will remain, showing the expected direction of travel of the train. When the detection clears, the reservation will be removed (unless fleeting is in affect for the block). Blocks can manually be marked as occupied or cleared by using the right mouse button when positioned over the desired track. Tracks which do not have detectors associated with them are painted in a grey color, to distinguish them from detected tracks. This is a reminder to the dispatcher that reservations on those tracks will not clear automatically. However, positioning a train label on undetected track will tell CATS that the track is occupied and CATS will color the track accordingly.

4.4 Tracking Trains

Train labels can be placed on sections of tracks to record where trains are. Trains move, so the labels need to move. If train tracking is enabled (Appearance -> Train Tracking), then the labels will follow detection reports automatically. Otherwise, the dispatcher will have to move them manually.

The simplest way to move a train label is to place the mouse cursor over the label and “drag” the label to another block by moving the mouse while holding down the left mouse button. The cursor changes from its default symbol to a cross inside a circle when the program recognizes the left button has been pushed when over a train label.

The other way of moving a train is to use the four arrow keys on the keyboard. The problem is knowing which train will move. The normal life cycle of a train is something like the following: it is created; it is positioned on the layout; crew is assigned to it; it does its work; it is tied down; it may be removed. The color of the train’s label indicates which state it is in. Trains in the first and last state have no labels on the dispatcher panel; thus, have no color. A train that is positioned without a crew is “empty” (default light grey). A train with a crew is almond or blue. A train that has completed its chores is a rose color. Only one train will be colored blue – the one that has the focus and will be moved by the arrow keys. This train is one of the ones that is positioned on the layout and has a crew assigned to it. The “Page Up”, “Page Down”, and tab keys are used to cycle through this set of trains (many computers do not tell CATS when the tab key is pressed, so do not be surprised if it doesn’t work). So, to move a train on the dispatcher panel it must have a crew assigned to it (coloring it almond or blue). If it is almond, it is selected by repeatedly pushing the “Page Up” or “Page Down” or “Tab” buttons until it turns blue. Then the arrow keys move it. The train will move in the direction of the arrow key, if the track goes in that direction. So, pushing the up arrow when a train label is located on horizontal track does nothing.

If recording is turned on, every time a train is moved, the movement is given a timestamp and recorded for further analysis.

If the right mouse button is clicked while the cursor is positioned over a train label, the following screen pops up:


This can be used to edit the information about the train under the cursor and is very similar to the train edit screen, except only the information on one train is shown. Any changes take affect when the Accept button is pushed. Note the 3 buttons in the middle:

  • “Tie Down Train” releases the crew and changes the color of the train’s label, leaving it on the panel.
  • “Terminate Train” releases the crew and removes the train’s label from the panel.
  • “Rerun Train” is an option on “tied down” trains, initializing one so that it can work some more.

4.5 Track Authority

Track Authority is granted to a train to perform local switching. This means the turnouts in the block are unlocked and the signals protecting the block are set to their most restrictive aspect, protecting the block from other trains.

Track Authority is placed on a block by positioning the mouse cursor over a block, clicking the right mouse button, selecting “Track Authority”, and pushing the “Accept” button. Track Authority is removed by a similar operation. When Track Authority is placed on a block, the block is painted blue.

Track Authority on a block is reflected on the layout by presenting a “Stop and Proceed” (flashing red) aspect on signals protecting the block.

4.6 Out of Service

If a block is having maintenance performed on it, then the dispatcher should place Out Of Service on the block. This is accomplished like “Track Authority” – placing the mouse cursor over the track, clicking the right mouse button, and selecting “Out of Service”. OOS is removed by the same process.

No special signal aspects are used on the layout to designate OOS, but the protecting signal drops to “Stop”.

4.7 The Callboard

The crew callboard (created during setup) lists the crew and which trains they are assigned to. Whenever the dispatcher ties down a train or removes a train from the panel, the crew becomes unassigned and the callboard reflects that status. So, the program helps the dispatcher keep track of available crew.

If your operating session tracks crew time (TBD), you can set up CATS to assist in monitoring when crew was assigned to a train and when they have to be relieved. The “time on duty” algorithm is a little complex, but flexible. If all of the “ONDUTY” “EXPIRES AT”, or “TIME LEFT” columns are hidden, then time is not monitored.

When determining “time on duty”, CATS looks at the train’s information. In the following order:

  • If “ON DUTY” is blank, then the clock starts when the assignment is made.
  • If “ON DUTY” is an absolute value (i.e. “HH:MM” with no leading ‘+’ or ‘-‘), then that is the time the first crew was assigned to the train. If the crew is relieved (another crew is assigned to the train), the relief crew is on duty when the relief assignment is made. This option simulates the crew jumping on a train at the scheduled time, driving the train off-layout for awhile, and reaching the layout. It accounts for the fact that the crew had worked the train before it appeared on the layout from “somewhere else”.
  • If “ON DUTY” is a relative value (starts with ‘+’ or ‘-‘), the value is added to or subtracted from train’s “DEPARTURE” time. This also simulates a crew working a train for some time before the train appears on the layout. In this case, though, the time worked is tied to the train’s scheduled departure time, so if it changes, the crew “on duty” time changes.
  • If the “DEPARTURE” time is blank, then the “ON DUTY” time is relative to when the train assignment is made.
  • If the “DEPARTURE” time is absolute, then the “ON DUTY” time is relative to that time. For example, if “DEPARTURE” is 11:45, then “ON DUTY” times of “11:00” and “-00:45” are equivalent.
  • If the “DEPARTURE TIME” is relative, then the departure time is computed relative to the time the assignment is made and the “ON DUTY” time is computed relative to that time.

CATS tries to make relative times absolute when they are first used. For “DEPARTURE”, this is when a crew assignment is made. For “ON DUTY”, this is when the train screen or crew screen is pulled up, if “DEPARTURE” is absolute.

The “dead on the law” time is computed from the “ON DUTY” time. The “HOURS” value is added to the “ON DUTY” time to arrive at when the crew should be relieved (EXPIRES). Thus, the “TIME LEFT” value is simply the amount of time between the current time and the “EXPIRES” time.

The clock used for computing these can be either the computer clock or a fast clock. So, HOURS should be chosen appropriately for the clock.

A future feature is to have CATS alert the dispatcher when a train is scheduled to depart or the crew should be relieved.

4.8 Keyboard Shortcuts

Moving a mouse around to the menu bar, pulling down a menu, and selecting a pop up window can be tedious and time consuming, particularly in the heat of dispatching. CATS supports a few keyboard shortcuts for accessing the frequently used pop up windows:

Key Sequence Pop-Up Menu
Control-C Edit Crew menu.
Control-E Switch between Engine labels and train symbols.
Control-J Edit Jobs menu.
Control-T Edit Trains menu.