Skip to content

Commit 2100650

Browse files
committed
Document Modbus exceptions
1 parent f54e4a0 commit 2100650

File tree

1 file changed

+78
-2
lines changed

1 file changed

+78
-2
lines changed

docs/source/overview.rst

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ Modbus provides access to the following 4 types of data:
8282
Modbus communications
8383
~~~~~~~~~~~~~~~~~~~~~
8484

85-
Modbus communication consists of a *request message* sent from the
86-
*Modbus client* to the *Modbus server*. The server replies with a
85+
Modbus communication consists of a *request message* sent from a
86+
*Modbus master* (client) to a *Modbus slave* (server). The server replies with a
8787
*response message*. Modbus request messages contain:
8888

8989
- An 8-bit Modbus function code that describes the type of data
@@ -236,6 +236,82 @@ Modbus read operations are limited to transferring 125 16-bit words or
236236
2000 bits. Modbus write operations are limited to transferring 123
237237
16-bit words or 1968 bits.
238238

239+
Modbus exceptions
240+
~~~~~~~~~~~~~~~~~
241+
242+
If a Modbus requests is determined to be invalid by the server, it returns
243+
a Modbus exception message.
244+
The modbus driver will print an error message if an exception is returned.
245+
The following table describes the possible Modbus exceptions.
246+
247+
Modbus exception codes
248+
______________________
249+
250+
.. cssclass:: table-bordered table-striped table-hover
251+
.. list-table::
252+
:header-rows: 1
253+
:widths: auto
254+
255+
* - Exception code
256+
- Name
257+
- Meaning
258+
* - 0x01
259+
- Illegal Function
260+
- The function code received in the query is not an allowable action for the slave.
261+
This may be because the function code is only applicable to newer devices,
262+
and was not implemented in the unit selected.
263+
It could also indicate that the slave is in the wrong state to process a request of this type,
264+
for example because it is unconfigured and is being asked to return register values.
265+
* - 0x02
266+
- Illegal Data Address
267+
- The data address received in the query is not an allowable address for the slave.
268+
More specifically, the combination of reference number and transfer length is invalid.
269+
For a controller with 100 registers, a request with offset 96 and length 4 would succeed,
270+
a request with offset 96 and length 5 will generate exception 02.
271+
* - 0x03
272+
- Illegal Data Value
273+
- A value contained in the query data field is not an allowable value for the slave.
274+
This indicates a fault in the structure of remainder of a complex request,
275+
such as that the implied length is incorrect.
276+
It specifically does NOT mean that a data item submitted for storage in a register has a value
277+
outside the expectation of the application program, since the MODBUS protocol is unaware of the
278+
significance of any particular value of any particular register.
279+
* - 0x04
280+
- Slave Device Failure
281+
- An unrecoverable error occurred while the slave was attempting to perform the requested action.
282+
* - 0x05
283+
- Acknowledge
284+
- Specialized use in conjunction with programming commands.
285+
The slave has accepted the request and is processing it, but a long duration of time will be required to do so.
286+
This response is returned to prevent a timeout error from occurring in the master.
287+
The master can next issue a Poll Program Complete message to determine if processing is completed.
288+
NOTE: The EPICS Modbus driver does not print an error message for this response, since it is not really an error.
289+
* - 0x06
290+
- Slave Device Busy
291+
- Specialized use in conjunction with programming commands.
292+
The slave is engaged in processing a long-duration program command.
293+
The master should retransmit the message later when the slave is free.
294+
* - 0x07
295+
- Negative Acknowledge
296+
- The slave cannot perform the program function received in the query.
297+
This code is returned for an unsuccessful programming request using function code 13 or 14 decimal.
298+
The master should request diagnostic or error information from the slave.
299+
* - 0x08
300+
- Memory Parity Error
301+
- Specialized use in conjunction with function codes 20 and 21 and reference type 6,
302+
to indicate that the extended file area failed to pass a consistency check.
303+
The slave attempted to read extended memory or record file, but detected a parity error in memory.
304+
The master can retry the request, but service may be required on the slave device.
305+
* - 0x0A
306+
- Gateway Path Unavailable
307+
- Specialized use in conjunction with gateways, indicates that the gateway was unable to allocate an
308+
internal communication path from the input port to the output port for processing the request.
309+
Usually means the gateway is misconfigured or overloaded.
310+
* - 0x0B
311+
- Gateway Target Device Failed to Respond
312+
- Specialized use in conjunction with gateways, indicates that no response was obtained from the target device.
313+
Usually means that the device is not present on the network.
314+
239315
More information on Modbus
240316
~~~~~~~~~~~~~~~~~~~~~~~~~~
241317

0 commit comments

Comments
 (0)