Files
2026-06-17 14:00:51 +02:00

348 lines
18 KiB
Plaintext

<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<title>JMRI: Entry/Exit (NX) Documentation</title>
<meta name="author" content="Kevin Dickerson">
<meta name="keywords" content=
"hardware layout java model railroad JMRI nx entryexit entry exit routing interlocking">
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: Entry/Exit (NX) Routing Documentation</h1>
<p>Note: References to "<strong>turnout</strong>" in this documentation include all types,
including slips and cross-overs.</p>
<h2>Overview</h2>
<p>NX Routing builds a dynamic valid path between two locations on a Layout Editor panel. The
path can traverse a number of Turnouts and different <a href="Blocks.shtml">Blocks</a>.
The Entry and Exit locations on the Layout Editor are defined by the placement of
<a href="Sensors.shtml">Sensors</a> at various Block boundaries. When
two Sensors are activated and a clear and valid route is found between them, then the
Turnouts in the route will automatically be set accordingly. If the path between the two
sensors was created with the type set to <strong>Full Interlock</strong>, then the blocks
will be reserved and will display a different track color.</p>
<p>If there are multiple paths between two locations, then the system will use the path with
the smallest cost or number of different Blocks. If one of the Blocks on the path is already
occupied and there is a valid alternative path, then this will be taken.</p>
<p>The two sensors are referred to as a <strong>NX Pair</strong>.</p>
<p><span class="since">since 4.11.1</span><em>It is also possible to define a NX pair where
the destination sensor is on another panel. This requires that the panels are linked using
<strong>Edge Connectors</strong>.</em></p>
<h3 id="nxtypes">Entry/Exit Types</h3>
<p>There are three different types of Entry/Exit pairs that can be configured.</p>
<ul>
<li>Turnout Only</li>
<li>Turnout and SignalMast Logic</li>
<li>Full Interlocking</li>
</ul>
<p><strong>Turnout Only</strong> &mdash; With turnout only, the NX Pair will only set the turnouts
to the correct state for that route. If a block is already showing as occupied or reserved
within that route, and an alternative one is available then the alternative route will be
set, otherwise the route will not be set.</p>
<p><strong>Turnout and SignalMast Logic</strong> &mdash; This option includes what is covered by
"Turnout Only" and will also generate the SignalMast Logic for that route. The logic will
include the turnout states and the blocks that are within that route. For this to work,
SignalMasts must also be placed at the same boundary points as the sensors working in the
same direction. The SignalMast logic will remain for the duration of the operating session,
however it is not saved and will be re-created the next time the panel is opened. When there
is no route set then the SignalMast will be placed in a held state if the <strong><em>Use ABS
Signal Mode</em></strong> option is not selected.</p>
<p><strong>Full Interlocking</strong> &mdash; This covers the same things as the other two items
above. In addition, it will also "reserve" or "lock out" each block in the route so that no
other conflicting route can be set. If block occupancy detection is being used the route will
automatically be cleared down. If no block occupancy is being used, then it is possible to
manually clear the route down by selecting the corresponding NX pair, it will leave the last
block as showing occupied, as if the train had travelled the route and was now sitting
waiting at the next signal. If there are no Signalmasts configured between the NX pair, then
the route will still be set and reserved, but no SignalMast Logic will be generated. The
route will stay active, until either a train has passed through the blocks and they have
returned to an unoccupied state, the route has been manually cleared down, or has been
cancelled. The normal mode for related signal mast is to keep the mast in a Held state until
a route has been created, at which time the hold is released. When the first block becomes
occupied the hold is set. If the <strong><em>Use ABS Signal Mode</em></strong> option is
selected, the signal masts will not be held. If all of the NX Pairs related to a source mast
are disabled, then the hold for the mast is released, effectively setting the mast to ABS mode.</p>
<p>For the second and third types, if the signal mast logic has already been created,
temporary signal mast logic will not be created.</p>
<h2>How to set up for Entry Exit Routing</h2>
Entry/Exit routing requires a representation of the layout using Layout Editor panels. If
desired, multiple panels can be used that are linked using Edge Connectors. For Layout Editor
details, see <a href="../../package/jmri/jmrit/display/LayoutEditor.shtml">Layout Editor</a>.
<a href="Blocks.shtml">Blocks</a> will also need be assigned to all of the controlled track
components so that <a href="Sensors.shtml">Sensors</a> can be assigned to their boundaries.
<h3>Placing Sensors</h3>
<p>Sensors, along with Signal Heads and Signal Masts, can be added at <strong>Block
Boundaries</strong>. Block boundaries can occur at <strong>Anchor Points</strong>,
<strong>Turnouts</strong>, <strong>Level Crossings</strong> and <strong>End Bumpers</strong>.
<strong>Edge Connectors</strong> are always a block boundary.</p>
<p>Sensors are assigned to anchor points, end bumpers and edge connectors by right clicking
on the small colored box that represents the point and select <strong>Set
Sensors...</strong>. For end bumpers there will be one choice to make. Anchor points and edge
connectors provide two choices.</p>
<div style="margin-left: 1em"><img src="images/EntryExitAnchorPoint.png" height="512" width=
"364" alt="Anchor Point Dialog">
</div>
<p>Select the sensor name that will be used to protect the desired block. This becomes the
entry sensor for routes starting with this block. It is also the exit sensor for routes that
end before the desired block. <strong>Note:</strong> For edge connectors, ignore the East and
West reference. Use only the <strong>Protecting Block</strong> to determine which section to
use.</p>
<p>Turnouts and level crossings can have from zero to four block boundaries. If a track
segment is attached to a turnout leg and it has been assigned the same block as the turnout
itself, there will not be a boundary for that leg.</p>
<p>Right click the turnout or level crossing and select <strong>Set Sensors...</strong>.</p>
<div style="margin-left: 1em"><img src="images/EntryExitTurnout.png" height="518" width="484"
alt="Turnout Dialog">
</div>
<p>For turnouts and level crossings, the <strong>protected block</strong> is the block that
contains the turnout or level crossing. In other words, sensors are for the boundary going
<em>into</em> the turnout or crossing. It is not possible to add a sensor for the boundary
going <em>out</em> from the turnout or crossing.</p>
<h3>Removing Sensors</h3>
<p>Removing an Entry/Exit sensor from the Layout Editor panel requires that the Entry/Exit
pairs that use the sensor are removed from the Entry/Exit list. If any affected Entry/Exit
pair is being used in a Logix or LogixNG conditional, the sensor removal process is stopped.</p>
<p>The primary method for deleting an Entry/Exit sensor is to right click on the icon and
select <strong>Remove</strong>. A dialog box is displayed with 3 buttons.</p>
<div style="margin-left: 1em"><img src="images/EntryExitIconDelete.png" height="167" width=
"444" alt="Icon Delete Options">
</div>
<p>Select <strong>Cancel</strong> to stop the delete process, <strong>No</strong> to delete
the icon but leave the sensor reference, or <strong>Yes</strong> to delete the icon and the
sensor reference.</p>
<p>The other method to delete a sensor is to use the <strong>Set Sensors...</strong> option
described above and select either a different sensor or the blank row at the top of the
sensor list.</p>
<h4>Logix/LogixNG Checks</h4>
<p>Before the delete process can begin, the Entry/Exit pairs that use the selected sensor
cannot be used in any Logix Conditional. If any are used, a list of the Conditionals is
displayed and the delete process is terminated.</p>
<div style="margin-left: 1em"><img src="images/EntryExitConditionalList.png"
alt="NX Conditional List">
</div>
<p>The same check applies to LogixNG expressions and actions.</p>
<div style="margin-left: 1em;">
<a href="images/EntryExitLogixNGList.png"><img src=
"images/EntryExitLogixNGList.png" alt="NX LogixNG List"></a>
</div>
<h4>Entry/Exit Pair Check</h4>
<p>The next step in the delete process will provide a list of the Entry/Exit pairs that will
be deleted if the sensor is deleted.</p>
<div style="margin-left: 1em"><img src="images/EntryExitPairList.png" height="226" width=
"448" alt="NX Pair Delete List">
</div>
<p>Select <strong>No</strong> to terminate the delete process, <strong>Yes</strong> to finish
the delete process.</p>
<h4>Block Name Changes</h4>
<p>Sensor assignments define Entry/Exit locations within the layout block structure. If an
Entry/Exit pair contains references to the block, the block name cannot be renamed or
removed. The block selection field in the <strong>Edit Track</strong> dialog will be
disabled. A dialog box will be displayed showing the affected sensors.</p>
<div style="margin-left: 1em"><img src="images/EntryExitSensorList.png" height="199" width=
"685" alt="NX Sensor List">
</div>
<h3>Generating Entry Exit Pairs</h3>
<p>To access the <strong>Add Entry Exit Points</strong> panel, select <strong>Entry
Exit</strong> from the Layout Editor <strong>Tools</strong> menu. Entry/Exit pairs can be
created manually using the <strong>Add Pair</strong> button or automatically using the
<strong>Auto Generate Entry-Exit Pairs</strong> button.</p>
<div style="margin-left: 1em">
<p><img src="../../package/jmri/jmrit/entryexit/images/EntryExitWindow.png" height="517"
width="896" alt="NX Window"><br>
For additional details, see <a href=
"../../package/jmri/jmrit/entryexit/EntryExitFrame.shtml">Entry/Exit (NX) Tools</a></p>
</div>
<p><strong>Auto Generate Entry-Exit Pairs</strong> will discover all the valid Entry Exit
pairs on the Layout Editor layout. Using the combo boxes it is also possible to manually add
in additional Entry Exit pairs.</p>
<p>In all cases when the <strong>Entry</strong> Sensor is set active followed by the
<strong>Exit</strong> Sensor, the route will be set between those two points and the two
Sensors will return back to the "Inactive" state.</p>
<p>If the <strong>Both Way</strong> option is ticked, a <strong>reversed</strong> route can be
selected by clicking on the <strong>Exit</strong> sensor and then the <strong>Entry</strong>
sensor. Both Way cannot be selected if either block boundary also has a signal assigned or
the destination is at an end bumper.</p>
<p>With the manual method, it is possible to create invalid pairs. Invalid pairs will never
be used.</p>
<p id="validate_add_pair"><span class="since">since 5.5.7</span>The manual selections will be
validated after the NX pair has been added. If the validation fails, a dialog will be displayed.</p>
<div style="margin-left: 1em;">
<a href="images/EntryExitValidateDialog.png"><img src=
"images/EntryExitValidateDialog.png" alt="NX validation dialog"></a>
</div>
<p>Click on <strong>Yes</strong> to delete the NX pair that was just added. Click on
<strong>No</strong> to skip the delete. This might be needed in certain cases where the
validation detects a <strong><em>false positive</em></strong> validation failure.</p>
<h2>Usage</h2>
<p>Once the NX pairs have been created, a route can be set by selecting the <strong>Entry
Sensor</strong>, followed by the <strong>Exit Sensor</strong>. When the entry sensor is
selected, it will start flashing. When the exit sensor is selected, a route will be created
if possible. If a valid route cannot be found, both sensors will return to the inactive
state. If a valid path can be found then the route will be set up according to how it has
been configured. If full interlock has been configured for the NX Pair the sensors will
remain active and the track components will be assigned the alternate track color.</p>
<p>Whenever an entry NX Sensor has been selected, it will flash until a valid exit sensor has
been selected. If no valid exit sensor has been selected it will automatically be cancelled
after 30 seconds.</p>
<h3>Extended Route Setting</h3>
<p>Normally with the NX interlock, a route will be up by selecting the Entry/Exit sensors
along a path, so for example to get from location A to D, A-B would be selected, then B-C and
finally C-D. However the system will allow the full route to be set up by selecting A and D.
The system will then go through and find the best valid path and set up each individual
interlock along the path.<br>
<strong>Note:</strong> If an extended route is cleared or cancelled, each segment will need
to be cancelled or cleared by responding to the prompt.</p>
<h3>Route Stacking &mdash; Following</h3>
<p>When using the Full Interlock NX type, re-selecting the entry and exit sensors will
display a dialog box:</p>
<div style="margin-left: 1em"><img src="images/EntryExitStack1.png" height="135" width="380"
alt="Re-select Dialog">
</div>
<p>Options:</p>
<ul>
<li>Cancel &mdash; Cancel the route. The block reservations will be released and the track
components will be set to the normal color.</li>
<li>Clear Down &mdash; The blocks will be set occupied and then not occupied in sequence as if a
train had traversed the route. The last block in the route will be left occupied. This can
be useful for simulating train movements or for layouts that don't have block
detection.</li>
<li>Stack &mdash; Add this route to a pending list of routes. When the first route completes, the
next route in the list will be activated. For multiple segment routes, one segment at a
time will be added to the list.</li>
<li>Exit &mdash; Do nothing, close the window.</li>
</ul>
<p>Pending route list:</p>
<div style="margin-left: 1em"><img src="images/EntryExitStackList.png" height="225" width=
"269" alt="Re-select Dialog">
</div>
<p>Once a route has been stacked, the system will check every 10 seconds to see if it is
possible to set up that NX route. Multiple NX routes can be stacked, and they are checked in
the order which they were stacked. An NX route cannot be stacked more than once. To cancel an
NX route, select it in the table and click on the "Cancel" button at the bottom.</p>
<h3>Route Stacking &mdash; Conflicts</h3>
<p>If a selected route tries to cross a block that is occupied or reserved and there is not
an alternate route available, the <strong>Route Not Clear</strong> dialog box is
displayed.</p>
<div style="margin-left: 1em"><img src="images/EntryExitStack2.png" height="167" width="485"
alt="Conflict Dialog">
</div>
<p>If Yes is selected, the route will be added to the pending route list.
<strong>Note:</strong> Only single segment conflicts are detected. A multiple segment route
request will not provide the stack option.</p>
<h3>Logix/LogixNG Support</h3>
There are two conditional variables and three actions that can be used in Logix Conditionals.
<ul>
<li>Variables
<ul>
<li>NX Pair Active &mdash; Check if a segment for the selected NX Pair is Active.</li>
<li>NX Pair Inactive &mdash; Check if a segment for the selected NX Pair is Inactive.</li>
</ul>
</li>
<li>Actions<span class="since">since 4.11.1</span>
<ul>
<li>Set NX Pair Enabled &mdash; Enable an NX Pair. When enabled, it can used to create a
route.</li>
<li>Set NX Pair Disabled &mdash; Disable an NX Pair. This will prevent the use of the pair to
create a route.</li>
<li>Set NX Pair Segment Active / Inactive &mdash; If the route is not active, create the
route, otherwise clear down, cancel or stack the route depending on the default actions
or user response.</li>
</ul>
</li>
</ul>
<p>For LogixNG support see <a href="logixng/reference/chapter6.shtml#EntryExitExpressions">Expressions</a>
and <a href="logixng/reference/chapter5.shtml#EntryExitActions">Actions</a>.</p>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- closes #mainContent-->
</div>
<!-- closes #mBody-->
<script src="/js/help.js"></script>
</body>
</html>