2 * Copyright (c) 2010-2020 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.io.transport.modbus.exception;
15 import org.eclipse.jdt.annotation.NonNullByDefault;
18 * Exception for explicit exception responses from Modbus slave
20 * @author Sami Salonen - Initial contribution
21 * @author Nagy Attila Gabor - added getter for error type
25 public abstract class ModbusSlaveErrorResponseException extends ModbusTransportException {
28 * The function code received in the query is not an allowable action for the slave. This may be because the
29 * function code is only applicable to newer devices, and was not implemented in the unit selected. It could also
30 * indicate that the slave is in the wrong state to process a request of this type, for example because it is
31 * unconfigured and is being asked to return register values. If a Poll Program Complete command was issued, this
32 * code indicates that no program function preceded it.
34 public static final int ILLEGAL_FUNCTION = 1;
37 * The data address received in the query is not an allowable address for the slave. More specifically, the
38 * combination of reference number and transfer length is invalid. For a controller with 100 registers, a request
39 * with offset 96 and length 4 would succeed, a request with offset 96 and length 5 will generate exception 02.
41 public static final int ILLEGAL_DATA_ACCESS = 2;
44 * A value contained in the query data field is not an allowable value for the slave. This indicates a fault in the
45 * structure of remainder of a complex request, such as that the implied length is incorrect. It specifically does
46 * NOT mean that a data item submitted for storage in a register has a value outside the expectation of the
47 * application program, since the Modbus protocol is unaware of the significance of any particular value of any
48 * particular register.
50 public static final int ILLEGAL_DATA_VALUE = 3;
53 * An unrecoverable error occurred while the slave was attempting to perform the requested action.
55 public static final int SLAVE_DEVICE_FAILURE = 4;
58 * Specialized use in conjunction with programming commands.
59 * The slave has accepted the request and is processing it, but a long duration of time will be required to do so.
60 * This response is returned to prevent a timeout error from occurring in the master. The master can next issue a
61 * Poll Program Complete message to determine if processing is completed.
63 public static final int ACKNOWLEDGE = 5;
66 * Specialized use in conjunction with programming commands.
67 * The slave is engaged in processing a long-duration program command. The master should retransmit the message
68 * later when the slave is free.
70 public static final int SLAVE_DEVICE_BUSY = 6;
73 * The slave cannot perform the program function received in the query. This code is returned for an unsuccessful
74 * programming request using function code 13 or 14 decimal. The master should request diagnostic or error
75 * information from the slave.
77 public static final int NEGATIVE_ACKNOWLEDGE = 7;
80 * Specialized use in conjunction with function codes 20 and 21 and reference type 6, to indicate that the extended
81 * file area failed to pass a consistency check.
82 * The slave attempted to read extended memory or record file, but detected a parity error in memory. The master can
83 * retry the request, but service may be required on the slave device.
85 public static final int MEMORY_PARITY_ERROR = 8;
88 * Specialized use in conjunction with gateways, indicates that the gateway was unable to allocate an internal
89 * communication path from the input port to the output port for processing the request. Usually means the gateway
90 * is misconfigured or overloaded.
92 public static final int GATEWAY_PATH_UNVAVAILABLE = 10;
95 * Specialized use in conjunction with gateways, indicates that no response was obtained from the target device.
96 * Usually means that the device is not present on the network.
98 public static final int GATEWAY_TARGET_DEVICE_FAILED_TO_RESPOND = 11;
100 private static final long serialVersionUID = -1435199498550990487L;
103 * @return the Modbus exception code that happened
105 public abstract int getExceptionCode();