JMRI Hardware Support - DCC-EX
Author: Mark Underwood, Peter Akers
Keywords: DCC-EX DCC++EX DCC++ EX-CommandStation java model railroad JMRI install

# Hardware Support: EX-CommandStation (by DCC-EX )

- Hardware
- Limitations
- Connecting
- JMRI Tools
- Documentation

## Overview

EX-CommandStation from the DCC-EX team is an Open Source Arduino-based Do-it-Yourself DCC Command Station.

Note: EX-CommandStation directly replaces the older, now unsupported DCC++.
It supports and extends the original DCC++ commands.
EX-CommandStation is, in relation to JMRI, backward compatible such that you can select "DCC++" as a manufacturer and system and JMRI will work correctly. Most menus and labels still show "DCC++" but work properly with DCC-EX.

Note: DCC-EX is a separate project from JMRI. If you have questions about building an EX-CommandStation system, operating it, etc, you should get help via their DCC-EX website or their DCC-EX Discord server. There's also information on the DCC-EX GitHub repository and associated documentation. The JMRI discussion groups can only provide limited support for EX-CommandStation itself.

Features of DCC-EX CommandStation include:

- Fully compliant with NMRA DCC standards
- 2-byte and 4-byte locomotive addressing
- Simultaneous control of multiple locomotives
- 128-step speed control
- Control all cab functions F0-F28
- Activate/de-activate all accessory function addresses 0-2048
- Programming on the Programming Track
- - Write configuration variable bytes
  - Set/clear specific configuration variable bits
  - Read configuration variable bytes
- Programming on the Main Operations Track
- - Write configuration variable bytes
  - Set/clear specific configuration variable bits
- Control DCC turnouts and sensors
- Directly access and control Arduino IO pins for accessory functions and sensors
- Use the service track as an extension of the MAIN track when not programming to not waste track
- DriveAway: Place a locomotive on the service track, program it, then drive it off onto the main track
- Support for direct connection to the EX-CommandStation over WiFi, Serial or Bluetooth using the WiThrottle or Native DCC-EX protocols
- Support for automation using the EXRAIL feature

## Supported Hardware

### Command Stations

Currently EX-CommandStation can be built on either the Arduino Uno or Arduino Mega (recommended) platforms, with additional microprocessors being investigated. JMRI supports connection to the EX-CommandStation using either via USB or WiFi connection.

### Computer Interfaces

Currently, four interfaces are supported:

- Serial/USB: Direct connection to Arduino via a USB cable
- Simulator: Simulated EX-CommandStation for off-line operation and testing.
- Network: TCP/IP connection from JMRI to an EX-CommandStation with an Ethernet or WiFi Shield.
- DCC++ Over TCP: Remote network or client connection to a local JMRI instance connected to an EX-CommandStation

#### Simulator

To use the Simulator, simply choose that option in the JMRI Preferences. Note that some features do not work in the Simulator. For example, the Simulator does not (yet) support assigning, storing, and remembering Sensor and Turnout assignments. The Simulator interface is functional enough to keep JMRI "happy" while working on offline projects such as Operations or Panel and Logix design, but is not intended to be a full-fledged EX-CommandStation Emulator.

#### DCC++ Over TCP

For the DCC++ Over TCP connection, a host computer must be connected to the EX-CommandStation over a Serial or Network connection (or a simulator). This host computer then runs the DCC++ Over TCP Server. A remote computer (or several remote computers) can then use the DCC++ Over TCP (Server) interface to remotely access and control the EX-CommandStation.
Also, clients capable of using the DCC-EX protocol (such as EngineDriver) can connect to this server and thence to the DCC-EX command station. The DCC-EX protocol supports additional client features not supported by WiThrottle Server.

## Limitations

JMRI

  EX-CommandStation is under constant development, so it is recommended that you use the current Production version of EX-CommandStation for best results with JMRI. The newest features may require using the Devel version of EX-CommandStation..

## Connecting

### Configuring an Arduino for use as an EX-CommandStation

In order to use an Arduino as an EX-CommandStation, you must first assemble the device and download the EX-CommandStation firmware to it. Please follow the instructions linked below under Other Info.

### Connecting to an EX-CommandStation via USB

1. To connect your computer to an EX-CommandStation, first install the appropriate drivers.
2. - For the EX-CommandStation with JMRI, you may need to install a device driver on your computer. Please refer to the Arduino Getting Started pages for instructions.
     - Windows (See Step 4)
     - Mac: No drivers should be required
     - Linux

   Note: If you have already installed the Arduino IDE software, the device drivers should already be installed.

   When the device drivers are installed, connect the Arduino with EX-CommandStation to your computer using a standard USB cable.

3. Once the drivers are installed, you are ready to configure JMRI. Start one of the JMRI-based programs, Then go to the preferences panel. This opens automatically the first time a program is run, or you can select it from the "Edit" menu.
4. Select "DCC++" from the top selection box ("System Manufacturer"). (Unfortunately JMRI has not been updated yet to the DCC-EX team name.)
5. Select "DCC++ Serial Port" from the second selection box ("System Connection")
6. Select the appropriate USB/Serial port from the third selection box ("Serial Port")
7. Click "Save". You'll be asked if it's OK for the program to quit, click "Yes".
8. Restart the program. You should be up and running.

### Connecting to an EX-CommandStation using Network

1. First, connect the EX-CommandStation to wired or WiFi network and record the IP Address and Port number. You may need to connect the Arduino to a host computer temporarily and use the Arduino Serial Monitor to get this information.
2. Now you are ready to configure JMRI. Start one of the JMRI-based programs, then go to the Preferences panel. This opens automatically the first time a JMRI program is run, or you can select it from the "Edit" menu (from the Application menu on OS X).
3. Select "DCC++" from the top selection box ("System Manufacturer").
4. Select "DCC++ Ethernet" from the second selection box ("System Connection").
5. Input the IP Address or Host Name of the EX-CommandStation.
6. Check the "Additional Connection Settings" and verify that the Port is set to "2560" (DCC-EX default)
7. Click "Save". You'll be prompted to Restart, click "Restart".

### Connecting a 2nd JMRI instance to an EX-CommandStation using DCC++ Over TCP

1. First, connect the EX-CommandStation to the host computer via the Serial or Network interface as described above.
2. On the host computer select "Load DCC++ Over TCP Server" from the DCC++ Menu. Check the settings, then press the "Start Server" button. If you want the server to automatically start when JMRI is launched, click the checkbox provided.
3. The Host computer must be running with the EX-CommandStation active before launching the Client computer.
4. On the client computer, launch JMRI on the Client computer.
5. In the Connection Preferences, select DCC++ as the System Manufacturer.
6. Select "DCC++ Server" as the System Connection Type.
7. Enter the network name or IP address of the host computer and verify that the port number is the same as on the host computer.
8. Save your Preferences and restart.

Once both the Host and Client instances of JMRI are configured, you can use the Client JMRI just the same as if it were directly connected to the EX-CommandStation. The client JMRI instance can be on the same computer, in the same house, or across the country from the host.

### Connecting a client device to an EX-CommandStation using DCC++ Over TCP

1. First, connect the EX-CommandStation to the host computer via the Serial or Network interface as described above.
2. On the host computer select "Load DCC++ Over TCP Server" from the DCC++ Menu. Check the settings, then press the "Start Server" button. If you want the server to automatically start when JMRI is launched, click the checkbox provided.
3. The Host computer must be running with the EX-CommandStation active before launching the Client computer.
4. On the client device, launch an app such as EngineDriver or EX-Toolbox which support the DCC-EX protocol.
5. For EngineDriver, enable the "Use native DCC-EX commands".
6. Connect the app to the server using the server IP and the port shown in the DCCppOverTCP server window.

Once both the Host and Client instances of JMRI are configured, you can use the Client JMRI just the same as if it were directly connected to the EX-CommandStation. The client JMRI instance can be on the same computer, in the same house, or across the country from the host.

### Connecting to the DCC++ Simulator

1. Start one of the JMRI-based programs, Then go to the preferences panel. This opens automatically the first time a program is run, or you can select it from the "Edit" menu.
2. Select "DCC++ Simulator" from the top selection box. There are no additional configuration steps required to use the DCC++ Simulator.
3. Click "Save". You'll be asked if it's OK for the program to quit, click "Yes".
4. Restart the program. You should be up and running.

## JMRI DCC++ Tools

The DCC++ menu contains 7 tools:

- DCC++ Traffic Monitor
- Send DCC++ Command
- Configure Base Station
- Open DCC-EX Virtual LCD
- Voltage / Current Meter
- Roster Export to DCC-EX
- Load DCC++ over TCP Server

## Documentation

### JMRI Help

Additional documentation will be provided on other pages linked here:

- Configuring Sensors
- Configuring Turnouts and Outputs

### Third Party info

For more information on how to construct and program a DCC-EX EX-CommandStation, refer to the following:

- EX-CommandStation - Getting Started
- Arduino Project Site
- Sparkfun - one of many places to acquire hardware