This page serves as documentation for an interface between JMRI PanelPro and the Modular Signal System first documented by Gregg Fuhriman in Railmodel Journal, and further documented on the Free-mo.org website.
The Modular Signal System defines an electrical bus that passes block occupancy information to blocks from one module to the next. This occupancy bus provides feedback information to a signlay layer. In the case of this document, the Signal Layer will be implemented by JMRI.
Two types of modules are used to provide the occupancy bus beedback to the signal layer
See the documentation above for more information about the two types of modules, and how the occupancy bus is wired
The focus of this effort is to design a solution that works as both a JMRI Controlled signal on a cascade module and to properly interface a JMRI controlled segment of CTC to the Modular Signal System Detection Bus.
The first effort was to produce a JMRI Controlled Cascade point. This provides a means to experiment with in put from the Modular Signal System Detection Bus.
JMRI requires that the feedback information from the Modular Signal System Detection Bus be feed into some kind of sensor input. The Modular Signal System Detection Bus uses open collector detection circuits to drive the signal detection lines to low.
I will not be giving an exhaustive list of input devices capable of directly interfacing with the Modular Signal System Detection Bus. If an input card is not capable of directly interfacing with the Detection Bus, it should be possible to use an optical isolator to connect to the bus. I will leave that task as an excersize for the reader.
My home layout is controlled by Lenz equipment, so that is what I have available to test at this point in time. I was able to directly connect the input lines of the Modular Signal System Detection Bus to a Lenz LR100 feedback module. I used one of my Cascade Module Circuit Boards as a breakout board for the bus at the cascade point
Since LocoNet is frequently used on Free-mo layouts, I will make an effort to find a suitable LocoNet interface to the Modular Signal System Detection Bus. I have not begun that search as of this writing
Wiring Diagrams for the test configuration is shown below
The first step in the configuration process is to define sensor inputs to JMRI. In this case, we define the senors (from east to west) with user names 3 East, 2 East, 1 East, 1 West, 2 West, and 3 West. Our cascade module is located between blocks 1 East and 1 West. The Sensor table is defined below.
The relative location of the blocks are labeled on the diagram below:
After Sensors are defined, We define Signal Heads. In this case, we only define signal heads at the cascade points. Configuration of the signal heads will depend on the exact type of signal head in use. For further information, please consult the JMRI documentation.
With the signal heads defined, we define our signal masts. The signal masts for the cascade module use the signal heads we defined previously. To make the signal logic work, we will also define virtual signals at the entry point to each of the other blocks in the layout.
For purposes of this demonstartion, the signals are configured to use JMRI's aspect signalling module. This type of signalling uses signalling rules derived from prototypical surces to determine the current aspect of the signal. In this case, the signals are using definitions of Frisco signals from the Frisco's 1973 book of rules. When configuring signals to use aspect signalling, part of the definition of the signal mast is the rules used for the signals in question. An example definition for both a cascade signal and a virtual signal are displayed below
With the signal masts defined, the signals need to be placed on a layout editor panel for the logic to be properly determined. The layout editor panel for the cascade module appears below. Some signal lables were omitted for clarity.
Once the masts are located on the table, the quickest way to get working signals is to let JMRI automatically determine the logic based on the connectivity defined in the panel. To do this, open the Signal Mast Logic table, and select the Auto Generate Signalling Pairs option from the Tools menu.
Once the auto generation is defined, the signals will behave as defined in the signalling rules. The sequence of images below shows a train moving from east to west through the defined layout. Note the behavior of the signals at the cascade point.
For this demonstration, we will use the eastbound cascade signal as it was used in the cascade module. The westbound cascade signal will be replaced with a Begin CTC West signal. The Begin CTC West signal will be an absolute signal, controlled by some other means. For this demonstration, the signal aspects of the Begin CTC West signal will be controlled manually through JMRI.
We have two considerations for the electrical inputs. We need to be able to control the Cascade Mast East using the MSS occupancy bus. We also need to be able to make the signals preceeding the Begin CTC West signal show appropriate aspects when the Begin CTC West signal shows either Stop or Approach.
I left the sensor feedback connections unchanged from the previous example. This allows the Cascade Mast East signal to behave as it did in the previous example. Additionally, we can use the block occupancy to see if we have set the MSS output lines correctly for the signals preceeding the Begin CTC West mast.
Setting the MSS Occupancy lines correctly for the preceeding MSS based signals requires a way to ground the appropriate lines in the bus. I accomplished this task using a pair of NEC2501 single channel optocouplers. The input side of each optocoupler is connected to the output of a DCC accessory decoder with a continous output. The output side of the optocoupler is a transistor. This transistor is connected between the appropriate signal line and ground, as shown in the wiring diagram below. (NOTE: For clarity, the westbound MSS connections were omitted)
The JMRI configuration for the JMRI Controlled CTC begin/end point starts with some minor modifications to the previous example. I started with the panel prior to adding any signal logic.
The first step is to make sure we have the correct signals available. I deleted the Cascade Mast West signal and replaced it with a signal called Begin CTC West. This modification was required because the Cascade Mast West signal was configurated as a permissive signal mast, but we need an absolute signal mast forthe entry into CTC. The Begin CTC West signal mast entry appears below.
My next step was to re-arrange the signals on the panel. I modified the panel so that all of the signals were on the East side of the Begin/End CTC point. The modified layout appears below.
The Eastbound signals are unchanged from their positions in the simple cascade point example. The westbound signals have been moved, because we are interested in how they react to the Begin CTC West signal mast.
At this point, we can add the signal logic to the panel as in the previous example. With the exception of the Begin CTC West signal, all of the signals will react to changes in occupancy as expected. The Begin CTC West signal will be controlled by JMRI logic, which is outside the scope of this example
In order to get the proper behavior from the Westboud signals approaching the begin CTC signal, we need to be able to simulate an occupied block using the MSS. The electronics required to make this work are described above. We will be triggering our Optocoupler connections to the MSS using two accessory decoders in the JMRI turnout table. For this example, the Accessory decoders are defined as follows:
To make the MSS based signals behave correctly, we need to add a JMRI Logix to drive the JMRI Turnout States. I added one conditional (called MSSForward) with 3 Conditionals (SetClear,SetStop, and SetApproach).
The SetClear conditional sets both turnouts to Thrown when the Begin CTC West signal is set to either Clear or Advanced Approach.
The SetStop conditional sets the Begin CTC Approach turnout to to Thrown and the Begin CTC Stop turnout to Closed when the Begin CTC West signal is set to Stop
The SetApproach conditional sets the Begin CTC Approach turnout to to Closed and the Begin CTC Stop turnout to Thrown when the Begin CTC West signal is set to Approach.
After changing the Begin CTC West to Stop the panel appears as follows (Note: The occupied block is triggered by the MSS. I left the sensors in place so we could see this on the panel).
The Result of changing Begin CTC West to Approach is similar