JMRI is...

Tools

JMRI provides powerful tools for working with your layout.

Layout Automation

JMRI can be used to automate parts of your layout, from simply controlling a crossing gate to running trains in the background.

JMRI: Utils USS CTC Tools

JMRI contains tools to help in the automation of USS CTC Panels. These can be used for either screen-based Panels, or to drive a physical panel with real levers and lights.

Script-based ToolsSince JMRI 4.8

These tools are very powerful, but currently can only be configured via a script.
For information how to do this, see:

The available tools are:
Code Line
Implements the code line between the CTC machine and the field. Can use a turnout output to tell e.g. a lamp to light or relays to make noise.
Station
Corresponds to a single station on the code line, usually a single column on the CTC machine and all the items in the field that are connected to it.
Code Button
One per section, this defines the connection to the code button (a sensor input) and the code lamp (a turnout output) on the panel.
Turnout Section
Controls a single turnout in the field. You configure it with that turnout's name along with sensor inputs for the lever on the panel, and turnout outputs for the indicator lamps. Can optionally take Lock objects to add prototypical locking.
SignalHead Section
Controls the signal heads around a single OS in the field. You configure it with lists of left-going and right-going heads which it can hold and release, along with sensor inputs for the lever on the panel, and turnout outputs for the indicator lamps. Can optionally take Lock objects to add prototypical locking.
Track Circuit Section
This drives a track occupancy indicator lamp (an output) on the panel from a occupancy sensor in the field (a sensor input). Optionally, can ring a bell when goes occupied or unoccupied.
Maintainer Call Section
This drives a maintainer call lamp (an output) in the field from a lever or switch on the central panel (a sensor input).
Occupancy Lock
When added to a Turnout or SignalHead section, this prevents changes while the OS section (defined into the Lock) is occupied.
Route Lock
When added to a Turnout section, this prevents changes while the OS section has a route cleared through the Turnout.
Time Lock
When added to a Turnout section, this prevents changes while the OS section has signals running time.
Traffic Lock
Locks against signals being cleared in opposite directions onto a single segment of track. Can be configured with turnout settings (BeanSetting objects) to allow e.g. signals at opposite ends of a town to clear when one turnout is set ot the main and the other to the siding.
Turnout Lock
A bit of a misnomer, because this refers to locking based on the state of a JMRI Turnout, which should be considered a generalized output. Can be used to e.g. lock sections when a Call On state (on an internal turnout that represents the state) has been set (by e.g. a Maintainer Call section used to set that JMRI Turnout in the field).
There's a page with a worked example (not yet present), and a separate page describing the naming conventions used in the example, in case you find that these will save you some work on the setup.

These tools log information to several JMRI Memory objects, which in turn can be placed onto panels as MemoryIcons.

IMUSS CTC:SIGNALHEADSECTION:1:LOG
What the code line is doing
IMUSS CTC:SIGNALHEADSECTION:1:TIME
Whether time is running
IMUSS CTC:LOCK:1:LOG
Whether any locks are showing as locked
The "1" in those can change if there's more than one set of objects, i.e. if more than one code line is being modelled.

Standalone Tools

These can be created from the USS menu under Tools in JMRI applications. They work by creating Logix and/or Routes that implement the desired functionality. You could do that by hand, of course, but these are meant as a simplification.
Follower
Slaves an output Turnout device to follow the state of an input Sensor device. This could, for example, make a layout turnout follow a fascia switch connected to a Sensor.
OS Indicator
Drives the occupancy indicator lamps on the Panel. This takes input from a Sensor to show the track section is occupied, and also optionally can light the indicator if the section has been unlocked.