-
Notifications
You must be signed in to change notification settings - Fork 331
/
index.shtml
210 lines (163 loc) · 8.01 KB
/
index.shtml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta name="generator" content=
"HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 15.17), see www.w3.org">
<title>JMRI Hardware Support - Modbus</title>
<!-- Style -->
<meta http-equiv="Content-Type" content=
"text/html; charset=us-ascii">
<link rel="stylesheet" type="text/css" href="/css/default.css"
media="screen">
<link rel="stylesheet" type="text/css" href="/css/print.css"
media="print">
<link rel="icon" href="/images/jmri.ico" type="image/png">
<link rel="home" title="Home" href="/">
<!-- /Style -->
</head>
<body>
<!--#include virtual="/Header" -->
<div id="mBody">
<!--#include virtual="../SidebarUp.shtml" -->
<div id="mainContent">
<img src="http://www.modbus.org/images/logo_new.jpg" alt=
"Modbus logo" height="40" width="145" align="right">
<h1>Hardware Support: Modbus</h1>
<ul class="snav">
<!-- TOC -->
<li><a href="#hardware">Hardware</a></li>
<li><a href="#limitations">Limitations</a></li>
<li><a href="#connecting">Connecting</a></li>
<li><a href="#tools">Tools</a></li>
<li><a href="#documentation">Documentation</a></li>
</ul>
<p><a href="http://www.modbus.org">Modbus is an industrial
control system</a> that's usually used with pretty tough,
highly-engineering equipment. The Modbus nodes are often
"programmable logic controllers" (PLCs) which can do their
own calculations of how to control devices. <a name=
"hardware" id="hardware"></a></p>
<h2>Supported Hardware</h2>
<h3>Modules</h3>
<ul>
<li>Modbus Nodes</li>
</ul>
<p>JMRI provides support for general JMRI <a href=
"../../tools/Sensors.shtml">Sensors</a> and <a href=
"../../tools/Turnouts.shtml">Turnouts</a> via Modbus (Node)
connections.</p><a name="limitations" id="limitations"></a>
<h2>Limitations</h2>
<p><em>Modbus support is rapidly evolving; the actual code
might be ahead or behind the documentation on any given day.
Note that Modbus support is not in any JMRI test or
production releases yet.</em></p>
<p>JMRI as Master Node is not supported yet. JMRI will
eventually support operation as either the Master Node, or as
one of the Slave Nodes.</p><a name="connecting" id=
"connecting"></a>
<h2>Connecting</h2>
<h3>Software settings</h3>
<p>A Modbus installation has one Master node, and one or more
Slave nodes. Generally, the Master writes to "Coil" objects
in the Slave nodes, and reads from "Discrete input" objects
in the Slave nodes. The "Coil" terminology comes from relay
coil, solenoid coil, etc.; a way to change the node's output
signals. The "Discrete input" is a single bit from some
external input. By reading and writing these in a Node, a
Modbus Master can sense the condition of the layout (through
Discrete inputs) and control it (through Coils).</p>
<h3>JMRI as Master Node</h3>
<p><em>(There is no code support for this yet)</em></p>
<p>When JMRI is the Master Node driving a selection of remote
Modbus Nodes, the net effect is very similar to the familiar
C/MRI system. There's a Master (JMRI) that communicates with
input (Sensors) and output (Turnouts, Lights) lines in remote
Nodes. Each Modbus Discrete input in a remote Node gets
configured as a JMRI Sensor; each Modbus Coil becomes a
Turnout or Light.</p>
<p>JMRI can handle multiple remote Nodes once they've been
configured in the JMRI Preferences.</p>
<p>There are multiple ways to configure this connection:
TCP/IP vs RS485, ASCII vs RTU protocol, etc. Each of these
requires separate code.</p>
<h3>JMRI as Slave Node</h3>It's also possible for JMRI to be
a Slave Node. In that case a PLC or other unit is the Master
Node, and reads/writes JMRI when it needs to. At first, this
will probably seem odd; JMRI is usually used as the central
control for the layout. But note that Modbus is an
industrial-strength system, and JMRI is not. If you want
<em>really</em> robust railroad controls, you can built it
using PLCs communicating with each other for operation, and
only communicating with JMRI to display status on a Panel,
get operator input, etc.<br>
In that case, it's quite natural for JMRI to appear as a
slave node on the Modbus.
<p>When configured as a Slave, JMRI appears as Coils and
Discrete inputs to the Modbus Master. Modbus:</p>
<ul>
<li>allows the Master to read and write Coils in the Slave,
but can only read Discrete inputs; it can't write to
Discrete inputs in a Slave.</li>
<li>some popular PLC environments can only write to Coils
and read from Discrete inputs.</li>
</ul>
<p>The Master Node can read from either the Coil or Discrete
input for either Turnout or Sensor (see <a href=
"#naming">Naming</a> below). It can write to the Coil number
to change the status of the Turnout or Sensor within JMRI. A
"1" is THROWN or ACTIVE, respectively; a "0" is CLOSED or
INACTIVE.</p>
<p>Until each Coil is first written or set within JMRI, the
state of the associated Turnout or Sensor will be "UNKNOWN"
and it will be read back as "zero" on Modbus.</p>
<p>With this convention, you can put Turnouts and Sensors on
your JMRI Panel, and then connect them to PLC code that will
tell them what to display. If desired, local changes, e.g.
clicking on the screen, can be read back and used to control
the railroad.</p>
<h4>Configuring as a Slave Node</h4>In the Preferences pane
for Connections, select "Modbus" as the System manufacturer
and "RS485 ASCII Slave" as the System Connection. Under
Settings, select the communications (serial) port your
interface is connected on, the baud rate, and enter the node
number your Modbus Master Node will use to refer to JMRI.
Click "Save", quit and restart.
<p>Next, use the Turnout Table and Sensor Table to define
Turnouts and Sensors, which will in the process define the
Coils and Discrete inputs that Modbus will read and write.
Save this configuration to a Panel file so that it can be
reloaded when you start JMRI again later. <a name="naming"
id="naming"></a></p>
<h3>Naming</h3>
<p>The default <a href=
"../../../html/doc/Technical/Names.shtml">system letter</a>
for Modbus connections is "M". It can be configured to
another letter if desired.</p>
<p>Normally, JMRI provides an interface to the real layout
via internal objects such as Turnouts and Sensors that are
closely mapped to corresponding physical devices. This
mapping is done via "System Names", which both identify the
how to access a particular device, and are the key to looking
up the corresponding object in JMRI. Here, we have to pick a
naming convention that allows those inside-JMRI work with the
properties of Modbus.</p>
<p>We therefore provide the following mapping:</p>
<dl>
<dt>JMRI Turnout MTnnn, e.g. MT123</dt>
<dd>This will appear as Modbus coil nnn and discrete input
nnn, e.g. coil 123 and discrete input 123</dd>
<dt>JMRI Sensor MSnnn, e.g. MS123</dt>
<dd>This will appear as Modbus coil nnn+1000 and discrete
input nnn+1000, e.g. coil 1123 and discrete input 1123</dd>
</dl><a name="tools" id="tools"></a>
<h2>JMRI Tools</h2>N/A <a name="documentation" id=
"documentation"></a>
<h2>Documentation</h2>
<h3>Third Party info</h3>
<p><a href="http://www.modbus.org">Modbus website</a></p>
<!--#include virtual="/Footer" -->
</div><!-- closes #mainContent-->
</div><!-- closes #mBody-->
</body>
</html>