RailCommand Signals and Object Tables

Last updated: July 8, 2026

Concept

RailCommand gives every layout a set of JMRI-style object tables — one per object type: Signals, Turnouts, Sensors, and Toggles. Each is the authoritative list of that object's addresses and settings for the layout. You reach them per layout at /app/railcommand/layouts/{LayoutId}/signals, /turnouts, /sensors, and /toggles.

The most important idea is what is derived versus authored. Signal aspects are data-driven: the aspect a signal shows is computed from the layout's derived graph topology, not from anything you set by hand. Each signal cell maps to a mast, the mast maps to a derived SignalingRelation naming its protected block(s) and the next block, and block occupancy resolves the aspect — Stop when a protected block is occupied, Approach when the next block is occupied, otherwise Clear. When a signal has no derived relation it stays dark/unknown — it never falls back to a proximity guess. What you author is the signal's identity and wiring: name, style, signaling system, DCC addresses, aspect colours, and — in the Layout Editor — its facing.

How To

  1. Open Signal Configuration at /app/railcommand/layouts/{LayoutId}/signals. The summary cards show Total Signals, Configured, Missing DCC Address, and By Type; use the Status, Type, Style, and Connection filters to narrow the list.
  2. Click a signal row to open its inline editor. Set Signal Name, Signal Style (Color Light, Searchlight, Position, Semaphore, Dwarf), and Signaling System (Default, NORAC, GCOR, CROR, and the European/Japanese presets).
  3. Enter DCC Address 1, and DCC Address 2 for 4-aspect signals; tick Stop Restricted Mode if the signal drops to restricting rather than stop.
  4. Under Signal Aspects, set each aspect's colour and name. Use the Aspect Output Map (Index / Name / Addr 1 State / Addr 2 State) to name the decoded head wiring so the colour ordering matches the physical head. Click Save.
  5. For Turnouts / Sensors / Toggles, open the matching table and click Add — the add-at-position form takes Panel, Type, Column, Row, Orientation (0-7), Name, and DCC Address (turnouts also take a Normal route). Placement is collision-guarded and re-derives topology.
  6. Author signal facing in the Layout Editor; the facing picker offers the real ports of the signal's graph node (compass ports for track, role ports like Normal/Reverse for turnouts).

Troubleshooting

A signal shows dark or "unknown" — It has no derived SignalingRelation. Confirm it is placed on the graph and its facing points into a real block; re-open the Layout Editor so topology re-derives.

"Missing DCC Address" count is red — One or more signals have no DCC Address 1. Open each and set the address, or mark it as a dispatcher-driven signal.

A "No conn" badge appears — That signal (or turnout) is Without connection: driven by the dispatcher group, not a LocoNet/DCC address. That is expected for virtual dispatcher objects.

Add-at-position rejects the cell — The Column/Row is occupied. Pick an empty cell; the form will not overwrite an existing object.

Safety Notes

These pages are authoring surfaces only. Editing a signal, adding a turnout, or naming an aspect updates the layout's stored configuration; it does not move hardware and does not change what a live signal is showing. During an operating session the local/UE5 runtime owns aspect resolution and any physical signal output — the web and the Avalonia desktop present state and forward intent, they never actuate hardware. Because aspects are derived from topology, an incorrect facing or a mis-placed block can change what a signal protects. Treat facing and block placement as safety-relevant: verify them in the editor before an operating session, and never hand-edit an aspect to "fix" a wrong indication — correct the topology instead.